base: Fix unsigned underflow mishandling.
authorPhilip Metzler <cpmetz@google.com>
Wed, 20 Jan 2021 20:59:48 +0000 (12:59 -0800)
committerPhilip Metzler <cpmetz@google.com>
Thu, 21 Jan 2021 19:28:42 +0000 (19:28 +0000)
commit927cd10cb48c73e5a4a092ec42d36674c73892fd
tree61e92b48b89a5874a885e582ff6a5e36cc143d6a
parent71932a360da6107f934cbb78cdcc20e7bbd582fe
base: Fix unsigned underflow mishandling.

The second argument in the std::max call is treated as an unsigned value
as all variables are unsigned as well. This will result in an
unsigned underflow, and as such the std::max is a no-op and will result
in the underflowed value.

The `start` and `used` value get corrupted after that, and checks for
`empty` and other stuff downstream break.

Change-Id: I00017e22ba84e65f6b1c596f47d348f342fbc304
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/39496
Reviewed-by: Gabe Black <gabe.black@gmail.com>
Maintainer: Gabe Black <gabe.black@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/base/circlebuf.hh
src/base/circlebuf.test.cc