diff --git a/firmware/Makefile b/firmware/Makefile index 67ed1565bc..99f33f216a 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -35,6 +35,7 @@ LIB_SRCS = \ ./lib/rollback_index.c \ ./lib/stateful_util.c \ ./lib/tpm_lite/tlcl.c \ + ./lib/utility.c \ ./lib/vboot_common.c \ ./lib/vboot_firmware.c \ ./lib/vboot_kernel.c diff --git a/firmware/include/utility.h b/firmware/include/utility.h index 0e05ee3be0..a412fd8251 100644 --- a/firmware/include/utility.h +++ b/firmware/include/utility.h @@ -54,6 +54,10 @@ int Memcmp(const void* src1, const void* src2, size_t n); /* Copy [n] bytes from [src] to [dest]. */ void* Memcpy(void* dest, const void* src, uint64_t n); + +/* Implementations of the functions below must be built as part of the firmware + * and defined in lib/utility.c */ + /* Set [n] bytes starting at [s] to [c]. */ void* Memset(void *dest, const uint8_t c, uint64_t n); @@ -72,5 +76,4 @@ int SafeMemcmp(const void* s1, const void* s2, size_t n); #define memset _do_not_use_standard_memset #endif - #endif /* VBOOT_REFERENCE_UTILITY_H_ */ diff --git a/firmware/lib/stateful_util.c b/firmware/lib/stateful_util.c index 137ea77aef..1d824fc23e 100644 --- a/firmware/lib/stateful_util.c +++ b/firmware/lib/stateful_util.c @@ -2,8 +2,7 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * - * Stub implementations of utility functions which call their linux-specific - * equivalents. + * Implementations of stateful memory operations. */ #include "stateful_util.h" diff --git a/firmware/lib/utility.c b/firmware/lib/utility.c new file mode 100644 index 0000000000..0ed9712e52 --- /dev/null +++ b/firmware/lib/utility.c @@ -0,0 +1,31 @@ +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Utility functions that need to be built as part of the firmware. + */ + +#include "utility.h" + +void* Memset(void* d, const uint8_t c, uint64_t n) { + uint8_t* dest = d; /* the only way to keep both cl and gcc happy */ + while (n--) { + *dest++ = c; + } + return dest; +} + +int SafeMemcmp(const void* s1, const void* s2, size_t n) { + int result = 0; + if (0 == n) + return 1; + + const unsigned char* us1 = s1; + const unsigned char* us2 = s2; + /* Code snippet without data-dependent branch due to + * Nate Lawson (nate@root.org) of Root Labs. */ + while (n--) + result |= *us1++ ^ *us2++; + + return result != 0; +} diff --git a/firmware/stub/utility_stub.c b/firmware/stub/utility_stub.c index ed58e0b24c..6141785698 100644 --- a/firmware/stub/utility_stub.c +++ b/firmware/stub/utility_stub.c @@ -51,27 +51,3 @@ int Memcmp(const void* src1, const void* src2, size_t n) { void* Memcpy(void* dest, const void* src, uint64_t n) { return memcpy(dest, src, (size_t)n); } - -void* Memset(void* d, const uint8_t c, uint64_t n) { - uint8_t* dest = d; /* the only way to keep both cl and gcc happy */ - while (n--) { - *dest++ = c; - } - return dest; -} - - -int SafeMemcmp(const void* s1, const void* s2, size_t n) { - int result = 0; - if (0 == n) - return 1; - - const unsigned char* us1 = s1; - const unsigned char* us2 = s2; - /* Code snippet without data-dependent branch due to - * Nate Lawson (nate@root.org) of Root Labs. */ - while (n--) - result |= *us1++ ^ *us2++; - - return result != 0; -} diff --git a/firmware/version.c b/firmware/version.c index b75fc3ae23..05cace3c8b 100644 --- a/firmware/version.c +++ b/firmware/version.c @@ -1 +1 @@ -char* VbootVersion = "VBOOv=736cf3ee"; +char* VbootVersion = "VBOOv=834ce682";