Messages in this thread | | | Subject | RE: [RFC PATCH net-next 2/6] x86: bpf_jit_comp: support BPF_S_ANC_SECCOMP_LD_W instruction | Date | Fri, 26 Apr 2013 16:15:02 +0100 | From | "David Laight" <> |
| |
> >> +#ifdef CONFIG_SECCOMP_FILTER > >> + case BPF_S_ANC_SECCOMP_LD_W: > >> + if (K == offsetof(struct seccomp_data, arch)) { > >> + int arch = syscall_get_arch(current, NULL); > >> + > >> + EMIT1_off32(0xb8, arch); /* mov arch,%eax */ > >> + break; > >> + } > >> + func = (u8 *)seccomp_bpf_load; > >> + t_offset = func - (image + addrs[i]); > >> + EMIT1_off32(0xbf, K); /* mov imm32,%edi */ > >> + EMIT1_off32(0xe8, t_offset); /* call seccomp_bpf_load */ > >> + break; > >> +#endif > > > > This seems seriously wrong to me. > > Can you elaborate?
The 'call seccomp_bpf_load' needs a pc-relative offset, I assume that is what EMIT1_off32() generates.
The other two instructions want an absolute 32 bit value...
David
| |