aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2022-11-11 15:01:27 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2023-01-26 19:43:26 +0000
commitb728765f88dde5b5454fac44dee2f7057d5bd85f (patch)
treeedeab3f89853aafb08776b0e511f3f0e46a5eec8
parent1f1b3763610a2e9f58ab50e811f279d8db164e3d (diff)
downloadsrc-b728765f88dde5b5454fac44dee2f7057d5bd85f.tar.gz
src-b728765f88dde5b5454fac44dee2f7057d5bd85f.zip
bhyve: Address warnings about potential unaligned accesses in fwctl.c
This silences some warning about potential unaligned accesses. No functional change intended. MFC after: 1 week Reviewed by: corvink, jhb Differential Revision: https://reviews.freebsd.org/D37288 (cherry picked from commit f64f34380925a4ddaf1c140c35f46408b74110ac)
-rw-r--r--usr.sbin/bhyve/fwctl.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/usr.sbin/bhyve/fwctl.c b/usr.sbin/bhyve/fwctl.c
index 46010513b66a..f74380a426b2 100644
--- a/usr.sbin/bhyve/fwctl.c
+++ b/usr.sbin/bhyve/fwctl.c
@@ -88,20 +88,17 @@ static struct op_info *ops[OP_MAX+1];
/* Return 0-padded uint32_t */
static uint32_t
-fwctl_send_rest(uint32_t *data, size_t len)
+fwctl_send_rest(uint8_t *data, size_t len)
{
union {
uint8_t c[4];
uint32_t w;
} u;
- uint8_t *cdata;
size_t i;
- cdata = (uint8_t *) data;
u.w = 0;
-
- for (i = 0, u.w = 0; i < len; i++)
- u.c[i] = *cdata++;
+ for (i = 0; i < len; i++)
+ u.c[i] = *data++;
return (u.w);
}
@@ -203,7 +200,7 @@ static void
fget_data(uint32_t data, uint32_t len __unused)
{
- *((uint32_t *) &fget_str[fget_cnt]) = data;
+ memcpy(&fget_str[fget_cnt], &data, sizeof(data));
fget_cnt += sizeof(uint32_t);
}
@@ -401,7 +398,7 @@ fwctl_request(uint32_t value)
static int
fwctl_response(uint32_t *retval)
{
- uint32_t *dp;
+ uint8_t *dp;
ssize_t remlen;
switch(rinfo.resp_count) {
@@ -425,10 +422,9 @@ fwctl_response(uint32_t *retval)
break;
default:
remlen = rinfo.resp_size - rinfo.resp_off;
- dp = (uint32_t *)
- ((uint8_t *)rinfo.resp_biov->iov_base + rinfo.resp_off);
+ dp = (uint8_t *)rinfo.resp_biov->iov_base + rinfo.resp_off;
if (remlen >= (ssize_t)sizeof(uint32_t)) {
- *retval = *dp;
+ memcpy(retval, dp, sizeof(uint32_t));
} else if (remlen > 0) {
*retval = fwctl_send_rest(dp, remlen);
}