lkml.org 
[lkml]   [2008]   [Nov]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC v10][PATCH 09/13] Restore open file descriprtors
    On Wed, Nov 26, 2008 at 08:04:40PM -0500, Oren Laadan wrote:

    > +/**
    > + * cr_attach_get_file - attach (and get) lonely file ptr to a file descriptor
    > + * @file: lonely file pointer
    > + */
    > +static int cr_attach_get_file(struct file *file)
    > +{
    > + int fd = get_unused_fd_flags(0);
    > +
    > + if (fd >= 0) {
    > + fsnotify_open(file->f_path.dentry);
    > + fd_install(fd, file);
    > + get_file(file);
    > + }
    > + return fd;
    > +}

    What happens if another thread closes the descriptor in question between
    fd_install() and get_file()?

    > + fd = cr_attach_file(file); /* no need to cleanup 'file' below */
    > + if (fd < 0) {
    > + filp_close(file, NULL);
    > + ret = fd;
    > + goto out;
    > + }
    > +
    > + /* register new <objref, file> tuple in hash table */
    > + ret = cr_obj_add_ref(ctx, file, parent, CR_OBJ_FILE, 0);
    > + if (ret < 0)
    > + goto out;

    Who said that file still exists at that point?

    BTW, there are shitloads of races here - references to fd and struct file *
    are mixed in a way that breaks *badly* if descriptor table is played with
    by another thread.


    \
     
     \ /
      Last update: 2008-11-28 12:31    [W:4.025 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site