On 12/21/2018 10:07 AM, Christophe Leroy wrote: [snip] > IV cannot be on stack when CONFIG_VMAP_STACK is selected because the stack > cannot be DMA mapped anymore. > This looks better, thanks. > This patch copies the IV into the extended descriptor when iv is not > a valid linear address. > Though I am not sure the checks in place are enough. > Fixes: 4de9d0b547b9 ("crypto: talitos - Add ablkcipher algorithms") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Christophe Leroy <christophe.leroy@xxxxxx> > --- > v3: Using struct edesc buffer. > > v2: Using per-request context. [snip] > + if (ivsize && !virt_addr_valid(iv)) > + alloc_len += ivsize; [snip] > > + if (ivsize && !virt_addr_valid(iv)) A more precise condition would be (!is_vmalloc_addr || is_vmalloc_addr(iv)) It matches the checks in debug_dma_map_single() helper, though I am not sure they are enough to rule out all exceptions of DMA API. > + iv = memcpy(((u8 *)edesc) + alloc_len - ivsize, iv, ivsize); > + > edesc->src_nents = src_nents; > edesc->dst_nents = dst_nents; > - edesc->iv_dma = iv_dma; > + if (ivsize) > + edesc->iv_dma = dma_map_single(dev, iv, ivsize, DMA_TO_DEVICE); > + else > + edesc->iv_dma = 0; > +