mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
Merge patch series "vfs: properly deny directory leases on filesystems with special lease handling"
Jeff Layton <jlayton@kernel.org> says: Filesystems currently have to set the ->setlease() method explicitly in order to deny attempts to set a lease or delegation. With the advent of directory delegations, we now need to set ->setlease on the directory file_operations for several filesystems to simple_nosetlease() to ensure this. This patchset does that. There should be no noticeable change in behavior, other than fixing the support detection in xfstests, allowing lease/delegation tests to be properly skipped on these filesystems. It's probably simplest to merge these all at once via Christian's tree if he's amenable, but Acks would be welcome. Ideally these would go in for v6.19. Long term, I think it would be best to change leases/delegations to be an opt-in thing, such that leases are always denied by default if the method isn't set. That's a larger patchset though as we'd need to audit all of the file_operations that currently have ->setlease() as NULL. * patches from https://patch.msgid.link/20260107-setlease-6-19-v1-0-85f034abcc57@kernel.org: vboxsf: don't allow delegations to be set on directories ceph: don't allow delegations to be set on directories gfs2: don't allow delegations to be set on directories 9p: don't allow delegations to be set on directories smb/client: properly disallow delegations on directories nfs: properly disallow delegation requests on directories Link: https://patch.msgid.link/20260107-setlease-6-19-v1-0-85f034abcc57@kernel.org Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
commit
7d42f2b1cc
|
|
@ -242,6 +242,7 @@ const struct file_operations v9fs_dir_operations = {
|
|||
.iterate_shared = v9fs_dir_readdir,
|
||||
.open = v9fs_file_open,
|
||||
.release = v9fs_dir_release,
|
||||
.setlease = simple_nosetlease,
|
||||
};
|
||||
|
||||
const struct file_operations v9fs_dir_operations_dotl = {
|
||||
|
|
@ -251,4 +252,5 @@ const struct file_operations v9fs_dir_operations_dotl = {
|
|||
.open = v9fs_file_open,
|
||||
.release = v9fs_dir_release,
|
||||
.fsync = v9fs_file_fsync_dotl,
|
||||
.setlease = simple_nosetlease,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2214,6 +2214,7 @@ const struct file_operations ceph_dir_fops = {
|
|||
.fsync = ceph_fsync,
|
||||
.lock = ceph_lock,
|
||||
.flock = ceph_flock,
|
||||
.setlease = simple_nosetlease,
|
||||
};
|
||||
|
||||
const struct file_operations ceph_snapdir_fops = {
|
||||
|
|
@ -2221,6 +2222,7 @@ const struct file_operations ceph_snapdir_fops = {
|
|||
.llseek = ceph_dir_llseek,
|
||||
.open = ceph_open,
|
||||
.release = ceph_release,
|
||||
.setlease = simple_nosetlease,
|
||||
};
|
||||
|
||||
const struct inode_operations ceph_dir_iops = {
|
||||
|
|
|
|||
|
|
@ -1608,6 +1608,7 @@ const struct file_operations gfs2_dir_fops = {
|
|||
.lock = gfs2_lock,
|
||||
.flock = gfs2_flock,
|
||||
.llseek = default_llseek,
|
||||
.setlease = simple_nosetlease,
|
||||
.fop_flags = FOP_ASYNC_LOCK,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ const struct file_operations nfs_dir_operations = {
|
|||
.open = nfs_opendir,
|
||||
.release = nfs_closedir,
|
||||
.fsync = nfs_fsync_dir,
|
||||
.setlease = simple_nosetlease,
|
||||
};
|
||||
|
||||
const struct address_space_operations nfs_dir_aops = {
|
||||
|
|
|
|||
|
|
@ -431,8 +431,6 @@ void nfs42_ssc_unregister_ops(void)
|
|||
static int nfs4_setlease(struct file *file, int arg, struct file_lease **lease,
|
||||
void **priv)
|
||||
{
|
||||
if (!S_ISREG(file_inode(file)->i_mode))
|
||||
return -EINVAL;
|
||||
return nfs4_proc_setlease(file, arg, lease, priv);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1149,9 +1149,6 @@ cifs_setlease(struct file *file, int arg, struct file_lease **lease, void **priv
|
|||
struct inode *inode = file_inode(file);
|
||||
struct cifsFileInfo *cfile = file->private_data;
|
||||
|
||||
if (!S_ISREG(inode->i_mode))
|
||||
return -EINVAL;
|
||||
|
||||
/* Check if file is oplocked if this is request for new lease */
|
||||
if (arg == F_UNLCK ||
|
||||
((arg == F_RDLCK) && CIFS_CACHE_READ(CIFS_I(inode))) ||
|
||||
|
|
@ -1712,6 +1709,7 @@ const struct file_operations cifs_dir_ops = {
|
|||
.remap_file_range = cifs_remap_file_range,
|
||||
.llseek = generic_file_llseek,
|
||||
.fsync = cifs_dir_fsync,
|
||||
.setlease = simple_nosetlease,
|
||||
};
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -186,6 +186,7 @@ const struct file_operations vboxsf_dir_fops = {
|
|||
.release = vboxsf_dir_release,
|
||||
.read = generic_read_dir,
|
||||
.llseek = generic_file_llseek,
|
||||
.setlease = simple_nosetlease,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user