X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=fs%2Fanon_inodes.c;h=3bbdb9d023767a142f8917bc793437abf586f211;hb=26c3679101dbccc054dcf370143941844ba70531;hp=3662dd44896b71586e3a493193261d3a1adf92a6;hpb=d3d0ba7b8fb8f57c33207adcb41f40c176148c03;p=~andy%2Flinux diff --git a/fs/anon_inodes.c b/fs/anon_inodes.c index 3662dd44896..3bbdb9d0237 100644 --- a/fs/anon_inodes.c +++ b/fs/anon_inodes.c @@ -79,9 +79,12 @@ int anon_inode_getfd(const char *name, const struct file_operations *fops, if (IS_ERR(anon_inode_inode)) return -ENODEV; + if (fops->owner && !try_module_get(fops->owner)) + return -ENOENT; + error = get_unused_fd_flags(flags); if (error < 0) - return error; + goto err_module; fd = error; /* @@ -128,6 +131,8 @@ err_dput: dput(dentry); err_put_unused_fd: put_unused_fd(fd); +err_module: + module_put(fops->owner); return error; } EXPORT_SYMBOL_GPL(anon_inode_getfd); @@ -154,8 +159,8 @@ static struct inode *anon_inode_mkinode(void) */ inode->i_state = I_DIRTY; inode->i_mode = S_IRUSR | S_IWUSR; - inode->i_uid = current->fsuid; - inode->i_gid = current->fsgid; + inode->i_uid = current_fsuid(); + inode->i_gid = current_fsgid(); inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; return inode; }