Skip to content

Commit b553e74

Browse files
committed
Fix IAR warning about volatile access
1 parent 86db2d4 commit b553e74

2 files changed

Lines changed: 22 additions & 8 deletions

File tree

src/internal.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41491,6 +41491,7 @@ static int DefTicketEncCb(WOLFSSL* ssl, byte key_name[WOLFSSL_TICKET_NAME_SZ],
4149141491
{
4149241492
RsaKey* key = (RsaKey*)ssl->hsKey;
4149341493
volatile int lenErrMask;
41494+
int lenErrMaskCopy;
4149441495

4149541496
ret = RsaDec(ssl,
4149641497
input + args->idx,
@@ -41517,8 +41518,9 @@ static int DefTicketEncCb(WOLFSSL* ssl, byte key_name[WOLFSSL_TICKET_NAME_SZ],
4151741518
goto exit_dcke;
4151841519

4151941520
lenErrMask = 0 - (SECRET_LEN != args->sigSz);
41520-
args->lastErr = (ret & (~lenErrMask)) |
41521-
(WC_NO_ERR_TRACE(RSA_PAD_E) & lenErrMask);
41521+
lenErrMaskCopy = lenErrMask;
41522+
args->lastErr = (ret & (~lenErrMaskCopy)) |
41523+
(WC_NO_ERR_TRACE(RSA_PAD_E) & lenErrMaskCopy);
4152241524
ret = 0;
4152341525
break;
4152441526
} /* rsa_kea */

wolfcrypt/src/rsa.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1890,6 +1890,10 @@ static int RsaUnPad(const byte *pkcsBlock, unsigned int pkcsBlockLen,
18901890
volatile byte invalid = 0;
18911891
volatile byte minPad;
18921892
volatile int invalidMask;
1893+
word16 pastSepCopy;
1894+
byte invalidCopy;
1895+
byte minPadCopy;
1896+
int invalidMaskCopy;
18931897

18941898
i = 0;
18951899
/* Decrypted with private key - unpad must be constant time. */
@@ -1902,17 +1906,25 @@ static int RsaUnPad(const byte *pkcsBlock, unsigned int pkcsBlockLen,
19021906

19031907
/* Minimum of 11 bytes of pre-message data - including leading 0x00. */
19041908
minPad = ctMaskLT(i, RSA_MIN_PAD_SZ);
1905-
invalid |= minPad;
1909+
minPadCopy = minPad;
1910+
invalidCopy = invalid;
1911+
invalid = invalidCopy | minPadCopy;
19061912
/* Must have seen separator. */
1907-
invalid |= (byte)~pastSep;
1913+
pastSepCopy = pastSep;
1914+
invalidCopy = invalid;
1915+
invalid = invalidCopy | (byte)~pastSepCopy;
19081916
/* First byte must be 0x00. */
1909-
invalid |= ctMaskNotEq(pkcsBlock[0], 0x00);
1917+
invalidCopy = invalid;
1918+
invalid = invalidCopy | ctMaskNotEq(pkcsBlock[0], 0x00);
19101919
/* Check against expected block type: padValue */
1911-
invalid |= ctMaskNotEq(pkcsBlock[1], padValue);
1920+
invalidCopy = invalid;
1921+
invalid = invalidCopy | ctMaskNotEq(pkcsBlock[1], padValue);
19121922

19131923
*output = (byte *)(pkcsBlock + i);
1914-
invalidMask = (int)-1 + (int)(invalid >> 7);
1915-
ret = invalidMask & ((int)pkcsBlockLen - i);
1924+
invalidCopy = invalid;
1925+
invalidMask = (int)-1 + (int)(invalidCopy >> 7);
1926+
invalidMaskCopy = invalidMask;
1927+
ret = invalidMaskCopy & ((int)pkcsBlockLen - i);
19161928
}
19171929
#endif
19181930

0 commit comments

Comments
 (0)