On Fri, Mar 01, 2024 at 10:19:13AM +0100, Roberto Sassu wrote: > On Wed, 2024-02-21 at 15:24 -0600, Seth Forshee (DigitalOcean) wrote: > > Support the new fscaps security hooks by converting the vfs_caps to raw > > xattr data and then handling them the same as other xattrs. > > Hi Seth > > I started looking at this patch set. > > The first question I have is if you are also going to update libcap > (and also tar, I guess), since both deal with the raw xattr. There are no changes needed for userspace; it will still deal with raw xattrs. As I mentioned in the cover letter, capabilities tests from libcap2, libcap-ng, ltp, and xfstests all pass against this sereies. That's with no modifications to userspace. > From IMA/EVM perspective (Mimi will add on that), I guess it is > important that files with a signature/HMAC continue to be accessible > after applying this patch set. > > Looking at the code, it seems the case (if I understood correctly, > vfs_getxattr_alloc() is still allowed). So this is something that would change based on Christian's request to stop using the xattr handlers entirely for fscaps as was done for acls. I see how this would impact EVM, but we should be able to deal with it. I am a little curious now about this code in evm_calc_hmac_or_hash(): size = vfs_getxattr_alloc(&nop_mnt_idmap, dentry, xattr->name, &xattr_value, xattr_size, GFP_NOFS); if (size == -ENOMEM) { error = -ENOMEM; goto out; } if (size < 0) continue; user_space_size = vfs_getxattr(&nop_mnt_idmap, dentry, xattr->name, NULL, 0); if (user_space_size != size) pr_debug("file %s: xattr %s size mismatch (kernel: %d, user: %d)\n", dentry->d_name.name, xattr->name, size, user_space_size); Because with the current fscaps code you actually could end up getting different sizes from these two interfaces, as vfs_getxattr_alloc() reads the xattr directly from disk but vfs_getxattr() goes through cap_inode_getsecurity(), which may do conversion between v2 and v3 formats which are different sizes. Thanks, Seth