From f511c1f11895397606be103823fd3a33c6e92811 Mon Sep 17 00:00:00 2001 From: Ryan Salsamendi Date: Fri, 16 Jun 2017 13:15:31 -0700 Subject: arch/x86/ebda: Change memcpy() to endian wrappers Change memcpy()s and memset()s to endian.h wrappers for consistency and safety. Add zero_n() wrapper to safely clear memory. Change-Id: If155d82608c81992f05eae4d2223de6f506e98c5 Signed-off-by: Ryan Salsamendi Reviewed-on: https://review.coreboot.org/20240 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin --- src/arch/x86/ebda.c | 11 ++++++----- src/commonlib/include/commonlib/endian.h | 6 ++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/arch/x86/ebda.c b/src/arch/x86/ebda.c index b5dfb413ae..c828aa4f76 100644 --- a/src/arch/x86/ebda.c +++ b/src/arch/x86/ebda.c @@ -19,6 +19,7 @@ #include #include #include +#include void setup_ebda(u32 low_memory_size, u16 ebda_segment, u16 ebda_size) { @@ -38,15 +39,15 @@ void setup_ebda(u32 low_memory_size, u16 ebda_segment, u16 ebda_size) ebda = (void *)((uintptr_t)ebda_segment << 4); /* clear BIOS DATA AREA */ - memset(X86_BDA_BASE, 0, X86_BDA_SIZE); + zero_n(X86_BDA_BASE, X86_BDA_SIZE); /* Avoid unaligned write16() since it's undefined behavior */ - memcpy(X86_EBDA_LOWMEM, &low_memory_kb, sizeof(low_memory_kb)); - memcpy(X86_EBDA_SEGMENT, &ebda_segment, sizeof(ebda_segment)); + write_le16(X86_EBDA_LOWMEM, low_memory_kb); + write_le16(X86_EBDA_SEGMENT, ebda_segment); /* Set up EBDA */ - memset(ebda, 0, ebda_size); - memcpy(ebda, &ebda_kb, sizeof(ebda_kb)); + zero_n(ebda, ebda_size); + write_le16(ebda, ebda_kb); } void setup_default_ebda(void) diff --git a/src/commonlib/include/commonlib/endian.h b/src/commonlib/include/commonlib/endian.h index 1ec472f5d2..7b08eee7af 100644 --- a/src/commonlib/include/commonlib/endian.h +++ b/src/commonlib/include/commonlib/endian.h @@ -18,6 +18,7 @@ #include #include +#include /* Endian agnostic functions working on single byte. */ @@ -254,4 +255,9 @@ static inline void write_at_le64(void *dest, uint64_t val, size_t offset) write_le64(d, val); } +static inline void zero_n(void *dest, size_t n) +{ + memset(dest, 0, n); +} + #endif -- cgit v1.2.3