[lkml]   [2011]   [May]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Subject[RFC][PATCH 0/3] v2 Improve task->comm locking situation
    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 seqlock 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.

    In addition, with this new patch set I've introduced a printk
    %ptc accessor, which makes the conversion to locked access
    simpler (as most uses are for printks).

    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.

    Also in this patch set I have a an example how I've converted
    comm access in ext4 to use %ptc method. I've got quite a number
    of similar patches queued, but wanted to get some feedback on
    the approach before I start patchbombing everyone.

    Comments/feedback would be appreciated.


    CC: Ted Ts'o <>
    CC: KOSAKI Motohiro <>
    CC: David Rientjes <>
    CC: Dave Hansen <>
    CC: Andrew Morton <>

    John Stultz (3):
    comm: Introduce comm_lock seqlock to protect task->comm access
    printk: Add %ptc to safely print a task's comm
    comm: ext4: Protect task->comm access by using get_task_comm()

    fs/exec.c | 25 ++++++++++++++++++++-----
    fs/ext4/file.c | 4 ++--
    fs/ext4/super.c | 8 ++++----
    include/linux/init_task.h | 1 +
    include/linux/sched.h | 5 ++---
    lib/vsprintf.c | 27 +++++++++++++++++++++++++++
    6 files changed, 56 insertions(+), 14 deletions(-)


     \ /
      Last update: 2011-05-11 02:25    [W:0.026 / U:5.344 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site