lkml.org 
[lkml]   [2010]   [Apr]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 35/35] union-mount: Implement union-aware utimensat()
    Date
    XXX - doesn't implement NOFOLLOW correctly
    ---
    fs/utimes.c | 13 +++++++++++--
    1 files changed, 11 insertions(+), 2 deletions(-)

    diff --git a/fs/utimes.c b/fs/utimes.c
    index e4c75db..82feca2 100644
    --- a/fs/utimes.c
    +++ b/fs/utimes.c
    @@ -8,6 +8,7 @@
    #include <linux/stat.h>
    #include <linux/utime.h>
    #include <linux/syscalls.h>
    +#include <linux/union.h>
    #include <asm/uaccess.h>
    #include <asm/unistd.h>

    @@ -152,18 +153,26 @@ long do_utimes(int dfd, char __user *filename, struct timespec *times, int flags
    error = utimes_common(&file->f_path, times);
    fput(file);
    } else {
    + struct nameidata nd;
    + char *tmp;
    struct path path;
    int lookup_flags = 0;

    if (!(flags & AT_SYMLINK_NOFOLLOW))
    lookup_flags |= LOOKUP_FOLLOW;

    - error = user_path_at(dfd, filename, lookup_flags, &path);
    + error = user_path_nd(dfd, filename, lookup_flags, &nd, &path,
    + &tmp);
    if (error)
    goto out;

    - error = utimes_common(&path, times);
    + error = union_copyup(&nd, &path);
    +
    + if (!error)
    + error = utimes_common(&path, times);
    path_put(&path);
    + path_put(&nd.path);
    + putname(tmp);
    }

    out:
    --
    1.6.3.3


    \
     
     \ /
      Last update: 2010-04-16 01:11    [W:3.841 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site