The patch titled taskstats_tgid_free: fix usage has been removed from the -mm tree. Its filename was taskstats_tgid_free-fix-usage.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ Subject: taskstats_tgid_free: fix usage From: Oleg Nesterov <oleg@xxxxxxxxxx> taskstats_tgid_free() is called on copy_process's error path. This is wrong. IF (clone_flags & CLONE_THREAD) We should not clear ->signal->taskstats, current uses it, it probably has a valid accumulated info. ELSE taskstats_tgid_init() set ->signal->taskstats = NULL, there is nothing to free. Move the callsite to __exit_signal(). We don't need any locking, entire thread group is exiting, nobody should have a reference to soon to be released ->signal. Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx> Cc: Shailabh Nagar <nagar@xxxxxxxxxxxxxx> Cc: Balbir Singh <balbir@xxxxxxxxxx> Cc: Jay Lan <jlan@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- include/linux/taskstats_kern.h | 13 ++----------- kernel/exit.c | 1 + kernel/fork.c | 1 - 3 files changed, 3 insertions(+), 12 deletions(-) diff -puN include/linux/taskstats_kern.h~taskstats_tgid_free-fix-usage include/linux/taskstats_kern.h --- a/include/linux/taskstats_kern.h~taskstats_tgid_free-fix-usage +++ a/include/linux/taskstats_kern.h @@ -49,17 +49,8 @@ static inline void taskstats_tgid_alloc( static inline void taskstats_tgid_free(struct signal_struct *sig) { - struct taskstats *stats = NULL; - unsigned long flags; - - spin_lock_irqsave(&sig->stats_lock, flags); - if (sig->stats) { - stats = sig->stats; - sig->stats = NULL; - } - spin_unlock_irqrestore(&sig->stats_lock, flags); - if (stats) - kmem_cache_free(taskstats_cache, stats); + if (sig->stats) + kmem_cache_free(taskstats_cache, sig->stats); } extern void taskstats_exit_alloc(struct taskstats **, unsigned int *); diff -puN kernel/exit.c~taskstats_tgid_free-fix-usage kernel/exit.c --- a/kernel/exit.c~taskstats_tgid_free-fix-usage +++ a/kernel/exit.c @@ -128,6 +128,7 @@ static void __exit_signal(struct task_st flush_sigqueue(&tsk->pending); if (sig) { flush_sigqueue(&sig->shared_pending); + taskstats_tgid_free(sig); __cleanup_signal(sig); } } diff -puN kernel/fork.c~taskstats_tgid_free-fix-usage kernel/fork.c --- a/kernel/fork.c~taskstats_tgid_free-fix-usage +++ a/kernel/fork.c @@ -897,7 +897,6 @@ static inline int copy_signal(unsigned l void __cleanup_signal(struct signal_struct *sig) { exit_thread_group_keys(sig); - taskstats_tgid_free(sig); kmem_cache_free(signal_cachep, sig); } _ Patches currently in -mm which might be from oleg@xxxxxxxxxx are origin.patch tty-signal-tty-locking.patch do_task_stat-dont-take-tty_mutex.patch do_acct_process-dont-take-tty_mutex.patch trivial-make-set_special_pids-static.patch sys_unshare-remove-a-broken-clone_sighand-code.patch sys_setpgid-eliminate-unnecessary-do_each_task_pidpidtype_pgid.patch session_of_pgrp-kill-unnecessary-do_each_task_pidpidtype_pgid.patch pidhash-temporary-debug-checks.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html