Messages in this thread | | | Date | Tue, 14 Nov 2017 16:34:24 +0100 | From | Oleg Nesterov <> | Subject | Re: [PATCH][v2] uprobes/x86: emulate push insns for uprobe on x86 |
| |
On 11/13, Yonghong Song wrote: > > On 11/13/17 4:59 AM, Oleg Nesterov wrote: > >>+ switch (opc1) { > >>+ case 0x50: > >>+ reg_offset = offsetof(struct pt_regs, r8); > >>+ break; > >>+ case 0x51: > >>+ reg_offset = offsetof(struct pt_regs, r9); > >>+ break; > >>+ case 0x52: > >>+ reg_offset = offsetof(struct pt_regs, r10); > >>+ break; > >>+ case 0x53: > >>+ reg_offset = offsetof(struct pt_regs, r11); > >>+ break; > >>+ case 0x54: > >>+ reg_offset = offsetof(struct pt_regs, r12); > >>+ break; > >>+ case 0x55: > >>+ reg_offset = offsetof(struct pt_regs, r13); > >>+ break; > >>+ case 0x56: > >>+ reg_offset = offsetof(struct pt_regs, r14); > >>+ break; > >>+ case 0x57: > >>+ reg_offset = offsetof(struct pt_regs, r15); > >>+ break; > >>+ } > >>+#else > >>+ return -ENOSYS; > >>+#endif > > > >OK, but shouldn't we also return ENOSYS if CONFIG_X86_64=y but the probed task is 32bit? > > Just tested with a 32bit app on x86 box and segfaults.
Hmm. How did you verify this?
Your v3 doesn't look right and it seems you misunderstood me...
> Yes, we would need to > return ENOSYS if the app is 32bit on 64bit system.
Only if insn->length == 2. "push bp" and other valid 32bit push'es should be emulated correctly or your patch is wrong. Confused...
> >Or in this case uprobe_init_insn(x86_64 => false) should fail and push_setup_xol_ops() > >won't be called?
So it doesn't fail?
Oleg.
| |