From patchwork Sat Apr 15 15:21:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Raphael Tiovalen X-Patchwork-Id: 1769291 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=CQLqY6yU; dkim-atps=neutral Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4PzHBC2m7zz23rw for ; Sun, 16 Apr 2023 01:22:42 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 8E2CB41DF1; Sat, 15 Apr 2023 15:22:38 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 8E2CB41DF1 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=CQLqY6yU X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id BJyCNAJOIHEp; Sat, 15 Apr 2023 15:22:36 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id F035641D0B; Sat, 15 Apr 2023 15:22:33 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org F035641D0B Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0491BC008B; Sat, 15 Apr 2023 15:22:32 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3E17AC0036 for ; Sat, 15 Apr 2023 15:22:30 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id AA70661150 for ; Sat, 15 Apr 2023 15:22:25 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org AA70661150 Authentication-Results: smtp3.osuosl.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=CQLqY6yU X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id T8tWAHDRJhYN for ; Sat, 15 Apr 2023 15:22:23 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org A38CF6114A Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by smtp3.osuosl.org (Postfix) with ESMTPS id A38CF6114A for ; Sat, 15 Apr 2023 15:22:23 +0000 (UTC) Received: by mail-pj1-x102f.google.com with SMTP id cm18-20020a17090afa1200b0024713adf69dso9165673pjb.3 for ; Sat, 15 Apr 2023 08:22:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681572142; x=1684164142; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pgww9SGvuEVl/RE+aC+ul6B41wpvhJ8YpQFUUhzuI4U=; b=CQLqY6yUpLfPKCQq8QihOSFFZC71h4zF0pcMvvGopualXXbG0yt7cnrczK9dP2HsF0 GSd4AEyTwVqKePxaXpbs40wVvgE7a+wBCmdIKclhSKuIBeKDA6v2iZqfivKsYgW5IPbF w2q+OHj+OCnR/u6RrkwFflI5i8MEOSsxQKFPVNtwJbOF1nG/yS0HuU2xM+yEng3NrvVG M5ri/jhZtMPRfj+nb5rSHo42ttbts+rw++OOpVtrEBqKJ8CVrtAinZXqOkzuSVAG0yWS 672mIRwIWfX4b+SNYQl2kKSjLuL5ZaKvnT5KET4Mk+PCQRRi3uKMGIXhnoDg8Qg14bmx gw5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681572142; x=1684164142; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pgww9SGvuEVl/RE+aC+ul6B41wpvhJ8YpQFUUhzuI4U=; b=cXN+JNpVzPt/+WhfCS+2YxvatuU+Pnn33+y9RFXj1PtcLWUcdbB39HKA156rQgeQZv 0nRcE+n+x7iDFmvypluicm16rIxX/fcoOH86bGvICdzNV0JGUObU72wBf5GGOTaZzV9W 22uWIYTijyiR8cEjaFgB13A7ZB+9Iv985w/exBIa1l1jhryK0JmLvOlCvqo+0cmRQoSa N2uDsCkPiKXyYCvU6pBA3SQSRPL1gbAqedc5cke6bT7LNDM6NkIx0Pt+f5+8gCMH0w7U eUOr0T6MIUQCfOkYko0WEVweDMx8BHas0KLj4mhh5xuLJC6299llz4vgCDiQ9d8W0YWY LPgA== X-Gm-Message-State: AAQBX9fx7sq74kwW8UleOmfM+Wnk632TMnqQ/beJnjxqfJBlDygoRwrF pbDOk5yvY5lYY3yMvHHKd+YaUI/CB/H/zw== X-Google-Smtp-Source: AKy350a7qedhUd/h2dG0gyIuwIrsa7Tvvfi7csBqMsPMh9PAK85BCRAyWmUHDo6zwy3qSj2FSeufmA== X-Received: by 2002:a17:903:1388:b0:1a2:8940:6dbd with SMTP id jx8-20020a170903138800b001a289406dbdmr6249497plb.45.1681572142583; Sat, 15 Apr 2023 08:22:22 -0700 (PDT) Received: from JRT-PC.lan ([103.252.200.22]) by smtp.gmail.com with ESMTPSA id v12-20020a170902b7cc00b001a65fa33e62sm4796606plz.154.2023.04.15.08.22.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 15 Apr 2023 08:22:22 -0700 (PDT) From: James Raphael Tiovalen To: dev@openvswitch.org Date: Sat, 15 Apr 2023 23:21:48 +0800 Message-Id: <20230415152155.762025-2-jamestiotio@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415152155.762025-1-jamestiotio@gmail.com> References: <20230415152155.762025-1-jamestiotio@gmail.com> MIME-Version: 1.0 Cc: James Raphael Tiovalen Subject: [ovs-dev] [PATCH v7 1/8] lib: Add non-null assertions to return value of `dp_packet_data` X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" This commit adds some `ovs_assert()` checks to the return values of `dp_packet_data()` to ensure that they are not NULL and to prevent null-pointer dereferences, which might lead to unwanted crashes. We use assertions since it should be impossible for `dp_packet_data()` to return NULL. Signed-off-by: James Raphael Tiovalen --- lib/dp-packet.c | 15 ++++++++++----- lib/netdev-native-tnl.c | 17 +++++++++++------ lib/pcap-file.c | 4 +++- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/lib/dp-packet.c b/lib/dp-packet.c index ae8ab5800..445cb4761 100644 --- a/lib/dp-packet.c +++ b/lib/dp-packet.c @@ -183,9 +183,12 @@ dp_packet_clone_with_headroom(const struct dp_packet *buffer, size_t headroom) struct dp_packet *new_buffer; uint32_t mark; - new_buffer = dp_packet_clone_data_with_headroom(dp_packet_data(buffer), - dp_packet_size(buffer), - headroom); + const void *data_dp = dp_packet_data(buffer); + ovs_assert(data_dp); + + new_buffer = dp_packet_clone_data_with_headroom(data_dp, + dp_packet_size(buffer), + headroom); /* Copy the following fields into the returned buffer: l2_pad_size, * l2_5_ofs, l3_ofs, l4_ofs, cutlen, packet_type and md. */ memcpy(&new_buffer->l2_pad_size, &buffer->l2_pad_size, @@ -322,8 +325,10 @@ dp_packet_shift(struct dp_packet *b, int delta) : true); if (delta != 0) { - char *dst = (char *) dp_packet_data(b) + delta; - memmove(dst, dp_packet_data(b), dp_packet_size(b)); + const void *data_dp = dp_packet_data(b); + ovs_assert(data_dp); + char *dst = (char *) data_dp + delta; + memmove(dst, data_dp, dp_packet_size(b)); dp_packet_set_data(b, dst); } } diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c index 9abdf5107..c1551aa35 100644 --- a/lib/netdev-native-tnl.c +++ b/lib/netdev-native-tnl.c @@ -43,6 +43,7 @@ #include "seq.h" #include "unaligned.h" #include "unixctl.h" +#include "util.h" #include "openvswitch/vlog.h" VLOG_DEFINE_THIS_MODULE(native_tnl); @@ -221,12 +222,13 @@ netdev_tnl_calc_udp_csum(struct udp_header *udp, struct dp_packet *packet, { uint32_t csum; - if (netdev_tnl_is_header_ipv6(dp_packet_data(packet))) { - csum = packet_csum_pseudoheader6(netdev_tnl_ipv6_hdr( - dp_packet_data(packet))); + void *data_dp = dp_packet_data(packet); + ovs_assert(data_dp); + + if (netdev_tnl_is_header_ipv6(data_dp)) { + csum = packet_csum_pseudoheader6(netdev_tnl_ipv6_hdr(data_dp)); } else { - csum = packet_csum_pseudoheader(netdev_tnl_ip_hdr( - dp_packet_data(packet))); + csum = packet_csum_pseudoheader(netdev_tnl_ip_hdr(data_dp)); } csum = csum_continue(csum, udp, ip_tot_size); @@ -425,7 +427,10 @@ netdev_gre_pop_header(struct dp_packet *packet) struct flow_tnl *tnl = &md->tunnel; int hlen = sizeof(struct eth_header) + 4; - hlen += netdev_tnl_is_header_ipv6(dp_packet_data(packet)) ? + const void *data_dp = dp_packet_data(packet); + ovs_assert(data_dp); + + hlen += netdev_tnl_is_header_ipv6(data_dp) ? IPV6_HEADER_LEN : IP_HEADER_LEN; pkt_metadata_init_tnl(md); diff --git a/lib/pcap-file.c b/lib/pcap-file.c index 3ed7ea488..9f4e2e1e2 100644 --- a/lib/pcap-file.c +++ b/lib/pcap-file.c @@ -284,6 +284,8 @@ ovs_pcap_write(struct pcap_file *p_file, struct dp_packet *buf) struct timeval tv; ovs_assert(dp_packet_is_eth(buf)); + const void *data_dp = dp_packet_data(buf); + ovs_assert(data_dp); xgettimeofday(&tv); prh.ts_sec = tv.tv_sec; @@ -291,7 +293,7 @@ ovs_pcap_write(struct pcap_file *p_file, struct dp_packet *buf) prh.incl_len = dp_packet_size(buf); prh.orig_len = dp_packet_size(buf); ignore(fwrite(&prh, sizeof prh, 1, p_file->file)); - ignore(fwrite(dp_packet_data(buf), dp_packet_size(buf), 1, p_file->file)); + ignore(fwrite(data_dp, dp_packet_size(buf), 1, p_file->file)); fflush(p_file->file); }