diff options
Diffstat (limited to 'kernel/bpf/verifier.c')
-rw-r--r-- | kernel/bpf/verifier.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 8135cb1077ee..0e742210750e 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c | |||
@@ -2508,6 +2508,7 @@ static bool states_equal(struct bpf_verifier_env *env, | |||
2508 | struct bpf_verifier_state *old, | 2508 | struct bpf_verifier_state *old, |
2509 | struct bpf_verifier_state *cur) | 2509 | struct bpf_verifier_state *cur) |
2510 | { | 2510 | { |
2511 | bool varlen_map_access = env->varlen_map_value_access; | ||
2511 | struct bpf_reg_state *rold, *rcur; | 2512 | struct bpf_reg_state *rold, *rcur; |
2512 | int i; | 2513 | int i; |
2513 | 2514 | ||
@@ -2521,12 +2522,17 @@ static bool states_equal(struct bpf_verifier_env *env, | |||
2521 | /* If the ranges were not the same, but everything else was and | 2522 | /* If the ranges were not the same, but everything else was and |
2522 | * we didn't do a variable access into a map then we are a-ok. | 2523 | * we didn't do a variable access into a map then we are a-ok. |
2523 | */ | 2524 | */ |
2524 | if (!env->varlen_map_value_access && | 2525 | if (!varlen_map_access && |
2525 | rold->type == rcur->type && rold->imm == rcur->imm) | 2526 | rold->type == rcur->type && rold->imm == rcur->imm) |
2526 | continue; | 2527 | continue; |
2527 | 2528 | ||
2529 | /* If we didn't map access then again we don't care about the | ||
2530 | * mismatched range values and it's ok if our old type was | ||
2531 | * UNKNOWN and we didn't go to a NOT_INIT'ed reg. | ||
2532 | */ | ||
2528 | if (rold->type == NOT_INIT || | 2533 | if (rold->type == NOT_INIT || |
2529 | (rold->type == UNKNOWN_VALUE && rcur->type != NOT_INIT)) | 2534 | (!varlen_map_access && rold->type == UNKNOWN_VALUE && |
2535 | rcur->type != NOT_INIT)) | ||
2530 | continue; | 2536 | continue; |
2531 | 2537 | ||
2532 | if (rold->type == PTR_TO_PACKET && rcur->type == PTR_TO_PACKET && | 2538 | if (rold->type == PTR_TO_PACKET && rcur->type == PTR_TO_PACKET && |