RE: [PATCH v5 09/12] evm: Allow setxattr() and setattr() for unmodified metadata
From: Roberto Sassu <roberto.sassu@huawei.com>
Date: 2021-05-03 14:48:55
Also in:
linux-fsdevel, linux-integrity, lkml
From: Mimi Zohar [mailto:zohar@linux.ibm.com] Sent: Monday, May 3, 2021 3:00 PM On Wed, 2021-04-07 at 12:52 +0200, Roberto Sassu wrote:quoted
diff --git a/security/integrity/evm/evm_main.cb/security/integrity/evm/evm_main.cquoted
@@ -389,6 +473,11 @@ static int evm_protect_xattr(structuser_namespace *mnt_userns,quoted
if (evm_status == INTEGRITY_FAIL_IMMUTABLE) return 0; + if (evm_status == INTEGRITY_PASS_IMMUTABLE && + !evm_xattr_change(mnt_userns, dentry, xattr_name, xattr_value, + xattr_value_len)) + return 0; +If the purpose of evm_protect_xattr() is to prevent allowing an invalid security.evm xattr from being re-calculated and updated, making it valid, INTEGRITY_PASS_IMMUTABLE shouldn't need to be conditional. Any time there is an attr or xattr change, including setting it to the existing value, the status flag should be reset.
The status is always reset if evm_protect_xattr() returns 0. This does not change. Not making INTEGRITY_PASS_IMMUTABLE conditional would cause issues. Suppose that the status is INTEGRITY_FAIL. Writing the same xattr would cause evm_protect_xattr() to return 0 and the HMAC to be updated.
I'm wondering if making INTEGRITY_PASS_IMMUTABLE conditional would prevent the file from being resigned.
INTEGRITY_FAIL_IMMUTABLE should be enough to continue the operation. Roberto HUAWEI TECHNOLOGIES Duesseldorf GmbH, HRB 56063 Managing Director: Li Peng, Li Jian, Shi Yanli
quoted
if (evm_status != INTEGRITY_PASS) integrity_audit_msg(AUDIT_INTEGRITY_METADATA,d_backing_inode(dentry),quoted
dentry->d_name.name,"appraise_metadata", This would then be updated to if not INTEGRITY_PASS or INTEGRITY_PASS_IMMUTABLE. The subsequent "return" would need to be updated as well. thanks, Mimi