lkml.org 
[lkml]   [2012]   [Aug]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 039/122] locks: fix checking of fcntl_setlease argument
    Date
    From: Greg KH <gregkh@linuxfoundation.org>

    3.5-stable review patch. If anyone has any objections, please let me know.

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

    From: "J. Bruce Fields" <bfields@fieldses.org>

    commit 0ec4f431eb56d633da3a55da67d5c4b88886ccc7 upstream.

    The only checks of the long argument passed to fcntl(fd,F_SETLEASE,.)
    are done after converting the long to an int. Thus some illegal values
    may be let through and cause problems in later code.

    [ They actually *don't* cause problems in mainline, as of Dave Jones's
    commit 8d657eb3b438 "Remove easily user-triggerable BUG from
    generic_setlease", but we should fix this anyway. And this patch will
    be necessary to fix real bugs on earlier kernels. ]

    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/locks.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/fs/locks.c
    +++ b/fs/locks.c
    @@ -308,7 +308,7 @@ static int flock_make_lock(struct file *
    return 0;
    }

    -static int assign_type(struct file_lock *fl, int type)
    +static int assign_type(struct file_lock *fl, long type)
    {
    switch (type) {
    case F_RDLCK:
    @@ -445,7 +445,7 @@ static const struct lock_manager_operati
    /*
    * Initialize a lease, use the default lock manager operations
    */
    -static int lease_init(struct file *filp, int type, struct file_lock *fl)
    +static int lease_init(struct file *filp, long type, struct file_lock *fl)
    {
    if (assign_type(fl, type) != 0)
    return -EINVAL;
    @@ -463,7 +463,7 @@ static int lease_init(struct file *filp,
    }

    /* Allocate a file_lock initialised to this type of lease */
    -static struct file_lock *lease_alloc(struct file *filp, int type)
    +static struct file_lock *lease_alloc(struct file *filp, long type)
    {
    struct file_lock *fl = locks_alloc_lock();
    int error = -ENOMEM;



    \
     
     \ /
      Last update: 2012-08-08 03:41    [W:0.038 / U:59.620 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site