On 4/30/26 21:25, Daniel Walker (danielwa) wrote:
> On Thu, Apr 30, 2026 at 05:22:18PM +0200, Jann Horn wrote:
>> On Wed, Apr 29, 2026 at 11:11 PM Daniel Walker (danielwa)
>> <[email protected]> wrote:
>>>
>>>
>>> Shouldn't there be some sort of compensation or notification for this, or 
>>> is each person that
>>> hits this suppose to just scratch their head and send a patch that's 
>>> rejected?
>>
>> I guess we could add a pr_warn_once() that warns when
>> madvise(MADV_DONTNEED) is called on a read+execute file mapping,

Private mapping, yes. MADV_DONTNEED indeed interacts poorly here.

uprobe registration indeed fails if VM_WRITE is set (valid_vma), but nothing
stops the VMA from getting mprotect'ed later I guess, to allow for write access.

We could try marking a VMA that has uprobes, to then pr_warn_once() of
MADV_DONTNEED is done on such a VMA. It wouldn't sort out ptrace access.

>> and/or (as David said) add an explicit note in the madvise() manpage
>> about how that can interfere with software breakpoints and uprobes?

I guess not just software breakpoints, but any modifications done by a debugger.

I guess for read+execute file mapping we would expect these to be software
breakpoints.

> 
> It does feel like it's the debuggers problem. The application doesn't know 
> it's
> getting debugged. So the application does whatever it does. If GDB is 
> debugging
> an application it should assume there's a problematic madvise() call which 
> will
> hurt/stop the debugging from happening. It should endeavor to prevent that
> from happening. There are options in userspace to prevent it from happening. 
> I'm
> sure madvise() is not the only thing GDB has to worry about w.r.t. screwing up
> the debugging.
> 
> Noting it in the man page seems reasonable.

I assume the bigger problem here is that MADV_DONTNEED was used for memory
reclaim, when in fact, it shouldn't be used for that.

For shared mappings, the man page even documents: "MADV_DONTNEED might not lead
to immediate freeing of the pages in the range.  The kernel is free to delay
freeing the pages until an appropriate moment.".

MADV_PAGEOUT is better for reclaim, but it has its limitations when it comes to
pages shared with other processes.

-- 
Cheers,

David

Reply via email to