crypto/pkcs7_verify: Fix unaligned access in pkcs7_verify()
Subsystems (2)
PATCH 1/1 crypto/pkcs7_verify: Fix unaligned access in pkcs7_verify()
On sparc, we see unaligned access messages on each modprobe[-r]:
Kernel unaligned access at TPC[6ad9b4] pkcs7_verify [..] Kernel unaligned access at TPC[6a5484] crypto_shash_finup [..] Kernel unaligned access at TPC[6a5390] crypto_shash_update [..] Kernel unaligned access at TPC[10150308] sha1_sparc64_update [..] Kernel unaligned access at TPC[101501ac] __sha1_sparc64_update [..]
These ware triggered by mod_verify_sig() invocations of pkcs_verify(), and are are being caused by an unaligned desc at (sha1, digest_size is 0x14)
desc = digest + digest_size;
To fix this, pkcs7_verify needs to make sure that desc is pointing at an aligned value past the digest_size, and kzalloc appropriately, taking alignment values into consideration.
--- crypto/asymmetric_keys/pkcs7_verify.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
crypto/asymmetric_keys/pkcs7_verify.c +3 -2
@@ -49,11 +49,12 @@ static int pkcs7_digest(struct pkcs7_message *pkcs7, sinfo->sig.digest_size = digest_size =crypto_shash_digestsize (tfm); ret = -ENOMEM ; - digest =kzalloc (digest_size + desc_size,GFP_KERNEL ); + digest = kzalloc(ALIGN(digest_size, __alignof__(*desc)) + desc_size, +GFP_KERNEL );if (!digest) goto error_no_desc; - desc = digest + digest_size; + desc = PTR_ALIGN(digest + digest_size, __alignof__(*desc)); desc->tfm = tfm; desc->flags =CRYPTO_TFM_REQ_MAY_SLEEP ;
Signature · 1 line
1.7.1
Herbert Xu
maintainerQuoted 11 lines · Sowmini Varadhan
On sparc, we see unaligned access messages on each modprobe[-r]:
Kernel unaligned access at TPC[6ad9b4]
pkcs7_verify[..] Kernel unaligned access at TPC[6a5484]crypto_shash_finup[..] Kernel unaligned access at TPC[6a5390]crypto_shash_update[..] Kernel unaligned access at TPC[10150308]sha1_sparc64_update[..] Kernel unaligned access at TPC[101501ac]__sha1_sparc64_update[..]These ware triggered by
mod_verify_sig()invocations ofpkcs_verify(), and are are being caused by an unaligned desc at (sha1,digest_sizeis0x14)
Quoted 7 lines
desc = digest + digest_size;To fix this,
pkcs7_verifyneeds to make sure that desc is pointing at an aligned value past thedigest_size, and kzalloc appropriately, taking alignment values into consideration.Signed-off-by Sowmini Varadhan <[email protected]>
Patch applied. Thanks!
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Quoted 10 lines · Sowmini Varadhan
On sparc, we see unaligned access messages on each modprobe[-r]:
Kernel unaligned access at TPC[6ad9b4]
pkcs7_verify[..] Kernel unaligned access at TPC[6a5484]crypto_shash_finup[..] Kernel unaligned access at TPC[6a5390]crypto_shash_update[..] Kernel unaligned access at TPC[10150308]sha1_sparc64_update[..] Kernel unaligned access at TPC[101501ac]__sha1_sparc64_update[..]These ware triggered by
mod_verify_sig()invocations ofpkcs_verify(), and are are being caused by an unaligned desc at (sha1,digest_sizeis0x14)
Quoted 7 lines
desc = digest + digest_size;To fix this,
pkcs7_verifyneeds to make sure that desc is pointing at an aligned value past thedigest_size, and kzalloc appropriately, taking alignment values into consideration.Signed-off-by Sowmini Varadhan <[email protected]>