Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+22 -28
+1 -1
fs/coredump.c
··· 1468 1468 ssize_t retval; 1469 1469 char old_core_pattern[CORENAME_MAX_SIZE]; 1470 1470 1471 - if (write) 1471 + if (!write) 1472 1472 return proc_dostring(table, write, buffer, lenp, ppos); 1473 1473 1474 1474 retval = strscpy(old_core_pattern, core_pattern, CORENAME_MAX_SIZE);
+1 -1
fs/dax.c
··· 1725 1725 if (iov_iter_rw(iter) == WRITE) { 1726 1726 lockdep_assert_held_write(&iomi.inode->i_rwsem); 1727 1727 iomi.flags |= IOMAP_WRITE; 1728 - } else { 1728 + } else if (!sb_rdonly(iomi.inode->i_sb)) { 1729 1729 lockdep_assert_held(&iomi.inode->i_rwsem); 1730 1730 } 1731 1731
+2
fs/dcache.c
··· 2557 2557 spin_lock(&parent->d_lock); 2558 2558 new->d_parent = dget_dlock(parent); 2559 2559 hlist_add_head(&new->d_sib, &parent->d_children); 2560 + if (parent->d_flags & DCACHE_DISCONNECTED) 2561 + new->d_flags |= DCACHE_DISCONNECTED; 2560 2562 spin_unlock(&parent->d_lock); 2561 2563 2562 2564 retry:
+1 -1
fs/exec.c
··· 2048 2048 { 2049 2049 int error = proc_dointvec_minmax(table, write, buffer, lenp, ppos); 2050 2050 2051 - if (!error && !write) 2051 + if (!error && write) 2052 2052 validate_coredump_safety(); 2053 2053 return error; 2054 2054 }
+6 -10
fs/file_attr.c
··· 84 84 int error; 85 85 86 86 if (!inode->i_op->fileattr_get) 87 - return -EOPNOTSUPP; 87 + return -ENOIOCTLCMD; 88 88 89 89 error = security_inode_file_getattr(dentry, fa); 90 90 if (error) ··· 270 270 int err; 271 271 272 272 if (!inode->i_op->fileattr_set) 273 - return -EOPNOTSUPP; 273 + return -ENOIOCTLCMD; 274 274 275 275 if (!inode_owner_or_capable(idmap, inode)) 276 276 return -EPERM; ··· 312 312 int err; 313 313 314 314 err = vfs_fileattr_get(file->f_path.dentry, &fa); 315 - if (err == -EOPNOTSUPP) 316 - err = -ENOIOCTLCMD; 317 315 if (!err) 318 316 err = put_user(fa.flags, argp); 319 317 return err; ··· 333 335 fileattr_fill_flags(&fa, flags); 334 336 err = vfs_fileattr_set(idmap, dentry, &fa); 335 337 mnt_drop_write_file(file); 336 - if (err == -EOPNOTSUPP) 337 - err = -ENOIOCTLCMD; 338 338 } 339 339 } 340 340 return err; ··· 345 349 int err; 346 350 347 351 err = vfs_fileattr_get(file->f_path.dentry, &fa); 348 - if (err == -EOPNOTSUPP) 349 - err = -ENOIOCTLCMD; 350 352 if (!err) 351 353 err = copy_fsxattr_to_user(&fa, argp); 352 354 ··· 365 371 if (!err) { 366 372 err = vfs_fileattr_set(idmap, dentry, &fa); 367 373 mnt_drop_write_file(file); 368 - if (err == -EOPNOTSUPP) 369 - err = -ENOIOCTLCMD; 370 374 } 371 375 } 372 376 return err; ··· 416 424 } 417 425 418 426 error = vfs_fileattr_get(filepath.dentry, &fa); 427 + if (error == -ENOIOCTLCMD || error == -ENOTTY) 428 + error = -EOPNOTSUPP; 419 429 if (error) 420 430 return error; 421 431 ··· 485 491 if (!error) { 486 492 error = vfs_fileattr_set(mnt_idmap(filepath.mnt), 487 493 filepath.dentry, &fa); 494 + if (error == -ENOIOCTLCMD || error == -ENOTTY) 495 + error = -EOPNOTSUPP; 488 496 mnt_drop_write(filepath.mnt); 489 497 } 490 498
+1 -1
fs/file_table.c
··· 192 192 f->f_sb_err = 0; 193 193 194 194 /* 195 - * We're SLAB_TYPESAFE_BY_RCU so initialize f_count last. While 195 + * We're SLAB_TYPESAFE_BY_RCU so initialize f_ref last. While 196 196 * fget-rcu pattern users need to be able to handle spurious 197 197 * refcount bumps we should reinitialize the reused file first. 198 198 */
-4
fs/fuse/ioctl.c
··· 536 536 cleanup: 537 537 fuse_priv_ioctl_cleanup(inode, ff); 538 538 539 - if (err == -ENOTTY) 540 - err = -EOPNOTSUPP; 541 539 return err; 542 540 } 543 541 ··· 572 574 cleanup: 573 575 fuse_priv_ioctl_cleanup(inode, ff); 574 576 575 - if (err == -ENOTTY) 576 - err = -EOPNOTSUPP; 577 577 return err; 578 578 }
+3 -1
fs/nsfs.c
··· 490 490 491 491 VFS_WARN_ON_ONCE(ns->ns_id != fid->ns_id); 492 492 VFS_WARN_ON_ONCE(ns->ns_type != fid->ns_type); 493 - VFS_WARN_ON_ONCE(ns->inum != fid->ns_inum); 493 + 494 + if (ns->inum != fid->ns_inum) 495 + return NULL; 494 496 495 497 if (!__ns_ref_get(ns)) 496 498 return NULL;
+1 -1
fs/overlayfs/copy_up.c
··· 178 178 err = ovl_real_fileattr_get(old, &oldfa); 179 179 if (err) { 180 180 /* Ntfs-3g returns -EINVAL for "no fileattr support" */ 181 - if (err == -EOPNOTSUPP || err == -EINVAL) 181 + if (err == -ENOTTY || err == -EINVAL) 182 182 return 0; 183 183 pr_warn("failed to retrieve lower fileattr (%pd2, err=%i)\n", 184 184 old->dentry, err);
-5
fs/overlayfs/file.c
··· 369 369 if (!ovl_should_sync(OVL_FS(inode->i_sb))) 370 370 ifl &= ~(IOCB_DSYNC | IOCB_SYNC); 371 371 372 - /* 373 - * Overlayfs doesn't support deferred completions, don't copy 374 - * this property in case it is set by the issuer. 375 - */ 376 - ifl &= ~IOCB_DIO_CALLER_COMP; 377 372 ret = backing_file_write_iter(realfile, iter, iocb, ifl, &ctx); 378 373 379 374 out_unlock:
+4 -1
fs/overlayfs/inode.c
··· 720 720 if (err) 721 721 return err; 722 722 723 - return vfs_fileattr_get(realpath->dentry, fa); 723 + err = vfs_fileattr_get(realpath->dentry, fa); 724 + if (err == -ENOIOCTLCMD) 725 + err = -ENOTTY; 726 + return err; 724 727 } 725 728 726 729 int ovl_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
+2 -2
rust/kernel/fs/file.rs
··· 448 448 } 449 449 } 450 450 451 - /// Represents the `EBADF` error code. 451 + /// Represents the [`EBADF`] error code. 452 452 /// 453 - /// Used for methods that can only fail with `EBADF`. 453 + /// Used for methods that can only fail with [`EBADF`]. 454 454 #[derive(Copy, Clone, Eq, PartialEq)] 455 455 pub struct BadFdError; 456 456