mirror of
https://github.com/torvalds/linux.git
synced 2026-11-09 13:44:03 +01:00
crypto: octeontx2 - use crypto_memneq() to check HMAC for cipher_null authenc
validate_hmac_cipher_null() compares the computed and received HMAC with memcmp(), which short-circuits on the first differing byte and leaks tag-match length via timing. Use crypto_memneq() instead. Because for cipher_null the validated payload is un-encrypted, this valid prefix leak allows for authenticated message forgery. Assisted-by: gregkh_clanker_t1000 Signed-off-by: David C.C.M. Gall <david.ccm.gall@googlemail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
844de21437
commit
aaab228443
|
|
@ -11,6 +11,7 @@
|
|||
#include <crypto/xts.h>
|
||||
#include <crypto/gcm.h>
|
||||
#include <crypto/scatterwalk.h>
|
||||
#include <crypto/utils.h>
|
||||
#include <linux/sort.h>
|
||||
#include <linux/module.h>
|
||||
#include "otx2_cptvf.h"
|
||||
|
|
@ -90,9 +91,9 @@ static inline int validate_hmac_cipher_null(struct otx2_cpt_req_info *cpt_req)
|
|||
req = container_of(cpt_req->areq, struct aead_request, base);
|
||||
tfm = crypto_aead_reqtfm(req);
|
||||
rctx = aead_request_ctx_dma(req);
|
||||
if (memcmp(rctx->fctx.hmac.s.hmac_calc,
|
||||
rctx->fctx.hmac.s.hmac_recv,
|
||||
crypto_aead_authsize(tfm)) != 0)
|
||||
if (crypto_memneq(rctx->fctx.hmac.s.hmac_calc,
|
||||
rctx->fctx.hmac.s.hmac_recv,
|
||||
crypto_aead_authsize(tfm)))
|
||||
return -EBADMSG;
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user