summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--util/cbmem/Makefile5
-rw-r--r--util/cbmem/cbmem.c24
2 files changed, 6 insertions, 23 deletions
diff --git a/util/cbmem/Makefile b/util/cbmem/Makefile
index 9219a08f3c03..0c88aebbbed5 100644
--- a/util/cbmem/Makefile
+++ b/util/cbmem/Makefile
@@ -4,6 +4,7 @@
PROGRAM = cbmem
TOP ?= $(abspath ../..)
ROOT = $(TOP)/src
+COMMONLIB = $(ROOT)/commonlib
CC ?= $(CROSS_COMPILE)gcc
INSTALL ?= /usr/bin/env install
PREFIX ?= /usr/local
@@ -13,14 +14,14 @@ CFLAGS += -Wall -Wextra -Wmissing-prototypes -Wshadow $(WERROR)
CPPFLAGS += -I . -I $(ROOT)/commonlib/include -I $(ROOT)/commonlib/bsd/include
CPPFLAGS += -include $(ROOT)/commonlib/bsd/include/commonlib/bsd/compiler.h
-OBJS = $(PROGRAM).o
+OBJS = $(PROGRAM).o $(COMMONLIB)/bsd/ipchksum.o
all: $(PROGRAM)
$(PROGRAM): $(OBJS)
clean:
- rm -f $(PROGRAM) *.o .dependencies *~ junit.xml
+ rm -f $(PROGRAM) $(OBJS:.c=.o) .dependencies *~ junit.xml
install: $(PROGRAM)
$(INSTALL) -d $(DESTDIR)$(PREFIX)/sbin/
diff --git a/util/cbmem/cbmem.c b/util/cbmem/cbmem.c
index d33b714d224b..15b677031526 100644
--- a/util/cbmem/cbmem.c
+++ b/util/cbmem/cbmem.c
@@ -19,6 +19,7 @@
#include <assert.h>
#include <regex.h>
#include <commonlib/bsd/cbmem_id.h>
+#include <commonlib/bsd/ipchksum.h>
#include <commonlib/bsd/tpm_log_defs.h>
#include <commonlib/loglevel.h>
#include <commonlib/timestamp_serialized.h>
@@ -199,25 +200,6 @@ static void *aligned_memcpy(void *dest, const void *src, size_t n)
return dest;
}
-/*
- * calculate ip checksum (16 bit quantities) on a passed in buffer. In case
- * the buffer length is odd last byte is excluded from the calculation
- */
-static u16 ipchcksum(const void *addr, unsigned size)
-{
- const u16 *p = addr;
- unsigned i, n = size / 2; /* don't expect odd sized blocks */
- u32 sum = 0;
-
- for (i = 0; i < n; i++)
- sum += p[i];
-
- sum = (sum >> 16) + (sum & 0xffff);
- sum += (sum >> 16);
- sum = ~sum & 0xffff;
- return (u16) sum;
-}
-
/* Find the first cbmem entry filling in the details. */
static int find_cbmem_entry(uint32_t id, uint64_t *addr, size_t *size)
{
@@ -400,7 +382,7 @@ static int parse_cbtable(u64 address, size_t table_size)
lbh = buf + i;
if (memcmp(lbh->signature, "LBIO", sizeof(lbh->signature)) ||
!lbh->header_bytes ||
- ipchcksum(lbh, sizeof(*lbh))) {
+ ipchksum(lbh, sizeof(*lbh))) {
continue;
}
@@ -411,7 +393,7 @@ static int parse_cbtable(u64 address, size_t table_size)
continue;
}
- if (ipchcksum(mapping_virt(&table_mapping), lbh->table_bytes) !=
+ if (ipchksum(mapping_virt(&table_mapping), lbh->table_bytes) !=
lbh->table_checksum) {
debug("Signature found, but wrong checksum.\n");
unmap_memory(&table_mapping);