rcuscale: NULL out top-level pointers to heap memory
authorPaul E. McKenney <paulmck@kernel.org>
Fri, 2 Aug 2024 00:43:07 +0000 (17:43 -0700)
committerNeeraj Upadhyay <neeraj.upadhyay@kernel.org>
Wed, 14 Aug 2024 18:44:48 +0000 (00:14 +0530)
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>
kernel/rcu/rcuscale.c

index bc7cca979c06faddcfaf8fa6981ba4d60313c72d..61a1789142562ff38d25a783b265b602618c4a5e 100644 (file)
@@ -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);