aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2019-06-05 23:37:50 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2019-06-05 23:37:50 +0000
commit4db23c74550f4dc3b46cc9120d1ccf52cf6ab259 (patch)
treee477202427e94c38ab5af5952abc7c09cbd3ede8
parentd32f14190b203ae8af35cc1c1453b8e938ec2889 (diff)
downloadsrc-4db23c74550f4dc3b46cc9120d1ccf52cf6ab259.tar.gz
src-4db23c74550f4dc3b46cc9120d1ccf52cf6ab259.zip
Use parse_integer to avoid sign extension.
Coverity warned about gdb_write_mem sign extending the result of parse_byte shifted left by 24 bits when generating a 32-bit memory write value for MMIO. Simplify the code by using parse_integer instead of unrolled parse_byte calls. CID: 1401600 Reviewed by: cem MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D20508
Notes
Notes: svn path=/head/; revision=348712
-rw-r--r--usr.sbin/bhyve/gdb.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/usr.sbin/bhyve/gdb.c b/usr.sbin/bhyve/gdb.c
index 3571a4e2b604..2de639022c8b 100644
--- a/usr.sbin/bhyve/gdb.c
+++ b/usr.sbin/bhyve/gdb.c
@@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$");
#ifndef WITHOUT_CAPSICUM
#include <sys/capsicum.h>
#endif
+#include <sys/endian.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/socket.h>
@@ -953,14 +954,10 @@ gdb_write_mem(const uint8_t *data, size_t len)
val = parse_byte(data);
} else if (gpa & 2 || todo == 2) {
bytes = 2;
- val = parse_byte(data) |
- (parse_byte(data + 2) << 8);
+ val = be16toh(parse_integer(data, 4));
} else {
bytes = 4;
- val = parse_byte(data) |
- (parse_byte(data + 2) << 8) |
- (parse_byte(data + 4) << 16) |
- (parse_byte(data + 6) << 24);
+ val = be32toh(parse_integer(data, 8));
}
error = write_mem(ctx, cur_vcpu, gpa, val,
bytes);