Commit 7ea30958 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'vfs-6.18-rc2.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs

Pull vfs fixes from Christian Brauner:

 - Handle inode number mismatches in nsfs file handles

 - Update the comment to init_file()

 - Add documentation link for EBADF in the rust file code

 - Skip read lock assertion for read-only filesystems when using dax

 - Don't leak disconnected dentries during umount

 - Fix new coredump input pattern validation

 - Handle ENOIOCTLCMD conversion in vfs_fileattr_{g,s}et() correctly

 - Remove redundant IOCB_DIO_CALLER_COMP clearing in overlayfs

* tag 'vfs-6.18-rc2.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs:
  ovl: remove redundant IOCB_DIO_CALLER_COMP clearing
  fs: return EOPNOTSUPP from file_setattr/file_getattr syscalls
  Revert "fs: make vfs_fileattr_[get|set] return -EOPNOTSUPP"
  coredump: fix core_pattern input validation
  vfs: Don't leak disconnected dentries on umount
  dax: skip read lock assertion for read-only filesystems
  rust: file: add intra-doc link for 'EBADF'
  fs: update comment in init_file()
  nsfs: handle inode number mismatches gracefully in file handles
parents 5a6f65d1 7933a585
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1468,7 +1468,7 @@ static int proc_dostring_coredump(const struct ctl_table *table, int write,
	ssize_t retval;
	char old_core_pattern[CORENAME_MAX_SIZE];

	if (write)
	if (!write)
		return proc_dostring(table, write, buffer, lenp, ppos);

	retval = strscpy(old_core_pattern, core_pattern, CORENAME_MAX_SIZE);
+1 −1
Original line number Diff line number Diff line
@@ -1725,7 +1725,7 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
	if (iov_iter_rw(iter) == WRITE) {
		lockdep_assert_held_write(&iomi.inode->i_rwsem);
		iomi.flags |= IOMAP_WRITE;
	} else {
	} else if (!sb_rdonly(iomi.inode->i_sb)) {
		lockdep_assert_held(&iomi.inode->i_rwsem);
	}

+2 −0
Original line number Diff line number Diff line
@@ -2557,6 +2557,8 @@ struct dentry *d_alloc_parallel(struct dentry *parent,
	spin_lock(&parent->d_lock);
	new->d_parent = dget_dlock(parent);
	hlist_add_head(&new->d_sib, &parent->d_children);
	if (parent->d_flags & DCACHE_DISCONNECTED)
		new->d_flags |= DCACHE_DISCONNECTED;
	spin_unlock(&parent->d_lock);

retry:
+1 −1
Original line number Diff line number Diff line
@@ -2048,7 +2048,7 @@ static int proc_dointvec_minmax_coredump(const struct ctl_table *table, int writ
{
	int error = proc_dointvec_minmax(table, write, buffer, lenp, ppos);

	if (!error && !write)
	if (!error && write)
		validate_coredump_safety();
	return error;
}
+6 −10
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ int vfs_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
	int error;

	if (!inode->i_op->fileattr_get)
		return -EOPNOTSUPP;
		return -ENOIOCTLCMD;

	error = security_inode_file_getattr(dentry, fa);
	if (error)
@@ -270,7 +270,7 @@ int vfs_fileattr_set(struct mnt_idmap *idmap, struct dentry *dentry,
	int err;

	if (!inode->i_op->fileattr_set)
		return -EOPNOTSUPP;
		return -ENOIOCTLCMD;

	if (!inode_owner_or_capable(idmap, inode))
		return -EPERM;
@@ -312,8 +312,6 @@ int ioctl_getflags(struct file *file, unsigned int __user *argp)
	int err;

	err = vfs_fileattr_get(file->f_path.dentry, &fa);
	if (err == -EOPNOTSUPP)
		err = -ENOIOCTLCMD;
	if (!err)
		err = put_user(fa.flags, argp);
	return err;
@@ -335,8 +333,6 @@ int ioctl_setflags(struct file *file, unsigned int __user *argp)
			fileattr_fill_flags(&fa, flags);
			err = vfs_fileattr_set(idmap, dentry, &fa);
			mnt_drop_write_file(file);
			if (err == -EOPNOTSUPP)
				err = -ENOIOCTLCMD;
		}
	}
	return err;
@@ -349,8 +345,6 @@ int ioctl_fsgetxattr(struct file *file, void __user *argp)
	int err;

	err = vfs_fileattr_get(file->f_path.dentry, &fa);
	if (err == -EOPNOTSUPP)
		err = -ENOIOCTLCMD;
	if (!err)
		err = copy_fsxattr_to_user(&fa, argp);

@@ -371,8 +365,6 @@ int ioctl_fssetxattr(struct file *file, void __user *argp)
		if (!err) {
			err = vfs_fileattr_set(idmap, dentry, &fa);
			mnt_drop_write_file(file);
			if (err == -EOPNOTSUPP)
				err = -ENOIOCTLCMD;
		}
	}
	return err;
@@ -424,6 +416,8 @@ SYSCALL_DEFINE5(file_getattr, int, dfd, const char __user *, filename,
	}

	error = vfs_fileattr_get(filepath.dentry, &fa);
	if (error == -ENOIOCTLCMD || error == -ENOTTY)
		error = -EOPNOTSUPP;
	if (error)
		return error;

@@ -491,6 +485,8 @@ SYSCALL_DEFINE5(file_setattr, int, dfd, const char __user *, filename,
	if (!error) {
		error = vfs_fileattr_set(mnt_idmap(filepath.mnt),
					 filepath.dentry, &fa);
		if (error == -ENOIOCTLCMD || error == -ENOTTY)
			error = -EOPNOTSUPP;
		mnt_drop_write(filepath.mnt);
	}

Loading