Date: Mon, 25 Nov 2013 17:20:32 -0800 From: Peter Wemm <peter@wemm.org> To: Bruce Evans <brde@optusnet.com.au> Cc: FreeBSD Arch <freebsd-arch@freebsd.org> Subject: Re: 1 << 31 and related issues Message-ID: <CAGE5yCr%2BSf2XVJmWFzcPL0dEVL7SMGVyb8h8joeVJA%2BdR65v4A@mail.gmail.com> In-Reply-To: <20131126075626.A4024@besplex.bde.org> References: <CAF6rxgm9Q9ckhKR75sKRjAmebGGNM_jpDjiUqeUd%2B=WbCf6TRw@mail.gmail.com> <5293B333.9070804@wemm.org> <20131126075626.A4024@besplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Nov 25, 2013 at 1:17 PM, Bruce Evans <brde@optusnet.com.au> wrote: > On Mon, 25 Nov 2013, Peter Wemm wrote: > >> On 11/25/13, 11:48 AM, Eitan Adler wrote: >>> >>> There are a few cases in FreeBSD where the expression (1 << 31) is used. >>> ... >>> >>> An incomplete listing of the issues available here: >>> http://people.freebsd.org/~eadler/files/1..31.txt >> >> >> I find it particularly enjoyable to see things like this in crypto code: >> >> crypto/heimdal/lib/hx509/ref/pkcs11.h:#define CKF_EXTENSION >> ((unsigned >> long) (1 << 31)) >> crypto/openssh/pkcs11.h:#define CKO_VENDOR_DEFINED ((unsigned long) >> (1 >> << 31)) > > > I almost said that in my earlier reply too. Yep. Invalid or undefined behavior in crypto or security critical code is hardly a good thing, even if it usually works out ok. >> FWIW, This came up in both ia64 and amd64 early days. Most of this was >> hunted down in the kernel back then. Obviously some has crept back in, >> or is in contrib or driver code. >> >> The problem there is bigger though. On 64 bit machines, 1u << N tends >> to get used where N > 32 as well. 1u << 33 is an overflow and doesn't >> extend up into the 33rd bit. We changed most uses to 1ul << N where >> this was likely. This did predate the BIT* macros you referenced. > > > I don't think anyone expected 1u << 33 to work. Well, when we had a cpumask_t as a 64 bit integer type and did (1 << cpu) in both MI and MD code, it was a pretty big deal before cpuset_t came along. -- Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com; KI6FJV UTF-8: for when a ' just won\342\200\231t do.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGE5yCr%2BSf2XVJmWFzcPL0dEVL7SMGVyb8h8joeVJA%2BdR65v4A>
