On Sun, Dec 15, 2024 at 03:14:13PM +0100, Oleg Nesterov wrote: > On 12/15, David Laight wrote: > > > > From: Jiri Olsa > > > The optimized uprobe path > > > > > > - checks the original instruction is 5-byte nop (plus other checks) > > > - adds (or uses existing) user space trampoline and overwrites original > > > instruction (5-byte nop) with call to user space trampoline > > > - the user space trampoline executes uprobe syscall that calls related uprobe > > > consumers > > > - trampoline returns back to next instruction > > ... > > > > How on earth can you safely overwrite a randomly aligned 5 byte instruction > > that might be being prefetched and executed by another thread of the > > same process. > > uprobe_write_opcode() doesn't overwrite the instruction in place. > > It creates the new page with the same content, overwrites the probed insn in > that page, then calls __replace_page(). tbh I wasn't completely sure about that as well, I added selftest in patch #11 trying to hit the issue you described and it seems to work ok jirka