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.

fs: make vfs_fileattr_[get|set] return -EOPNOTSUPP

Future patches will add new syscalls which use these functions. As
this interface won't be used for ioctls only, the EOPNOSUPP is more
appropriate return code.

This patch converts return code from ENOIOCTLCMD to EOPNOSUPP for
vfs_fileattr_get and vfs_fileattr_set. To save old behavior translate
EOPNOSUPP back for current users - overlayfs, encryptfs and fs/ioctl.c.

Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
Link: https://lore.kernel.org/20250630-xattrat-syscall-v6-4-c4e3bc35227b@kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>

authored by

Andrey Albershteyn and committed by
Christian Brauner
474b155a bd14e462

+16 -7
+10 -2
fs/file_attr.c
··· 80 80 int error; 81 81 82 82 if (!inode->i_op->fileattr_get) 83 - return -ENOIOCTLCMD; 83 + return -EOPNOTSUPP; 84 84 85 85 error = security_inode_file_getattr(dentry, fa); 86 86 if (error) ··· 230 230 int err; 231 231 232 232 if (!inode->i_op->fileattr_set) 233 - return -ENOIOCTLCMD; 233 + return -EOPNOTSUPP; 234 234 235 235 if (!inode_owner_or_capable(idmap, inode)) 236 236 return -EPERM; ··· 272 272 int err; 273 273 274 274 err = vfs_fileattr_get(file->f_path.dentry, &fa); 275 + if (err == -EOPNOTSUPP) 276 + err = -ENOIOCTLCMD; 275 277 if (!err) 276 278 err = put_user(fa.flags, argp); 277 279 return err; ··· 295 293 fileattr_fill_flags(&fa, flags); 296 294 err = vfs_fileattr_set(idmap, dentry, &fa); 297 295 mnt_drop_write_file(file); 296 + if (err == -EOPNOTSUPP) 297 + err = -ENOIOCTLCMD; 298 298 } 299 299 } 300 300 return err; ··· 309 305 int err; 310 306 311 307 err = vfs_fileattr_get(file->f_path.dentry, &fa); 308 + if (err == -EOPNOTSUPP) 309 + err = -ENOIOCTLCMD; 312 310 if (!err) 313 311 err = copy_fsxattr_to_user(&fa, argp); 314 312 ··· 331 325 if (!err) { 332 326 err = vfs_fileattr_set(idmap, dentry, &fa); 333 327 mnt_drop_write_file(file); 328 + if (err == -EOPNOTSUPP) 329 + err = -ENOIOCTLCMD; 334 330 } 335 331 } 336 332 return err;
+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; 539 541 return err; 540 542 } 541 543 ··· 574 572 cleanup: 575 573 fuse_priv_ioctl_cleanup(inode, ff); 576 574 575 + if (err == -ENOTTY) 576 + err = -EOPNOTSUPP; 577 577 return err; 578 578 }
+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 == -ENOTTY || err == -EINVAL) 181 + if (err == -EOPNOTSUPP || err == -EINVAL) 182 182 return 0; 183 183 pr_warn("failed to retrieve lower fileattr (%pd2, err=%i)\n", 184 184 old->dentry, err);
+1 -4
fs/overlayfs/inode.c
··· 720 720 if (err) 721 721 return err; 722 722 723 - err = vfs_fileattr_get(realpath->dentry, fa); 724 - if (err == -ENOIOCTLCMD) 725 - err = -ENOTTY; 726 - return err; 723 + return vfs_fileattr_get(realpath->dentry, fa); 727 724 } 728 725 729 726 int ovl_fileattr_get(struct dentry *dentry, struct fileattr *fa)