diff options
Diffstat (limited to 'net/core/filter.c')
-rw-r--r-- | net/core/filter.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/core/filter.c b/net/core/filter.c index e94355452166..1a9ded6af138 100644 --- a/net/core/filter.c +++ b/net/core/filter.c | |||
@@ -430,6 +430,10 @@ do_pass: | |||
430 | convert_bpf_extensions(fp, &insn)) | 430 | convert_bpf_extensions(fp, &insn)) |
431 | break; | 431 | break; |
432 | 432 | ||
433 | if (fp->code == (BPF_ALU | BPF_DIV | BPF_X) || | ||
434 | fp->code == (BPF_ALU | BPF_MOD | BPF_X)) | ||
435 | *insn++ = BPF_MOV32_REG(BPF_REG_X, BPF_REG_X); | ||
436 | |||
433 | *insn = BPF_RAW_INSN(fp->code, BPF_REG_A, BPF_REG_X, 0, fp->k); | 437 | *insn = BPF_RAW_INSN(fp->code, BPF_REG_A, BPF_REG_X, 0, fp->k); |
434 | break; | 438 | break; |
435 | 439 | ||
@@ -984,7 +988,9 @@ static struct bpf_prog *bpf_migrate_filter(struct bpf_prog *fp) | |||
984 | */ | 988 | */ |
985 | goto out_err_free; | 989 | goto out_err_free; |
986 | 990 | ||
987 | bpf_prog_select_runtime(fp); | 991 | err = bpf_prog_select_runtime(fp); |
992 | if (err) | ||
993 | goto out_err_free; | ||
988 | 994 | ||
989 | kfree(old_prog); | 995 | kfree(old_prog); |
990 | return fp; | 996 | return fp; |