mirror_zfs/module/icp
Richard Yao a2163a96ae
Fix bad free in skein code
Clang's static analyzer found a bad free caused by skein_mac_atomic().
It will allocate a context on the stack and then pass it to
skein_final(), which attempts to free it. Upon inspection,
skein_digest_atomic() also has the same problem.

These functions were created to match the OpenSolaris ICP API, so I was
curious how we avoided this in other providers and looked at the SHA2
code. It appears that SHA2 has a SHA2Final() helper function that is
called by the exported sha2_mac_final()/sha2_digest_final() as well as
the sha2_mac_atomic() and sha2_digest_atomic() functions. The real work
is done in SHA2Final() while some checks and the free are done in
sha2_mac_final()/sha2_digest_final().

We fix the use after free in the skein code by taking inspiration from
the SHA2 code. We introduce a skein_final_nofree() that does most of the
work, and make skein_final() into a function that calls it and then
frees the memory.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #13954
2022-09-27 12:36:58 -07:00
..
algs Cleanup: Remove ineffective unsigned comparisons against 0 2022-09-26 17:02:38 -07:00
api Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
asm-aarch64/blake3 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
asm-ppc64/blake3 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
asm-x86_64 Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
core Fix use-after-free bugs in icp code 2022-09-15 11:46:42 -07:00
include Fix assertions in crypto reference helpers 2022-09-15 13:24:00 -07:00
io Fix bad free in skein code 2022-09-27 12:36:58 -07:00
spi Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
illumos-crypto.c Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00