linux/drivers/crypto
Arnd Bergmann 532f419cde crypto: stm32 - Try to fix hash padding
gcc warns that the length for the extra unaligned data in the hash
function may be used unaligned. In theory this could happen if
we pass a zero-length sg_list, or if sg_is_last() was never true:

In file included from drivers/crypto/stm32/stm32-hash.c:23:
drivers/crypto/stm32/stm32-hash.c: In function 'stm32_hash_one_request':
include/uapi/linux/kernel.h:12:49: error: 'ncp' may be used uninitialized in this function [-Werror=maybe-uninitialized]
 #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))

Neither of these can happen in practice, so the warning is harmless.

However while trying to suppress the warning, I noticed multiple
problems with that code:

- On big-endian kernels, we byte-swap the data like we do for
  register accesses, however this is a data stream and almost
  certainly needs to use a single writesl() instead of series
  of writel() to give the correct hash.

- If the length is not a multiple of four bytes, we skip the
  last word entirely, since we write the truncated length
  using stm32_hash_set_nblw().

- If we change the code to round the length up rather than
  down, the last bytes contain stale data, so it needs some
  form of padding.

This tries to address all four problems, by correctly
initializing the length to zero, using endian-safe copy
functions, adding zero-padding and passing the padded length.

I have done no testing on this patch, so please review
carefully and if possible test with an unaligned length
and big-endian kernel builds.

Fixes: 8a1012d3f2 ("crypto: stm32 - Support for STM32 HASH module")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2017-10-07 12:04:31 +08:00
..
amcc crypto: crypto4xx - fix an error code 2017-06-20 11:21:14 +08:00
axis crypto: axis - hide an unused variable 2017-09-22 17:38:19 +08:00
bcm crypto: brcm - Support more FlexRM rings than SPU engines. 2017-08-03 13:52:43 +08:00
caam crypto: caam - fix LS1021A support on ARMv7 multiplatform kernel 2017-09-20 17:42:42 +08:00
cavium crypto: cavium/nitrox - Fix an error handling path in 'nitrox_probe()' 2017-08-22 14:54:55 +08:00
ccp dmaengine updates for 4.14-rc1 2017-09-07 14:03:05 -07:00
chelsio Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2017-07-14 22:49:50 -07:00
inside-secure crypto: inside-secure - fix gcc-4.9 warnings 2017-09-20 17:42:41 +08:00
marvell crypto: marvell - Use IPAD/OPAD constant 2017-05-23 12:52:07 +08:00
mediatek crypto: mediatek - fix error return code in mtk_crypto_probe() 2017-07-18 17:50:54 +08:00
nx crypto/nx: Add P9 NX support for 842 compression engine 2017-09-01 16:42:51 +10:00
qat crypto: qat - fix spelling mistake: "runing" -> "running" 2017-07-18 17:50:51 +08:00
qce crypto: qce - Use skcipher for fallback 2016-07-01 23:45:09 +08:00
rockchip crypto: rockchip - Don't dequeue the request when device is busy 2017-08-22 14:54:54 +08:00
stm32 crypto: stm32 - Try to fix hash padding 2017-10-07 12:04:31 +08:00
sunxi-ss crypto: sun4i-ss - support the Security System PRNG 2017-07-18 17:50:55 +08:00
ux500 scripts/spelling.txt: add "disble(d)" pattern and fix typo instances 2017-03-09 17:01:09 -08:00
virtio crypto: virtio - Refacotor virtio_crypto driver for new virito crypto services 2017-07-18 17:50:51 +08:00
vmx crypto: algapi - make crypto_xor() take separate dst and src arguments 2017-08-04 09:27:15 +08:00
atmel-aes-regs.h crypto: atmel-authenc - add support to authenc(hmac(shaX), Y(aes)) modes 2017-02-03 18:16:14 +08:00
atmel-aes.c crypto: atmel-authenc - add support to authenc(hmac(shaX), Y(aes)) modes 2017-02-03 18:16:14 +08:00
atmel-authenc.h crypto: atmel-authenc - add support to authenc(hmac(shaX), Y(aes)) modes 2017-02-03 18:16:14 +08:00
atmel-ecc.c crypto: atmel-ecc - fix signed integer to u8 assignment 2017-08-03 13:47:23 +08:00
atmel-ecc.h crypto: atmel-ecc - introduce Microchip / Atmel ECC driver 2017-07-18 17:50:58 +08:00
atmel-sha-regs.h crypto: atmel-authenc - add support to authenc(hmac(shaX), Y(aes)) modes 2017-02-03 18:16:14 +08:00
atmel-sha.c crypto: atmel-sha - remove unnecessary static in atmel_sha_remove() 2017-08-03 13:47:16 +08:00
atmel-tdes-regs.h
atmel-tdes.c crypto: atmel-tdes - remove unnecessary static in atmel_tdes_remove() 2017-08-03 13:47:18 +08:00
bfin_crc.c crypto: bfin_crc - Fix format printing warning 2016-12-27 17:50:51 +08:00
bfin_crc.h crypto: bfin_crc - Remove unneeded linux/miscdevice.h include 2016-12-27 17:50:51 +08:00
exynos-rng.c crypto: exynos - Add new Exynos RNG driver 2017-04-21 20:30:46 +08:00
geode-aes.c crypto: geode-aes - fixed coding style warnings and error 2017-07-18 18:15:57 +08:00
geode-aes.h
hifn_795x.c crypto: squash lines for simple wrapper functions 2016-09-13 20:27:26 +08:00
img-hash.c crypto: img-hash - remove unnecessary static in img_hash_remove() 2017-08-03 13:47:18 +08:00
ixp4xx_crypto.c crypto: ixp4xx - Fix error handling path in 'aead_perform()' 2017-08-09 20:01:33 +08:00
Kconfig crypto: axis - add ARTPEC-6/7 crypto accelerator driver 2017-08-22 14:54:52 +08:00
Makefile crypto: axis - add ARTPEC-6/7 crypto accelerator driver 2017-08-22 14:54:52 +08:00
mv_cesa.c crypto: mv_cesa - Use IPAD/OPAD constant 2017-05-23 12:52:08 +08:00
mv_cesa.h
mxc-scc.c crypto: mxc-scc - fix error code in mxc_scc_probe() 2017-07-18 17:50:54 +08:00
mxs-dcp.c crypto: mxs-dcp - print error message on platform_get_irq failure 2017-07-18 17:50:54 +08:00
n2_asm.S
n2_core.c crypto: n2 - Convert to using %pOF instead of full_name 2017-08-03 13:47:15 +08:00
n2_core.h
omap-aes-gcm.c crypto: omap-aes - fix spelling mistake "Encryptio" -> "Encryption" 2017-06-20 11:21:29 +08:00
omap-aes.c crypto: omap-aes - fix error return code in omap_aes_probe() 2017-07-18 17:50:55 +08:00
omap-aes.h crypto: omap-aes - Add support for GCM mode 2017-06-10 12:04:19 +08:00
omap-crypto.c crypto: omap - add base support library for common routines 2017-06-10 12:04:15 +08:00
omap-crypto.h crypto: omap - add base support library for common routines 2017-06-10 12:04:15 +08:00
omap-des.c crypto: omap-des - fix error return code in omap_des_probe() 2017-07-18 17:50:55 +08:00
omap-sham.c crypto: omap-sham - remove unnecessary static in omap_sham_remove() 2017-08-03 13:47:15 +08:00
padlock-aes.c x86/fpu: Remove irq_ts_save() and irq_ts_restore() 2016-11-01 07:47:54 +01:00
padlock-sha.c x86/fpu: Remove irq_ts_save() and irq_ts_restore() 2016-11-01 07:47:54 +01:00
picoxcell_crypto_regs.h
picoxcell_crypto.c crypto: picoxcell - Remove spacc_is_compatible() wrapper function 2017-01-13 00:24:41 +08:00
s5p-sss.c crypto: s5p-sss - Document the struct s5p_aes_dev 2017-03-24 22:03:00 +08:00
sahara.c crypto: sahara - constify platform_device_id 2017-08-22 14:54:53 +08:00
talitos.c crypto: talitos - Don't provide setkey for non hmac hashing algs. 2017-09-20 17:42:40 +08:00
talitos.h crypto: talitos - add new crypto modes 2015-12-04 22:29:56 +08:00