Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756641Ab1EQUrx (ORCPT ); Tue, 17 May 2011 16:47:53 -0400 Received: from e6.ny.us.ibm.com ([32.97.182.146]:57879 "EHLO e6.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756566Ab1EQUrw (ORCPT ); Tue, 17 May 2011 16:47:52 -0400 From: John Stultz To: LKML Cc: John Stultz , Joe Perches , Michal Nazarewicz , Andy Whitcroft , Jiri Slaby , KOSAKI Motohiro , David Rientjes , Dave Hansen , Andrew Morton , linux-mm@kvack.org Subject: [PATCH 0/3] v5 Improve task->comm locking situation Date: Tue, 17 May 2011 13:47:40 -0700 Message-Id: <1305665263-20933-1-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 1.7.3.2.146.gca209 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2935 Lines: 77 Ok. Here's v5. Hopefully this is getting close to something that can be queued for 2.6.40. Since my commit 4614a696bd1c3a9af3a08f0e5874830a85b889d4, the current->comm value could be changed by other threads. This changed the comm locking rules, which previously allowed for unlocked current->comm access, since only the thread itself could change its comm. While this was brought up at the time, it was not considered problematic, as the comm writing was done in such a way that only null or incomplete comms could be read. However, recently folks have made it clear they want to see this issue resolved. So fair enough, as I opened this can of worms, I should work to resolve it and this patchset is my initial attempt. The proposed solution here is to introduce a new spinlock that exclusively protects the comm value. We use it to serialize access via get_task_comm() and set_task_comm(). Since some comm access is open-coded using the task lock, we preserve the task locking in set_task_comm for now. Once all comm access is converted to using get_task_comm, we can clean that up as well. I've also introduced a printk %ptc accessor, which makes the conversion to locked access simpler (as most uses are for printks) as well as a checkpatch rule to try to catch any new current->comm users from being introduced. New in this version: Added a spin_lock_init in copy_process as caught by Jiri. Also tweaked the regex as suggested by Joe. Hopefully this will allow for a smooth transition, where we can slowly fix up the unlocked current->comm access bit by bit, reducing the race window with each patch, while not making the situation any worse then it was yesterday. Thanks for the comments and feedback so far. Any additional comments/feedback would still be appreciated. thanks -john CC: Joe Perches CC: Michal Nazarewicz CC: Andy Whitcroft CC: Jiri Slaby CC: KOSAKI Motohiro CC: David Rientjes CC: Dave Hansen CC: Andrew Morton CC: linux-mm@kvack.org John Stultz (3): comm: Introduce comm_lock spinlock to protect task->comm access printk: Add %ptc to safely print a task's comm checkpatch.pl: Add check for task comm references fs/exec.c | 19 ++++++++++++++++--- include/linux/init_task.h | 1 + include/linux/sched.h | 5 ++--- kernel/fork.c | 1 + lib/vsprintf.c | 24 ++++++++++++++++++++++++ scripts/checkpatch.pl | 7 +++++++ 6 files changed, 51 insertions(+), 6 deletions(-) -- 1.7.3.2.146.gca209 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/