From patchwork Sun Sep 3 15:21:55 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: 1829208 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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=kkQ5ENlE; dkim-atps=neutral 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=patchwork.ozlabs.org) 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 (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RdwVc0Thxz1yhH for ; Mon, 4 Sep 2023 01:22:16 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 909294071B; Sun, 3 Sep 2023 15:22:13 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 909294071B 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=kkQ5ENlE 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 W0ACNETe1EGe; Sun, 3 Sep 2023 15:22:12 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id 14DFE408C5; Sun, 3 Sep 2023 15:22:11 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 14DFE408C5 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id BE6E7C0DD6; Sun, 3 Sep 2023 15:22:08 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 777BDC0071 for ; Sun, 3 Sep 2023 15:22:06 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 31BB960ED3 for ; Sun, 3 Sep 2023 15:22:06 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 31BB960ED3 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=kkQ5ENlE 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 IGXpEPxba9CY for ; Sun, 3 Sep 2023 15:22:04 +0000 (UTC) Received: from mail-pf1-x42c.google.com (mail-pf1-x42c.google.com [IPv6:2607:f8b0:4864:20::42c]) by smtp3.osuosl.org (Postfix) with ESMTPS id 5BDE960C34 for ; Sun, 3 Sep 2023 15:22:04 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 5BDE960C34 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-68a3cae6d94so617629b3a.0 for ; Sun, 03 Sep 2023 08:22:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693754523; x=1694359323; darn=openvswitch.org; 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=haeqnC8yZGDBwRQzSvRiUCh3U4zM726gDRcXWeeNBWU=; b=kkQ5ENlEXVd3cYOStSjbddWBEym626zP0TQbsn0Iv4UDkWaMyZYxrgzKuwWFWx8upF hKY5BMBOaCVz0Hj4wCQaCEqrVmS2hBYHXnd5Hzp8kJ0ADIVulhk6Z+N96Dwy3YzeWwFb FZ6Ca4ALaKHSRQjPPc+KOlzB7vcwIEG1UrujPeCAgaWYDNV9j+gaNOpwh7Bvmfw0EJjt hAjTKKBee3nzXyeVIj7m6smBwygKZbl0U4SAlyuj7WZmYzhdxUC61CRPdr/mr4/Tbfr2 mxOHm9F7U4uEouD58f8w7cxc/7Viu/HsXKiZoL76rjvjDFMmb2QOKdsZyf+sfov3sDeM bM+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693754523; x=1694359323; 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=haeqnC8yZGDBwRQzSvRiUCh3U4zM726gDRcXWeeNBWU=; b=DQ3WlRyyi60PRP5G/poLjJFRZx7Gz+OLugsAsOYFHK+awW5tSwGdHLZyJKkmZiQyq6 Q0FT9RJkAkiJfFNTFKPsD5H7iV0AcR0SxupyBcAN2OeWMPW+V7ZB0CPGg+Gsxel/QSDw 1PZMTLx5xQst9SYyiF8kHM0GXsm45O6lBmWFKOJYGMuXOB8wWKn2LJIjm8qeQk6mOLPz WfIR1gxK2PFgxpE/eSwJJhlE7XxUURURfM9+JzsJTNTup3H34pq2oNNgXL013Ap4wV5S ju681YSvNqJMkTMPfz6ilWvca8JzU2OaB9GnkNfxIV8Oky+9gLVBl4XChMaYtDt2Vh3v s3Bw== X-Gm-Message-State: AOJu0Yw1O46HCLqU146GKuaTz0V0Oy4kh81GPnYKYsDX98/8mAXLURIw rIjIOQIs7peKjjiRdYk/6af4H3xYWhM= X-Google-Smtp-Source: AGHT+IG8IMQetmdBHL5kneVwIsXmzb9r0WMqHwKiBRLvUyDgzwpcDiJsHqNPFnK2NGLX+Yvvo3n88Q== X-Received: by 2002:a05:6a00:1583:b0:68a:33fc:a07d with SMTP id u3-20020a056a00158300b0068a33fca07dmr9750273pfk.2.1693754523527; Sun, 03 Sep 2023 08:22:03 -0700 (PDT) Received: from JRT-PC.lan ([124.197.103.187]) by smtp.gmail.com with ESMTPSA id e22-20020aa78256000000b0068c676f1df7sm5880268pfn.57.2023.09.03.08.22.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Sep 2023 08:22:03 -0700 (PDT) From: James Raphael Tiovalen To: dev@openvswitch.org Date: Sun, 3 Sep 2023 23:21:55 +0800 Message-ID: <20230903152155.753998-3-jamestiotio@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230903152155.753998-1-jamestiotio@gmail.com> References: <20230903152155.753998-1-jamestiotio@gmail.com> MIME-Version: 1.0 Cc: Simon Horman , James Raphael Tiovalen Subject: [ovs-dev] [PATCH v16 2/2] lib, ovsdb, vtep: Add various null pointer checks 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 various null pointer checks to some files in the `lib`, `ovsdb`, and `vtep` directories to fix several Coverity defects. These changes are grouped together as they perform similar checks, returning early, skipping some action, or logging a warning if a null pointer is encountered. Signed-off-by: James Raphael Tiovalen Reviewed-by: Simon Horman Acked-by: Eelco Chaudron --- lib/dp-packet.c | 8 ++++---- lib/dpctl.c | 12 ++++++++++++ lib/shash.c | 4 ++++ lib/sset.c | 5 +++++ ovsdb/jsonrpc-server.c | 2 +- ovsdb/monitor.c | 3 +++ ovsdb/ovsdb-client.c | 6 ++++-- ovsdb/row.c | 5 ++++- vtep/vtep-ctl.c | 17 +++++++++-------- 9 files changed, 46 insertions(+), 16 deletions(-) diff --git a/lib/dp-packet.c b/lib/dp-packet.c index 8bc747c10..ed004c3b9 100644 --- a/lib/dp-packet.c +++ b/lib/dp-packet.c @@ -360,7 +360,7 @@ void * dp_packet_put_zeros(struct dp_packet *b, size_t size) { void *dst = dp_packet_put_uninit(b, size); - memset(dst, 0, size); + nullable_memset(dst, 0, size); return dst; } @@ -371,7 +371,7 @@ void * dp_packet_put(struct dp_packet *b, const void *p, size_t size) { void *dst = dp_packet_put_uninit(b, size); - memcpy(dst, p, size); + nullable_memcpy(dst, p, size); return dst; } @@ -443,7 +443,7 @@ void * dp_packet_push_zeros(struct dp_packet *b, size_t size) { void *dst = dp_packet_push_uninit(b, size); - memset(dst, 0, size); + nullable_memset(dst, 0, size); return dst; } @@ -454,7 +454,7 @@ void * dp_packet_push(struct dp_packet *b, const void *p, size_t size) { void *dst = dp_packet_push_uninit(b, size); - memcpy(dst, p, size); + nullable_memcpy(dst, p, size); return dst; } diff --git a/lib/dpctl.c b/lib/dpctl.c index 79b82a176..cd12625a1 100644 --- a/lib/dpctl.c +++ b/lib/dpctl.c @@ -336,6 +336,12 @@ dpctl_add_if(int argc OVS_UNUSED, const char *argv[], value = ""; } + if (!key) { + dpctl_error(dpctl_p, 0, "Invalid option format"); + error = EINVAL; + goto next; + } + if (!strcmp(key, "type")) { type = value; } else if (!strcmp(key, "port_no")) { @@ -454,6 +460,12 @@ dpctl_set_if(int argc, const char *argv[], struct dpctl_params *dpctl_p) value = ""; } + if (!key) { + dpctl_error(dpctl_p, 0, "Invalid option format"); + error = EINVAL; + goto next_destroy_args; + } + if (!strcmp(key, "type")) { if (strcmp(value, type)) { dpctl_error(dpctl_p, 0, diff --git a/lib/shash.c b/lib/shash.c index 6af985d0b..92260cddf 100644 --- a/lib/shash.c +++ b/lib/shash.c @@ -205,6 +205,10 @@ shash_delete(struct shash *sh, struct shash_node *node) char * shash_steal(struct shash *sh, struct shash_node *node) { + if (!node) { + return NULL; + } + char *name = node->name; hmap_remove(&sh->map, &node->node); diff --git a/lib/sset.c b/lib/sset.c index aa1790020..fda268129 100644 --- a/lib/sset.c +++ b/lib/sset.c @@ -261,6 +261,11 @@ char * sset_pop(struct sset *set) { const char *name = SSET_FIRST(set); + + if (!name) { + return NULL; + } + char *copy = xstrdup(name); sset_delete(set, SSET_NODE_FROM_NAME(name)); return copy; diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c index 9a77760c3..a3ca48a7b 100644 --- a/ovsdb/jsonrpc-server.c +++ b/ovsdb/jsonrpc-server.c @@ -1038,7 +1038,7 @@ ovsdb_jsonrpc_session_got_request(struct ovsdb_jsonrpc_session *s, request->id); } else if (!strcmp(request->method, "get_schema")) { struct ovsdb *db = ovsdb_jsonrpc_lookup_db(s, request, &reply); - if (!reply) { + if (db && !reply) { reply = jsonrpc_create_reply(ovsdb_schema_to_json(db->schema), request->id); } diff --git a/ovsdb/monitor.c b/ovsdb/monitor.c index 9829cd39c..4ccb51b1a 100644 --- a/ovsdb/monitor.c +++ b/ovsdb/monitor.c @@ -483,6 +483,7 @@ ovsdb_monitor_add_column(struct ovsdb_monitor *dbmon, struct ovsdb_monitor_column *c; mt = shash_find_data(&dbmon->tables, table->schema->name); + ovs_assert(mt); /* Check for column duplication. Return duplicated column name. */ if (mt->columns_index_map[column->index] != -1) { @@ -813,6 +814,8 @@ ovsdb_monitor_table_condition_update( struct ovsdb_error *error; struct ovsdb_condition cond = OVSDB_CONDITION_INITIALIZER(&cond); + ovs_assert(mtc); + error = ovsdb_condition_from_json(table->schema, cond_json, NULL, &cond); if (error) { diff --git a/ovsdb/ovsdb-client.c b/ovsdb/ovsdb-client.c index 46484630d..7249805ba 100644 --- a/ovsdb/ovsdb-client.c +++ b/ovsdb/ovsdb-client.c @@ -1843,7 +1843,7 @@ do_dump(struct jsonrpc *rpc, const char *database, struct ovsdb_schema *schema; struct json *transaction; - const struct shash_node *node, **tables; + const struct shash_node *node, **tables = NULL; size_t n_tables; struct ovsdb_table_schema *tschema; const struct shash *columns; @@ -1869,8 +1869,10 @@ do_dump(struct jsonrpc *rpc, const char *database, shash_add(&custom_columns, argv[i], node->data); } } else { - tables = shash_sort(&schema->tables); n_tables = shash_count(&schema->tables); + if (n_tables) { + tables = shash_sort(&schema->tables); + } } /* Construct transaction to retrieve entire database. */ diff --git a/ovsdb/row.c b/ovsdb/row.c index 2b52b6816..6b52509a9 100644 --- a/ovsdb/row.c +++ b/ovsdb/row.c @@ -406,7 +406,10 @@ ovsdb_row_set_add_row(struct ovsdb_row_set *set, const struct ovsdb_row *row) set->rows = x2nrealloc(set->rows, &set->allocated_rows, sizeof *set->rows); } - set->rows[set->n_rows++] = row; + + if (set->rows) { + set->rows[set->n_rows++] = row; + } } struct json * diff --git a/vtep/vtep-ctl.c b/vtep/vtep-ctl.c index 61ec4801e..26b8540b4 100644 --- a/vtep/vtep-ctl.c +++ b/vtep/vtep-ctl.c @@ -1859,18 +1859,21 @@ del_mcast_entry(struct ctl_context *ctx, const char *encap, const char *dst_ip, bool local) { struct vtep_ctl_context *vtepctl_ctx = vtep_ctl_context_cast(ctx); + struct vteprec_physical_locator_set *ploc_set_cfg; + struct vteprec_physical_locator *ploc_cfg; struct vtep_ctl_mcast_mac *mcast_mac; struct shash *mcast_shash; - struct vteprec_physical_locator *ploc_cfg; - struct vteprec_physical_locator_set *ploc_set_cfg; + struct shash_node *mcast_node; mcast_shash = local ? &ls->mcast_local : &ls->mcast_remote; - mcast_mac = shash_find_data(mcast_shash, mac); - if (!mcast_mac) { + mcast_node = shash_find(mcast_shash, mac); + if (!mcast_node || !mcast_node->data) { return; } + mcast_mac = mcast_node->data; + ploc_cfg = find_ploc(vtepctl_ctx, encap, dst_ip); if (!ploc_cfg) { /* Couldn't find the physical locator, so just ignore. */ @@ -1883,8 +1886,6 @@ del_mcast_entry(struct ctl_context *ctx, del_ploc_from_mcast_mac(mcast_mac, ploc_cfg); if (ovs_list_is_empty(&mcast_mac->locators)) { - struct shash_node *node = shash_find(mcast_shash, mac); - vteprec_physical_locator_set_delete(ploc_set_cfg); if (local) { @@ -1893,8 +1894,8 @@ del_mcast_entry(struct ctl_context *ctx, vteprec_mcast_macs_remote_delete(mcast_mac->remote_cfg); } - free(node->data); - shash_delete(mcast_shash, node); + free(mcast_node->data); + shash_delete(mcast_shash, mcast_node); } else { if (local) { vteprec_mcast_macs_local_set_locator_set(mcast_mac->local_cfg,