diff options
| author | David S. Miller <davem@davemloft.net> | 2012-11-10 18:32:51 -0500 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2012-11-10 18:32:51 -0500 | 
| commit | d4185bbf62a5d8d777ee445db1581beb17882a07 (patch) | |
| tree | 024b0badbd7c970b1983be6d8c345cc4a290cb31 /kernel/module.c | |
| parent | c075b13098b399dc565b4d53f42047a8d40ed3ba (diff) | |
| parent | a375413311b39005ef281bfd71ae8f4e3df22e97 (diff) | |
| download | olio-linux-3.10-d4185bbf62a5d8d777ee445db1581beb17882a07.tar.xz olio-linux-3.10-d4185bbf62a5d8d777ee445db1581beb17882a07.zip  | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
	drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
Minor conflict between the BCM_CNIC define removal in net-next
and a bug fix added to net.  Based upon a conflict resolution
patch posted by Stephen Rothwell.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/module.c')
| -rw-r--r-- | kernel/module.c | 24 | 
1 files changed, 8 insertions, 16 deletions
diff --git a/kernel/module.c b/kernel/module.c index 0e2da8695f8..6085f5ef88e 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -2421,25 +2421,17 @@ static inline void kmemleak_load_module(const struct module *mod,  #ifdef CONFIG_MODULE_SIG  static int module_sig_check(struct load_info *info, -			    const void *mod, unsigned long *len) +			    const void *mod, unsigned long *_len)  {  	int err = -ENOKEY; -	const unsigned long markerlen = sizeof(MODULE_SIG_STRING) - 1; -	const void *p = mod, *end = mod + *len; +	unsigned long markerlen = sizeof(MODULE_SIG_STRING) - 1; +	unsigned long len = *_len; -	/* Poor man's memmem. */ -	while ((p = memchr(p, MODULE_SIG_STRING[0], end - p))) { -		if (p + markerlen > end) -			break; - -		if (memcmp(p, MODULE_SIG_STRING, markerlen) == 0) { -			const void *sig = p + markerlen; -			/* Truncate module up to signature. */ -			*len = p - mod; -			err = mod_verify_sig(mod, *len, sig, end - sig); -			break; -		} -		p++; +	if (len > markerlen && +	    memcmp(mod + len - markerlen, MODULE_SIG_STRING, markerlen) == 0) { +		/* We truncate the module to discard the signature */ +		*_len -= markerlen; +		err = mod_verify_sig(mod, _len);  	}  	if (!err) {  |