Le Fri, Jul 01, 2022 at 02:35:41PM +0100, Ben Dooks a écrit : > On 01/07/2022 14:27, Corentin Labbe wrote: > > On my Allwinner D1 nezha, the sun8i-ce fail self-tests due to: > > alg: skcipher: cbc-des3-sun8i-ce encryption overran dst buffer on test vector 0 > > > > In fact the buffer is not overran by device but by the dma_map_single() operation. > > > > To prevent any corruption of the poisoned data, simply flush them before > > giving the buffer to the tested driver. > > > > Signed-off-by: Corentin Labbe <clabbe@xxxxxxxxxxxx> > > --- > > > > Hello > > > > I put this patch as RFC, since this behavour happen only on non yet merged RISCV code. > > (Mostly riscv: implement Zicbom-based CMO instructions + the t-head variant) > > > > Regards > > > > crypto/testmgr.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/crypto/testmgr.c b/crypto/testmgr.c > > index c59bd9e07978..187163e2e593 100644 > > --- a/crypto/testmgr.c > > +++ b/crypto/testmgr.c > > @@ -19,6 +19,7 @@ > > #include <crypto/aead.h> > > #include <crypto/hash.h> > > #include <crypto/skcipher.h> > > +#include <linux/cacheflush.h> > > #include <linux/err.h> > > #include <linux/fips.h> > > #include <linux/module.h> > > @@ -205,6 +206,8 @@ static void testmgr_free_buf(char *buf[XBUFSIZE]) > > static inline void testmgr_poison(void *addr, size_t len) > > { > > memset(addr, TESTMGR_POISON_BYTE, len); > > + /* Be sure data is written to prevent corruption from some DMA sync */ > > + flush_icache_range((unsigned long)addr, (unsigned long)addr + len); > > } > > > > /* Is the memory region still fully poisoned? */ > > why are you flushing the instruction cache and not the data-cache? > I just copied what did drivers/crypto/xilinx/zynqmp-sha.c. I tried to do flush_dcache_range() but it seems to not be implemented on riscV. And flush_dcache_page(virt_to_page(addr), len) produce a kernel panic. Any advice on how to go further ?