summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/Vport.c
diff options
context:
space:
mode:
authorNithin Raju <nithin@vmware.com>2016-05-19 15:31:49 -0700
committerJoe Stringer <joe@ovn.org>2016-05-25 10:25:24 -0700
commit7e98ed23669f423daca1bc4731bbd467cee726e2 (patch)
tree0bc7257e5b2cb3d70909f49cb89ffd066a9cf85f /datapath-windows/ovsext/Vport.c
parent57b99edd7eb351c76e3785effbf8463437202abf (diff)
downloadopenvswitch-7e98ed23669f423daca1bc4731bbd467cee726e2.tar.gz
datapath-windows: o/p buffer must fit NL error message
OVS_IOCTL_WRITE and OVS_IOCTL_TRANSACT can generate a netlink error that is represented by a OVS_MESSAGE_ERROR struct. We want to make sure at the entry point of the ioctl processing that the output buffer is big enough to hold the error message. We were earlier checking for struct OVS_MESSAGE which is smaller. Since we are ensuring that output buffer can fit OVS_MESSAGE_ERROR at the top of the ioctl function, there's no need to check for that later. Signed-off-by: Nithin Raju <nithin@vmware.com> Acked-by: Paul-Daniel Boca <pboca@cloudbasesolutions.com> Signed-off-by: Joe Stringer <joe@ovn.org>
Diffstat (limited to 'datapath-windows/ovsext/Vport.c')
-rw-r--r--datapath-windows/ovsext/Vport.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c
index 429916961..222b2c145 100644
--- a/datapath-windows/ovsext/Vport.c
+++ b/datapath-windows/ovsext/Vport.c
@@ -1729,9 +1729,10 @@ cleanup:
if (nlError != NL_ERROR_SUCCESS) {
POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR)
usrParamsCtx->outputBuffer;
- UINT32 msgErrorLen = usrParamsCtx->outputLength;
- NlBuildErrorMsg(msgIn, msgError, msgErrorLen, nlError, replyLen);
+ ASSERT(msgError);
+ NlBuildErrorMsg(msgIn, msgError, nlError, replyLen);
+ ASSERT(*replyLen != 0);
}
return STATUS_SUCCESS;
@@ -2088,9 +2089,10 @@ Cleanup:
if (nlError != NL_ERROR_SUCCESS) {
POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR)
usrParamsCtx->outputBuffer;
- UINT32 msgErrorLen = usrParamsCtx->outputLength;
- NlBuildErrorMsg(msgIn, msgError, msgErrorLen, nlError, replyLen);
+ ASSERT(msgError);
+ NlBuildErrorMsg(msgIn, msgError, nlError, replyLen);
+ ASSERT(*replyLen != 0);
}
return STATUS_SUCCESS;
@@ -2324,7 +2326,6 @@ Cleanup:
if ((nlError != NL_ERROR_SUCCESS) && (nlError != NL_ERROR_PENDING)) {
POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR)
usrParamsCtx->outputBuffer;
- UINT32 msgErrorLen = usrParamsCtx->outputLength;
if (vport && vportAllocated == TRUE) {
if (vportInitialized == TRUE) {
@@ -2344,7 +2345,9 @@ Cleanup:
OvsFreeMemoryWithTag(vport, OVS_VPORT_POOL_TAG);
}
- NlBuildErrorMsg(msgIn, msgError, msgErrorLen, nlError, replyLen);
+ ASSERT(msgError);
+ NlBuildErrorMsg(msgIn, msgError, nlError, replyLen);
+ ASSERT(*replyLen != 0);
}
return (status == STATUS_PENDING) ? STATUS_PENDING : STATUS_SUCCESS;
@@ -2452,9 +2455,10 @@ Cleanup:
if (nlError != NL_ERROR_SUCCESS) {
POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR)
usrParamsCtx->outputBuffer;
- UINT32 msgErrorLen = usrParamsCtx->outputLength;
- NlBuildErrorMsg(msgIn, msgError, msgErrorLen, nlError, replyLen);
+ ASSERT(msgError);
+ NlBuildErrorMsg(msgIn, msgError, nlError, replyLen);
+ ASSERT(*replyLen != 0);
}
return STATUS_SUCCESS;
@@ -2544,9 +2548,10 @@ Cleanup:
if ((nlError != NL_ERROR_SUCCESS) && (nlError != NL_ERROR_PENDING)) {
POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR)
usrParamsCtx->outputBuffer;
- UINT32 msgErrorLen = usrParamsCtx->outputLength;
- NlBuildErrorMsg(msgIn, msgError, msgErrorLen, nlError, replyLen);
+ ASSERT(msgError);
+ NlBuildErrorMsg(msgIn, msgError, nlError, replyLen);
+ ASSERT(*replyLen != 0);
}
return (status == STATUS_PENDING) ? STATUS_PENDING : STATUS_SUCCESS;
@@ -2579,11 +2584,10 @@ OvsTunnelVportPendingRemove(PVOID context,
*replyLen = msgOut->nlMsg.nlmsgLen;
} else {
- POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR)
- tunnelContext->outputBuffer;
- UINT32 msgErrorLen = tunnelContext->outputLength;
-
- NlBuildErrorMsg(msgIn, msgError, msgErrorLen, nlError, replyLen);
+ POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR)msgOut;
+ ASSERT(msgError);
+ NlBuildErrorMsg(msgIn, msgError, nlError, replyLen);
+ ASSERT(*replyLen != 0);
}
}
@@ -2722,13 +2726,13 @@ OvsTunnelVportPendingInit(PVOID context,
} while (error);
if (error) {
- POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR)
- tunnelContext->outputBuffer;
- UINT32 msgErrorLen = tunnelContext->outputLength;
+ POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR)msgOut;
OvsCleanupVxlanTunnel(NULL, vport, NULL, NULL);
OvsFreeMemory(vport);
- NlBuildErrorMsg(msgIn, msgError, msgErrorLen, nlError, replyLen);
+ ASSERT(msgError);
+ NlBuildErrorMsg(msgIn, msgError, nlError, replyLen);
+ ASSERT(*replyLen != 0);
}
}