aboutsummaryrefslogtreecommitdiffstats
path: root/lib/net_utils.c
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <[email protected]>2025-08-22 14:12:38 +0000
committerBorislav Petkov (AMD) <[email protected]>2025-08-31 09:48:19 +0000
commitd9b05321e21e4b218de4ce8a590bf375f58b6346 (patch)
tree055e4d08960733562646b1cc0849a22418184fc4 /lib/net_utils.c
parentLinux 6.17-rc3 (diff)
downloadkernel-d9b05321e21e4b218de4ce8a590bf375f58b6346.tar.gz
kernel-d9b05321e21e4b218de4ce8a590bf375f58b6346.zip
futex: Move futex_hash_free() back to __mmput()
To avoid a memory leak via mm_alloc() + mmdrop() the futex cleanup code has been moved to __mmdrop(). This resulted in a warnings if the futex hash table has been allocated via vmalloc() the mmdrop() was invoked from atomic context. The free path must stay in __mmput() to ensure it is invoked from preemptible context. In order to avoid the memory leak, delay the allocation of mm_struct::mm->futex_ref to futex_hash_allocate(). This works because neither the per-CPU counter nor the private hash has been allocated and therefore - futex_private_hash() callers (such as exit_pi_state_list()) don't acquire reference if there is no private hash yet. There is also no reference put. - Regular callers (futex_hash()) fallback to global hash. No reference counting here. The futex_ref member can be allocated in futex_hash_allocate() before the private hash itself is allocated. This happens either while the first thread is created or on request. In both cases the process has just a single thread so there can be either futex operation in progress or the request to create a private hash. Move futex_hash_free() back to __mmput(); Move the allocation of mm_struct::futex_ref to futex_hash_allocate(). [ bp: Fold a follow-up fix to prevent a use-after-free: https://lore.kernel.org/r/[email protected] ] Fixes: e703b7e247503 ("futex: Move futex cleanup to __mmdrop()") Closes: https://lore.kernel.org/all/[email protected]/ Reported-by: Jakub Kicinski <[email protected]> Signed-off-by: Sebastian Andrzej Siewior <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Signed-off-by: Borislav Petkov (AMD) <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
Diffstat (limited to 'lib/net_utils.c')
0 files changed, 0 insertions, 0 deletions