Message ID | 20180725164611.GA12441@udknight |
---|---|
State | Accepted, archived |
Delegated to: | BPF Maintainers |
Headers | show |
Series | bpf, x32: Fix regression caused by commit 24dea04767e6 | expand |
On 07/25/2018 06:46 PM, Wang YanQing wrote: > 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 fix it. > > Fixes: 24dea04767e6 ("bpf, x32: remove ld_abs/ld_ind") > Signed-off-by: Wang YanQing <udknight@gmail.com> Applied, thanks Wang!
> 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 fix it. For the record: Tested it on top of 4.18.0-rc6-00192-g864af0d40cdc on the affected machine and it worked.
diff --git a/arch/x86/net/bpf_jit_comp32.c b/arch/x86/net/bpf_jit_comp32.c index 5579987..8f6cc71 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) /* sub esp,STACK_SIZE */ EMIT2_off32(0x81, 0xEC, STACK_SIZE); - /* sub ebp,SCRATCH_SIZE+4+12*/ - EMIT3(0x83, add_1reg(0xE8, IA32_EBP), SCRATCH_SIZE + 16); + /* sub ebp,SCRATCH_SIZE+12*/ + EMIT3(0x83, add_1reg(0xE8, IA32_EBP), SCRATCH_SIZE + 12); /* xor ebx,ebx */ EMIT2(0x31, add_2reg(0xC0, IA32_EBX, IA32_EBX)); @@ -1475,8 +1475,8 @@ static void emit_epilogue(u8 **pprog, u32 stack_depth) /* mov edx,dword ptr [ebp+off]*/ EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EDX), STACK_VAR(r0[1])); - /* add ebp,SCRATCH_SIZE+4+12*/ - EMIT3(0x83, add_1reg(0xC0, IA32_EBP), SCRATCH_SIZE + 16); + /* add ebp,SCRATCH_SIZE+12*/ + EMIT3(0x83, add_1reg(0xC0, IA32_EBP), SCRATCH_SIZE + 12); /* mov ebx,dword ptr [ebp-12]*/ EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EBX), -12);
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 fix it. Fixes: 24dea04767e6 ("bpf, x32: remove ld_abs/ld_ind") Signed-off-by: Wang YanQing <udknight@gmail.com> --- arch/x86/net/bpf_jit_comp32.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)