module: replace the existing LSM hook in init_module
Both the init_module and finit_module syscalls call either directly or indirectly the security_kernel_read_file LSM hook. This patch replaces the direct call in init_module with a call to the new security_kernel_load_data hook and makes the corresponding changes in SELinux, LoadPin, and IMA. Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com> Cc: Jeff Vander Stoep <jeffv@google.com> Cc: Casey Schaufler <casey@schaufler-ca.com> Cc: Kees Cook <keescook@chromium.org> Acked-by: Jessica Yu <jeyu@kernel.org> Acked-by: Paul Moore <paul@paul-moore.com> Acked-by: Kees Cook <keescook@chromium.org> Signed-off-by: James Morris <james.morris@microsoft.com>
This commit is contained in:
@@ -429,16 +429,6 @@ void ima_post_path_mknod(struct dentry *dentry)
|
||||
*/
|
||||
int ima_read_file(struct file *file, enum kernel_read_file_id read_id)
|
||||
{
|
||||
bool sig_enforce = is_module_sig_enforced();
|
||||
|
||||
if (!file && read_id == READING_MODULE) {
|
||||
if (!sig_enforce && (ima_appraise & IMA_APPRAISE_MODULES) &&
|
||||
(ima_appraise & IMA_APPRAISE_ENFORCE)) {
|
||||
pr_err("impossible to appraise a module without a file descriptor. sig_enforce kernel parameter might help\n");
|
||||
return -EACCES; /* INTEGRITY_UNKNOWN */
|
||||
}
|
||||
return 0; /* We rely on module signature checking */
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -479,9 +469,6 @@ int ima_post_read_file(struct file *file, void *buf, loff_t size,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!file && read_id == READING_MODULE) /* MODULE_SIG_FORCE enabled */
|
||||
return 0;
|
||||
|
||||
/* permit signed certs */
|
||||
if (!file && read_id == READING_X509_CERTIFICATE)
|
||||
return 0;
|
||||
@@ -510,6 +497,8 @@ int ima_post_read_file(struct file *file, void *buf, loff_t size,
|
||||
*/
|
||||
int ima_load_data(enum kernel_load_data_id id)
|
||||
{
|
||||
bool sig_enforce;
|
||||
|
||||
if ((ima_appraise & IMA_APPRAISE_ENFORCE) != IMA_APPRAISE_ENFORCE)
|
||||
return 0;
|
||||
|
||||
@@ -525,6 +514,14 @@ int ima_load_data(enum kernel_load_data_id id)
|
||||
pr_err("Prevent firmware sysfs fallback loading.\n");
|
||||
return -EACCES; /* INTEGRITY_UNKNOWN */
|
||||
}
|
||||
break;
|
||||
case LOADING_MODULE:
|
||||
sig_enforce = is_module_sig_enforced();
|
||||
|
||||
if (!sig_enforce && (ima_appraise & IMA_APPRAISE_MODULES)) {
|
||||
pr_err("impossible to appraise a module without a file descriptor. sig_enforce kernel parameter might help\n");
|
||||
return -EACCES; /* INTEGRITY_UNKNOWN */
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user