Messages in this thread | | | From | Haiyang Zhang <> | Subject | RE: [PATCH 3/3] hv_netvsc: Use vmbus_requestor to generate transaction IDs for VMBus hardening | Date | Thu, 25 Jun 2020 18:57:51 +0000 |
| |
> -----Original Message----- > From: Andres Beltran <lkmlabelt@gmail.com> > Sent: Thursday, June 25, 2020 11:37 AM > To: KY Srinivasan <kys@microsoft.com>; Haiyang Zhang > <haiyangz@microsoft.com>; Stephen Hemminger <sthemmin@microsoft.com>; > wei.liu@kernel.org > Cc: linux-hyperv@vger.kernel.org; linux-kernel@vger.kernel.org; Michael > Kelley <mikelley@microsoft.com>; parri.andrea@gmail.com; Andres Beltran > <lkmlabelt@gmail.com>; David S. Miller <davem@davemloft.net>; Jakub > Kicinski <kuba@kernel.org>; netdev@vger.kernel.org > Subject: [PATCH 3/3] hv_netvsc: Use vmbus_requestor to generate transaction > IDs for VMBus hardening > > Currently, pointers to guest memory are passed to Hyper-V as > transaction IDs in netvsc. In the face of errors or malicious > behavior in Hyper-V, netvsc should not expose or trust the transaction > IDs returned by Hyper-V to be valid guest memory addresses. Instead, > use small integers generated by vmbus_requestor as requests > (transaction) IDs. > > Cc: "David S. Miller" <davem@davemloft.net> > Cc: Jakub Kicinski <kuba@kernel.org> > Cc: netdev@vger.kernel.org > Signed-off-by: Andres Beltran <lkmlabelt@gmail.com> > --- > drivers/net/hyperv/hyperv_net.h | 10 +++++ > drivers/net/hyperv/netvsc.c | 75 +++++++++++++++++++++++++------ > drivers/net/hyperv/rndis_filter.c | 1 + > include/linux/hyperv.h | 1 + > 4 files changed, 73 insertions(+), 14 deletions(-) > > diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h > index abda736e7c7d..14735c98e798 100644 > --- a/drivers/net/hyperv/hyperv_net.h > +++ b/drivers/net/hyperv/hyperv_net.h > @@ -847,6 +847,16 @@ struct nvsp_message { > > #define NETVSC_XDP_HDRM 256 > > +#define NETVSC_MIN_OUT_MSG_SIZE (sizeof(struct vmpacket_descriptor) + \ > + sizeof(struct nvsp_message)) > +#define NETVSC_MIN_IN_MSG_SIZE sizeof(struct vmpacket_descriptor) > + > +/* Estimated requestor size: > + * out_ring_size/min_out_msg_size + in_ring_size/min_in_msg_size > + */ > +#define NETVSC_RQSTOR_SIZE (netvsc_ring_bytes / > NETVSC_MIN_OUT_MSG_SIZE + \ > + netvsc_ring_bytes / NETVSC_MIN_IN_MSG_SIZE)
Please make the variable as the macro parameter for readability: #define NETVSC_RQSTOR_SIZE(ringbytes) (ringbytes / NETVSC_MIN_OUT_MSG_SIZE ...
Then put the actual variable name when you use the macro.
Thanks, - Haiyang
| |