diff options
| author | David Howells <dhowells@redhat.com> | 2012-10-22 15:05:48 +0100 | 
|---|---|---|
| committer | Rusty Russell <rusty@rustcorp.com.au> | 2012-12-05 11:27:24 +1030 | 
| commit | 12e130b04580532aa099893158aa2776b321ae7f (patch) | |
| tree | b7a6ed562d7293aa1e5b584e109a9669db253f49 | |
| parent | df2fc246c8ee8b6067af1fa55d3bc23107457f61 (diff) | |
MODSIGN: Don't use enum-type bitfields in module signature info block
Don't use enum-type bitfields in the module signature info block as we can't be
certain how the compiler will handle them.  As I understand it, it is arch
dependent, and it is possible for the compiler to rearrange them based on
endianness and to insert a byte of padding to pad the three enums out to four
bytes.
Instead use u8 fields for these, which the compiler should emit in the right
order without padding.
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
| -rw-r--r-- | kernel/module_signing.c | 14 | 
1 files changed, 7 insertions, 7 deletions
| diff --git a/kernel/module_signing.c b/kernel/module_signing.c index ea1b1df5dbb0..f2970bddc5ea 100644 --- a/kernel/module_signing.c +++ b/kernel/module_signing.c @@ -27,13 +27,13 @@   *	- Information block   */  struct module_signature { -	enum pkey_algo		algo : 8;	/* Public-key crypto algorithm */ -	enum pkey_hash_algo	hash : 8;	/* Digest algorithm */ -	enum pkey_id_type	id_type : 8;	/* Key identifier type */ -	u8			signer_len;	/* Length of signer's name */ -	u8			key_id_len;	/* Length of key identifier */ -	u8			__pad[3]; -	__be32			sig_len;	/* Length of signature data */ +	u8	algo;		/* Public-key crypto algorithm [enum pkey_algo] */ +	u8	hash;		/* Digest algorithm [enum pkey_hash_algo] */ +	u8	id_type;	/* Key identifier type [enum pkey_id_type] */ +	u8	signer_len;	/* Length of signer's name */ +	u8	key_id_len;	/* Length of key identifier */ +	u8	__pad[3]; +	__be32	sig_len;	/* Length of signature data */  };  /* | 
