From ed9abf94b3167a1a61b5da163e9b07b06c8a457b Mon Sep 17 00:00:00 2001 From: Douglas Bagnall Date: Sun, 6 Sep 2020 09:35:49 +1200 Subject: [PATCH] utils/asn1: avoid undefined behaviour warning UBSAN does not like an int >= 1<<24 being shifted left. We check the overflow in the very next line. Credit to OSS-Fuzz. REF: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=25436 Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett Autobuild-User(master): Andrew Bartlett Autobuild-Date(master): Fri Sep 11 05:05:59 UTC 2020 on sn-devel-184 --- lib/util/asn1.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/util/asn1.c b/lib/util/asn1.c index 6b1b4bc2877..9ab9e1b0844 100644 --- a/lib/util/asn1.c +++ b/lib/util/asn1.c @@ -1071,7 +1071,11 @@ bool asn1_read_enumerated(struct asn1_data *data, int *v) data->has_error = true; return false; } - *v = (*v << 8) + b; + /* + * To please/fool the Undefined Behaviour Sanitizer we cast to + * unsigned for the left shift. + */ + *v = ((unsigned int)*v << 8) + b; if (*v < 0) { /* ASN1_ENUMERATED can't be -ve. */ data->has_error = true; -- 2.47.3