From: Tobias Stoeckmann Date: Sat, 14 Feb 2015 23:35:47 +0000 (+0100) Subject: Fix out of bounds signature access with 32 bit off_t X-Git-Tag: v20~35 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=40ef6e69bb13522b961767d81f44aec0e83a7462;p=platform%2Fupstream%2Fkmod.git Fix out of bounds signature access with 32 bit off_t If kmod has been configured with --disable-largefile on a 32 bit system, off_t will be 32 bit. In that case, the parsed sig_len can bypass a validation check (it's _unsigned_ 32 bit). Due to the unlikeliness of people using --disable-largefile, this is a mere validation fix. With an explicit signed 64 bit cast, there is no binary change for 99.9% of Linux systems out there. ;) --- diff --git a/libkmod/libkmod-signature.c b/libkmod/libkmod-signature.c index 5ed5973..2260cc6 100644 --- a/libkmod/libkmod-signature.c +++ b/libkmod/libkmod-signature.c @@ -124,7 +124,7 @@ bool kmod_module_signature_info(const struct kmod_file *file, struct kmod_signat modsig->id_type >= PKEY_ID_TYPE__LAST) return false; sig_len = be32toh(get_unaligned(&modsig->sig_len)); - if (size < (off_t)(modsig->signer_len + modsig->key_id_len + sig_len)) + if (size < (int64_t)(modsig->signer_len + modsig->key_id_len + sig_len)) return false; size -= modsig->key_id_len + sig_len;