diff options
Diffstat (limited to 'kernel/rcu')
| -rw-r--r-- | kernel/rcu/tree.c | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index a83ecab77917..4dd7df30df31 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -31,6 +31,7 @@  #include <linux/bitops.h>  #include <linux/export.h>  #include <linux/completion.h> +#include <linux/kmemleak.h>  #include <linux/moduleparam.h>  #include <linux/panic.h>  #include <linux/panic_notifier.h> @@ -3389,6 +3390,14 @@ void kvfree_call_rcu(struct rcu_head *head, void *ptr)  		success = true;  	} +	/* +	 * The kvfree_rcu() caller considers the pointer freed at this point +	 * and likely removes any references to it. Since the actual slab +	 * freeing (and kmemleak_free()) is deferred, tell kmemleak to ignore +	 * this object (no scanning or false positives reporting). +	 */ +	kmemleak_ignore(ptr); +  	// Set timer to drain after KFREE_DRAIN_JIFFIES.  	if (rcu_scheduler_active == RCU_SCHEDULER_RUNNING)  		schedule_delayed_monitor_work(krcp);  | 
