diff options
Diffstat (limited to 'kernel/bpf/verifier.c')
-rw-r--r-- | kernel/bpf/verifier.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 630a7bac1e51..47dcd3aa6e23 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c | |||
@@ -1397,7 +1397,8 @@ peek_stack: | |||
1397 | /* tell verifier to check for equivalent states | 1397 | /* tell verifier to check for equivalent states |
1398 | * after every call and jump | 1398 | * after every call and jump |
1399 | */ | 1399 | */ |
1400 | env->explored_states[t + 1] = STATE_LIST_MARK; | 1400 | if (t + 1 < insn_cnt) |
1401 | env->explored_states[t + 1] = STATE_LIST_MARK; | ||
1401 | } else { | 1402 | } else { |
1402 | /* conditional jump with two edges */ | 1403 | /* conditional jump with two edges */ |
1403 | ret = push_insn(t, t + 1, FALLTHROUGH, env); | 1404 | ret = push_insn(t, t + 1, FALLTHROUGH, env); |
@@ -1636,6 +1637,8 @@ static int do_check(struct verifier_env *env) | |||
1636 | if (err) | 1637 | if (err) |
1637 | return err; | 1638 | return err; |
1638 | 1639 | ||
1640 | src_reg_type = regs[insn->src_reg].type; | ||
1641 | |||
1639 | /* check that memory (src_reg + off) is readable, | 1642 | /* check that memory (src_reg + off) is readable, |
1640 | * the state of dst_reg will be updated by this func | 1643 | * the state of dst_reg will be updated by this func |
1641 | */ | 1644 | */ |
@@ -1645,9 +1648,12 @@ static int do_check(struct verifier_env *env) | |||
1645 | if (err) | 1648 | if (err) |
1646 | return err; | 1649 | return err; |
1647 | 1650 | ||
1648 | src_reg_type = regs[insn->src_reg].type; | 1651 | if (BPF_SIZE(insn->code) != BPF_W) { |
1652 | insn_idx++; | ||
1653 | continue; | ||
1654 | } | ||
1649 | 1655 | ||
1650 | if (insn->imm == 0 && BPF_SIZE(insn->code) == BPF_W) { | 1656 | if (insn->imm == 0) { |
1651 | /* saw a valid insn | 1657 | /* saw a valid insn |
1652 | * dst_reg = *(u32 *)(src_reg + off) | 1658 | * dst_reg = *(u32 *)(src_reg + off) |
1653 | * use reserved 'imm' field to mark this insn | 1659 | * use reserved 'imm' field to mark this insn |