aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/filter.c')
-rw-r--r--net/core/filter.c8
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;