lkml.org 
[lkml]   [2008]   [Jun]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    SubjectRe: [patch 3/4 v2] vfs: utimensat(): fix error checking for {UTIME_NOW,UTIME_OMIT} case
    From
    Andrew,

    This patch improves the indentation of the previous patch.
    (No other changes).

    Cheers,

    Michael

    --- linux-2.6.26-rc4/fs/utimes.c 2008-06-04 13:36:33.000000000 +0200
    +++ linux-2.6.26-rc4-utimensat-fix-v4/fs/utimes.c 2008-06-04 13:35:14.000000000 +0200
    @@ -40,14 +40,9 @@

    #endif

    -static bool nsec_special(long nsec)
    -{
    - return nsec == UTIME_OMIT || nsec == UTIME_NOW;
    -}
    -
    static bool nsec_valid(long nsec)
    {
    - if (nsec_special(nsec))
    + if (nsec == UTIME_OMIT || nsec == UTIME_NOW)
    return true;

    return nsec >= 0 && nsec <= 999999999;
    @@ -106,7 +101,7 @@
    times[1].tv_nsec == UTIME_NOW)
    times = NULL;

    - /* Don't worry, the checks are done in inode_change_ok() */
    + /* In most cases, the checks are done in inode_change_ok() */
    newattrs.ia_valid = ATTR_CTIME | ATTR_MTIME | ATTR_ATIME;
    if (times) {
    error = -EPERM;
    @@ -128,15 +123,26 @@
    newattrs.ia_mtime.tv_nsec = times[1].tv_nsec;
    newattrs.ia_valid |= ATTR_MTIME_SET;
    }
    - }

    - /*
    - * If times is NULL or both times are either UTIME_OMIT or
    - * UTIME_NOW, then need to check permissions, because
    - * inode_change_ok() won't do it.
    - */
    - if (!times || (nsec_special(times[0].tv_nsec) &&
    - nsec_special(times[1].tv_nsec))) {
    + /*
    + * For the UTIME_OMIT/UTIME_NOW and UTIME_NOW/UTIME_OMIT
    + * cases, we need to make an extra check that is not done by
    + * inode_change_ok().
    + */
    + if (((times[0].tv_nsec == UTIME_NOW &&
    + times[1].tv_nsec == UTIME_OMIT)
    + ||
    + (times[0].tv_nsec == UTIME_OMIT &&
    + times[1].tv_nsec == UTIME_NOW))
    + && !is_owner_or_cap(inode))
    + goto mnt_drop_write_and_out;
    + } else {
    +
    + /*
    + * If times is NULL (or both times are UTIME_NOW),
    + * then we need to check permissions, because
    + * inode_change_ok() won't do it.
    + */
    error = -EACCES;
    if (IS_IMMUTABLE(inode))
    goto mnt_drop_write_and_out;



    \
     
     \ /
      Last update: 2008-06-04 16:55    [W:0.023 / U:0.808 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site