Message ID | 20200305102255.12548-1-andrei.botila@oss.nxp.com (mailing list archive) |
---|---|
State | RFC |
Delegated to: | Herbert Xu |
Headers | show |
Series | [RFC] crypto: xts - add check for input length equal to zero | expand |
Am Donnerstag, 5. März 2020, 11:22:55 CET schrieb Andrei Botila: Hi Andrei, > From: Andrei Botila <andrei.botila@nxp.com> > > Through this RFC we try to standardize the way input lengths equal to 0 > are handled in all skcipher algorithms. Currently, in xts when an input > has a length smaller than XTS_BLOCK_SIZE it returns -EINVAL while the > other algorithms return 0 for input lengths equal to zero. > The algorithms that implement this check are CBC, ARC4, CFB, OFB, SALSA20, > CTR, ECB and PCBC, XTS being the outlier here. All of them call > skcipher_walk_virt() which returns 0 if skcipher_walk_skcipher() finds > that input length is equal to 0. > This case was discovered when fuzz testing was enabled since it generates > this input length. > This RFC wants to find out if the approach is ok before updating the > other xts implementations. It may be a good idea to consolidate that. However, changing only one implementation is not good. All XTS implementations would need to be converted then. Ciao Stephan
diff --git a/crypto/xts.c b/crypto/xts.c index 29efa15f1495..51eaf08603af 100644 --- a/crypto/xts.c +++ b/crypto/xts.c @@ -258,6 +258,9 @@ static int encrypt(struct skcipher_request *req) struct skcipher_request *subreq = &rctx->subreq; int err; + if (!req->cryptlen) + return 0; + err = init_crypt(req, encrypt_done) ?: xor_tweak_pre(req, true) ?: crypto_skcipher_encrypt(subreq) ?: @@ -275,6 +278,9 @@ static int decrypt(struct skcipher_request *req) struct skcipher_request *subreq = &rctx->subreq; int err; + if (!req->cryptlen) + return 0; + err = init_crypt(req, decrypt_done) ?: xor_tweak_pre(req, false) ?: crypto_skcipher_decrypt(subreq) ?: