Skip to content

Commit 3dcbad5

Browse files
Dmitry KasatkinMimi Zohar
authored andcommitted
evm: properly handle INTEGRITY_NOXATTRS EVM status
Unless an LSM labels a file during d_instantiate(), newly created files are not labeled with an initial security.evm xattr, until the file closes. EVM, before allowing a protected, security xattr to be written, verifies the existing 'security.evm' value is good. For newly created files without a security.evm label, this verification prevents writing any protected, security xattrs, until the file closes. Following is the example when this happens: fd = open("foo", O_CREAT | O_WRONLY, 0644); setxattr("foo", "security.SMACK64", value, sizeof(value), 0); close(fd); While INTEGRITY_NOXATTRS status is handled in other places, such as evm_inode_setattr(), it does not handle it in all cases in evm_protect_xattr(). By limiting the use of INTEGRITY_NOXATTRS to newly created files, we can now allow setting "protected" xattrs. Changelog: - limit the use of INTEGRITY_NOXATTRS to IMA identified new files Signed-off-by: Dmitry Kasatkin <d.kasatkin@samsung.com> Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com> Cc: <stable@vger.kernel.org> 3.14+
1 parent b151d6b commit 3dcbad5

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

security/integrity/evm/evm_main.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,13 @@ static int evm_protect_xattr(struct dentry *dentry, const char *xattr_name,
285285
goto out;
286286
}
287287
evm_status = evm_verify_current_integrity(dentry);
288+
if (evm_status == INTEGRITY_NOXATTRS) {
289+
struct integrity_iint_cache *iint;
290+
291+
iint = integrity_iint_find(dentry->d_inode);
292+
if (iint && (iint->flags & IMA_NEW_FILE))
293+
return 0;
294+
}
288295
out:
289296
if (evm_status != INTEGRITY_PASS)
290297
integrity_audit_msg(AUDIT_INTEGRITY_METADATA, dentry->d_inode,

0 commit comments

Comments
 (0)