From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Radu Solea <radu.solea@nxp.com>,
Franck LENORMAND <franck.lenormand@nxp.com>,
Leonard Crestez <leonard.crestez@nxp.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
Sasha Levin <sashal@kernel.org>,
linux-crypto@vger.kernel.org
Subject: [PATCH AUTOSEL 4.9 43/68] crypto: mxs-dcp - Fix AES issues
Date: Tue, 12 Nov 2019 20:59:07 -0500 [thread overview]
Message-ID: <20191113015932.12655-43-sashal@kernel.org> (raw)
In-Reply-To: <20191113015932.12655-1-sashal@kernel.org>
From: Radu Solea <radu.solea@nxp.com>
[ Upstream commit fadd7a6e616b89c7f4f7bfa7b824f290bab32c3c ]
The DCP driver does not obey cryptlen, when doing android CTS this
results in passing to hardware input stream lengths which are not
multiple of block size.
Add a check to prevent future erroneous stream lengths from reaching the
hardware and adjust the scatterlist walking code to obey cryptlen.
Also properly copy-out the IV for chaining.
Signed-off-by: Radu Solea <radu.solea@nxp.com>
Signed-off-by: Franck LENORMAND <franck.lenormand@nxp.com>
Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/crypto/mxs-dcp.c | 33 +++++++++++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/drivers/crypto/mxs-dcp.c b/drivers/crypto/mxs-dcp.c
index 7483adf120084..b4bd34429cc14 100644
--- a/drivers/crypto/mxs-dcp.c
+++ b/drivers/crypto/mxs-dcp.c
@@ -225,6 +225,12 @@ static int mxs_dcp_run_aes(struct dcp_async_ctx *actx,
dma_addr_t dst_phys = dma_map_single(sdcp->dev, sdcp->coh->aes_out_buf,
DCP_BUF_SZ, DMA_FROM_DEVICE);
+ if (actx->fill % AES_BLOCK_SIZE) {
+ dev_err(sdcp->dev, "Invalid block size!\n");
+ ret = -EINVAL;
+ goto aes_done_run;
+ }
+
/* Fill in the DMA descriptor. */
desc->control0 = MXS_DCP_CONTROL0_DECR_SEMAPHORE |
MXS_DCP_CONTROL0_INTERRUPT |
@@ -254,6 +260,7 @@ static int mxs_dcp_run_aes(struct dcp_async_ctx *actx,
ret = mxs_dcp_start_dma(actx);
+aes_done_run:
dma_unmap_single(sdcp->dev, key_phys, 2 * AES_KEYSIZE_128,
DMA_TO_DEVICE);
dma_unmap_single(sdcp->dev, src_phys, DCP_BUF_SZ, DMA_TO_DEVICE);
@@ -280,13 +287,15 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq)
uint8_t *out_tmp, *src_buf, *dst_buf = NULL;
uint32_t dst_off = 0;
+ uint32_t last_out_len = 0;
uint8_t *key = sdcp->coh->aes_key;
int ret = 0;
int split = 0;
- unsigned int i, len, clen, rem = 0;
+ unsigned int i, len, clen, rem = 0, tlen = 0;
int init = 0;
+ bool limit_hit = false;
actx->fill = 0;
@@ -305,6 +314,11 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq)
for_each_sg(req->src, src, nents, i) {
src_buf = sg_virt(src);
len = sg_dma_len(src);
+ tlen += len;
+ limit_hit = tlen > req->nbytes;
+
+ if (limit_hit)
+ len = req->nbytes - (tlen - len);
do {
if (actx->fill + len > out_off)
@@ -321,13 +335,15 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq)
* If we filled the buffer or this is the last SG,
* submit the buffer.
*/
- if (actx->fill == out_off || sg_is_last(src)) {
+ if (actx->fill == out_off || sg_is_last(src) ||
+ limit_hit) {
ret = mxs_dcp_run_aes(actx, req, init);
if (ret)
return ret;
init = 0;
out_tmp = out_buf;
+ last_out_len = actx->fill;
while (dst && actx->fill) {
if (!split) {
dst_buf = sg_virt(dst);
@@ -350,6 +366,19 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq)
}
}
} while (len);
+
+ if (limit_hit)
+ break;
+ }
+
+ /* Copy the IV for CBC for chaining */
+ if (!rctx->ecb) {
+ if (rctx->enc)
+ memcpy(req->info, out_buf+(last_out_len-AES_BLOCK_SIZE),
+ AES_BLOCK_SIZE);
+ else
+ memcpy(req->info, in_buf+(last_out_len-AES_BLOCK_SIZE),
+ AES_BLOCK_SIZE);
}
return ret;
--
2.20.1
next prev parent reply other threads:[~2019-11-13 2:07 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-13 1:58 [PATCH AUTOSEL 4.9 01/68] net: ovs: fix return type of ndo_start_xmit function Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 02/68] net: xen-netback: " Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 03/68] ARM: dts: omap5: enable OTG role for DWC3 controller Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 04/68] f2fs: return correct errno in f2fs_gc Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 05/68] SUNRPC: Fix priority queue fairness Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 06/68] kvm: arm/arm64: Fix stage2_flush_memslot for 4 level page table Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 07/68] arm64/numa: Report correct memblock range for the dummy node Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 08/68] ath10k: fix vdev-start timeout on error Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 09/68] ata: ahci_brcm: Match BCM63138 compatible strings Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 10/68] ata: ahci_brcm: Allow using driver or DSL SoCs Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 11/68] ath9k: fix reporting calculated new FFT upper max Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 12/68] usb: gadget: udc: fotg210-udc: Fix a sleep-in-atomic-context bug in fotg210_get_status() Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 13/68] nl80211: Fix a GET_KEY reply attribute Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 14/68] dmaengine: ep93xx: Return proper enum in ep93xx_dma_chan_direction Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 15/68] dmaengine: timb_dma: Use proper enum in td_prep_slave_sg Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 16/68] mei: samples: fix a signedness bug in amt_host_if_call() Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 17/68] cxgb4: Use proper enum in cxgb4_dcb_handle_fw_update Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 18/68] cxgb4: Use proper enum in IEEE_FAUX_SYNC Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 19/68] powerpc/pseries: Fix DTL buffer registration Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 20/68] powerpc/pseries: Fix how we iterate over the DTL entries Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 21/68] mtd: rawnand: sh_flctl: Use proper enum for flctl_dma_fifo0_transfer Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 22/68] ixgbe: Fix crash with VFs and flow director on interface flap Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 23/68] IB/mthca: Fix error return code in __mthca_init_one() Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 24/68] IB/mlx4: Avoid implicit enumerated type conversion Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 25/68] ACPICA: Never run _REG on system_memory and system_IO Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 26/68] ata: ep93xx: Use proper enums for directions Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 27/68] media: pxa_camera: Fix check for pdev->dev.of_node Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 28/68] ALSA: hda/sigmatel - Disable automute for Elo VuPoint Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 29/68] KVM: PPC: Book3S PR: Exiting split hack mode needs to fixup both PC and LR Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 30/68] USB: serial: cypress_m8: fix interrupt-out transfer length Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 31/68] mtd: physmap_of: Release resources on error Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 32/68] cpu/SMT: State SMT is disabled even with nosmt and without "=force" Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 33/68] brcmfmac: reduce timeout for action frame scan Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 34/68] brcmfmac: fix full timeout waiting for action frame on-channel tx Sasha Levin
2019-11-13 1:58 ` [PATCH AUTOSEL 4.9 35/68] clk: samsung: Use clk_hw API for calling clk framework from clk notifiers Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 36/68] i2c: brcmstb: Allow enabling the driver on DSL SoCs Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 37/68] NFSv4.x: fix lock recovery during delegation recall Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 38/68] dmaengine: ioat: fix prototype of ioat_enumerate_channels Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 39/68] Input: st1232 - set INPUT_PROP_DIRECT property Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 40/68] Input: silead - try firmware reload after unsuccessful resume Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 41/68] x86/olpc: Fix build error with CONFIG_MFD_CS5535=m Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 42/68] crypto: mxs-dcp - Fix SHA null hashes and output length Sasha Levin
2019-11-13 1:59 ` Sasha Levin [this message]
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 44/68] ACPI / SBS: Fix rare oops when removing modules Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 45/68] iwlwifi: mvm: don't send keys when entering D3 Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 46/68] fbdev: sbuslib: use checked version of put_user() Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 47/68] fbdev: sbuslib: integer overflow in sbusfb_ioctl_helper() Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 48/68] reset: Fix potential use-after-free in __of_reset_control_get() Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 49/68] bcache: recal cached_dev_sectors on detach Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 50/68] s390/kasan: avoid vdso instrumentation Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 51/68] proc/vmcore: Fix i386 build error of missing copy_oldmem_page_encrypted() Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 52/68] backlight: lm3639: Unconditionally call led_classdev_unregister Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 53/68] mfd: ti_am335x_tscadc: Keep ADC interface on if child is wakeup capable Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 54/68] printk: Give error on attempt to set log buffer length to over 2G Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 55/68] media: isif: fix a NULL pointer dereference bug Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 56/68] GFS2: Flush the GFS2 delete workqueue before stopping the kernel threads Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 57/68] media: cx231xx: fix potential sign-extension overflow on large shift Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 58/68] x86/kexec: Correct KEXEC_BACKUP_SRC_END off-by-one error Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 59/68] gpio: syscon: Fix possible NULL ptr usage Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 60/68] spi: spidev: Fix OF tree warning logic Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 61/68] ARM: 8802/1: Call syscall_trace_exit even when system call skipped Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 62/68] orangefs: rate limit the client not running info message Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 63/68] hwmon: (pwm-fan) Silence error on probe deferral Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 64/68] hwmon: (ina3221) Fix INA3221_CONFIG_MODE macros Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 65/68] misc: cxl: Fix possible null pointer dereference Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 66/68] mac80211: minstrel: fix CCK rate group streams value Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 67/68] spi: rockchip: initialize dma_slave_config properly Sasha Levin
2019-11-13 1:59 ` [PATCH AUTOSEL 4.9 68/68] ARM: dts: omap5: Fix dual-role mode on Super-Speed port Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191113015932.12655-43-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=franck.lenormand@nxp.com \
--cc=herbert@gondor.apana.org.au \
--cc=leonard.crestez@nxp.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=radu.solea@nxp.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox