From 73a1bebeaa1bd9ce00b6178c76e420e827da79df Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Mon, 7 Oct 2019 17:31:17 -0700 Subject: FlattenableUtils::align memsets Bug: 141890807 Test: boot, check data is zero'd Change-Id: I45aaeac369f4c5cf3eb44f61c233e00f870a5c79 (cherry picked from commit bf824f8fa50d9f7390057278fefb58e83323a644) (cherry picked from commit e62a9d7669ac85844d4424474f5c88c096f7160b) --- libutils/include/utils/Flattenable.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'libutils') diff --git a/libutils/include/utils/Flattenable.h b/libutils/include/utils/Flattenable.h index 9d006023d..2c4b8075d 100644 --- a/libutils/include/utils/Flattenable.h +++ b/libutils/include/utils/Flattenable.h @@ -47,7 +47,12 @@ public: template static size_t align(void*& buffer) { - return align( const_cast(buffer) ); + static_assert(!(N & (N - 1)), "Can only align to a power of 2."); + void* b = buffer; + buffer = reinterpret_cast((uintptr_t(buffer) + (N-1)) & ~(N-1)); + size_t delta = size_t(uintptr_t(buffer) - uintptr_t(b)); + memset(b, 0, delta); + return delta; } static void advance(void*& buffer, size_t& size, size_t offset) { -- cgit v1.2.3