2013-08-20 08:54:48

by Dan Carpenter

[permalink] [raw]
Subject: [patch] 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 <[email protected]>
---
Static checker stuff. I don't have the hardware.

diff --git a/drivers/crypto/tegra-aes.c b/drivers/crypto/tegra-aes.c
index 85ea752..2d58da9 100644
--- a/drivers/crypto/tegra-aes.c
+++ b/drivers/crypto/tegra-aes.c
@@ -275,7 +275,7 @@ static int aes_start_crypt(struct tegra_aes_dev *dd, u32 in_addr, u32 out_addr,
value = aes_readl(dd, TEGRA_AES_INTR_STATUS);
eng_busy = value & TEGRA_AES_ENGINE_BUSY_FIELD;
icq_empty = value & TEGRA_AES_ICQ_EMPTY_FIELD;
- } while (eng_busy & (!icq_empty));
+ } while (eng_busy && !icq_empty);
aes_writel(dd, cmdq[i], TEGRA_AES_ICMDQUE_WR);
}

@@ -365,7 +365,7 @@ static int aes_set_key(struct tegra_aes_dev *dd)
eng_busy = value & TEGRA_AES_ENGINE_BUSY_FIELD;
icq_empty = value & TEGRA_AES_ICQ_EMPTY_FIELD;
dma_busy = value & TEGRA_AES_DMA_BUSY_FIELD;
- } while (eng_busy & (!icq_empty) & dma_busy);
+ } while (eng_busy && !icq_empty && dma_busy);

/* settable command to get key into internal registers */
value = CMD_SETTABLE << CMDQ_OPCODE_SHIFT |
@@ -379,7 +379,7 @@ static int aes_set_key(struct tegra_aes_dev *dd)
value = aes_readl(dd, TEGRA_AES_INTR_STATUS);
eng_busy = value & TEGRA_AES_ENGINE_BUSY_FIELD;
icq_empty = value & TEGRA_AES_ICQ_EMPTY_FIELD;
- } while (eng_busy & (!icq_empty));
+ } while (eng_busy && !icq_empty);

return 0;
}


2013-08-20 16:31:41

by Stephen Warren

[permalink] [raw]
Subject: Re: [patch] crypto: tegra-aes - bitwise vs logical and

On 08/20/2013 02:54 AM, Dan Carpenter wrote:
> 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 <[email protected]>
> ---
> Static checker stuff. I don't have the hardware.

Varun, can you please test the driver with this change applied and make
sure it works correctly.

If you could also update our internal testing wiki with the steps you
use for this testing, that'd be great too.

Thanks.

2013-08-21 11:51:18

by Herbert Xu

[permalink] [raw]
Subject: Re: [patch] crypto: tegra-aes - bitwise vs logical and

On Tue, Aug 20, 2013 at 11:54:48AM +0300, Dan Carpenter wrote:
> 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 <[email protected]>

Also applied.
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt