Linux: Fix uninitialized variable usage in zio_do_crypt_data()
Coverity complained about this. An error from `hkdf_sha512()` before uio
initialization will cause pointers to uninitialized memory to be passed
to `zio_crypt_destroy_uio()`. This is a regression that was introduced
by cf63739191
. Interestingly, this never
affected FreeBSD, since the FreeBSD version never had that patch ported.
Since moving uio initialization to the top of this function would slow
down the qat_crypt() path, we only move the `memset()` calls to the top
of the function. This is sufficient to fix this problem.
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Neal Gompa <ngompa@datto.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #13944
This commit is contained in:
parent
33223cbc3c
commit
835e03682c
|
@ -1900,6 +1900,9 @@ zio_do_crypt_data(boolean_t encrypt, zio_crypt_key_t *key,
|
||||||
crypto_ctx_template_t tmpl;
|
crypto_ctx_template_t tmpl;
|
||||||
uint8_t *authbuf = NULL;
|
uint8_t *authbuf = NULL;
|
||||||
|
|
||||||
|
memset(&puio, 0, sizeof (puio));
|
||||||
|
memset(&cuio, 0, sizeof (cuio));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the needed key is the current one, just use it. Otherwise we
|
* If the needed key is the current one, just use it. Otherwise we
|
||||||
* need to generate a temporary one from the given salt + master key.
|
* need to generate a temporary one from the given salt + master key.
|
||||||
|
@ -1960,9 +1963,6 @@ zio_do_crypt_data(boolean_t encrypt, zio_crypt_key_t *key,
|
||||||
/* If the hardware implementation fails fall back to software */
|
/* If the hardware implementation fails fall back to software */
|
||||||
}
|
}
|
||||||
|
|
||||||
bzero(&puio, sizeof (zfs_uio_t));
|
|
||||||
bzero(&cuio, sizeof (zfs_uio_t));
|
|
||||||
|
|
||||||
/* create uios for encryption */
|
/* create uios for encryption */
|
||||||
ret = zio_crypt_init_uios(encrypt, key->zk_version, ot, plainbuf,
|
ret = zio_crypt_init_uios(encrypt, key->zk_version, ot, plainbuf,
|
||||||
cipherbuf, datalen, byteswap, mac, &puio, &cuio, &enc_len,
|
cipherbuf, datalen, byteswap, mac, &puio, &cuio, &enc_len,
|
||||||
|
|
Loading…
Reference in New Issue