diff options
| author | Sebastian Andrzej Siewior <[email protected]> | 2025-09-18 13:09:45 +0000 |
|---|---|---|
| committer | Thomas Gleixner <[email protected]> | 2025-09-24 07:20:02 +0000 |
| commit | 4ec3c15462b9f44562f45723a92e2807746ba7d1 (patch) | |
| tree | 29e9329d7ebbbcbd68d3de77e48c21473a315a18 | |
| parent | futex: Prevent use-after-free during requeue-PI (diff) | |
| download | kernel-4ec3c15462b9f44562f45723a92e2807746ba7d1.tar.gz kernel-4ec3c15462b9f44562f45723a92e2807746ba7d1.zip | |
futex: Use correct exit on failure from futex_hash_allocate_default()
copy_process() uses the wrong error exit path from futex_hash_allocate_default().
After exiting from futex_hash_allocate_default(), neither tasklist_lock
nor siglock has been acquired. The exit label bad_fork_core_free unlocks
both of these locks which is wrong.
The next exit label, bad_fork_cancel_cgroup, is the correct exit.
sched_cgroup_fork() did not allocate any resources that need to freed.
Use bad_fork_cancel_cgroup on error exit from futex_hash_allocate_default().
Fixes: 7c4f75a21f636 ("futex: Allow automatic allocation of process wide futex hash")
Reported-by: [email protected]
Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
Reviewed-by: Steven Rostedt (Google) <[email protected]>
Closes: https://lore.kernel.org/all/[email protected]
| -rw-r--r-- | kernel/fork.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index c4ada32598bd..6ca8689a83b5 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -2295,7 +2295,7 @@ __latent_entropy struct task_struct *copy_process( if (need_futex_hash_allocate_default(clone_flags)) { retval = futex_hash_allocate_default(); if (retval) - goto bad_fork_core_free; + goto bad_fork_cancel_cgroup; /* * If we fail beyond this point we don't free the allocated * futex hash map. We assume that another thread will be created |
