Thread (8 messages) 8 messages, 3 authors, 2025-07-31

Re: [PATCH] lsm: simplify security_inode_copy_up_xattr()

From: Paul Moore <paul@paul-moore.com>
Date: 2025-07-29 15:09:12
Also in: lkml

On Tue, Jul 29, 2025 at 10:43 AM Casey Schaufler [off-list ref] wrote:
On 7/29/2025 2:09 AM, Tianjia Zhang wrote:
quoted
The implementation of function security_inode_copy_up_xattr can be
simplified to directly call call_int_hook().

Signed-off-by: Tianjia Zhang <redacted>
---
 security/security.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/security/security.c b/security/security.c
index 596d41818577..a5c2e5a8009f 100644
--- a/security/security.c
+++ b/security/security.c
@@ -2774,13 +2774,7 @@ EXPORT_SYMBOL(security_inode_copy_up);
  */
 int security_inode_copy_up_xattr(struct dentry *src, const char *name)
 {
-     int rc;
-
-     rc = call_int_hook(inode_copy_up_xattr, src, name);
-     if (rc != LSM_RET_DEFAULT(inode_copy_up_xattr))
-             return rc;
-
-     return LSM_RET_DEFAULT(inode_copy_up_xattr);
+     return call_int_hook(inode_copy_up_xattr, src, name);
Both the existing code and the proposed change are incorrect.
If two LSMs supply the hook, and the first does not recognize
the attribute, the second, which might recognize the attribute,
will not be called. As SELinux and EVM both supply this hook
there may be a real problem here.
It appears that Smack also supplies a inode_copy_up_xattr() callback
via smack_inode_copy_up_xattr().

Someone should double check this logic, but looking at it very
quickly, it would appear that LSM framework should run the individual
LSM callbacks in order so long as they return -EOPNOTSUPP, if they do
not return -EOPNOTSUPP, the return value should be returned to the
caller without executing any further callbacks.  As a default return
value, or if all of the LSM callbacks succeed with -EOPNOTSUPP, the
hook should return -EOPNOTSUPP.

Tianjia Zhang, would you be able to develop and test a patch for this?

-- 
paul-moore.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help