|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 19/21] xenvif: Assert non-NULL pointers that code analysis cannot prove
Code analysis reports that some pointers could be NULL when passed to
functions that require a valid pointer: the grant entry and the MDL of a
pending receiver fragment, and the rings released in ReceiverTeardown and
TransmitterTeardown. They cannot be NULL here, because xenvif sets them
itself during setup. Assert this before each use.
Signed-off-by: Césaire Mounah <cesaire.mounah@xxxxxxxxxx>
---
src/xenvif/receiver.c | 6 ++++++
src/xenvif/transmitter.c | 2 ++
src/xenvif/vif.c | 26 ++++++++++++++++++++------
3 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index 68c2288..3249d91 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -1929,6 +1929,8 @@ __ReceiverRingEmpty(
Mdl = Fragment->Context;
Fragment->Context = NULL;
+ ASSERT3P(Fragment->Entry, !=, NULL);
+
(VOID) XENBUS_GNTTAB(RevokeForeignAccess,
&Receiver->GnttabInterface,
Ring->GnttabCache,
@@ -3668,6 +3670,10 @@ ReceiverTeardown(
while (--Index >= 0) {
PXENVIF_RECEIVER_RING Ring = Receiver->Ring[Index];
+ // As Ring is expected to be a valid pointer,
+ // we assert it is not NULL before proceeding.
+ ASSERT3P(Ring, !=, NULL);
+
Receiver->Ring[Index] = NULL;
__ReceiverRingTeardown(Ring);
}
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 3263089..d3d77bd 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -5022,6 +5022,8 @@ TransmitterTeardown(
while (--Index >= 0) {
PXENVIF_TRANSMITTER_RING Ring = Transmitter->Ring[Index];
+ ASSERT3P(Ring, !=, NULL);
+
Transmitter->Ring[Index] = NULL;
__TransmitterRingTeardown(Ring);
}
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index c8dc446..69ec6b1 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -249,9 +249,17 @@ VifCallbackVersion8(
_In_ union _XENVIF_VIF_CALLBACK_PARAMETERS_V9 *Parameters
)
{
- PXENVIF_VIF_CONTEXT Context = _Argument;
- XENVIF_VIF_CALLBACK_V8 Callback =
Context->CallbackVersion8;
- PVOID Argument =
Context->ArgumentVersion8;
+ PXENVIF_VIF_CONTEXT Context;
+ XENVIF_VIF_CALLBACK_V8 Callback;
+ PVOID Argument;
+
+ // As _Argument is expected to be a valid context pointer,
+ // we assert it is not NULL before proceeding.
+ ASSERT3P(_Argument, !=, NULL);
+ Context = _Argument;
+ Callback = Context->CallbackVersion8;
+ Argument = Context->ArgumentVersion8;
+
switch (Type) {
case XENVIF_TRANSMITTER_RETURN_PACKET: {
@@ -311,11 +319,17 @@ VifCallbackVersion9(
{
#define XENVIF_RECEIVER_QUEUE_MAX 1024 // Chosen to match IN_NDIS_MAX in XENNET
- PXENVIF_VIF_CONTEXT Context = _Argument;
- XENVIF_VIF_CALLBACK_V9 Callback =
Context->CallbackVersion9;
- PVOID Argument =
Context->ArgumentVersion9;
+ PXENVIF_VIF_CONTEXT Context;
+ XENVIF_VIF_CALLBACK_V9 Callback;
+ PVOID Argument;
union _XENVIF_VIF_CALLBACK_PARAMETERS_V9 ParametersVersion9;
+ ASSERT3P(_Argument, !=, NULL);
+
+ Context = _Argument;
+ Callback = Context->CallbackVersion9;
+ Argument = Context->ArgumentVersion9;
+
switch (Type) {
case XENVIF_TRANSMITTER_RETURN_PACKET:
ParametersVersion9.TransmitterReturnPacket.Cookie =
Parameters->TransmitterReturnPacket.Cookie;
--
2.55.0.windows.5
--
Césaire Mounah | Vates Windows Guest Tools Engineer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |