On Wed, Jul 18, 2018 at 12:53:48PM -0700, Linus Torvalds wrote: > On Wed, Jul 18, 2018 at 12:46 PM Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > > > Huh? Nevermind ->write(), what about open()? > > What about open? > > At open time, file->f_cred is the same as current_cred(). int cachefiles_write_page(struct fscache_storage *op, struct page *page) { ... file = dentry_open(&path, O_RDWR | O_LARGEFILE, cache->cache_cred); int ecryptfs_privileged_open(struct file **lower_file, struct dentry *lower_dentry, struct vfsmount *lower_mnt, const struct cred *cred) ... (*lower_file) = dentry_open(&req.path, flags, cred); /* Derived from fs/exec.c:flush_old_files. */ static inline void flush_unauthorized_files(const struct cred *cred, struct files_struct *files) ... devnull = dentry_open(&selinux_null, O_RDWR, cred); (granted, here we don't care much, /dev/null being what it is) In mainline: struct file *filp_clone_open(struct file *oldfile) { ... retval = vfs_open(&oldfile->f_path, file, oldfile->f_cred);