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 090/247] NFSD: memory corruption due to writing beyond the stat array
    Date
    From: Konstantin Khorenko <khorenko@parallels.com>

    -------------------
    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 3aa6e0aa8ab3e64bbfba092c64d42fd1d006b124 upstream.

    If nfsd fails to find an exported via NFS file in the readahead cache, it
    should increment corresponding nfsdstats counter (ra_depth[10]), but due to a
    bug it may instead write to ra_depth[11], corrupting the following field.

    In a kernel with NFSDv4 compiled in the corruption takes the form of an
    increment of a counter of the number of NFSv4 operation 0's received; since
    there is no operation 0, this is harmless.

    In a kernel with NFSDv4 disabled it corrupts whatever happens to be in the
    memory beyond nfsdstats.

    Signed-off-by: Konstantin Khorenko <khorenko@openvz.org>
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
    ---
    fs/nfsd/vfs.c | 2 +-
    1 files changed, 1 insertions(+), 1 deletions(-)

    diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
    index 4eb9baa..054b50b 100644
    --- a/fs/nfsd/vfs.c
    +++ b/fs/nfsd/vfs.c
    @@ -819,7 +819,7 @@ nfsd_get_raparms(dev_t dev, ino_t ino)
    if (ra->p_count == 0)
    frap = rap;
    }
    - depth = nfsdstats.ra_size*11/10;
    + depth = nfsdstats.ra_size;
    if (!frap) {
    spin_unlock(&rab->pb_lock);
    return NULL;
    --
    1.7.4.4


    \
     
     \ /
      Last update: 2011-06-23 20:11    [W:6.811 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site