summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@kernel.org>2024-08-01 17:43:07 -0700
committerNeeraj Upadhyay <neeraj.upadhyay@kernel.org>2024-08-15 00:14:48 +0530
commit554f07a119866a78606b36123fb28e9451b1f994 (patch)
tree9382b934c8d2fe6ed4c2a449bbb1242e5d78e912
parent1c3e6e7903fa939601fdd326b04507304ba22337 (diff)
downloadlinux-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.c5
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);