aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominique Martinet <[email protected]>2022-11-22 09:06:56 +0900
committerDominique Martinet <[email protected]>2022-12-03 00:04:37 +0900
commitf15e006b831384aaec4b4f13265c0dff88ef09dd (patch)
treef0aad1fb29528093cdfd2281ca3072a9b35c192c
parent26273ade77f54716e30dfd40ac6e85ceb54ac0f9 (diff)
9p/xen: do not memcpy header into req->rc
while 'h' is packed and can be assumed to match the request payload, req->rc is a struct p9_fcall which is not packed and that memcpy could be wrong. Fix this by copying each fields individually instead. Reported-by: Christian Schoenebeck <[email protected]> Reviewed-by: Christian Schoenebeck <[email protected]> Suggested-by: Stefano Stabellini <[email protected]> Reviewed-by: Stefano Stabellini <[email protected]> Link: https://lkml.kernel.org/r/alpine.DEB.2.22.394.2211211454540.1049131@ubuntu-linux-20-04-desktop Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Dominique Martinet <[email protected]>
-rw-r--r--net/9p/trans_xen.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/9p/trans_xen.c b/net/9p/trans_xen.c
index aaa5fd364691..de2d2ca8819a 100644
--- a/net/9p/trans_xen.c
+++ b/net/9p/trans_xen.c
@@ -216,7 +216,9 @@ static void p9_xen_response(struct work_struct *work)
goto recv_error;
}
- memcpy(&req->rc, &h, sizeof(h));
+ req->rc.size = h.size;
+ req->rc.id = h.id;
+ req->rc.tag = h.tag;
req->rc.offset = 0;
masked_cons = xen_9pfs_mask(cons, XEN_9PFS_RING_SIZE(ring));