Signed-off-by: Sairam Venugopal <vsai...@vmware.com> --- datapath-windows/ovsext/Datapath.c | 10 +++++++--- datapath-windows/ovsext/Flow.c | 17 ++++++++++++----- datapath-windows/ovsext/Netlink/Netlink.c | 18 ++++++++++-------- datapath-windows/ovsext/Netlink/Netlink.h | 6 ++++-- datapath-windows/ovsext/User.c | 8 +++++--- datapath-windows/ovsext/Vport.c | 18 ++++++++++++------ 6 files changed, 50 insertions(+), 27 deletions(-)
diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c index 4af909c..8c72533 100644 --- a/datapath-windows/ovsext/Datapath.c +++ b/datapath-windows/ovsext/Datapath.c @@ -1180,7 +1180,8 @@ OvsSubscribeEventCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, POVS_MESSAGE msgIn = (POVS_MESSAGE)usrParamsCtx->inputBuffer; rc = NlAttrParse(&msgIn->nlMsg, sizeof (*msgIn), - NlMsgAttrsLen((PNL_MSG_HDR)msgIn), policy, attrs, ARRAY_SIZE(attrs)); + NlMsgAttrsLen((PNL_MSG_HDR)msgIn), policy, ARRAY_SIZE(policy), + attrs, ARRAY_SIZE(attrs)); if (!rc) { status = STATUS_INVALID_PARAMETER; goto done; @@ -1349,7 +1350,9 @@ HandleDpTransactionCommon(POVS_USER_PARAMS_CONTEXT usrParamsCtx, if (!NlAttrParse((PNL_MSG_HDR)msgIn, NLMSG_HDRLEN + GENL_HDRLEN + OVS_HDRLEN, NlMsgAttrsLen((PNL_MSG_HDR)msgIn), - ovsDatapathSetPolicy, dpAttrs, ARRAY_SIZE(dpAttrs))) { + ovsDatapathSetPolicy, + ARRAY_SIZE(ovsDatapathSetPolicy), + dpAttrs, ARRAY_SIZE(dpAttrs))) { return STATUS_INVALID_PARAMETER; } @@ -1654,7 +1657,8 @@ OvsSubscribePacketCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, POVS_MESSAGE msgIn = (POVS_MESSAGE)usrParamsCtx->inputBuffer; rc = NlAttrParse(&msgIn->nlMsg, sizeof (*msgIn), - NlMsgAttrsLen((PNL_MSG_HDR)msgIn), policy, attrs, ARRAY_SIZE(attrs)); + NlMsgAttrsLen((PNL_MSG_HDR)msgIn), policy, ARRAY_SIZE(policy), + attrs, ARRAY_SIZE(attrs)); if (!rc) { status = STATUS_INVALID_PARAMETER; goto done; diff --git a/datapath-windows/ovsext/Flow.c b/datapath-windows/ovsext/Flow.c index 69b546a..5e61d3b 100644 --- a/datapath-windows/ovsext/Flow.c +++ b/datapath-windows/ovsext/Flow.c @@ -171,6 +171,7 @@ const NL_POLICY nlFlowKeyPolicy[] = { .maxLen = 4, .optional = TRUE}, [OVS_KEY_ATTR_MPLS] = {.type = NL_A_VAR_LEN, .optional = TRUE} }; +const UINT32 nlFlowKeyPolicyLen = ARRAY_SIZE(nlFlowKeyPolicy); /* For Parsing nested OVS_KEY_ATTR_TUNNEL attributes */ const NL_POLICY nlFlowTunnelKeyPolicy[] = { @@ -272,7 +273,8 @@ OvsFlowNlCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, /* Get all the top level Flow attributes */ if ((NlAttrParse(nlMsgHdr, attrOffset, NlMsgAttrsLen(nlMsgHdr), - nlFlowPolicy, nlAttrs, ARRAY_SIZE(nlAttrs))) + nlFlowPolicy, ARRAY_SIZE(nlFlowPolicy), + nlAttrs, ARRAY_SIZE(nlAttrs))) != TRUE) { OVS_LOG_ERROR("Attr Parsing failed for msg: %p", nlMsgHdr); @@ -446,7 +448,8 @@ _FlowNlGetCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, /* Get all the top level Flow attributes */ if ((NlAttrParse(nlMsgHdr, attrOffset, NlMsgAttrsLen(nlMsgHdr), - nlFlowPolicy, nlAttrs, ARRAY_SIZE(nlAttrs))) + nlFlowPolicy, ARRAY_SIZE(nlFlowPolicy), + nlAttrs, ARRAY_SIZE(nlAttrs))) != TRUE) { OVS_LOG_ERROR("Attr Parsing failed for msg: %p", nlMsgHdr); @@ -460,7 +463,8 @@ _FlowNlGetCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, /* Get flow keys attributes */ if ((NlAttrParseNested(nlMsgHdr, keyAttrOffset, NlAttrLen(nlAttrs[OVS_FLOW_ATTR_KEY]), - nlFlowKeyPolicy, keyAttrs, ARRAY_SIZE(keyAttrs))) + nlFlowKeyPolicy, ARRAY_SIZE(nlFlowKeyPolicy), + keyAttrs, ARRAY_SIZE(keyAttrs))) != TRUE) { OVS_LOG_ERROR("Key Attr Parsing failed for msg: %p", nlMsgHdr); @@ -476,7 +480,8 @@ _FlowNlGetCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, /* Get tunnel keys attributes */ if ((NlAttrParseNested(nlMsgHdr, tunnelKeyAttrOffset, NlAttrLen(keyAttrs[OVS_KEY_ATTR_TUNNEL]), - nlFlowTunnelKeyPolicy, + nlFlowTunnelKeyPolicy, + ARRAY_SIZE(nlFlowTunnelKeyPolicy), tunnelAttrs, ARRAY_SIZE(tunnelAttrs))) != TRUE) { OVS_LOG_ERROR("Tunnel key Attr Parsing failed for msg: %p", @@ -1182,7 +1187,8 @@ _MapNlToFlowPut(POVS_MESSAGE msgIn, PNL_ATTR keyAttr, /* Get flow keys attributes */ if ((NlAttrParseNested(nlMsgHdr, keyAttrOffset, NlAttrLen(keyAttr), - nlFlowKeyPolicy, keyAttrs, ARRAY_SIZE(keyAttrs))) + nlFlowKeyPolicy, ARRAY_SIZE(nlFlowKeyPolicy), + keyAttrs, ARRAY_SIZE(keyAttrs))) != TRUE) { OVS_LOG_ERROR("Key Attr Parsing failed for msg: %p", nlMsgHdr); @@ -1199,6 +1205,7 @@ _MapNlToFlowPut(POVS_MESSAGE msgIn, PNL_ATTR keyAttr, if ((NlAttrParseNested(nlMsgHdr, tunnelKeyAttrOffset, NlAttrLen(keyAttrs[OVS_KEY_ATTR_TUNNEL]), nlFlowTunnelKeyPolicy, + ARRAY_SIZE(nlFlowTunnelKeyPolicy), tunnelAttrs, ARRAY_SIZE(tunnelAttrs))) != TRUE) { OVS_LOG_ERROR("Tunnel key Attr Parsing failed for msg: %p", diff --git a/datapath-windows/ovsext/Netlink/Netlink.c b/datapath-windows/ovsext/Netlink/Netlink.c index a62d760..a66fb38 100644 --- a/datapath-windows/ovsext/Netlink/Netlink.c +++ b/datapath-windows/ovsext/Netlink/Netlink.c @@ -1046,15 +1046,16 @@ NlAttrFindNested(const PNL_ATTR nla, UINT16 type) BOOLEAN NlAttrParse(const PNL_MSG_HDR nlMsg, UINT32 attrOffset, UINT32 totalAttrLen, - const NL_POLICY policy[], - PNL_ATTR attrs[], UINT32 n_attrs) + const NL_POLICY policy[], const UINT32 numPolicy, + PNL_ATTR attrs[], UINT32 numAttrs) { PNL_ATTR nla; UINT32 left; UINT32 iter; BOOLEAN ret = FALSE; + UINT32 numPolicyAttr = MIN(numPolicy, numAttrs); - RtlZeroMemory(attrs, n_attrs * sizeof *attrs); + RtlZeroMemory(attrs, numAttrs * sizeof *attrs); /* There is nothing to parse */ @@ -1073,7 +1074,7 @@ NlAttrParse(const PNL_MSG_HDR nlMsg, UINT32 attrOffset, totalAttrLen) { UINT16 type = NlAttrType(nla); - if (type < n_attrs && policy[type].type != NL_A_NO_ATTR) { + if (type < numPolicyAttr && policy[type].type != NL_A_NO_ATTR) { /* Typecasting to keep the compiler happy */ const PNL_POLICY e = (const PNL_POLICY)(&policy[type]); if (!NlAttrValidate(nla, e)) { @@ -1094,7 +1095,7 @@ NlAttrParse(const PNL_MSG_HDR nlMsg, UINT32 attrOffset, goto done; } - for (iter = 0; iter < n_attrs; iter++) { + for (iter = 0; iter < numPolicyAttr; iter++) { const PNL_POLICY e = (const PNL_POLICY)(&policy[iter]); if (!e->optional && e->type != NL_A_NO_ATTR && !attrs[iter]) { OVS_LOG_ERROR("Required attr:%d missing", iter); @@ -1120,9 +1121,10 @@ done: BOOLEAN NlAttrParseNested(const PNL_MSG_HDR nlMsg, UINT32 attrOffset, UINT32 totalAttrLen, - const NL_POLICY policy[], - PNL_ATTR attrs[], UINT32 n_attrs) + const NL_POLICY policy[], const UINT32 numPolicy, + PNL_ATTR attrs[], UINT32 numAttrs) { return NlAttrParse(nlMsg, attrOffset + NLA_HDRLEN, - totalAttrLen - NLA_HDRLEN, policy, attrs, n_attrs); + totalAttrLen - NLA_HDRLEN, policy, numPolicy, + attrs, numAttrs); } diff --git a/datapath-windows/ovsext/Netlink/Netlink.h b/datapath-windows/ovsext/Netlink/Netlink.h index 36ffee9..a520ccf 100644 --- a/datapath-windows/ovsext/Netlink/Netlink.h +++ b/datapath-windows/ovsext/Netlink/Netlink.h @@ -133,10 +133,12 @@ const PNL_ATTR NlAttrFindNested(const PNL_ATTR nla, UINT16 type); BOOLEAN NlAttrParse(const PNL_MSG_HDR nlMsg, UINT32 attrOffset, UINT32 totalAttrLen, const NL_POLICY policy[], - PNL_ATTR attrs[], UINT32 n_attrs); + const UINT32 numPolicy, PNL_ATTR attrs[], + UINT32 numAttrs); BOOLEAN NlAttrParseNested(const PNL_MSG_HDR nlMsg, UINT32 attrOffset, UINT32 totalAttrLen, const NL_POLICY policy[], - PNL_ATTR attrs[], UINT32 n_attrs); + const UINT32 numPolicy, PNL_ATTR attrs[], + UINT32 numAttrs); /* * -------------------------------------------------------------------------- * Returns the length of attribute. diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c index 213e9c7..8045e9a 100644 --- a/datapath-windows/ovsext/User.c +++ b/datapath-windows/ovsext/User.c @@ -48,6 +48,7 @@ OVS_USER_STATS ovsUserStats; static VOID _MapNlAttrToOvsPktExec(PNL_ATTR *nlAttrs, PNL_ATTR *keyAttrs, OvsPacketExecute *execute); extern NL_POLICY nlFlowKeyPolicy[]; +extern UINT32 nlFlowKeyPolicyLen; static __inline VOID OvsAcquirePidHashLock() @@ -339,7 +340,8 @@ OvsNlExecuteCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, /* Get all the top level Flow attributes */ if ((NlAttrParse(nlMsgHdr, attrOffset, NlMsgAttrsLen(nlMsgHdr), - nlPktExecPolicy, nlAttrs, ARRAY_SIZE(nlAttrs))) + nlPktExecPolicy, ARRAY_SIZE(nlPktExecPolicy), + nlAttrs, ARRAY_SIZE(nlAttrs))) != TRUE) { OVS_LOG_ERROR("Attr Parsing failed for msg: %p", nlMsgHdr); @@ -353,8 +355,8 @@ OvsNlExecuteCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, /* Get flow keys attributes */ if ((NlAttrParseNested(nlMsgHdr, keyAttrOffset, NlAttrLen(nlAttrs[OVS_PACKET_ATTR_KEY]), - nlFlowKeyPolicy, keyAttrs, - ARRAY_SIZE(keyAttrs))) != TRUE) { + nlFlowKeyPolicy, nlFlowKeyPolicyLen, + keyAttrs, ARRAY_SIZE(keyAttrs))) != TRUE) { OVS_LOG_ERROR("Key Attr Parsing failed for msg: %p", nlMsgHdr); status = STATUS_UNSUCCESSFUL; goto done; diff --git a/datapath-windows/ovsext/Vport.c b/datapath-windows/ovsext/Vport.c index 0537c1f..6b74ec2 100644 --- a/datapath-windows/ovsext/Vport.c +++ b/datapath-windows/ovsext/Vport.c @@ -1634,7 +1634,8 @@ OvsGetNetdevCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, if (!NlAttrParse((PNL_MSG_HDR)msgIn, NLMSG_HDRLEN + GENL_HDRLEN + OVS_HDRLEN, NlMsgAttrsLen((PNL_MSG_HDR)msgIn), - ovsNetdevPolicy, netdevAttrs, ARRAY_SIZE(netdevAttrs))) { + ovsNetdevPolicy, ARRAY_SIZE(ovsNetdevPolicy), + netdevAttrs, ARRAY_SIZE(netdevAttrs))) { return STATUS_INVALID_PARAMETER; } @@ -1974,7 +1975,8 @@ OvsGetVport(POVS_USER_PARAMS_CONTEXT usrParamsCtx, if (!NlAttrParse((PNL_MSG_HDR)msgIn, NLMSG_HDRLEN + GENL_HDRLEN + OVS_HDRLEN, NlMsgAttrsLen((PNL_MSG_HDR)msgIn), - ovsVportPolicy, vportAttrs, ARRAY_SIZE(vportAttrs))) { + ovsVportPolicy, ARRAY_SIZE(ovsVportPolicy), + vportAttrs, ARRAY_SIZE(vportAttrs))) { return STATUS_INVALID_PARAMETER; } @@ -2115,7 +2117,8 @@ OvsNewVportCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, if (!NlAttrParse((PNL_MSG_HDR)msgIn, NLMSG_HDRLEN + GENL_HDRLEN + OVS_HDRLEN, NlMsgAttrsLen((PNL_MSG_HDR)msgIn), - ovsVportPolicy, vportAttrs, ARRAY_SIZE(vportAttrs))) { + ovsVportPolicy, ARRAY_SIZE(ovsVportPolicy), + vportAttrs, ARRAY_SIZE(vportAttrs))) { return STATUS_INVALID_PARAMETER; } @@ -2329,7 +2332,8 @@ OvsSetVportCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, if (!NlAttrParse((PNL_MSG_HDR)msgIn, NLMSG_HDRLEN + GENL_HDRLEN + OVS_HDRLEN, NlMsgAttrsLen((PNL_MSG_HDR)msgIn), - ovsVportPolicy, vportAttrs, ARRAY_SIZE(vportAttrs))) { + ovsVportPolicy, ARRAY_SIZE(ovsVportPolicy), + vportAttrs, ARRAY_SIZE(vportAttrs))) { return STATUS_INVALID_PARAMETER; } @@ -2431,7 +2435,8 @@ OvsDeleteVportCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, if (!NlAttrParse((PNL_MSG_HDR)msgIn, NLMSG_HDRLEN + GENL_HDRLEN + OVS_HDRLEN, NlMsgAttrsLen((PNL_MSG_HDR)msgIn), - ovsVportPolicy, vportAttrs, ARRAY_SIZE(vportAttrs))) { + ovsVportPolicy, ARRAY_SIZE(ovsVportPolicy), + vportAttrs, ARRAY_SIZE(vportAttrs))) { return STATUS_INVALID_PARAMETER; } @@ -2587,7 +2592,8 @@ OvsTunnelVportPendingInit(PVOID context, if (!NlAttrParse((PNL_MSG_HDR)msgIn, NLMSG_HDRLEN + GENL_HDRLEN + OVS_HDRLEN, NlMsgAttrsLen((PNL_MSG_HDR)msgIn), - ovsVportPolicy, vportAttrs, ARRAY_SIZE(vportAttrs))) { + ovsVportPolicy, ARRAY_SIZE(ovsVportPolicy), + vportAttrs, ARRAY_SIZE(vportAttrs))) { nlError = NL_ERROR_INVAL; break; } -- 2.5.0.windows.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev