diff options
author | Alin Serdean <aserdean@cloudbasesolutions.com> | 2017-07-14 04:40:57 +0000 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2017-08-02 11:32:07 -0700 |
commit | 1c5875f7d9d7dd93aa319265fdeaf971c871b010 (patch) | |
tree | 252692db0c1d78890020a193baa08b2c122fecea /datapath-windows/ovsext/IpHelper.c | |
parent | f0aeea81bd27f1d757df531890bbf0ad3bbbc111 (diff) | |
download | openvswitch-1c5875f7d9d7dd93aa319265fdeaf971c871b010.tar.gz |
datapath-windows: fix excessive stack usage in iphelper
`OvsGetOrResolveIPNeigh` uses a stack over 1024 bytes.
Switch one parameter to be a pointer.
Found using WDK 8.1 static code analysis.
Signed-off-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Shashank Ram <rams@vmware.com>
Diffstat (limited to 'datapath-windows/ovsext/IpHelper.c')
-rw-r--r-- | datapath-windows/ovsext/IpHelper.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/datapath-windows/ovsext/IpHelper.c b/datapath-windows/ovsext/IpHelper.c index 555351a5c..3021c3c6a 100644 --- a/datapath-windows/ovsext/IpHelper.c +++ b/datapath-windows/ovsext/IpHelper.c @@ -485,7 +485,7 @@ OvsResolveIPNeighEntry(PMIB_IPNET_ROW2 ipNeigh) NTSTATUS -OvsGetOrResolveIPNeigh(MIB_IF_ROW2 ipRow, +OvsGetOrResolveIPNeigh(PMIB_IF_ROW2 ipRow, UINT32 ipAddr, PMIB_IPNET_ROW2 ipNeigh) { @@ -494,8 +494,8 @@ OvsGetOrResolveIPNeigh(MIB_IF_ROW2 ipRow, ASSERT(ipNeigh); RtlZeroMemory(ipNeigh, sizeof (*ipNeigh)); - ipNeigh->InterfaceLuid.Value = ipRow.InterfaceLuid.Value; - ipNeigh->InterfaceIndex = ipRow.InterfaceIndex; + ipNeigh->InterfaceLuid.Value = ipRow->InterfaceLuid.Value; + ipNeigh->InterfaceIndex = ipRow->InterfaceIndex; ipNeigh->Address.si_family = AF_INET; ipNeigh->Address.Ipv4.sin_addr.s_addr = ipAddr; @@ -503,8 +503,8 @@ OvsGetOrResolveIPNeigh(MIB_IF_ROW2 ipRow, if (status != STATUS_SUCCESS) { RtlZeroMemory(ipNeigh, sizeof (*ipNeigh)); - ipNeigh->InterfaceLuid.Value = ipRow.InterfaceLuid.Value; - ipNeigh->InterfaceIndex = ipRow.InterfaceIndex; + ipNeigh->InterfaceLuid.Value = ipRow->InterfaceLuid.Value; + ipNeigh->InterfaceIndex = ipRow->InterfaceIndex; ipNeigh->Address.si_family = AF_INET; ipNeigh->Address.Ipv4.sin_addr.s_addr = ipAddr; status = OvsResolveIPNeighEntry(ipNeigh); @@ -1643,7 +1643,7 @@ OvsHandleFwdRequest(POVS_IP_HELPER_REQUEST request) if (ipAddr == 0) { ipAddr = request->fwdReq.tunnelKey.dst; } - status = OvsGetOrResolveIPNeigh(instance->internalRow, + status = OvsGetOrResolveIPNeigh(&instance->internalRow, ipAddr, &ipNeigh); if (status != STATUS_SUCCESS) { ExReleaseResourceLite(&instance->lock); @@ -1935,11 +1935,10 @@ OvsStartIpHelper(PVOID data) MIB_IPNET_ROW2 ipNeigh; NTSTATUS status; POVS_IPHELPER_INSTANCE instance = (POVS_IPHELPER_INSTANCE)ipn->context; - MIB_IF_ROW2 internalRow = instance->internalRow; NdisReleaseSpinLock(&ovsIpHelperLock); ExAcquireResourceExclusiveLite(&ovsInstanceListLock, TRUE); - status = OvsGetOrResolveIPNeigh(internalRow, + status = OvsGetOrResolveIPNeigh(&instance->internalRow, ipAddr, &ipNeigh); OvsUpdateIPNeighEntry(ipAddr, &ipNeigh, status); |