Avoid out-of-bounds accesses in ASN1_BIT_STRING_{get,set}()
authortb <tb@openbsd.org>
Mon, 25 Dec 2023 22:02:59 +0000 (22:02 +0000)
committertb <tb@openbsd.org>
Mon, 25 Dec 2023 22:02:59 +0000 (22:02 +0000)
commit58b76109c097933661021feaa890ac2e80a91357
treecb3f5a23b2e9e6d13c9b339af2e8499ef7951938
parent135a5ef6276722ab45fa38e9fa896e7ce0a0deab
Avoid out-of-bounds accesses in ASN1_BIT_STRING_{get,set}()

If a negative n is passed, these functions would underrun the bitstring's
data array. So add checks for that and drop spades of unnecessary parens.

These functions are quite broken anyway. The setter attempts to zap the
unnecessary trailing zero octets, but fails to do so if the bit being
cleared isn't already set. Worse is the getter where you can't tell an
error (like attempting an out-of-bounds read) from the bit being unset.

ok joshua
lib/libcrypto/asn1/a_bitstr.c