Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: tegra-aes - bitwise vs logical and

The bug here is that:

while (eng_busy & (!icq_empty) & dma_busy)

is never true because it's using bitwise instead of logical ANDs. The
other bitwise AND conditions work as intended but I changed them as well
for consistency.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Dan Carpenter and committed by
Herbert Xu
5bc35703 393e661d

+3 -3
+3 -3
drivers/crypto/tegra-aes.c
··· 275 275 value = aes_readl(dd, TEGRA_AES_INTR_STATUS); 276 276 eng_busy = value & TEGRA_AES_ENGINE_BUSY_FIELD; 277 277 icq_empty = value & TEGRA_AES_ICQ_EMPTY_FIELD; 278 - } while (eng_busy & (!icq_empty)); 278 + } while (eng_busy && !icq_empty); 279 279 aes_writel(dd, cmdq[i], TEGRA_AES_ICMDQUE_WR); 280 280 } 281 281 ··· 365 365 eng_busy = value & TEGRA_AES_ENGINE_BUSY_FIELD; 366 366 icq_empty = value & TEGRA_AES_ICQ_EMPTY_FIELD; 367 367 dma_busy = value & TEGRA_AES_DMA_BUSY_FIELD; 368 - } while (eng_busy & (!icq_empty) & dma_busy); 368 + } while (eng_busy && !icq_empty && dma_busy); 369 369 370 370 /* settable command to get key into internal registers */ 371 371 value = CMD_SETTABLE << CMDQ_OPCODE_SHIFT | ··· 379 379 value = aes_readl(dd, TEGRA_AES_INTR_STATUS); 380 380 eng_busy = value & TEGRA_AES_ENGINE_BUSY_FIELD; 381 381 icq_empty = value & TEGRA_AES_ICQ_EMPTY_FIELD; 382 - } while (eng_busy & (!icq_empty)); 382 + } while (eng_busy && !icq_empty); 383 383 384 384 return 0; 385 385 }