diff options
author | Paul E. McKenney <paulmck@kernel.org> | 2024-08-01 17:43:07 -0700 |
---|---|---|
committer | Neeraj Upadhyay <neeraj.upadhyay@kernel.org> | 2024-08-15 00:14:48 +0530 |
commit | 554f07a119866a78606b36123fb28e9451b1f994 (patch) | |
tree | 9382b934c8d2fe6ed4c2a449bbb1242e5d78e912 | |
parent | 1c3e6e7903fa939601fdd326b04507304ba22337 (diff) | |
download | linux-554f07a119866a78606b36123fb28e9451b1f994.tar.gz linux-554f07a119866a78606b36123fb28e9451b1f994.tar.bz2 linux-554f07a119866a78606b36123fb28e9451b1f994.zip |
rcuscale: NULL out top-level pointers to heap memory
Currently, if someone modprobes and rmmods rcuscale successfully, but
the next run errors out during the modprobe, non-NULL pointers to freed
memory will remain. If the run after that also errors out during the
modprobe, there will be double-free bugs.
This commit therefore NULLs out top-level pointers to memory that has
just been freed.
Signed-off-by: "Paul E. McKenney" <paulmck@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
-rw-r--r-- | kernel/rcu/rcuscale.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c index bc7cca979c06..61a178914256 100644 --- a/kernel/rcu/rcuscale.c +++ b/kernel/rcu/rcuscale.c @@ -819,6 +819,7 @@ kfree_scale_cleanup(void) torture_stop_kthread(kfree_scale_thread, kfree_reader_tasks[i]); kfree(kfree_reader_tasks); + kfree_reader_tasks = NULL; } torture_cleanup_end(); @@ -987,6 +988,7 @@ rcu_scale_cleanup(void) torture_stop_kthread(rcu_scale_reader, reader_tasks[i]); kfree(reader_tasks); + reader_tasks = NULL; } if (writer_tasks) { @@ -1043,8 +1045,11 @@ rcu_scale_cleanup(void) } } kfree(writer_tasks); + writer_tasks = NULL; kfree(writer_durations); + writer_durations = NULL; kfree(writer_n_durations); + writer_n_durations = NULL; kfree(writer_done); writer_done = NULL; kfree(writer_freelists); |