[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Z4ZyYudZSD92DPiF@krava>
Date: Tue, 14 Jan 2025 15:19:14 +0100
From: Jiri Olsa <olsajiri@...il.com>
To: Oleg Nesterov <oleg@...hat.com>
Cc: Jiri Olsa <olsajiri@...il.com>, Aleksa Sarai <cyphar@...har.com>,
Eyal Birger <eyal.birger@...il.com>, mhiramat@...nel.org,
linux-kernel <linux-kernel@...r.kernel.org>,
linux-trace-kernel@...r.kernel.org,
BPF-dev-list <bpf@...r.kernel.org>,
Song Liu <songliubraving@...com>, Yonghong Song <yhs@...com>,
John Fastabend <john.fastabend@...il.com>, peterz@...radead.org,
tglx@...utronix.de, bp@...en8.de, x86@...nel.org,
linux-api@...r.kernel.org, Andrii Nakryiko <andrii@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>,
Alexei Starovoitov <ast@...nel.org>,
Andrii Nakryiko <andrii.nakryiko@...il.com>,
"rostedt@...dmis.org" <rostedt@...dmis.org>, rafi@....io,
Shmulik Ladkani <shmulik.ladkani@...il.com>
Subject: Re: Crash when attaching uretprobes to processes running in Docker
On Tue, Jan 14, 2025 at 11:58:03AM +0100, Oleg Nesterov wrote:
> On 01/14, Jiri Olsa wrote:
> >
> > --- a/arch/x86/kernel/uprobes.c
> > +++ b/arch/x86/kernel/uprobes.c
> > @@ -315,14 +315,25 @@ asm (
> > ".global uretprobe_trampoline_entry\n"
> > "uretprobe_trampoline_entry:\n"
> > "pushq %rax\n"
> > + "pushq %rbx\n"
> > "pushq %rcx\n"
> > "pushq %r11\n"
> > + "movq $1, %rbx\n"
> > "movq $" __stringify(__NR_uretprobe) ", %rax\n"
> > "syscall\n"
> > ".global uretprobe_syscall_check\n"
> > "uretprobe_syscall_check:\n"
> > + "or %rbx,%rbx\n"
> > + "jz uretprobe_syscall_return\n"
> > "popq %r11\n"
> > "popq %rcx\n"
> > + "popq %rbx\n"
> > + "popq %rax\n"
> > + "int3\n"
> > + "uretprobe_syscall_return:\n"
> > + "popq %r11\n"
> > + "popq %rcx\n"
> > + "popq %rbx\n"
>
> But why do we need to abuse %rbx? Can't uretprobe_trampoline_entry do
>
> syscall
>
> // int3_section, in case sys_uretprobe() doesn't work
> popq %r11
> popq %rcx
> popq %rax
> int3
>
> uretprobe_syscall_return:
> popq %r11
> popq %rcx
> popq %rbx
> retq
>
> and change sys_uretprobe() to do
>
> - regs->ip = ip;
> + regs->ip = ip + sizeof(int3_section);
nice idea, I wonder we get the trampoline size under one xol slot with that
thanks,
jirka
Powered by blists - more mailing lists