util/mb/google/hatch: update CRC calculation for correctness

The CRC result is treated as a signed value, and so in certain
situations, the calculated value for the last four digits will not
be correct. Ensure that the CRC is treated as an unsigned 32-bit
value prior to converting the last 4 decimal digits to a string.

Signed-off-by: Paul Fagerburg <pfagerburg@chromium.org>
Change-Id: I92f9ce1ceb7450f90b89c94e0ace6f79a9419b42
Reviewed-on: https://review.coreboot.org/c/coreboot/+/35604
Reviewed-by: Andrew McRae <amcrae@chromium.org>
Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Paul Fagerburg 2019-09-25 09:12:24 -06:00 committed by Patrick Georgi
parent 39f3f52b3e
commit 4ab023329d
1 changed files with 5 additions and 2 deletions

View File

@ -64,8 +64,11 @@ def get_gbb_hwid(variant_name):
converted to all uppercase as part of this function.""" converted to all uppercase as part of this function."""
hwid = variant_name + ' test' hwid = variant_name + ' test'
upperhwid = hwid.upper() upperhwid = hwid.upper()
suffix = zlib.crc32(upperhwid.encode('UTF-8')) % 10000 # Force conversion to unsigned by bitwise AND with (2^32)-1.
gbb_hwid = upperhwid + ' ' + str(suffix).zfill(4) # See the docs for crc32 at https://docs.python.org/3/library/zlib.html
# for why '& 0xffffffff' is necessary.
crc = zlib.crc32(upperhwid.encode('UTF-8')) & 0xffffffff
gbb_hwid = upperhwid + ' ' + str(crc % 10000).zfill(4)
return gbb_hwid return gbb_hwid