lkml.org 
[lkml]   [2012]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    SubjectRe: [ 42/68] vfs: make O_PATH file descriptors usable for fchdir()
    From
    Just to be sure, has any one tested the patch (I can't, I am not doing
    Linux kernel development and the closest here to me here only does
    Solaris/Illumos and SUPERUX kernel development)?

    My test case, which works on Solaris and AIX is below. You will have
    to do a s/O_SEARCH/O_PATH/
    -------- snip --------
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>

    #include <stdlib.h>
    #include <stdio.h>

    int main(int ac, char *av[])
    {
    int dirfd, dupdirfd;

    dirfd=open("/etc", O_SEARCH);
    if(dirfd<0)
    {
    fprintf(stderr, "open() failed.\n");
    return EXIT_FAILURE;
    }

    dupdirfd = fcntl(dirfd, F_DUPFD, 50);
    if(dirfd<0)
    {
    fprintf(stderr, "fcntl() failed.\n");
    return EXIT_FAILURE;
    }

    if(fchdir(dupdirfd)<0)
    {
    fprintf(stderr, "fchdir(dupdirfd) failed.\n");
    return EXIT_FAILURE;
    }

    if(fchdir(dirfd)<0)
    {
    fprintf(stderr, "fchdir(dirfd) failed.\n");
    return EXIT_FAILURE;
    }

    if(openat(dupdirfd, "profile", O_RDONLY)<0)
    {
    fprintf(stderr, "openat(dupdirfd, profile, O_RDONLY) failed.\n");
    return EXIT_FAILURE;
    }

    dirfd=openat(dupdirfd, "krb5", O_SEARCH);
    if(dirfd<0)
    {
    fprintf(stderr, "openat(dupdirfd, krb5, O_SEARCH) failed.\n");
    return EXIT_FAILURE;
    }

    if(fchdir(dirfd)<0)
    {
    fprintf(stderr, "2nd fchdir(dirfd) failed.\n");
    return EXIT_FAILURE;
    }

    puts("SUCCESS.");

    return EXIT_SUCCESS;
    }
    -------- snip --------

    Olga

    On Thu, Jul 12, 2012 at 7:51 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
    > 3.0-stable review patch. If anyone has any objections, please let me know.
    >
    > ------------------
    >
    > From: Linus Torvalds <torvalds@linux-foundation.org>
    >
    > commit 332a2e1244bd08b9e3ecd378028513396a004a24 upstream.
    >
    > We already use them for openat() and friends, but fchdir() also wants to
    > be able to use O_PATH file descriptors. This should make it comparable
    > to the O_SEARCH of Solaris. In particular, O_PATH allows you to access
    > (not-quite-open) a directory you don't have read persmission to, only
    > execute permission.
    >
    > Noticed during development of multithread support for ksh93.
    >
    > Reported-by: ольга крыжановская <olga.kryzhanovska@gmail.com>
    > Cc: Al Viro <viro@zeniv.linux.org.uk>
    > Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    >
    > ---
    > fs/open.c | 6 +++---
    > 1 file changed, 3 insertions(+), 3 deletions(-)
    >
    > --- a/fs/open.c
    > +++ b/fs/open.c
    > @@ -396,10 +396,10 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd
    > {
    > struct file *file;
    > struct inode *inode;
    > - int error;
    > + int error, fput_needed;
    >
    > error = -EBADF;
    > - file = fget(fd);
    > + file = fget_raw_light(fd, &fput_needed);
    > if (!file)
    > goto out;
    >
    > @@ -413,7 +413,7 @@ SYSCALL_DEFINE1(fchdir, unsigned int, fd
    > if (!error)
    > set_fs_pwd(current->fs, &file->f_path);
    > out_putf:
    > - fput(file);
    > + fput_light(file, fput_needed);
    > out:
    > return error;
    > }
    >
    >



    --
    , _ _ ,
    { \/`o;====- Olga Kryzhanovska -====;o`\/ }
    .----'-/`-/ olga.kryzhanovska@gmail.com \-`\-'----.
    `'-..-| / http://twitter.com/fleyta \ |-..-'`
    /\/\ Solaris/BSD//C/C++ programmer /\/\
    `--` `--`
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2012-07-13 05:42    [W:0.030 / U:90.668 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site