diff options
author | John Baldwin <jhb@FreeBSD.org> | 2019-06-05 23:37:50 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2019-06-05 23:37:50 +0000 |
commit | 4db23c74550f4dc3b46cc9120d1ccf52cf6ab259 (patch) | |
tree | e477202427e94c38ab5af5952abc7c09cbd3ede8 | |
parent | d32f14190b203ae8af35cc1c1453b8e938ec2889 (diff) | |
download | src-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.c | 9 |
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); |