summaryrefslogtreecommitdiffstats
path: root/drivers/crypto
diff options
context:
space:
mode:
authorPavitrakumar M <pavitrakumarm@vayavyalabs.com>2024-08-16 17:33:32 +0530
committerHerbert Xu <herbert@gondor.apana.org.au>2024-08-24 21:38:54 +0800
commit58bf99100a6dfcc53ba4ab547f1394bb6873b2ac (patch)
tree92e1cf18f8ad6388c33b599d3af03cb44aadba2a /drivers/crypto
parent694a6f594817462942acbb1a35b1f7d61e2d49e7 (diff)
downloadlinux-58bf99100a6dfcc53ba4ab547f1394bb6873b2ac.tar.gz
linux-58bf99100a6dfcc53ba4ab547f1394bb6873b2ac.tar.bz2
linux-58bf99100a6dfcc53ba4ab547f1394bb6873b2ac.zip
crypto: spacc - Fix counter width checks
This patch fixes counter width checks according to the version extension3 register. The counter widths can be 8, 16, 32 and 64 bits as per the extension3 register. Signed-off-by: Bhoomika K <bhoomikak@vayavyalabs.com> Signed-off-by: Pavitrakumar M <pavitrakumarm@vayavyalabs.com> Acked-by: Ruud Derwig <Ruud.Derwig@synopsys.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto')
-rw-r--r--drivers/crypto/dwc-spacc/spacc_skcipher.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/drivers/crypto/dwc-spacc/spacc_skcipher.c b/drivers/crypto/dwc-spacc/spacc_skcipher.c
index 8c698b75dd92..1ef7c665188f 100644
--- a/drivers/crypto/dwc-spacc/spacc_skcipher.c
+++ b/drivers/crypto/dwc-spacc/spacc_skcipher.c
@@ -408,40 +408,42 @@ static int spacc_cipher_process(struct skcipher_request *req, int enc_dec)
for (i = 0; i < 16; i++)
ivc1[i] = req->iv[i];
- /* 32-bit counter width */
- if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3) & (0x2)) {
+ /* 64-bit counter width */
+ if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3) & (0x3)) {
- for (i = 12; i < 16; i++) {
- num_iv <<= 8;
- num_iv |= ivc1[i];
+ for (i = 8; i < 16; i++) {
+ num_iv64 <<= 8;
+ num_iv64 |= ivc1[i];
}
- diff = SPACC_CTR_IV_MAX32 - num_iv;
+ diff64 = SPACC_CTR_IV_MAX64 - num_iv64;
- if (len > diff) {
+ if (len > diff64) {
name = salg->calg->cra_name;
ret = spacc_skcipher_fallback(name,
req, enc_dec);
return ret;
}
+ /* 32-bit counter width */
} else if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3)
- & (0x3)) { /* 64-bit counter width */
+ & (0x2)) {
- for (i = 8; i < 16; i++) {
- num_iv64 <<= 8;
- num_iv64 |= ivc1[i];
+ for (i = 12; i < 16; i++) {
+ num_iv <<= 8;
+ num_iv |= ivc1[i];
}
- diff64 = SPACC_CTR_IV_MAX64 - num_iv64;
+ diff = SPACC_CTR_IV_MAX32 - num_iv;
- if (len > diff64) {
+ if (len > diff) {
name = salg->calg->cra_name;
ret = spacc_skcipher_fallback(name,
req, enc_dec);
return ret;
}
+ /* 16-bit counter width */
} else if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3)
- & (0x1)) { /* 16-bit counter width */
+ & (0x1)) {
for (i = 14; i < 16; i++) {
num_iv <<= 8;
@@ -456,8 +458,9 @@ static int spacc_cipher_process(struct skcipher_request *req, int enc_dec)
req, enc_dec);
return ret;
}
- } else if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3)
- & (0x0)) { /* 8-bit counter width */
+ /* 8-bit counter width */
+ } else if ((readl(device_h->regmap + SPACC_REG_VERSION_EXT_3)
+ & 0x7) == 0) {
for (i = 15; i < 16; i++) {
num_iv <<= 8;