diff options
author | Wang YanQing <udknight@gmail.com> | 2018-07-25 12:46:11 -0400 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2018-07-25 20:51:12 -0400 |
commit | 9e4e5b5c86661e767f3074bedbbf2ca59f8fbd18 (patch) | |
tree | b34dac046b158573a00eda8d38f440c456d25e6b /arch/x86/net | |
parent | 684cce1c31d2c0c9383cbcca200b9cf3b1f1d21d (diff) |
bpf, x32: Fix regression caused by commit 24dea04767e6
Commit 24dea04767e6 ("bpf, x32: remove ld_abs/ld_ind")
removed the 4 /* Extra space for skb_copy_bits buffer */
from _STACK_SIZE, but it didn't fix the concerned code
in emit_prologue and emit_epilogue, and this error will
bring very strange kernel runtime errors. This patch
fixes it.
Fixes: 24dea04767e6 ("bpf, x32: remove ld_abs/ld_ind")
Reported-by: Meelis Roos <mroos@linux.ee>
Bisected-by: Meelis Roos <mroos@linux.ee>
Signed-off-by: Wang YanQing <udknight@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'arch/x86/net')
-rw-r--r-- | arch/x86/net/bpf_jit_comp32.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/x86/net/bpf_jit_comp32.c b/arch/x86/net/bpf_jit_comp32.c index 55799873ebe5..8f6cc71e0848 100644 --- a/arch/x86/net/bpf_jit_comp32.c +++ b/arch/x86/net/bpf_jit_comp32.c | |||
@@ -1441,8 +1441,8 @@ static void emit_prologue(u8 **pprog, u32 stack_depth) | |||
1441 | 1441 | ||
1442 | /* sub esp,STACK_SIZE */ | 1442 | /* sub esp,STACK_SIZE */ |
1443 | EMIT2_off32(0x81, 0xEC, STACK_SIZE); | 1443 | EMIT2_off32(0x81, 0xEC, STACK_SIZE); |
1444 | /* sub ebp,SCRATCH_SIZE+4+12*/ | 1444 | /* sub ebp,SCRATCH_SIZE+12*/ |
1445 | EMIT3(0x83, add_1reg(0xE8, IA32_EBP), SCRATCH_SIZE + 16); | 1445 | EMIT3(0x83, add_1reg(0xE8, IA32_EBP), SCRATCH_SIZE + 12); |
1446 | /* xor ebx,ebx */ | 1446 | /* xor ebx,ebx */ |
1447 | EMIT2(0x31, add_2reg(0xC0, IA32_EBX, IA32_EBX)); | 1447 | EMIT2(0x31, add_2reg(0xC0, IA32_EBX, IA32_EBX)); |
1448 | 1448 | ||
@@ -1475,8 +1475,8 @@ static void emit_epilogue(u8 **pprog, u32 stack_depth) | |||
1475 | /* mov edx,dword ptr [ebp+off]*/ | 1475 | /* mov edx,dword ptr [ebp+off]*/ |
1476 | EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX), STACK_VAR(r0[1])); | 1476 | EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX), STACK_VAR(r0[1])); |
1477 | 1477 | ||
1478 | /* add ebp,SCRATCH_SIZE+4+12*/ | 1478 | /* add ebp,SCRATCH_SIZE+12*/ |
1479 | EMIT3(0x83, add_1reg(0xC0, IA32_EBP), SCRATCH_SIZE + 16); | 1479 | EMIT3(0x83, add_1reg(0xC0, IA32_EBP), SCRATCH_SIZE + 12); |
1480 | 1480 | ||
1481 | /* mov ebx,dword ptr [ebp-12]*/ | 1481 | /* mov ebx,dword ptr [ebp-12]*/ |
1482 | EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EBX), -12); | 1482 | EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EBX), -12); |