From: Song Liu <song@kernel.org>
To: linux-fsdevel@vger.kernel.org, linux-integrity@vger.kernel.org,
linux-security-module@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: roberto.sassu@huawei.com, dmitry.kasatkin@gmail.com,
eric.snowberg@oracle.com, paul@paul-moore.com, jmorris@namei.org,
serge@hallyn.com, kernel-team@meta.com, brauner@kernel.org,
jack@suse.cz, viro@zeniv.linux.org.uk, Song Liu <song@kernel.org>
Subject: [RFC 2/2] evm: Add kernel parameter to disable EVM
Date: Tue, 17 Dec 2024 12:25:25 -0800 [thread overview]
Message-ID: <20241217202525.1802109-3-song@kernel.org> (raw)
In-Reply-To: <20241217202525.1802109-1-song@kernel.org>
This patch provides kernel parameter 'evm=' that disables EVM.
This will reduce memory consumption by the EVM when it is not needed.
Specifically, this saves one evm_iint_cache per inode in the system.
Originally-by: Dmitry Kasatkin <dmitry.kasatkin@gmail.com>
Signed-off-by: Song Liu <song@kernel.org>
---
security/integrity/evm/evm.h | 6 ++++++
security/integrity/evm/evm_main.c | 22 ++++++++++++++--------
security/integrity/evm/evm_secfs.c | 3 ++-
3 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/security/integrity/evm/evm.h b/security/integrity/evm/evm.h
index 51aba5a54275..64428c35e4cf 100644
--- a/security/integrity/evm/evm.h
+++ b/security/integrity/evm/evm.h
@@ -17,6 +17,10 @@
#include "../integrity.h"
+#define EVM_MODE_OFF 0
+#define EVM_MODE_ON 1
+#define EVM_MODE_FIX 2
+
#define EVM_INIT_HMAC 0x0001
#define EVM_INIT_X509 0x0002
#define EVM_ALLOW_METADATA_WRITES 0x0004
@@ -26,6 +30,8 @@
#define EVM_INIT_MASK (EVM_INIT_HMAC | EVM_INIT_X509 | EVM_SETUP_COMPLETE | \
EVM_ALLOW_METADATA_WRITES)
+extern int evm_mode;
+
struct xattr_list {
struct list_head list;
char *name;
diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c
index 377e57e9084f..738c38f8190d 100644
--- a/security/integrity/evm/evm_main.c
+++ b/security/integrity/evm/evm_main.c
@@ -72,17 +72,19 @@ static struct xattr_list evm_config_default_xattrnames[] = {
LIST_HEAD(evm_config_xattrnames);
-static int evm_fixmode __ro_after_init;
-static int __init evm_set_fixmode(char *str)
+int evm_mode __ro_after_init = EVM_MODE_ON;
+
+static int __init evm_setup(char *str)
{
- if (strncmp(str, "fix", 3) == 0)
- evm_fixmode = 1;
+ if (strncmp(str, "off", 3) == 0)
+ evm_mode = EVM_MODE_OFF;
+ else if (strncmp(str, "fix", 3) == 0)
+ evm_mode = EVM_MODE_FIX;
else
pr_err("invalid \"%s\" mode", str);
-
- return 1;
+ return 0;
}
-__setup("evm=", evm_set_fixmode);
+__setup("evm=", evm_setup);
static void __init evm_init_config(void)
{
@@ -441,7 +443,7 @@ static enum integrity_status evm_verify_current_integrity(struct dentry *dentry)
{
struct inode *inode = d_backing_inode(dentry);
- if (!evm_key_loaded() || !S_ISREG(inode->i_mode) || evm_fixmode)
+ if (!evm_key_loaded() || !S_ISREG(inode->i_mode) || evm_mode == EVM_MODE_FIX)
return INTEGRITY_PASS;
return evm_verify_hmac(dentry, NULL, NULL, 0);
}
@@ -1117,6 +1119,9 @@ static int __init init_evm(void)
int error;
struct list_head *pos, *q;
+ if (evm_mode == EVM_MODE_OFF)
+ return 0;
+
evm_init_config();
error = integrity_init_keyring(INTEGRITY_KEYRING_EVM);
@@ -1178,6 +1183,7 @@ DEFINE_LSM(evm) = {
.name = "evm",
.init = init_evm_lsm,
.order = LSM_ORDER_LAST,
+ .enabled = &evm_mode,
.blobs = &evm_blob_sizes,
};
diff --git a/security/integrity/evm/evm_secfs.c b/security/integrity/evm/evm_secfs.c
index 9b907c2fee60..65f896cb838e 100644
--- a/security/integrity/evm/evm_secfs.c
+++ b/security/integrity/evm/evm_secfs.c
@@ -69,7 +69,8 @@ static ssize_t evm_write_key(struct file *file, const char __user *buf,
unsigned int i;
int ret;
- if (!capable(CAP_SYS_ADMIN) || (evm_initialized & EVM_SETUP_COMPLETE))
+ if (!capable(CAP_SYS_ADMIN) || (evm_initialized & EVM_SETUP_COMPLETE) ||
+ evm_mode == EVM_MODE_OFF)
return -EPERM;
ret = kstrtouint_from_user(buf, count, 0, &i);
--
2.43.5
next prev parent reply other threads:[~2024-12-17 20:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-17 20:25 [RFC 0/2] ima: evm: Add kernel cmdline options to disable IMA/EVM Song Liu
2024-12-17 20:25 ` [RFC 1/2] ima: Add kernel parameter to disable IMA Song Liu
2024-12-17 20:25 ` Song Liu [this message]
2024-12-17 21:29 ` [RFC 0/2] ima: evm: Add kernel cmdline options to disable IMA/EVM Casey Schaufler
2024-12-17 21:59 ` Paul Moore
2024-12-17 22:04 ` Song Liu
2024-12-17 22:47 ` Song Liu
2024-12-17 23:16 ` Paul Moore
2024-12-17 23:33 ` Song Liu
2024-12-18 6:41 ` Song Liu
2024-12-18 16:42 ` Casey Schaufler
2024-12-18 16:48 ` Song Liu
2024-12-17 22:02 ` Song Liu
2024-12-18 11:02 ` Mimi Zohar
2024-12-18 17:07 ` Song Liu
2024-12-19 15:40 ` Roberto Sassu
2024-12-19 17:46 ` Song Liu
2024-12-19 18:18 ` Mimi Zohar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241217202525.1802109-3-song@kernel.org \
--to=song@kernel.org \
--cc=brauner@kernel.org \
--cc=dmitry.kasatkin@gmail.com \
--cc=eric.snowberg@oracle.com \
--cc=jack@suse.cz \
--cc=jmorris@namei.org \
--cc=kernel-team@meta.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=paul@paul-moore.com \
--cc=roberto.sassu@huawei.com \
--cc=serge@hallyn.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).