forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MODSIGN: Export module signature definitions
IMA will use the module_signature format for append signatures, so export the relevant definitions and factor out the code which verifies that the appended signature trailer is valid. Also, create a CONFIG_MODULE_SIG_FORMAT option so that IMA can select it and be able to use mod_check_sig() without having to depend on either CONFIG_MODULE_SIG or CONFIG_MODULES. s390 duplicated the definition of struct module_signature so now they can use the new <linux/module_signature.h> header instead. Signed-off-by: Thiago Jung Bauermann <[email protected]> Acked-by: Jessica Yu <[email protected]> Reviewed-by: Philipp Rudo <[email protected]> Cc: Heiko Carstens <[email protected]> Signed-off-by: Mimi Zohar <[email protected]>
- Loading branch information
Showing
10 changed files
with
108 additions
and
77 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* SPDX-License-Identifier: GPL-2.0+ */ | ||
/* | ||
* Module signature handling. | ||
* | ||
* Copyright (C) 2012 Red Hat, Inc. All Rights Reserved. | ||
* Written by David Howells ([email protected]) | ||
*/ | ||
|
||
#ifndef _LINUX_MODULE_SIGNATURE_H | ||
#define _LINUX_MODULE_SIGNATURE_H | ||
|
||
/* In stripped ARM and x86-64 modules, ~ is surprisingly rare. */ | ||
#define MODULE_SIG_STRING "~Module signature appended~\n" | ||
|
||
enum pkey_id_type { | ||
PKEY_ID_PGP, /* OpenPGP generated key ID */ | ||
PKEY_ID_X509, /* X.509 arbitrary subjectKeyIdentifier */ | ||
PKEY_ID_PKCS7, /* Signature in PKCS#7 message */ | ||
}; | ||
|
||
/* | ||
* Module signature information block. | ||
* | ||
* The constituents of the signature section are, in order: | ||
* | ||
* - Signer's name | ||
* - Key identifier | ||
* - Signature data | ||
* - Information block | ||
*/ | ||
struct module_signature { | ||
u8 algo; /* Public-key crypto algorithm [0] */ | ||
u8 hash; /* Digest algorithm [0] */ | ||
u8 id_type; /* Key identifier type [PKEY_ID_PKCS7] */ | ||
u8 signer_len; /* Length of signer's name [0] */ | ||
u8 key_id_len; /* Length of key identifier [0] */ | ||
u8 __pad[3]; | ||
__be32 sig_len; /* Length of signature data */ | ||
}; | ||
|
||
int mod_check_sig(const struct module_signature *ms, size_t file_len, | ||
const char *name); | ||
|
||
#endif /* _LINUX_MODULE_SIGNATURE_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
// SPDX-License-Identifier: GPL-2.0+ | ||
/* | ||
* Module signature checker | ||
* | ||
* Copyright (C) 2012 Red Hat, Inc. All Rights Reserved. | ||
* Written by David Howells ([email protected]) | ||
*/ | ||
|
||
#include <linux/errno.h> | ||
#include <linux/printk.h> | ||
#include <linux/module_signature.h> | ||
#include <asm/byteorder.h> | ||
|
||
/** | ||
* mod_check_sig - check that the given signature is sane | ||
* | ||
* @ms: Signature to check. | ||
* @file_len: Size of the file to which @ms is appended. | ||
* @name: What is being checked. Used for error messages. | ||
*/ | ||
int mod_check_sig(const struct module_signature *ms, size_t file_len, | ||
const char *name) | ||
{ | ||
if (be32_to_cpu(ms->sig_len) >= file_len - sizeof(*ms)) | ||
return -EBADMSG; | ||
|
||
if (ms->id_type != PKEY_ID_PKCS7) { | ||
pr_err("%s: Module is not signed with expected PKCS#7 message\n", | ||
name); | ||
return -ENOPKG; | ||
} | ||
|
||
if (ms->algo != 0 || | ||
ms->hash != 0 || | ||
ms->signer_len != 0 || | ||
ms->key_id_len != 0 || | ||
ms->__pad[0] != 0 || | ||
ms->__pad[1] != 0 || | ||
ms->__pad[2] != 0) { | ||
pr_err("%s: PKCS#7 signature info has unexpected non-zero params\n", | ||
name); | ||
return -EBADMSG; | ||
} | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters