diff options
Diffstat (limited to 'mm/mempolicy.c')
| -rw-r--r-- | mm/mempolicy.c | 17 | 
1 files changed, 17 insertions, 0 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index d8c4e38fb5f4..2da72a5b6ecc 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -2336,6 +2336,23 @@ out:  	return ret;  } +/* + * Drop the (possibly final) reference to task->mempolicy.  It needs to be + * dropped after task->mempolicy is set to NULL so that any allocation done as + * part of its kmem_cache_free(), such as by KASAN, doesn't reference a freed + * policy. + */ +void mpol_put_task_policy(struct task_struct *task) +{ +	struct mempolicy *pol; + +	task_lock(task); +	pol = task->mempolicy; +	task->mempolicy = NULL; +	task_unlock(task); +	mpol_put(pol); +} +  static void sp_delete(struct shared_policy *sp, struct sp_node *n)  {  	pr_debug("deleting %lx-l%lx\n", n->start, n->end);  |