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
This commit is contained in:
John Baldwin 2019-06-05 23:37:50 +00:00
parent d32f14190b
commit 4db23c7455
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=348712

View File

@ -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);