Re: [RFC v10][PATCH 09/13] Restore open file descriprtors
From: Al Viro <hidden>
Date: 2008-11-28 11:28:09
Also in:
linux-mm, lkml
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. -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html