From patchwork Fri Dec 16 22:28:09 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sairam Venugopal X-Patchwork-Id: 706620 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3tgQ8W1N8Vz9t2N for ; Sat, 17 Dec 2016 09:34:03 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 19AFDC1D; Fri, 16 Dec 2016 22:28:25 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 73621BE6 for ; Fri, 16 Dec 2016 22:28:20 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from EX13-EDG-OU-002.vmware.com (ex13-edg-ou-002.vmware.com [208.91.0.190]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 8B918237 for ; Fri, 16 Dec 2016 22:28:16 +0000 (UTC) Received: from sc9-mailhost1.vmware.com (10.113.161.71) by EX13-EDG-OU-002.vmware.com (10.113.208.156) with Microsoft SMTP Server id 15.0.1156.6; Fri, 16 Dec 2016 14:27:20 -0800 Received: from vsairam-w01.vmware.com (htb-1s-eng-dhcp42.eng.vmware.com [10.33.78.42]) by sc9-mailhost1.vmware.com (Postfix) with ESMTP id 04740182DA; Fri, 16 Dec 2016 14:28:15 -0800 (PST) From: Sairam Venugopal To: Date: Fri, 16 Dec 2016 14:28:09 -0800 Message-ID: <20161216222812.128904-2-vsairam@vmware.com> X-Mailer: git-send-email 2.9.0.windows.1 In-Reply-To: <20161216222812.128904-1-vsairam@vmware.com> References: <20161216222812.128904-1-vsairam@vmware.com> MIME-Version: 1.0 Received-SPF: None (EX13-EDG-OU-002.vmware.com: vsairam@vmware.com does not designate permitted sender hosts) X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH v3 1/4] datapath-windows: Conntrack - Fix OvsGetTcpPayloadLength() X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org Move the OvsGetTcpPayloadLength() to common header. Update the code to check for null references and the correct size of the TCP header. Signed-off-by: Sairam Venugopal Acked-by: Alin Gabriel Serdean --- datapath-windows/ovsext/Conntrack-tcp.c | 15 --------------- datapath-windows/ovsext/Conntrack.h | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/datapath-windows/ovsext/Conntrack-tcp.c b/datapath-windows/ovsext/Conntrack-tcp.c index 1c46bb0..f533b93 100644 --- a/datapath-windows/ovsext/Conntrack-tcp.c +++ b/datapath-windows/ovsext/Conntrack-tcp.c @@ -184,21 +184,6 @@ OvsTcpGetWscale(const TCPHdr *tcp) return wscale; } -static __inline uint32_t -OvsGetTcpPayloadLength(PNET_BUFFER_LIST nbl) -{ - IPHdr *ipHdr; - char *ipBuf[sizeof(IPHdr)]; - PNET_BUFFER curNb; - curNb = NET_BUFFER_LIST_FIRST_NB(nbl); - ipHdr = NdisGetDataBuffer(curNb, sizeof *ipHdr, (PVOID) &ipBuf, - 1 /*no align*/, 0); - TCPHdr *tcp = (TCPHdr *)((PCHAR)ipHdr + ipHdr->ihl * 4); - return (UINT16)ntohs(ipHdr->tot_len) - - (ipHdr->ihl * 4) - - (sizeof * tcp); -} - static __inline struct conn_tcp* OvsCastConntrackEntryToTcpEntry(OVS_CT_ENTRY* conn) { diff --git a/datapath-windows/ovsext/Conntrack.h b/datapath-windows/ovsext/Conntrack.h index 270e2dd..733596d 100644 --- a/datapath-windows/ovsext/Conntrack.h +++ b/datapath-windows/ovsext/Conntrack.h @@ -109,6 +109,28 @@ OvsConntrackUpdateExpiration(OVS_CT_ENTRY *ctEntry, ctEntry->expiration = now + interval; } +static __inline UINT32 +OvsGetTcpPayloadLength(PNET_BUFFER_LIST nbl) +{ + IPHdr *ipHdr; + char *ipBuf[sizeof(IPHdr)]; + PNET_BUFFER curNb; + curNb = NET_BUFFER_LIST_FIRST_NB(nbl); + UINT32 hdrLen = sizeof(EthHdr); + NdisAdvanceNetBufferDataStart(curNb, hdrLen, FALSE, NULL); + ipHdr = NdisGetDataBuffer(curNb, sizeof *ipHdr, (PVOID) &ipBuf, + 1 /*no align*/, 0); + if (ipHdr == NULL) { + NdisRetreatNetBufferDataStart(curNb, hdrLen, 0, NULL); + return 0; + } + + TCPHdr *tcp = (TCPHdr *)((PCHAR)ipHdr + ipHdr->ihl * 4); + NdisRetreatNetBufferDataStart(curNb, hdrLen, 0, NULL); + + return (ntohs(ipHdr->tot_len) - (ipHdr->ihl * 4) - (TCP_HDR_LEN(tcp))); +} + VOID OvsCleanupConntrack(VOID); NTSTATUS OvsInitConntrack(POVS_SWITCH_CONTEXT context);