libkmod: Fix unaligned access

From Jan Engelhardt:

	Program received signal SIGBUS, Bus error.
	[Switching to process 11100]
	0x00035278 in kmod_module_signature_info (file=0x4eeb8, sig_info=0xffffc254)
	    at libkmod/libkmod-signature.c:124
	124             sig_len = be32toh(modsig->sig_len);
	(gdb) p modsig
	$1 = (const struct module_signature *) 0xf7dfe143

modsig->sig_len can be unaligned if modsig is unaligned, so the padding
in the struct has no effect since we are mapping it to the mem buffer.
This commit is contained in:
Lucas De Marchi 2014-03-24 14:33:50 -03:00
parent 6d59d9d086
commit f87dc57a71

View File

@ -121,7 +121,7 @@ bool kmod_module_signature_info(const struct kmod_file *file, struct kmod_signat
modsig->hash >= PKEY_HASH__LAST ||
modsig->id_type >= PKEY_ID_TYPE__LAST)
return false;
sig_len = be32toh(modsig->sig_len);
sig_len = be32toh(get_unaligned(&modsig->sig_len));
if (size < (off_t)(modsig->signer_len + modsig->key_id_len + sig_len))
return false;