On Sun, Feb 16, 2025 at 7:34 PM Eric Biggers <ebiggers@xxxxxxxxxx> wrote: > > On Sun, Feb 16, 2025 at 05:40:26PM +0100, Pali Rohár wrote: > > This allows to get or set FS_COMPR_FL and FS_ENCRYPT_FL bits via FS_IOC_FSGETXATTR/FS_IOC_FSSETXATTR API. > > > > Signed-off-by: Pali Rohár <pali@xxxxxxxxxx> > > Does this really allow setting FS_ENCRYPT_FL via FS_IOC_FSSETXATTR, and how does > this interact with the existing fscrypt support in ext4, f2fs, ubifs, and ceph > which use that flag? As far as I can tell, after fileattr_fill_xflags() call in ioctl_fssetxattr(), the call to ext4_fileattr_set() should behave exactly the same if it came some FS_IOC_FSSETXATTR or from FS_IOC_SETFLAGS. IOW, EXT4_FL_USER_MODIFIABLE mask will still apply. However, unlike the legacy API, we now have an opportunity to deal with EXT4_FL_USER_MODIFIABLE better than this: /* * chattr(1) grabs flags via GETFLAGS, modifies the result and * passes that to SETFLAGS. So we cannot easily make SETFLAGS * more restrictive than just silently masking off visible but * not settable flags as we always did. */ if we have the xflags_mask in the new API (not only the xflags) then chattr(1) can set EXT4_FL_USER_MODIFIABLE in xflags_mask ext4_fileattr_set() can verify that (xflags_mask & ~EXT4_FL_USER_MODIFIABLE == 0). However, Pali, this is an important point that your RFC did not follow - AFAICT, the current kernel code of ext4_fileattr_set() and xfs_fileattr_set() (and other fs) does not return any error for unknown xflags, it just ignores them. This is why a new ioctl pair FS_IOC_[GS]ETFSXATTR2 is needed IMO before adding support to ANY new xflags, whether they are mapped to existing flags like in this patch or are completely new xflags. Thanks, Amir.