lkml.org 
[lkml]   [2011]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[34-longterm 097/247] CRED: Fix kernel panic upon security_file_alloc() failure.
    Date
    From: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>

    -------------------
    This is a commit scheduled for the next v2.6.34 longterm release.
    If you see a problem with using this for longterm, please comment.
    -------------------
    commit 78d2978874e4e10e97dfd4fd79db45bdc0748550 upstream.

    In get_empty_filp() since 2.6.29, file_free(f) is called with f->f_cred == NULL
    when security_file_alloc() returned an error. As a result, kernel will panic()
    due to put_cred(NULL) call within RCU callback.

    Fix this bug by assigning f->f_cred before calling security_file_alloc().

    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
    ---
    fs/file_table.c | 2 +-
    1 files changed, 1 insertions(+), 1 deletions(-)
    diff --git a/fs/file_table.c b/fs/file_table.c
    index 32d12b7..d4be17f 100644
    --- a/fs/file_table.c
    +++ b/fs/file_table.c
    @@ -123,13 +123,13 @@ struct file *get_empty_filp(void)
    goto fail;

    percpu_counter_inc(&nr_files);
    + f->f_cred = get_cred(cred);
    if (security_file_alloc(f))
    goto fail_sec;

    INIT_LIST_HEAD(&f->f_u.fu_list);
    atomic_long_set(&f->f_count, 1);
    rwlock_init(&f->f_owner.lock);
    - f->f_cred = get_cred(cred);
    spin_lock_init(&f->f_lock);
    eventpoll_init_file(f);
    /* f->f_version: 0 */
    --
    1.7.4.4


    \
     
     \ /
      Last update: 2011-06-23 20:19    [from the cache]
    ©2003-2014 Jasper Spaans. hosted at Digital Ocean