From: Lucas De Marchi Date: Mon, 24 Mar 2014 17:33:50 +0000 (-0300) Subject: libkmod: Fix unaligned access X-Git-Tag: v17~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f87dc57a7189bea4777fd645576a7ab1b71e4b96;p=thirdparty%2Fkmod.git 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. --- diff --git a/libkmod/libkmod-signature.c b/libkmod/libkmod-signature.c index 6237ab78..a3ac15e6 100644 --- a/libkmod/libkmod-signature.c +++ b/libkmod/libkmod-signature.c @@ -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;