lkml.org 
[lkml]   [2016]   [Jul]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.6 055/203] NFS: Fix another OPEN_DOWNGRADE bug
    Date
    4.6-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Trond Myklebust <trond.myklebust@primarydata.com>

    commit e547f2628327fec6afd2e03b46f113f614cca05b upstream.

    Olga Kornievskaia reports that the following test fails to trigger
    an OPEN_DOWNGRADE on the wire, and only triggers the final CLOSE.

    fd0 = open(foo, RDRW) -- should be open on the wire for "both"
    fd1 = open(foo, RDONLY) -- should be open on the wire for "read"
    close(fd0) -- should trigger an open_downgrade
    read(fd1)
    close(fd1)

    The issue is that we're missing a check for whether or not the current
    state transitioned from an O_RDWR state as opposed to having transitioned
    from a combination of O_RDONLY and O_WRONLY.

    Reported-by: Olga Kornievskaia <aglo@umich.edu>
    Fixes: cd9288ffaea4 ("NFSv4: Fix another bug in the close/open_downgrade code")
    Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/nfs/nfs4proc.c | 5 ++---
    1 file changed, 2 insertions(+), 3 deletions(-)

    --- a/fs/nfs/nfs4proc.c
    +++ b/fs/nfs/nfs4proc.c
    @@ -2860,12 +2860,11 @@ static void nfs4_close_prepare(struct rp
    call_close |= is_wronly;
    else if (is_wronly)
    calldata->arg.fmode |= FMODE_WRITE;
    + if (calldata->arg.fmode != (FMODE_READ|FMODE_WRITE))
    + call_close |= is_rdwr;
    } else if (is_rdwr)
    calldata->arg.fmode |= FMODE_READ|FMODE_WRITE;

    - if (calldata->arg.fmode == 0)
    - call_close |= is_rdwr;
    -
    if (!nfs4_valid_open_stateid(state))
    call_close = 0;
    spin_unlock(&state->owner->so_lock);

    \
     
     \ /
      Last update: 2016-07-26 01:01    [W:3.512 / U:0.544 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site