Commit 58bf9910 authored by Pavitrakumar M's avatar Pavitrakumar M Committed by Herbert Xu

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: default avatarBhoomika K <bhoomikak@vayavyalabs.com>
Signed-off-by: default avatarPavitrakumar M <pavitrakumarm@vayavyalabs.com>
Acked-by: default avatarRuud Derwig <Ruud.Derwig@synopsys.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 694a6f59
...@@ -408,40 +408,42 @@ static int spacc_cipher_process(struct skcipher_request *req, int enc_dec) ...@@ -408,40 +408,42 @@ static int spacc_cipher_process(struct skcipher_request *req, int enc_dec)
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
ivc1[i] = req->iv[i]; ivc1[i] = req->iv[i];
/* 32-bit counter width */ /* 64-bit counter width */
if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3) & (0x2)) { if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3) & (0x3)) {
for (i = 12; i < 16; i++) { for (i = 8; i < 16; i++) {
num_iv <<= 8; num_iv64 <<= 8;
num_iv |= ivc1[i]; 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; name = salg->calg->cra_name;
ret = spacc_skcipher_fallback(name, ret = spacc_skcipher_fallback(name,
req, enc_dec); req, enc_dec);
return ret; return ret;
} }
/* 32-bit counter width */
} else if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3) } else if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3)
& (0x3)) { /* 64-bit counter width */ & (0x2)) {
for (i = 8; i < 16; i++) { for (i = 12; i < 16; i++) {
num_iv64 <<= 8; num_iv <<= 8;
num_iv64 |= ivc1[i]; 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; name = salg->calg->cra_name;
ret = spacc_skcipher_fallback(name, ret = spacc_skcipher_fallback(name,
req, enc_dec); req, enc_dec);
return ret; return ret;
} }
/* 16-bit counter width */
} else if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3) } else if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3)
& (0x1)) { /* 16-bit counter width */ & (0x1)) {
for (i = 14; i < 16; i++) { for (i = 14; i < 16; i++) {
num_iv <<= 8; num_iv <<= 8;
...@@ -456,8 +458,9 @@ static int spacc_cipher_process(struct skcipher_request *req, int enc_dec) ...@@ -456,8 +458,9 @@ static int spacc_cipher_process(struct skcipher_request *req, int enc_dec)
req, enc_dec); req, enc_dec);
return ret; return ret;
} }
} else if (readl(device_h->regmap + SPACC_REG_VERSION_EXT_3) /* 8-bit counter width */
& (0x0)) { /* 8-bit counter width */ } else if ((readl(device_h->regmap + SPACC_REG_VERSION_EXT_3)
& 0x7) == 0) {
for (i = 15; i < 16; i++) { for (i = 15; i < 16; i++) {
num_iv <<= 8; num_iv <<= 8;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment