From patchwork Tue Nov 3 19:30:27 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gert Doering X-Patchwork-Id: 5584 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:6022:4121:b0:118:2077:975e with SMTP id d33csp1092256laa; Tue, 3 Nov 2026 11:30:48 -0800 (PST) X-Forwarded-Encrypted: i=2; AKwUvBxSXIPfXS1MwmBB8/iXV98EkW/p3kFC/LuqSJPzc9nodpGB5u+GhOep3FNnffXnbu0iPHten00XB9I=@openvpn.net X-Received: by 2002:a05:7301:9e43:b0:36c:a2cb:6ad0 with SMTP id 5a478bee46e88-36ca2cb6d90mr518544eec.8.1793734248039; Tue, 03 Nov 2026 11:30:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1793734248; cv=none; d=google.com; s=arc-20260327; b=pcxWahHs3mMEhF5XePS53inXtFYwFCUuzfYpHDaoq25bE+Ys47TnR2CUyfiZL4rRR+ 2zLS5VGeI1D1ilnN+KTjtp8Say79t6cACzoYXsvkWABLchSZycrlbu1TwLVBmn6RUcRi xcUpEYJDthWujaMR3Fmo6wueycCDw+AUGQ5MNmYNHh8fij/VgXX7OPZ2mJdx5SPZm7fC PqegffMXXF/EeWm8L/gOXL6EAlngmIFohCpfKHMCU0ykCvaJtZKuE2PSMvrPsTVN08Qd lIh+UQMutbB3nHGXGxI137Oh8+u8LhLF5KgSiu5nC07cH0/Ao6OyqVK2jlu87VUfi1Hq Mfrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=errors-to:content-transfer-encoding:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:references:in-reply-to:message-id:date:to:from :dkim-signature:dkim-signature:dkim-signature; bh=G90gntmvTYBuSEYfmlen3b9y0Xn9T+kZ9UHwlm0vewU=; fh=4NbAC/LsuMLI0S0hprUlLSLCiHwg6SCAifhH718Jh0Q=; b=NNbq9KBzOFQxqRqR5MpGw23EDNLvYGHlyrudmwCWIBNHAazGgemxnfeUgUga+GWr/O m1cDVlI8BLpseHycEnFgJU9mT42MVrZRTiFi49Bs0ssgmMf1QQqkoARcFKVs8zPD/PcI ZwNTsC8Qux+Bf984vfLgF+yy09k2CtJ16Vpe1QZx4cAXK3ajfs90Zs8ZttogyioSi6DD 4xMnft/vtL7m8m2YnmtkPMABl0qBoEizg+Qwx151Nu/Y0+LZAgHN3qAI4QiYf9hZ2y86 cZjPF28diPDPpLrtV1VkIgNuaDS6yn65t8f3nqGt5ZbbhhXMi5svqA4G0aBC7FHXkdWS hwGg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lists.sourceforge.net header.s=beta header.b=PZiXC4zc; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=JI8i1wLk; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=EQPBOKlC; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=muc.de Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id 5a478bee46e88-36ca39d61a6si313748eec.82.2026.11.03.11.30.47 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 Nov 2026 11:30:48 -0800 (PST) Received-SPF: pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) client-ip=216.105.38.7; Authentication-Results: mx.google.com; dkim=pass header.i=@lists.sourceforge.net header.s=beta header.b=PZiXC4zc; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=JI8i1wLk; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=EQPBOKlC; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=muc.de DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Transfer-Encoding:Content-Type: List-Subscribe:List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Subject:MIME-Version:References:In-Reply-To:Message-ID:Date:To:From:Sender: Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Unsubscribe-Post: List-Owner; bh=G90gntmvTYBuSEYfmlen3b9y0Xn9T+kZ9UHwlm0vewU=; b=PZiXC4zc2LbzdK sjv/UnR/kHtb9mfMCIFu+g+56o0d9iw34Ep8c/hcWdjRLiPnjd/Rve2my4ylFsxpJ8E7bjOYtjhn9 utZJg+gIYMi3iM5r53rOA3PoGTjARu/udQFwkrNj9ggwinre/52CYbTn1aZAGtUe9xYGbBrwlfrqE RqE=; Received: from [127.0.0.1] (helo=sfs-ml-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.100.1) (envelope-from ) id 1xOKDV-000000001HU-3RpI; Tue, 03 Nov 2026 19:30:45 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.100.1) (envelope-from ) id 1xOKDT-000000001HO-3ci8 for openvpn-devel@lists.sourceforge.net; Tue, 03 Nov 2026 19:30:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Unsubscribe-Post:List-Subscribe:List-Post:List-Owner:List-Archive; bh=0C4nJ16W9QlcP4uJmPlgcl21z+DDP13YsMbPeS3OhyA=; b=JI8i1wLki0kEFSByQcEfdLfIc9 qNfpFRj/kgXj/LsagkODVCN7VJZ5ll1w7US4rR+k+TzF+Wzt3eJyLjWxiy1Fgo3irEKXNEfxHfJu1 r2tOUlMAmTEGkBXEOgG02u/S6XVkn5jZuqyzd2RyuhRetYj+85pPDuDVCZsXwzWUkAyo=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID: Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Unsubscribe-Post: List-Subscribe:List-Post:List-Owner:List-Archive; bh=0C4nJ16W9QlcP4uJmPlgcl21z+DDP13YsMbPeS3OhyA=; b=EQPBOKlCuNggbaec/aRmvT+TCW 9iHlvX7RHbA642Ctg/0Es7G3XibDCH4XNL5VEDkhU75Q2+JXkJ6yimsphb+EccpjD/3nnZYC9wjzT Vd8b7ypLN7EoSifdBoa9z04GT5q6vMJAj3wDbDusxYfbGy9NjR/xauXg9e+KotEBTBTM=; Received: from [193.149.48.129] (helo=blue.greenie.muc.de) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.100.1) id 1xOKDQ-000000006IQ-34S1 for openvpn-devel@lists.sourceforge.net; Tue, 03 Nov 2026 19:30:43 +0000 Received: from blue.greenie.muc.de (localhost [127.0.0.1]) by blue.greenie.muc.de (8.18.1/8.18.1) with ESMTP id 6A3JUXY6014045 for ; Tue, 3 Nov 2026 20:30:33 +0100 Received: (from gert@localhost) by blue.greenie.muc.de (8.18.2/8.18.1/Submit) id 6A3JUXm3014044 for openvpn-devel@lists.sourceforge.net; Tue, 3 Nov 2026 20:30:33 +0100 From: Gert Doering To: openvpn-devel@lists.sourceforge.net Date: Tue, 3 Nov 2026 20:30:27 +0100 Message-ID: <20261103193033.14032-1-gert@greenie.muc.de> X-Mailer: git-send-email 2.55.0 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Score: 1.3 (+) X-Spam-Report: Spam detection software, running on the system "sfi-spamd-1.hosts.colo.sdot.me", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Arne Schwabe All the iproute2 functions use the gc only to create local variables and strings to ultimately pass to openvpn_execve_check. These do not need to live longer than the function that calls openvpn_execv [...] Content analysis details: (1.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS X-Headers-End: 1xOKDQ-000000006IQ-34S1 Subject: [Openvpn-devel] [PATCH v1] Move gc from openvpn_net_ctx_t to local variables X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox X-GMAIL-THRID: 1880866683223622430 X-GMAIL-MSGID: 1880866683223622430 From: Arne Schwabe All the iproute2 functions use the gc only to create local variables and strings to ultimately pass to openvpn_execve_check. These do not need to live longer than the function that calls openvpn_execve_check Change-Id: I494a427924ea501382275ea96ef85a6abcd780e5 Signed-off-by: Arne Schwabe Acked-by: Antonio Quartulli Acked-by: Razvan Cojocaru Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/2105 --- This change was reviewed on Gerrit and approved by at least one developer. I request to merge it to master. Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/2105 This mail reflects revision 1 of this Change. Acked-by according to Gerrit (reflected above): Antonio Quartulli Razvan Cojocaru diff --git a/src/openvpn/networking_iproute2.c b/src/openvpn/networking_iproute2.c index f091fb3..4685465 100644 --- a/src/openvpn/networking_iproute2.c +++ b/src/openvpn/networking_iproute2.c @@ -43,21 +43,19 @@ { ctx->es = c->es; } - ctx->gc = gc_new(); - return 0; } void net_ctx_reset(openvpn_net_ctx_t *ctx) { - gc_reset(&ctx->gc); + (void)ctx; } void net_ctx_free(openvpn_net_ctx_t *ctx) { - gc_free(&ctx->gc); + (void)ctx; } int @@ -147,13 +145,15 @@ net_addr_v4_add(openvpn_net_ctx_t *ctx, const char *iface, const in_addr_t *addr, int prefixlen) { struct argv argv = argv_new(); + struct gc_arena gc = gc_new(); - const char *addr_str = print_in_addr_t(*addr, 0, &ctx->gc); + const char *addr_str = print_in_addr_t(*addr, 0, &gc); argv_printf(&argv, "%s addr add dev %s %s/%d broadcast +", iproute_path, iface, addr_str, prefixlen); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, S_FATAL, "Linux ip addr add failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -164,12 +164,15 @@ int prefixlen) { struct argv argv = argv_new(); - char *addr_str = (char *)print_in6_addr(*addr, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + + char *addr_str = (char *)print_in6_addr(*addr, 0, &gc); argv_printf(&argv, "%s -6 addr add %s/%d dev %s", iproute_path, addr_str, prefixlen, iface); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, S_FATAL, "Linux ip -6 addr add failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -179,13 +182,16 @@ net_addr_v4_del(openvpn_net_ctx_t *ctx, const char *iface, const in_addr_t *addr, int prefixlen) { struct argv argv = argv_new(); - const char *addr_str = print_in_addr_t(*addr, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + + const char *addr_str = print_in_addr_t(*addr, 0, &gc); argv_printf(&argv, "%s addr del dev %s %s/%d", iproute_path, iface, addr_str, prefixlen); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, 0, "Linux ip addr del failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -196,12 +202,15 @@ int prefixlen) { struct argv argv = argv_new(); - char *addr_str = (char *)print_in6_addr(*addr, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + + char *addr_str = (char *)print_in6_addr(*addr, 0, &gc); argv_printf(&argv, "%s -6 addr del %s/%d dev %s", iproute_path, addr_str, prefixlen, iface); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, 0, "Linux ip -6 addr del failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -212,14 +221,16 @@ const in_addr_t *remote) { struct argv argv = argv_new(); - const char *local_str = print_in_addr_t(*local, 0, &ctx->gc); - const char *remote_str = print_in_addr_t(*remote, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + const char *local_str = print_in_addr_t(*local, 0, &gc); + const char *remote_str = print_in_addr_t(*remote, 0, &gc); argv_printf(&argv, "%s addr add dev %s local %s peer %s", iproute_path, iface, local_str, remote_str); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, S_FATAL, "Linux ip addr add failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -230,14 +241,16 @@ const in_addr_t *remote) { struct argv argv = argv_new(); - const char *local_str = print_in_addr_t(*local, 0, &ctx->gc); - const char *remote_str = print_in_addr_t(*remote, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + const char *local_str = print_in_addr_t(*local, 0, &gc); + const char *remote_str = print_in_addr_t(*remote, 0, &gc); argv_printf(&argv, "%s addr del dev %s local %s peer %s", iproute_path, iface, local_str, remote_str); argv_msg(M_INFO, &argv); openvpn_execve_check(&argv, ctx->es, 0, "Linux ip addr del failed"); + gc_free(&gc); argv_free(&argv); return 0; @@ -248,7 +261,8 @@ const char *iface, uint32_t table, int metric) { struct argv argv = argv_new(); - const char *dst_str = print_in_addr_t(*dst, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + const char *dst_str = print_in_addr_t(*dst, 0, &gc); int ret = 0; argv_printf(&argv, "%s route add %s/%d", iproute_path, dst_str, prefixlen); @@ -265,7 +279,7 @@ if (gw) { - const char *gw_str = print_in_addr_t(*gw, 0, &ctx->gc); + const char *gw_str = print_in_addr_t(*gw, 0, &gc); argv_printf_cat(&argv, "via %s", gw_str); } @@ -276,6 +290,7 @@ ret = -1; } + gc_free(&gc); argv_free(&argv); return ret; @@ -286,14 +301,15 @@ const struct in6_addr *gw, const char *iface, uint32_t table, int metric) { struct argv argv = argv_new(); - char *dst_str = (char *)print_in6_addr(*dst, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + char *dst_str = (char *)print_in6_addr(*dst, 0, &gc); int ret = 0; argv_printf(&argv, "%s -6 route add %s/%d dev %s", iproute_path, dst_str, prefixlen, iface); if (gw) { - char *gw_str = (char *)print_in6_addr(*gw, 0, &ctx->gc); + char *gw_str = (char *)print_in6_addr(*gw, 0, &gc); argv_printf_cat(&argv, "via %s", gw_str); } @@ -309,6 +325,7 @@ ret = -1; } + gc_free(&gc); argv_free(&argv); return ret; @@ -319,7 +336,8 @@ const char *iface, uint32_t table, int metric) { struct argv argv = argv_new(); - const char *dst_str = print_in_addr_t(*dst, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + const char *dst_str = print_in_addr_t(*dst, 0, &gc); int ret = 0; argv_printf(&argv, "%s route del %s/%d", iproute_path, dst_str, prefixlen); @@ -335,6 +353,7 @@ ret = -1; } + gc_free(&gc); argv_free(&argv); return ret; @@ -345,14 +364,15 @@ const struct in6_addr *gw, const char *iface, uint32_t table, int metric) { struct argv argv = argv_new(); - char *dst_str = (char *)print_in6_addr(*dst, 0, &ctx->gc); + struct gc_arena gc = gc_new(); + char *dst_str = (char *)print_in6_addr(*dst, 0, &gc); int ret = 0; argv_printf(&argv, "%s -6 route del %s/%d dev %s", iproute_path, dst_str, prefixlen, iface); if (gw) { - char *gw_str = (char *)print_in6_addr(*gw, 0, &ctx->gc); + char *gw_str = (char *)print_in6_addr(*gw, 0, &gc); argv_printf_cat(&argv, "via %s", gw_str); } @@ -368,6 +388,7 @@ ret = -1; } + gc_free(&gc); argv_free(&argv); return ret; diff --git a/src/openvpn/networking_iproute2.h b/src/openvpn/networking_iproute2.h index dd7d8b3..dac5f0d 100644 --- a/src/openvpn/networking_iproute2.h +++ b/src/openvpn/networking_iproute2.h @@ -28,7 +28,6 @@ struct openvpn_net_ctx { struct env_set *es; - struct gc_arena gc; }; typedef struct openvpn_net_ctx openvpn_net_ctx_t;