From nobody Thu Apr 2 17:32:51 2026 Received: from out-189.mta1.migadu.com (out-189.mta1.migadu.com [95.215.58.189]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3972A1F12E0 for ; Thu, 12 Feb 2026 01:14:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.189 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858861; cv=none; b=drvnGU8gk5XWWkIjRinkfIkpU09QilxtpH9jhpsmAkqv16xd0VkPuPV98pezh1A3gvtBZ3QPt8hOkx1k7qBo7fo6P8j3SUl9xzElTn22Gzm2uLGB1aD+q6skMDa73pfUBlGHV7rhY2eL52DbrCYp7iT/uLE8ubW2RWPP+pJTKH4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858861; c=relaxed/simple; bh=EY7Mu2rCFpwYg85QEw5vAnHRM0/7yDlfMiJaowJKqas=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bXCdcSr/b2kx5XfVSdEZDgAt9bJA5jQ1r3rUa1pob1JgfJzvRbszcVWhFtr7I45S7Sv6E84UEnEKNTZPv0E04agD/d+O172EOXYwjj+esBkBJoSiGRMgkZR+QOxHg2t1ucvTVxto3/wPxIUrGKS1SyKDb3/7Ivj4NpiJor5QmIc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=Xw6R3bqr; arc=none smtp.client-ip=95.215.58.189 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="Xw6R3bqr" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858856; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5c5bS4vxRqG+++OCBogI6yNa/7CXAPQIQxcJ3i9/V3o=; b=Xw6R3bqrahyYGo0h6HgtkO7jkcIQqCZKesz567/L/RpzxUX7eoKgNXSnAginsUG8CN2Caa 8VAaOkUOlYR39SMM1VWgGHNBqlqi2XV9omiiZx3NlrxqH7jvBTHsvnjzDaDKKq8lDgJ+VP 6XGgWSgwSI7uRMRPb3aPkTC266ycGGA= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 01/14] selftests/bpf: Pass through build flags to bpftool and resolve_btfids Date: Wed, 11 Feb 2026 17:13:43 -0800 Message-ID: <20260212011356.3266753-2-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" EXTRA_* and SAN_* build flags were not correctly propagated to bpftool and resolve_btids when building selftests/bpf. This led to various build errors on attempt to build with SAN_CFLAGS=3D"-fsanitize=3Daddress", for example. Fix the makefiles to address this: - Pass SAN_CFLAGS/SAN_LDFLAGS to bpftool and resolve_btfids build - Propagate EXTRA_LDFLAGS to resolve_btfids link command - Use pkg-config to detect zlib and zstd for resolve_btfids, similar libelf handling Signed-off-by: Ihor Solodrai --- tools/bpf/resolve_btfids/Makefile | 7 +++++-- tools/testing/selftests/bpf/Makefile | 9 +++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/M= akefile index 1733a6e93a07..ef083602b73a 100644 --- a/tools/bpf/resolve_btfids/Makefile +++ b/tools/bpf/resolve_btfids/Makefile @@ -65,6 +65,9 @@ $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/= Makefile) | $(LIBBPF_OU LIBELF_FLAGS :=3D $(shell $(HOSTPKG_CONFIG) libelf --cflags 2>/dev/null) LIBELF_LIBS :=3D $(shell $(HOSTPKG_CONFIG) libelf --libs 2>/dev/null || e= cho -lelf) =20 +ZLIB_LIBS :=3D $(shell $(HOSTPKG_CONFIG) zlib --libs 2>/dev/null || echo = -lz) +ZSTD_LIBS :=3D $(shell $(HOSTPKG_CONFIG) libzstd --libs 2>/dev/null || ec= ho -lzstd) + HOSTCFLAGS_resolve_btfids +=3D -g \ -I$(srctree)/tools/include \ -I$(srctree)/tools/include/uapi \ @@ -73,7 +76,7 @@ HOSTCFLAGS_resolve_btfids +=3D -g \ $(LIBELF_FLAGS) \ -Wall -Werror =20 -LIBS =3D $(LIBELF_LIBS) -lz +LIBS =3D $(LIBELF_LIBS) $(ZLIB_LIBS) $(ZSTD_LIBS) =20 export srctree OUTPUT HOSTCFLAGS_resolve_btfids Q HOSTCC HOSTLD HOSTAR include $(srctree)/tools/build/Makefile.include @@ -83,7 +86,7 @@ $(BINARY_IN): fixdep FORCE prepare | $(OUTPUT) =20 $(BINARY): $(BPFOBJ) $(SUBCMDOBJ) $(BINARY_IN) $(call msg,LINK,$@) - $(Q)$(HOSTCC) $(BINARY_IN) $(KBUILD_HOSTLDFLAGS) -o $@ $(BPFOBJ) $(SUBCMD= OBJ) $(LIBS) + $(Q)$(HOSTCC) $(BINARY_IN) $(KBUILD_HOSTLDFLAGS) $(EXTRA_LDFLAGS) -o $@ $= (BPFOBJ) $(SUBCMDOBJ) $(LIBS) =20 clean_objects :=3D $(wildcard $(OUTPUT)/*.o \ $(OUTPUT)/.*.o.cmd \ diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests= /bpf/Makefile index c6bf4dfb1495..a0a594de9007 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile @@ -326,8 +326,8 @@ $(DEFAULT_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(B= PFTOOLDIR)/Makefile) \ $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/bpftool $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \ ARCH=3D CROSS_COMPILE=3D CC=3D"$(HOSTCC)" LD=3D"$(HOSTLD)" \ - EXTRA_CFLAGS=3D'-g $(OPT_FLAGS) $(EXTRA_CFLAGS)' \ - EXTRA_LDFLAGS=3D'$(EXTRA_LDFLAGS)' \ + EXTRA_CFLAGS=3D'-g $(OPT_FLAGS) $(SAN_CFLAGS) $(EXTRA_CFLAGS)' = \ + EXTRA_LDFLAGS=3D'$(SAN_LDFLAGS) $(EXTRA_LDFLAGS)' \ OUTPUT=3D$(HOST_BUILD_DIR)/bpftool/ \ LIBBPF_OUTPUT=3D$(HOST_BUILD_DIR)/libbpf/ \ LIBBPF_DESTDIR=3D$(HOST_SCRATCH_DIR)/ \ @@ -338,8 +338,8 @@ $(CROSS_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(BPF= TOOLDIR)/Makefile) \ $(BPFOBJ) | $(BUILD_DIR)/bpftool $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \ ARCH=3D$(ARCH) CROSS_COMPILE=3D$(CROSS_COMPILE) \ - EXTRA_CFLAGS=3D'-g $(OPT_FLAGS) $(EXTRA_CFLAGS)' \ - EXTRA_LDFLAGS=3D'$(EXTRA_LDFLAGS)' \ + EXTRA_CFLAGS=3D'-g $(OPT_FLAGS) $(SAN_CFLAGS) $(EXTRA_CFLAGS)' = \ + EXTRA_LDFLAGS=3D'$(SAN_LDFLAGS) $(EXTRA_LDFLAGS)' \ OUTPUT=3D$(BUILD_DIR)/bpftool/ \ LIBBPF_OUTPUT=3D$(BUILD_DIR)/libbpf/ \ LIBBPF_DESTDIR=3D$(SCRATCH_DIR)/ \ @@ -404,6 +404,7 @@ $(RESOLVE_BTFIDS): $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/r= esolve_btfids \ $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/resolve_btfids \ CC=3D"$(HOSTCC)" LD=3D"$(HOSTLD)" AR=3D"$(HOSTAR)" \ LIBBPF_INCLUDE=3D$(HOST_INCLUDE_DIR) \ + EXTRA_LDFLAGS=3D'$(SAN_LDFLAGS) $(EXTRA_LDFLAGS)' \ OUTPUT=3D$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=3D$(HOST_BPFOBJ) =20 # Get Clang's default includes on this system, as opposed to those seen by --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-182.mta1.migadu.com (out-182.mta1.migadu.com [95.215.58.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E95061ACEDE for ; Thu, 12 Feb 2026 01:14:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858863; cv=none; b=G/FtBlAABK0Jm6wwCoTYxohaXJqPkkAxMv2vBU6X27FwxsHDdL1bPQ1MVflkhTni3smDusVP48gs16v/KjwkvoIyXz6KqrlJe2TVHs71WvmfZgxd5Go/Un0xe3udhG0JTVWnKWehrQY+xJHMqzSpKZD1nQttnLatgPBZPSNobTc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858863; c=relaxed/simple; bh=rLfYrmOokTxg+vkTwHAnlTtrEWEMsAqg2HN4aUDU1eI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ed+2SfLmQ4EvNKGbKhRF06NaOMzqINN1owk2i5ijETQ8r+GlWP+fEZ8qjYNaYMxZ25war87nIWL6usI+eNevotsWsJ8MbP/za14sutwOEIHdkTELZU6VGS2p9UuASMSrx7T8YUgQt9cU0CW6IFfNcm8FwXJlPZc8EZ+Y29GSpTQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=gFFWDnsU; arc=none smtp.client-ip=95.215.58.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="gFFWDnsU" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858859; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ozo9SbbgBm5h3TJRJS40oegHI+0Q8oLhbtdly51Ny2o=; b=gFFWDnsUGMLnhPoAg8m3REoZOkiHVWchZtLomoiu9dsq3dKORjdYNyc2txYKP6BSokfyBI VtnID1eFlIIRVopPbHVenXkIjLq9VkMb+cgeOMvdz0Gu53LENOW/ZpMVp+gav7FdwQiQoi v894/d8yMc6XF7K0QaQJa8pFgzVW+oU= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 02/14] resolve_btfids: Fix memory leaks reported by ASAN Date: Wed, 11 Feb 2026 17:13:44 -0800 Message-ID: <20260212011356.3266753-3-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Running resolve_btfids with ASAN reveals memory leaks in btf_id handling. - Change get_id() to use a local buffer - Make btf_id__add() strdup the name internally - Add btf_id__free_all() that frees all nodese of a tree - Call the cleanup function on exit for every tree Signed-off-by: Ihor Solodrai Acked-by: Jiri Olsa --- tools/bpf/resolve_btfids/main.c | 78 +++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 27 deletions(-) diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/mai= n.c index ca7fcd03efb6..863fa0faaa31 100644 --- a/tools/bpf/resolve_btfids/main.c +++ b/tools/bpf/resolve_btfids/main.c @@ -226,7 +226,7 @@ static struct btf_id *btf_id__find(struct rb_root *root= , const char *name) } =20 static struct btf_id *__btf_id__add(struct rb_root *root, - char *name, + const char *name, enum btf_id_kind kind, bool unique) { @@ -250,7 +250,11 @@ static struct btf_id *__btf_id__add(struct rb_root *ro= ot, id =3D zalloc(sizeof(*id)); if (id) { pr_debug("adding symbol %s\n", name); - id->name =3D name; + id->name =3D strdup(name); + if (!id->name) { + free(id); + return NULL; + } id->kind =3D kind; rb_link_node(&id->rb_node, parent, p); rb_insert_color(&id->rb_node, root); @@ -258,17 +262,17 @@ static struct btf_id *__btf_id__add(struct rb_root *r= oot, return id; } =20 -static inline struct btf_id *btf_id__add(struct rb_root *root, char *name,= enum btf_id_kind kind) +static inline struct btf_id *btf_id__add(struct rb_root *root, const char = *name, enum btf_id_kind kind) { return __btf_id__add(root, name, kind, false); } =20 -static inline struct btf_id *btf_id__add_unique(struct rb_root *root, char= *name, enum btf_id_kind kind) +static inline struct btf_id *btf_id__add_unique(struct rb_root *root, cons= t char *name, enum btf_id_kind kind) { return __btf_id__add(root, name, kind, true); } =20 -static char *get_id(const char *prefix_end) +static int get_id(const char *prefix_end, char *buf, size_t buf_sz) { /* * __BTF_ID__func__vfs_truncate__0 @@ -277,28 +281,28 @@ static char *get_id(const char *prefix_end) */ int len =3D strlen(prefix_end); int pos =3D sizeof("__") - 1; - char *p, *id; + char *p; =20 if (pos >=3D len) - return NULL; + return -1; =20 - id =3D strdup(prefix_end + pos); - if (id) { - /* - * __BTF_ID__func__vfs_truncate__0 - * id =3D ^ - * - * cut the unique id part - */ - p =3D strrchr(id, '_'); - p--; - if (*p !=3D '_') { - free(id); - return NULL; - } - *p =3D '\0'; - } - return id; + if (len - pos >=3D buf_sz) + return -1; + + strcpy(buf, prefix_end + pos); + /* + * __BTF_ID__func__vfs_truncate__0 + * buf =3D ^ + * + * cut the unique id part + */ + p =3D strrchr(buf, '_'); + p--; + if (*p !=3D '_') + return -1; + *p =3D '\0'; + + return 0; } =20 static struct btf_id *add_set(struct object *obj, char *name, enum btf_id_= kind kind) @@ -335,10 +339,9 @@ static struct btf_id *add_set(struct object *obj, char= *name, enum btf_id_kind k =20 static struct btf_id *add_symbol(struct rb_root *root, char *name, size_t = size) { - char *id; + char id[KSYM_NAME_LEN]; =20 - id =3D get_id(name + size); - if (!id) { + if (get_id(name + size, id, sizeof(id))) { pr_err("FAILED to parse symbol name: %s\n", name); return NULL; } @@ -346,6 +349,22 @@ static struct btf_id *add_symbol(struct rb_root *root,= char *name, size_t size) return btf_id__add(root, id, BTF_ID_KIND_SYM); } =20 +static void btf_id__free_all(struct rb_root *root) +{ + struct rb_node *node, *next; + struct btf_id *id; + + node =3D rb_first(root); + while (node) { + next =3D rb_next(node); + id =3D rb_entry(node, struct btf_id, rb_node); + rb_erase(node, root); + free(id->name); + free(id); + node =3D next; + } +} + static void bswap_32_data(void *data, u32 nr_bytes) { u32 cnt, i; @@ -1547,6 +1566,11 @@ int main(int argc, const char **argv) out: btf__free(obj.base_btf); btf__free(obj.btf); + btf_id__free_all(&obj.structs); + btf_id__free_all(&obj.unions); + btf_id__free_all(&obj.typedefs); + btf_id__free_all(&obj.funcs); + btf_id__free_all(&obj.sets); if (obj.efile.elf) { elf_end(obj.efile.elf); close(obj.efile.fd); --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-186.mta1.migadu.com (out-186.mta1.migadu.com [95.215.58.186]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D02E31C68F for ; Thu, 12 Feb 2026 01:14:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.186 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858866; cv=none; b=rMCo1TKsOkrR6qyew29g+xjS6UlmYU6KNP4Sx953SpeLyy9x6Eidd3a5R63k5TdNZaN5XVuiZCxwh9hR6hFYdjFTE4C4btQwPX82jtfQwTQn9XykyKHf2WkX3ePJ/zFDpesVgZ75F2jtL0CGQRZQxhSAnZ+9VRIFC9aRodTNVxw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858866; c=relaxed/simple; bh=M+dUUNDfpAIzgLSnvfWveVIwWVTjzjuQu5215zF1QPw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NQekrUHiqXgsxqRGSI+ByLzZUAstebt/cf6ZNRjp9C1rH7oWT8G/lxdBckTR6WX9Y/vTP9aGNTrIU6UNVyLIQhV6TicOzh13TQO2DfSrd01/vprgZ2jyMOAOdm7sQ0AhXHSSAQKxrPkuQS5NdhXiGn6j5bMCMpnhXzZpGw0Bf1Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=T4JPOcUa; arc=none smtp.client-ip=95.215.58.186 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="T4JPOcUa" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858862; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Isk3MgJEdESYLCNKsJ/YFa6h9vV90ljBAfMCZ/hOcpY=; b=T4JPOcUaSu/ujXXPp4R4wXZX23a4Myxc0mo/Qw1X9j901BNS8IxRyu/GT6MzpLYQbjkVXq 5Xidjk/p9Vpa2RqH7ykMIQpWkw/xHFiwp/mO84Z/fsY6VO1DZ5uYSB0IxfkLykX1CqzzCo uyukM4pAsnaa2kAZXkIpZAxVcPoWXSY= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 03/14] selftests/bpf: Add DENYLIST.asan Date: Wed, 11 Feb 2026 17:13:45 -0800 Message-ID: <20260212011356.3266753-4-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Add a denylist file for tests that should be skipped when built with userspace ASAN: $ make ... SAN_CFLAGS=3D"-fsanitize=3Daddress -fno-omit-frame-pointer" Skip the following tests: - *arena*: userspace ASAN does not understand BPF arena maps and gets confused particularly when map_extra is non-zero - non-zero map_extra leads to mmap with MAP_FIXED, and ASAN treats this as an unknown memory region - task_local_data: ASAN complains about "incorrect" aligned_alloc() usage, but it's intentional in the test - uprobe_multi_test: very slow with ASAN enabled Signed-off-by: Ihor Solodrai --- tools/testing/selftests/bpf/DENYLIST.asan | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tools/testing/selftests/bpf/DENYLIST.asan diff --git a/tools/testing/selftests/bpf/DENYLIST.asan b/tools/testing/self= tests/bpf/DENYLIST.asan new file mode 100644 index 000000000000..d7fe372a2293 --- /dev/null +++ b/tools/testing/selftests/bpf/DENYLIST.asan @@ -0,0 +1,3 @@ +*arena* +task_local_data +uprobe_multi_test --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-179.mta1.migadu.com (out-179.mta1.migadu.com [95.215.58.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9F4A6218AAF for ; Thu, 12 Feb 2026 01:14:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858868; cv=none; b=AYsN4mtP9rx2/Y4UGyPdZlpMPkfEXBnFD+JDHRwwjpwCtRK1vB5AYXOARm/EDmD985/NSHEb5h1VX9SsU+pbqmQOFSYUxZKeTwETV0J6cJuJLIfV1VTSXJOV3qd8W94XhhVNCCKq9YWofaiQJ1XC2Ulezr5bWJEShDxZaaR0iFs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858868; c=relaxed/simple; bh=lPyYPrrNVHUnp3/TjV13IZjKwulQXgWU8U/0Si78MI4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bRioumR5jtYjWsQNbU4BpnDChk7sBSdpnG0CnnQYRWACsTrGYKIhCHvg2PM5hMtjeRGrfOhx6kNo2Az1zIKMIRvvEAJ4MIeTrcMlxVb+2nawg0963+a96/7izZiaJuExJsvi/3pN2EkgFhuW07K3CN9m8x37auJltLPy2f57NLA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=Qx46iqDt; arc=none smtp.client-ip=95.215.58.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="Qx46iqDt" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858864; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=31Wz8HDrP9wCB6gLMwU1J4DdJqc2QlNSNRZBp7Ebx7Y=; b=Qx46iqDt8ftKmdiQV/lItmK7JPbYTBCszXfJFHqi/rkQN9ZEcaU720G9wVAcGXIVNA1BLt iE4vadUjJvLJ/+6ka+NdkKsnHjgGFSZdGcZYnssmU/RK7zhgMC7+1ipp4s2TW98mv9p//T +rkbcyfhGPjgJ7q2QD8VcfKIlthb4wU= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 04/14] selftests/bpf: Refactor bpf_get_ksyms() trace helper Date: Wed, 11 Feb 2026 17:13:46 -0800 Message-ID: <20260212011356.3266753-5-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" ASAN reported a memory leak in bpf_get_ksyms(): it allocates a struct ksyms internally and never frees it. Moe struct ksyms to trace_helpers.h and return it from the bpf_get_ksyms(), giving ownership to the caller. Add filtered_syms and filtered_cnt fields to the ksyms to hold the filtered array of symbols, previously returned by bpf_get_ksyms(). Fixup the call sites: kprobe_multi_test and bench_trigger. Signed-off-by: Ihor Solodrai --- .../selftests/bpf/benchs/bench_trigger.c | 9 ++++---- .../bpf/prog_tests/kprobe_multi_test.c | 12 ++++------ tools/testing/selftests/bpf/trace_helpers.c | 23 ++++++++++--------- tools/testing/selftests/bpf/trace_helpers.h | 11 +++++++-- 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/tools/testing/selftests/bpf/benchs/bench_trigger.c b/tools/tes= ting/selftests/bpf/benchs/bench_trigger.c index aeec9edd3851..7231b88cf21a 100644 --- a/tools/testing/selftests/bpf/benchs/bench_trigger.c +++ b/tools/testing/selftests/bpf/benchs/bench_trigger.c @@ -230,8 +230,7 @@ static void trigger_fentry_setup(void) static void attach_ksyms_all(struct bpf_program *empty, bool kretprobe) { LIBBPF_OPTS(bpf_kprobe_multi_opts, opts); - char **syms =3D NULL; - size_t cnt =3D 0; + struct ksyms *ksyms =3D NULL; =20 /* Some recursive functions will be skipped in * bpf_get_ksyms -> skip_entry, as they can introduce sufficient @@ -241,13 +240,13 @@ static void attach_ksyms_all(struct bpf_program *empt= y, bool kretprobe) * So, don't run the kprobe-multi-all and kretprobe-multi-all on * a debug kernel. */ - if (bpf_get_ksyms(&syms, &cnt, true)) { + if (bpf_get_ksyms(&ksyms, true)) { fprintf(stderr, "failed to get ksyms\n"); exit(1); } =20 - opts.syms =3D (const char **) syms; - opts.cnt =3D cnt; + opts.syms =3D (const char **)ksyms->filtered_syms; + opts.cnt =3D ksyms->filtered_cnt; opts.retprobe =3D kretprobe; /* attach empty to all the kernel functions except bpf_get_numa_node_id. = */ if (!bpf_program__attach_kprobe_multi_opts(empty, NULL, &opts)) { diff --git a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c b/t= ools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c index 9caef222e528..f81dcd609ee9 100644 --- a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c +++ b/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c @@ -456,25 +456,23 @@ static void test_kprobe_multi_bench_attach(bool kerne= l) { LIBBPF_OPTS(bpf_kprobe_multi_opts, opts); struct kprobe_multi_empty *skel =3D NULL; - char **syms =3D NULL; - size_t cnt =3D 0; + struct ksyms *ksyms =3D NULL; =20 - if (!ASSERT_OK(bpf_get_ksyms(&syms, &cnt, kernel), "bpf_get_ksyms")) + if (!ASSERT_OK(bpf_get_ksyms(&ksyms, kernel), "bpf_get_ksyms")) return; =20 skel =3D kprobe_multi_empty__open_and_load(); if (!ASSERT_OK_PTR(skel, "kprobe_multi_empty__open_and_load")) goto cleanup; =20 - opts.syms =3D (const char **) syms; - opts.cnt =3D cnt; + opts.syms =3D (const char **)ksyms->filtered_syms; + opts.cnt =3D ksyms->filtered_cnt; =20 do_bench_test(skel, &opts); =20 cleanup: kprobe_multi_empty__destroy(skel); - if (syms) - free(syms); + free_kallsyms_local(ksyms); } =20 static void test_kprobe_multi_bench_attach_addr(bool kernel) diff --git a/tools/testing/selftests/bpf/trace_helpers.c b/tools/testing/se= lftests/bpf/trace_helpers.c index eeaab7013ca2..0e63daf83ed5 100644 --- a/tools/testing/selftests/bpf/trace_helpers.c +++ b/tools/testing/selftests/bpf/trace_helpers.c @@ -24,12 +24,6 @@ #define TRACEFS_PIPE "/sys/kernel/tracing/trace_pipe" #define DEBUGFS_PIPE "/sys/kernel/debug/tracing/trace_pipe" =20 -struct ksyms { - struct ksym *syms; - size_t sym_cap; - size_t sym_cnt; -}; - static struct ksyms *ksyms; static pthread_mutex_t ksyms_mutex =3D PTHREAD_MUTEX_INITIALIZER; =20 @@ -54,6 +48,8 @@ void free_kallsyms_local(struct ksyms *ksyms) if (!ksyms) return; =20 + free(ksyms->filtered_syms); + if (!ksyms->syms) { free(ksyms); return; @@ -610,7 +606,7 @@ static int search_kallsyms_compare(const void *p1, cons= t struct ksym *p2) return compare_name(p1, p2->name); } =20 -int bpf_get_ksyms(char ***symsp, size_t *cntp, bool kernel) +int bpf_get_ksyms(struct ksyms **ksymsp, bool kernel) { size_t cap =3D 0, cnt =3D 0; char *name =3D NULL, *ksym_name, **syms =3D NULL; @@ -637,8 +633,10 @@ int bpf_get_ksyms(char ***symsp, size_t *cntp, bool ke= rnel) else f =3D fopen("/sys/kernel/debug/tracing/available_filter_functions", "r"); =20 - if (!f) + if (!f) { + free_kallsyms_local(ksyms); return -EINVAL; + } =20 map =3D hashmap__new(symbol_hash, symbol_equal, NULL); if (IS_ERR(map)) { @@ -679,15 +677,18 @@ int bpf_get_ksyms(char ***symsp, size_t *cntp, bool k= ernel) syms[cnt++] =3D ksym_name; } =20 - *symsp =3D syms; - *cntp =3D cnt; + ksyms->filtered_syms =3D syms; + ksyms->filtered_cnt =3D cnt; + *ksymsp =3D ksyms; =20 error: free(name); fclose(f); hashmap__free(map); - if (err) + if (err) { free(syms); + free_kallsyms_local(ksyms); + } return err; } =20 diff --git a/tools/testing/selftests/bpf/trace_helpers.h b/tools/testing/se= lftests/bpf/trace_helpers.h index a5576b2dfc26..d5bf1433675d 100644 --- a/tools/testing/selftests/bpf/trace_helpers.h +++ b/tools/testing/selftests/bpf/trace_helpers.h @@ -23,7 +23,14 @@ struct ksym { long addr; char *name; }; -struct ksyms; + +struct ksyms { + struct ksym *syms; + size_t sym_cap; + size_t sym_cnt; + char **filtered_syms; + size_t filtered_cnt; +}; =20 typedef int (*ksym_cmp_t)(const void *p1, const void *p2); typedef int (*ksym_search_cmp_t)(const void *p1, const struct ksym *p2); @@ -53,7 +60,7 @@ ssize_t get_rel_offset(uintptr_t addr); =20 int read_build_id(const char *path, char *build_id, size_t size); =20 -int bpf_get_ksyms(char ***symsp, size_t *cntp, bool kernel); +int bpf_get_ksyms(struct ksyms **ksymsp, bool kernel); int bpf_get_addrs(unsigned long **addrsp, size_t *cntp, bool kernel); =20 #endif --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-172.mta1.migadu.com (out-172.mta1.migadu.com [95.215.58.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2178C21C9FD for ; Thu, 12 Feb 2026 01:14:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858870; cv=none; b=o72R2T39dTyjmOYneLHcHqRcEWwhZKNWol2lyBX0H63CLkub10RYQnlRHynry0vGETz9Ps9vbIqQ3vOeUPiWQooaQpSYeZg6JNfMOZ7fHww5HMyo5jbtAoyjDotvvFd2rRTfqAIwWRYaNtAcKkGwKQyvV0ciDldWdhIGzvHs7Rw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858870; c=relaxed/simple; bh=yllfhc5T0VQ81mYt1TnAnZSV8uFx28Iu5IiEUOiqLu4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YHIsllDSz2saGJGEzrE3/5HFclJNBG9tD8jGyAkx4HyD6Hbt5Hcl0aTv/nXSXJLRtz3GYgLhSHUNt1Bk2FDQ7BVYmW7qZqJ4cYAiGc8Oe29steDqZ9IlYJNLrWu+6NH/Crv2MJfp+ZsQ7cxxWlUBXP9cb1Mv/Kcaq1KmIP9OLVo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=RwmWqZdE; arc=none smtp.client-ip=95.215.58.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="RwmWqZdE" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858867; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=C3UryONr82QOcsDXQInSLfyd4LBGQNlvXlWMbeH0b5Y=; b=RwmWqZdEJnc/EgwLvLCEJDIGl84npgyqDfJwy7eoHZJ9Vjws9z9W0hDeTohBTV69IhK0O3 2htYrSyOpltiI2Kb2MG3f3dI6QaMH0BQGDY8dLf8IUFxbR7IqSR9nFBNoeRv924q3dlfxu mr83mSXtajJg+qcT0mKGQG5OIhL+KAo= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 05/14] selftests/bpf: Fix memory leaks in tests Date: Wed, 11 Feb 2026 17:13:47 -0800 Message-ID: <20260212011356.3266753-6-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Fix trivial memory leaks detected by userspace ASAN: - htab_update: free value buffer in test_reenter_update cleanup - test_xsk: delete old pkt_stream before replacing in stats tests - testing_helpers: free buffer allocated by getline() in parse_test_list_file Signed-off-by: Ihor Solodrai --- tools/testing/selftests/bpf/prog_tests/htab_update.c | 1 + tools/testing/selftests/bpf/prog_tests/test_xsk.c | 2 ++ tools/testing/selftests/bpf/testing_helpers.c | 1 + 3 files changed, 4 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/htab_update.c b/tools/t= esting/selftests/bpf/prog_tests/htab_update.c index d0b405eb2966..ea1a6766fbe9 100644 --- a/tools/testing/selftests/bpf/prog_tests/htab_update.c +++ b/tools/testing/selftests/bpf/prog_tests/htab_update.c @@ -61,6 +61,7 @@ static void test_reenter_update(void) =20 ASSERT_EQ(skel->bss->update_err, -EDEADLK, "no reentrancy"); out: + free(value); htab_update__destroy(skel); } =20 diff --git a/tools/testing/selftests/bpf/prog_tests/test_xsk.c b/tools/test= ing/selftests/bpf/prog_tests/test_xsk.c index bab4a31621c7..dac90ddcdd7e 100644 --- a/tools/testing/selftests/bpf/prog_tests/test_xsk.c +++ b/tools/testing/selftests/bpf/prog_tests/test_xsk.c @@ -2005,6 +2005,7 @@ int testapp_stats_rx_full(struct test_spec *test) { if (pkt_stream_replace(test, DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS = / 2, MIN_PKT_SIZE)) return TEST_FAILURE; + pkt_stream_delete(test->ifobj_rx->xsk->pkt_stream); test->ifobj_rx->xsk->pkt_stream =3D pkt_stream_generate(DEFAULT_UMEM_BUFF= ERS, MIN_PKT_SIZE); =20 test->ifobj_rx->xsk->rxqsize =3D DEFAULT_UMEM_BUFFERS; @@ -2017,6 +2018,7 @@ int testapp_stats_fill_empty(struct test_spec *test) { if (pkt_stream_replace(test, DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS = / 2, MIN_PKT_SIZE)) return TEST_FAILURE; + pkt_stream_delete(test->ifobj_rx->xsk->pkt_stream); test->ifobj_rx->xsk->pkt_stream =3D pkt_stream_generate(DEFAULT_UMEM_BUFF= ERS, MIN_PKT_SIZE); =20 test->ifobj_rx->use_fill_ring =3D false; diff --git a/tools/testing/selftests/bpf/testing_helpers.c b/tools/testing/= selftests/bpf/testing_helpers.c index 16eb37e5bad6..66af0d13751a 100644 --- a/tools/testing/selftests/bpf/testing_helpers.c +++ b/tools/testing/selftests/bpf/testing_helpers.c @@ -212,6 +212,7 @@ int parse_test_list_file(const char *path, break; } =20 + free(buf); fclose(f); return err; } --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-174.mta1.migadu.com (out-174.mta1.migadu.com [95.215.58.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2D112222C4 for ; Thu, 12 Feb 2026 01:14:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858878; cv=none; b=J28UB47YQn9rDn8cvwsmkcdyxaaw+fz3yALgFEmBJ64SYbibE63CHrTE8x2eX+wDyUa+nVwJDYg1nLJvblzRT0g0lCGpd8YklNP88dqyieshk7Grw8ub4R8vZHo+pDWV3AxNpdisKVYmERfSgoBv/89gzO8bwx2PhLi0OaBhyRU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858878; c=relaxed/simple; bh=g7k6s+Jhg2seZSYi0ABnHIK0XOugLdtOMln5ROgXUQg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qfozf5R4HSoSHaZKb+W/GNpXe4fK/NwW8ci/dPsamiLdHGkhAhL5TFW1i2eFWhGPQKYzXbt5bOM92MTF4cPVfJ222gA3F6wYfLWLEa9t7xx5K6i8P3+rHKf17R4wg5f4YmE27kiNIHONf6zJ+alZjyB0k4t2c97a0xyXmQcpyvw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=g8hhpCQi; arc=none smtp.client-ip=95.215.58.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="g8hhpCQi" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858870; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=l9qBLiY/Zeub/nKSwb5e2A5gOFzgjSOE8+Pl+IoBz1c=; b=g8hhpCQid7kAYX0pocTwwuAtT4gv+g4FI37OQAl50czuaoyVTt9cm3rIfguFcNfNZ+ufl4 CQd1aYu0mN/Ot293OZ5jOy+j69kYOqICch+i0NNV5pYjesUhOvKa4HBH4F+PmUi58GFtBv hTg79QaryoFKMPiTJmwZdAHU67sQfzc= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 06/14] selftests/bpf: Fix cleanup in check_fd_array_cnt__fd_array_too_big() Date: Wed, 11 Feb 2026 17:13:48 -0800 Message-ID: <20260212011356.3266753-7-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" The Close() macro uses the passed in expression three times, which leads to repeated execution in case it has side effects. That is, Close(i--) would decrement i three times. ASAN caught a stack-buffer-undeflow error at a point where this was overlooked. Fix it. Signed-off-by: Ihor Solodrai Acked-by: Eduard Zingerman --- tools/testing/selftests/bpf/prog_tests/fd_array.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/fd_array.c b/tools/test= ing/selftests/bpf/prog_tests/fd_array.c index c534b4d5f9da..3078d8264deb 100644 --- a/tools/testing/selftests/bpf/prog_tests/fd_array.c +++ b/tools/testing/selftests/bpf/prog_tests/fd_array.c @@ -412,8 +412,8 @@ static void check_fd_array_cnt__fd_array_too_big(void) ASSERT_EQ(prog_fd, -E2BIG, "prog should have been rejected with -E2BIG"); =20 cleanup_fds: - while (i > 0) - Close(extra_fds[--i]); + while (i-- > 0) + Close(extra_fds[i]); } =20 void test_fd_array_cnt(void) --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-176.mta1.migadu.com (out-176.mta1.migadu.com [95.215.58.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 506276FC5 for ; Thu, 12 Feb 2026 01:14:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858878; cv=none; b=CJ4xjqrI2AtVeoXVuFQioAwTW6ZLE8w/0JwZd1wd5kq07f9D9z2OFKnQYcY8LM0cugpQC+eiDULswIFJrUmaycveSSwnufNT6V/aVYo+Y4bCOueonlrQMNs3JDKfLT1EG/fiMPhUcWLuDW5PZAzuD+ZXfRgOajwUpVDch2mQQos= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858878; c=relaxed/simple; bh=Oohu9IsctUk6dZrEbLhnkff8ZOoO0y7lszSYXVT5uiY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eBCpXoRUjUvuPG5DU57x/kKtKUy3Gg+A/XxwyHbOy6DhBbxWZAoTkJsz3OyrqFKDm+U/KVcps8LyOhZIViXe3Ow4L8EFJ/ppFGNbMELjTgEaMkY63M9dIFWWx5ZLTQsRoUZTn0Zo8Xy8UVcMLyLiceUm2s9jpL67ecUasxjr4rI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=bmhQgjSt; arc=none smtp.client-ip=95.215.58.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="bmhQgjSt" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858872; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8RYJyENWs1ZudeDBODTP1Tg5qAi1DxUPNeH2H4e0hzs=; b=bmhQgjStbRcKXE8muJK3tUf5EkPKUzkPuW80V9AExeNr+vSe/abmF68bZcaRk6WstBnM+7 3APjeC3SworF/FZi7LLiqVEQGkekmFtgVYgrLfoNJT7LsECH2CcKnpXpwMxD/86hde2qBt tIgd1JAAkkXiVC3MBcbOgvtDl2HpxWY= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 07/14] veristat: Fix a memory leak for preset ENUMERATOR Date: Wed, 11 Feb 2026 17:13:49 -0800 Message-ID: <20260212011356.3266753-8-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" ASAN detected a memory leak in veristat. The cleanup code handling ENUMERATOR value missed freeing strdup-ed svalue. Fix it. Signed-off-by: Ihor Solodrai Acked-by: Mykyta Yatsenko --- tools/testing/selftests/bpf/veristat.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/testing/selftests/bpf/veristat.c b/tools/testing/selftes= ts/bpf/veristat.c index 1be1e353d40a..75f85e0362f5 100644 --- a/tools/testing/selftests/bpf/veristat.c +++ b/tools/testing/selftests/bpf/veristat.c @@ -3378,6 +3378,8 @@ int main(int argc, char **argv) } } free(env.presets[i].atoms); + if (env.presets[i].value.type =3D=3D ENUMERATOR) + free(env.presets[i].value.svalue); } free(env.presets); return -err; --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-187.mta1.migadu.com (out-187.mta1.migadu.com [95.215.58.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA69D1F09B3 for ; Thu, 12 Feb 2026 01:14:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858879; cv=none; b=vAaQk/sJWwoKtvrspAIHE31XC8ebAkktZ6kSa8hazIWM+JfwLNOvrVwlT1b7nJuVMHTljljdaVXdYguCitsWfgSU9LqXvQUpvvKqByBGrPIvhv6eBp2Yy2I3QYQCELxbbbUtu3CRPVOl1J8WxAJqcDAy1zht2Jbe8iPQq9mNAz0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858879; c=relaxed/simple; bh=x1r6pzCR0rw1FH9puuDkSVlUfccZ97XRCiSDfLsmQt0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=l4FgTOf8noJC9HulWVQgEHXaQUS/OB4TXPrZvmcgRt+gGgHYkZYr4Hk4mF44vb9X2X/giCIF1/fiu9vR7KkBeH6gUHizUvaIqAU9sNPdkhvFNe3E5B1G/p/yBt6cz6rtB9xEoRlMSpI6MXV5i/mwX8RQfFvQpUjanK7jMp9ZVIE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=Dl8jvShe; arc=none smtp.client-ip=95.215.58.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="Dl8jvShe" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858876; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Ge5cfkJMe63xIQAN8z0KA4mODNMCGr4RrUgbIpsdlg0=; b=Dl8jvShewm+x7YZDvjiQbWJQKWD1b600aWA8uhsijvr+EiNkEvxo1gX6MitzjZlfDSIuqg LDUToLI2vfydV3HT8wffyi0qYbaVeuTcWyHED2lR5tMhBKLCoUEHvS1ZqMf5Z+RR+rJ5QN EGpf6mr8whMKktJfeJ4Ypm+fpfFOKo0= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 08/14] selftests/bpf: Fix use-after-free in xdp_metadata test Date: Wed, 11 Feb 2026 17:13:50 -0800 Message-ID: <20260212011356.3266753-9-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" ASAN reported a use-after-free in close_xsk(). The xsk->socket internally references xsk->umem via socket->ctx->umem, so the socket must be deleted before the umem. Fix the order of operations in close_xsk(). Signed-off-by: Ihor Solodrai Acked-by: Mykyta Yatsenko --- tools/testing/selftests/bpf/prog_tests/xdp_metadata.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c b/tools/= testing/selftests/bpf/prog_tests/xdp_metadata.c index 19f92affc2da..5c31054ad4a4 100644 --- a/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c +++ b/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c @@ -126,10 +126,10 @@ static int open_xsk(int ifindex, struct xsk *xsk) =20 static void close_xsk(struct xsk *xsk) { - if (xsk->umem) - xsk_umem__delete(xsk->umem); if (xsk->socket) xsk_socket__delete(xsk->socket); + if (xsk->umem) + xsk_umem__delete(xsk->umem); munmap(xsk->umem_area, UMEM_SIZE); } =20 --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-181.mta1.migadu.com (out-181.mta1.migadu.com [95.215.58.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A63BF6FC5 for ; Thu, 12 Feb 2026 01:14:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858882; cv=none; b=OgsqsnY9s83cQnv6KWqKBT8v2P6Sw9CTx2agCVuHodrbT8m3DI2sOrnVCiHGZYNuRI1rEamGxYviZ5tIofNKAwQRyH/mJ3cpOlx72DVd6axp5fuyqyMf0j2JZc61bvbIP8NsLiNsZIhGS9K7TRNUVn+ZW8L01v7y4viXmGlu22I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858882; c=relaxed/simple; bh=jA/wOZLGIxGMGiQA63G+DfY+YTj5mgFKAZQ7v2A7GCI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hOhp6NTNXymHiBpi4dNKrcaQsp7wTkCy15Ch6eTFSR6ALnI+ZG2SZxbhUCj47v7h1pGXdJnjXdAjGCTokzpKyJuo9dyssAZiB8YpgdIAgeSU2YYI+DI0GiZDSmi/sXyUhuFbj7+wjE6p76cx79DYo93TWRixzVDrEaq17Bb38Lc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=ojcLC58s; arc=none smtp.client-ip=95.215.58.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="ojcLC58s" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858878; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NP0u5wlZZjOVD96p+9s+0wLKqWTwLEZGRkiARzeDYpc=; b=ojcLC58sAte5jUz71tvzTg5zXeffxMX2JkX+nP08DNWl0N8q3JiKxknXduKwqnKVcfDUle 6hT5LLh0iHmG0Nx2QYvBwHdhlpSK7WsjxYpMOb0k1ax4v8uWlNM4wSMIU8xr8Andmstesx vOD8ixkH0+aVK1VJpic7lz8wqLZVKvA= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 09/14] selftests/bpf: Fix double thread join in uprobe_multi_test Date: Wed, 11 Feb 2026 17:13:51 -0800 Message-ID: <20260212011356.3266753-10-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" ASAN reported a "joining already joined thread" error. The release_child() may be called multiple times for the same struct child. Fix by setting child->thread to 0 after pthread_join. Signed-off-by: Ihor Solodrai Acked-by: Jiri Olsa Acked-by: Mykyta Yatsenko --- tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c b/t= ools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c index 2ee17ef1dae2..17881e009eee 100644 --- a/tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c +++ b/tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c @@ -62,8 +62,10 @@ static void release_child(struct child *child) return; close(child->go[1]); close(child->go[0]); - if (child->thread) + if (child->thread) { pthread_join(child->thread, NULL); + child->thread =3D 0; + } close(child->c2p[0]); close(child->c2p[1]); if (child->pid > 0) --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-179.mta1.migadu.com (out-179.mta1.migadu.com [95.215.58.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01C5722A1D5 for ; Thu, 12 Feb 2026 01:14:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858884; cv=none; b=f3CmgpSJUt9Q9YrGQzSg1AmwdkjzrQv3hyxGLdSkEK52zSaLB5DR31D2n85XCI83MW9FuPqfTrQuw+ft9KhmutwR8Ti5UKDob552uqMt1kJVbQVBn3lFD3/XHZnX7ZX0QCE6D+UeLXekLRSIjDeQMIyTJCzdVs7COIYGBXFKpp4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858884; c=relaxed/simple; bh=DPgQu+n8kdL6qL9eyNq5ujqn6WBRhV3hx2GcxKHXvPE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Sr4bPUTtbqr1L4Hmokiv5QB2xLEFooh1Ez2AdxE29SzXKQgWBbg9Iul/t+pQ8lsDYH8hH5pChwf6CP18YvSme72X8/7ztvhdxeW3JG913Pb8LdJs9MGRdHplbkbIags3Naub8zLWdjXHeD9R7wZUgDbLfUC2H96qz0LRwK19Xa8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=exG0UYx7; arc=none smtp.client-ip=95.215.58.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="exG0UYx7" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858881; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uZqVIhBYgNX+eTjruXcUXhjk4BPzUoWwpJnndcds9tA=; b=exG0UYx7159WiePpmId+XFATuOWG06u8ydiJIN/YsxtvRZKHRNthpBno2tCiogVfQzU2Es HPdJLqGXbg3OrqWRLeYj9tltjav0l4IFnznpRW+ztSCCgRsEVvIVJOFdRtvOWT/Ees5q0h f2n208fY9Z2eYt/xd9r83axcMJ5AFgo= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 10/14] selftests/bpf: Fix resource leaks caused by missing cleanups Date: Wed, 11 Feb 2026 17:13:52 -0800 Message-ID: <20260212011356.3266753-11-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" ASAN reported a number of resource leaks: - Add missing *__destroy(skel) calls - Replace bpf_link__detach() with bpf_link__destroy() where appropriate - cgrp_local_storage: Add bpf_link__destroy() when bpf_iter_create fails - dynptr: Add missing bpf_object__close() Signed-off-by: Ihor Solodrai Acked-by: Eduard Zingerman --- .../bpf/prog_tests/cgrp_local_storage.c | 4 +++- .../testing/selftests/bpf/prog_tests/dynptr.c | 5 ++++- .../selftests/bpf/prog_tests/sockmap_basic.c | 18 +++++++++++------- .../selftests/bpf/prog_tests/sockmap_listen.c | 2 +- .../bpf/prog_tests/struct_ops_private_stack.c | 1 + .../testing/selftests/bpf/prog_tests/tc_opts.c | 1 + .../selftests/bpf/prog_tests/test_tc_tunnel.c | 5 ++++- 7 files changed, 25 insertions(+), 11 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/cgrp_local_storage.c b/= tools/testing/selftests/bpf/prog_tests/cgrp_local_storage.c index 9015e2c2ab12..478a77cb67e6 100644 --- a/tools/testing/selftests/bpf/prog_tests/cgrp_local_storage.c +++ b/tools/testing/selftests/bpf/prog_tests/cgrp_local_storage.c @@ -202,7 +202,7 @@ static void test_cgroup_iter_sleepable(int cgroup_fd, _= _u64 cgroup_id) =20 iter_fd =3D bpf_iter_create(bpf_link__fd(link)); if (!ASSERT_GE(iter_fd, 0, "iter_create")) - goto out; + goto out_link; =20 /* trigger the program run */ (void)read(iter_fd, buf, sizeof(buf)); @@ -210,6 +210,8 @@ static void test_cgroup_iter_sleepable(int cgroup_fd, _= _u64 cgroup_id) ASSERT_EQ(skel->bss->cgroup_id, cgroup_id, "cgroup_id"); =20 close(iter_fd); +out_link: + bpf_link__destroy(link); out: cgrp_ls_sleepable__destroy(skel); } diff --git a/tools/testing/selftests/bpf/prog_tests/dynptr.c b/tools/testin= g/selftests/bpf/prog_tests/dynptr.c index b9f86cb91e81..5fda11590708 100644 --- a/tools/testing/selftests/bpf/prog_tests/dynptr.c +++ b/tools/testing/selftests/bpf/prog_tests/dynptr.c @@ -137,11 +137,14 @@ static void verify_success(const char *prog_name, enu= m test_setup_type setup_typ ); =20 link =3D bpf_program__attach(prog); - if (!ASSERT_OK_PTR(link, "bpf_program__attach")) + if (!ASSERT_OK_PTR(link, "bpf_program__attach")) { + bpf_object__close(obj); goto cleanup; + } =20 err =3D bpf_prog_test_run_opts(aux_prog_fd, &topts); bpf_link__destroy(link); + bpf_object__close(obj); =20 if (!ASSERT_OK(err, "test_run")) goto cleanup; diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c b/tools= /testing/selftests/bpf/prog_tests/sockmap_basic.c index 256707e7d20d..ce010602a443 100644 --- a/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c +++ b/tools/testing/selftests/bpf/prog_tests/sockmap_basic.c @@ -204,7 +204,7 @@ static void test_skmsg_helpers_with_link(enum bpf_map_t= ype map_type) /* Fail since bpf_link for the same prog type has been created. */ link2 =3D bpf_program__attach_sockmap(prog_clone, map); if (!ASSERT_ERR_PTR(link2, "bpf_program__attach_sockmap")) { - bpf_link__detach(link2); + bpf_link__destroy(link2); goto out; } =20 @@ -230,7 +230,7 @@ static void test_skmsg_helpers_with_link(enum bpf_map_t= ype map_type) if (!ASSERT_OK(err, "bpf_link_update")) goto out; out: - bpf_link__detach(link); + bpf_link__destroy(link); test_skmsg_load_helpers__destroy(skel); } =20 @@ -417,7 +417,7 @@ static void test_sockmap_skb_verdict_attach_with_link(v= oid) if (!ASSERT_OK_PTR(link, "bpf_program__attach_sockmap")) goto out; =20 - bpf_link__detach(link); + bpf_link__destroy(link); =20 err =3D bpf_prog_attach(bpf_program__fd(prog), map, BPF_SK_SKB_STREAM_VER= DICT, 0); if (!ASSERT_OK(err, "bpf_prog_attach")) @@ -426,7 +426,7 @@ static void test_sockmap_skb_verdict_attach_with_link(v= oid) /* Fail since attaching with the same prog/map has been done. */ link =3D bpf_program__attach_sockmap(prog, map); if (!ASSERT_ERR_PTR(link, "bpf_program__attach_sockmap")) - bpf_link__detach(link); + bpf_link__destroy(link); =20 err =3D bpf_prog_detach2(bpf_program__fd(prog), map, BPF_SK_SKB_STREAM_VE= RDICT); if (!ASSERT_OK(err, "bpf_prog_detach2")) @@ -747,7 +747,7 @@ static void test_sockmap_skb_verdict_peek_with_link(voi= d) test_sockmap_skb_verdict_peek_helper(map); ASSERT_EQ(pass->bss->clone_called, 1, "clone_called"); out: - bpf_link__detach(link); + bpf_link__destroy(link); test_sockmap_pass_prog__destroy(pass); } =20 @@ -763,12 +763,15 @@ static void test_sockmap_unconnected_unix(void) map =3D bpf_map__fd(skel->maps.sock_map_rx); =20 stream =3D xsocket(AF_UNIX, SOCK_STREAM, 0); - if (stream < 0) + if (stream < 0) { + test_sockmap_pass_prog__destroy(skel); return; + } =20 dgram =3D xsocket(AF_UNIX, SOCK_DGRAM, 0); if (dgram < 0) { close(stream); + test_sockmap_pass_prog__destroy(skel); return; } =20 @@ -780,6 +783,7 @@ static void test_sockmap_unconnected_unix(void) =20 close(stream); close(dgram); + test_sockmap_pass_prog__destroy(skel); } =20 static void test_sockmap_many_socket(void) @@ -1027,7 +1031,7 @@ static void test_sockmap_skb_verdict_vsock_poll(void) if (xrecv_nonblock(conn, &buf, 1, 0) !=3D 1) FAIL("xrecv_nonblock"); detach: - bpf_link__detach(link); + bpf_link__destroy(link); close: xclose(conn); xclose(peer); diff --git a/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c b/tool= s/testing/selftests/bpf/prog_tests/sockmap_listen.c index f1bdccc7e4e7..cc0c68bab907 100644 --- a/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c +++ b/tools/testing/selftests/bpf/prog_tests/sockmap_listen.c @@ -899,7 +899,7 @@ static void test_msg_redir_to_listening_with_link(struc= t test_sockmap_listen *sk =20 redir_to_listening(family, sotype, sock_map, verdict_map, REDIR_EGRESS); =20 - bpf_link__detach(link); + bpf_link__destroy(link); } =20 static void redir_partial(int family, int sotype, int sock_map, int parser= _map) diff --git a/tools/testing/selftests/bpf/prog_tests/struct_ops_private_stac= k.c b/tools/testing/selftests/bpf/prog_tests/struct_ops_private_stack.c index 4006879ca3fe..c36aa2354d2f 100644 --- a/tools/testing/selftests/bpf/prog_tests/struct_ops_private_stack.c +++ b/tools/testing/selftests/bpf/prog_tests/struct_ops_private_stack.c @@ -56,6 +56,7 @@ static void test_private_stack_fail(void) err =3D struct_ops_private_stack_fail__load(skel); if (!ASSERT_ERR(err, "struct_ops_private_stack_fail__load")) goto cleanup; + struct_ops_private_stack_fail__destroy(skel); return; =20 cleanup: diff --git a/tools/testing/selftests/bpf/prog_tests/tc_opts.c b/tools/testi= ng/selftests/bpf/prog_tests/tc_opts.c index dd7a138d8c3d..2a4fd367da0a 100644 --- a/tools/testing/selftests/bpf/prog_tests/tc_opts.c +++ b/tools/testing/selftests/bpf/prog_tests/tc_opts.c @@ -1363,6 +1363,7 @@ static void test_tc_opts_dev_cleanup_target(int targe= t) ASSERT_OK(system("ip link del dev tcx_opts1"), "del veth"); ASSERT_EQ(if_nametoindex("tcx_opts1"), 0, "dev1_removed"); ASSERT_EQ(if_nametoindex("tcx_opts2"), 0, "dev2_removed"); + test_tc_link__destroy(skel); return; cleanup3: err =3D bpf_prog_detach_opts(fd3, loopback, target, &optd); diff --git a/tools/testing/selftests/bpf/prog_tests/test_tc_tunnel.c b/tool= s/testing/selftests/bpf/prog_tests/test_tc_tunnel.c index 0fe0a8f62486..7fc4d7dd70ef 100644 --- a/tools/testing/selftests/bpf/prog_tests/test_tc_tunnel.c +++ b/tools/testing/selftests/bpf/prog_tests/test_tc_tunnel.c @@ -699,7 +699,7 @@ void test_tc_tunnel(void) return; =20 if (!ASSERT_OK(setup(), "global setup")) - return; + goto out; =20 for (i =3D 0; i < ARRAY_SIZE(subtests_cfg); i++) { cfg =3D &subtests_cfg[i]; @@ -711,4 +711,7 @@ void test_tc_tunnel(void) subtest_cleanup(cfg); } cleanup(); + +out: + test_tc_tunnel__destroy(skel); } --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-186.mta1.migadu.com (out-186.mta1.migadu.com [95.215.58.186]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A13C81E834B for ; Thu, 12 Feb 2026 01:14:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.186 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858888; cv=none; b=plgIB3c+F1J3J9gVq7kdUWZiYhPp3UWRsbZhp19H9vzMpKUd+q3r9lxv3JlhXtfIFEBHIW/EKDDOEkyaiKQ9Vn7kmTj4maubzQJPpDKS6wQzybSyo2vy+ex14dz55/ew0F40k/KKx9sW9Sg3ryceEJkmKtyHMrBWqDDDfqv8ius= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858888; c=relaxed/simple; bh=Lp/MVZHJvNcQOEssRh3JY87ZfF7lWBxbNzkGY7/Zp+g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GmUIt4ONKNP1cpZoYzwdm36VixsTAz0YQXzKvZIV+hk5dwSf2kOCocRw750ktCvf+QgxykRd2M/VfLssSC7NF6s/3WtlFboU3/LKXPuhfo8/ZOXHWvV5A7hwvhgumEN5wCi0r9d/XYstKxCWcvhAjjP5LxKpxKmoqQgrSKzpu34= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=a2DBIDi8; arc=none smtp.client-ip=95.215.58.186 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="a2DBIDi8" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858884; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bqSdIynY+Fpb6wP9Mu8x9/648E6VVvAD4Mr1vf4V3Ak=; b=a2DBIDi8F1/UOBUoHnsaCx4Mxoo5NK7/SNkLKiWbIatSaBizE1MsRse7NylZmkn8lmtGfl zYmaWABeGWsGu8Al8KpfIIh4weHFS3NrwsDlmwj8y4gsN3lOcbKICvF+1Dq5imuWO9kg06 0hfhmKFz7WXddLJuwNsNuGZzGTdXrFI= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 11/14] selftests/bpf: Free bpf_object in test_sysctl Date: Wed, 11 Feb 2026 17:13:53 -0800 Message-ID: <20260212011356.3266753-12-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" ASAN reported a resource leak due to the bpf_object not being tracked in test_sysctl. Add an out parameter to load_sysctl_prog() to properly clean up bpf_object if a program was loaded from a file. Signed-off-by: Ihor Solodrai --- .../selftests/bpf/prog_tests/test_sysctl.c | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/test_sysctl.c b/tools/t= esting/selftests/bpf/prog_tests/test_sysctl.c index 273dd41ca09e..31f4bba87c3e 100644 --- a/tools/testing/selftests/bpf/prog_tests/test_sysctl.c +++ b/tools/testing/selftests/bpf/prog_tests/test_sysctl.c @@ -1459,7 +1459,8 @@ static int load_sysctl_prog_insns(struct sysctl_test = *test, return ret; } =20 -static int load_sysctl_prog_file(struct sysctl_test *test) +static int load_sysctl_prog_file(struct sysctl_test *test, + struct bpf_object **objp) { struct bpf_object *obj; int prog_fd; @@ -1471,14 +1472,17 @@ static int load_sysctl_prog_file(struct sysctl_test= *test) return -1; } =20 + *objp =3D obj; return prog_fd; } =20 -static int load_sysctl_prog(struct sysctl_test *test, const char *sysctl_p= ath) +static int load_sysctl_prog(struct sysctl_test *test, const char *sysctl_p= ath, + struct bpf_object **objp) { - return test->prog_file - ? load_sysctl_prog_file(test) - : load_sysctl_prog_insns(test, sysctl_path); + if (test->prog_file) + return load_sysctl_prog_file(test, objp); + *objp =3D NULL; + return load_sysctl_prog_insns(test, sysctl_path); } =20 static int access_sysctl(const char *sysctl_path, @@ -1529,6 +1533,7 @@ static int access_sysctl(const char *sysctl_path, static int run_test_case(int cgfd, struct sysctl_test *test) { enum bpf_attach_type atype =3D test->attach_type; + struct bpf_object *obj =3D NULL; char sysctl_path[128]; int progfd =3D -1; int err =3D 0; @@ -1538,7 +1543,7 @@ static int run_test_case(int cgfd, struct sysctl_test= *test) snprintf(sysctl_path, sizeof(sysctl_path), "/proc/sys/%s", test->sysctl); =20 - progfd =3D load_sysctl_prog(test, sysctl_path); + progfd =3D load_sysctl_prog(test, sysctl_path, &obj); if (progfd < 0) { if (test->result =3D=3D LOAD_REJECT) goto out; @@ -1573,7 +1578,10 @@ static int run_test_case(int cgfd, struct sysctl_tes= t *test) /* Detaching w/o checking return code: best effort attempt. */ if (progfd !=3D -1) bpf_prog_detach(cgfd, atype); - close(progfd); + if (obj) + bpf_object__close(obj); + else if (progfd !=3D -1) + close(progfd); printf("[%s]\n", err ? "FAIL" : "PASS"); return err; } --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-178.mta1.migadu.com (out-178.mta1.migadu.com [95.215.58.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D37B19005E for ; Thu, 12 Feb 2026 01:14:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858889; cv=none; b=bVnDaC71g2+71IRQc8njlwfLB9owsW3K0x6WTXiYAu9n1BFnKfGzEMgiNPJJTANIHuUF4zJYAo8nt133Ug6ue9ajSpK7Dgdvd2HfVx+TWXm2PCT68ZsxfwnHAuoL3s3b1+nbLnCBqrvpmJtdRjL0TzaBQz+s0n/b8xb9x7tAjs4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858889; c=relaxed/simple; bh=yM1ccGWJitx0+WTiHAo7F0fQXHUFWHzBwuaDPI2/4Uc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=N/LzNY/2zmnKMd59LqThFY9qs/YYFNWMayiwWHIg21VK1BS4zdnAGmymz89KEBueUHRDRHk85RP54u7Vv+0I4M49YN1SBod+6Vz0sR1kNh34n6JgHY9nRt9AA3mtbp+KOzdz3p/ZyWLB3h5gWn7s/TkKSSP82tFBxqAGZ9lXOFc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=vaGWQ4DE; arc=none smtp.client-ip=95.215.58.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="vaGWQ4DE" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858886; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DjCyTymnNRA4SVevlIpD5/RjOO+nGAgUAHsQw7CcXlU=; b=vaGWQ4DExg+LUePrT8qQxbh97itOtPlQIEK/mZ7vexfo+q7x/Zz454twvGLr/+jFKzGdx7 j7RnHemQr0mWxCuApGG5f5bqqxTT4ie9jiNMi7U6J19k/Jo8q1EE/KOVoH2sW+CtXB8CYq Rdarec4AucK9xqXi7Rgo/LQDgFoZWrw= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 12/14] selftests/bpf: Fix array bounds warning in jit_disasm_helpers Date: Wed, 11 Feb 2026 17:13:54 -0800 Message-ID: <20260212011356.3266753-13-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Compiler cannot infer upper bound for labels.cnt and warns about potential buffer overflow in snprintf. Add an explicit bounds check (... && i < MAX_LOCAL_LABELS) in the loop condition to fix the warning. Signed-off-by: Ihor Solodrai Acked-by: Eduard Zingerman --- .../testing/selftests/bpf/jit_disasm_helpers.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/bpf/jit_disasm_helpers.c b/tools/testi= ng/selftests/bpf/jit_disasm_helpers.c index febd6b12e372..364c557c5115 100644 --- a/tools/testing/selftests/bpf/jit_disasm_helpers.c +++ b/tools/testing/selftests/bpf/jit_disasm_helpers.c @@ -122,15 +122,15 @@ static int disasm_one_func(FILE *text_out, uint8_t *i= mage, __u32 len) pc +=3D cnt; } qsort(labels.pcs, labels.cnt, sizeof(*labels.pcs), cmp_u32); - for (i =3D 0; i < labels.cnt; ++i) - /* gcc is unable to infer upper bound for labels.cnt and assumes - * it to be U32_MAX. U32_MAX takes 10 decimal digits. - * snprintf below prints into labels.names[*], - * which has space only for two digits and a letter. - * To avoid truncation warning use (i % MAX_LOCAL_LABELS), - * which informs gcc about printed value upper bound. - */ - snprintf(labels.names[i], sizeof(labels.names[i]), "L%d", i % MAX_LOCAL_= LABELS); + /* gcc is unable to infer upper bound for labels.cnt and + * assumes it to be U32_MAX. U32_MAX takes 10 decimal digits. + * snprintf below prints into labels.names[*], which has space + * only for two digits and a letter. To avoid truncation + * warning use (i < MAX_LOCAL_LABELS), which informs gcc about + * printed value upper bound. + */ + for (i =3D 0; i < labels.cnt && i < MAX_LOCAL_LABELS; ++i) + snprintf(labels.names[i], sizeof(labels.names[i]), "L%d", i); =20 /* now print with labels */ labels.print_phase =3D true; --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-171.mta1.migadu.com (out-171.mta1.migadu.com [95.215.58.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3692D26562D for ; Thu, 12 Feb 2026 01:14:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858893; cv=none; b=SkA33mCxUwHKqKhqovjGfoKS1ew1RMITpbTr5RoUD7dQdOztzLe/0wLD/id3mRSXdGrENwUOFxY4k94El+2mTMCTDtNRx9wETvGYljiggUJs1V06FLur9eItZ9Wa2DKOLQPWehZnl9uJZLC25Rd7FTafAQwpWFZOVU3hQy0WTOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858893; c=relaxed/simple; bh=JVwx4R4xDv82eW4A0cXQYBdTcGQAkR8CL86gxjBWH48=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mzsN3bA6wycpLIwafweHjHANU+yQUxcjBdOq30RU6veLSR4ls7WKmwgU+UWjEkN0mUAtQFyPd2PnOmIG/P5gM0cyFpFMulTHiGwUYgKuSmU2WS4bWku+6+FHjS1rqw4SjRwyreDN/Dahk6tnWNSI1kUec9Nj0uF+/gHEsZMMZoI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=an4SuMML; arc=none smtp.client-ip=95.215.58.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="an4SuMML" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858890; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SgJGj1e5r8Ic5UgYIk8jqHxDyaomw15BU7zWi2kJTtc=; b=an4SuMMLvqUvd1f5dXY7k1jifDCne2Nz1NrXPR44b47vrEHiEbSoUy3Nl1shkccYHRiQ+J 6BMZejrN/PIFzx2F5gLIK6aJaaacualVDpeCBk3z9zY0A3I/fcZ92hwQVypn9uzw6Dhl+4 2g/ScceIeBv/NAXK1X1tjdZcadIoKtc= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 13/14] selftests/bpf: Fix out-of-bounds array access bugs reported by ASAN Date: Wed, 11 Feb 2026 17:13:55 -0800 Message-ID: <20260212011356.3266753-14-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" - kmem_cache_iter: remove unnecessary debug output - lwt_seg6local: change the type of foobar to char[] - the sizeof(foobar) returned the pointer size and not a string length as intended - verifier_log: increase prog_name buffer size in verif_log_subtest() - compiler has a conservative estimate of fixed_log_sz value, making ASAN complain on snprint() call Signed-off-by: Ihor Solodrai Acked-by: Eduard Zingerman --- tools/testing/selftests/bpf/prog_tests/kmem_cache_iter.c | 7 ++----- tools/testing/selftests/bpf/prog_tests/lwt_seg6local.c | 2 +- tools/testing/selftests/bpf/prog_tests/verifier_log.c | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/kmem_cache_iter.c b/too= ls/testing/selftests/bpf/prog_tests/kmem_cache_iter.c index 6e35e13c2022..399fe9103f83 100644 --- a/tools/testing/selftests/bpf/prog_tests/kmem_cache_iter.c +++ b/tools/testing/selftests/bpf/prog_tests/kmem_cache_iter.c @@ -104,11 +104,8 @@ void test_kmem_cache_iter(void) if (!ASSERT_GE(iter_fd, 0, "iter_create")) goto destroy; =20 - memset(buf, 0, sizeof(buf)); - while (read(iter_fd, buf, sizeof(buf)) > 0) { - /* Read out all contents */ - printf("%s", buf); - } + while (read(iter_fd, buf, sizeof(buf)) > 0) + ; /* Read out all contents */ =20 /* Next reads should return 0 */ ASSERT_EQ(read(iter_fd, buf, sizeof(buf)), 0, "read"); diff --git a/tools/testing/selftests/bpf/prog_tests/lwt_seg6local.c b/tools= /testing/selftests/bpf/prog_tests/lwt_seg6local.c index 3bc730b7c7fa..1b25d5c5f8fb 100644 --- a/tools/testing/selftests/bpf/prog_tests/lwt_seg6local.c +++ b/tools/testing/selftests/bpf/prog_tests/lwt_seg6local.c @@ -117,7 +117,7 @@ void test_lwt_seg6local(void) const char *ns1 =3D NETNS_BASE "1"; const char *ns6 =3D NETNS_BASE "6"; struct nstoken *nstoken =3D NULL; - const char *foobar =3D "foobar"; + const char foobar[] =3D "foobar"; ssize_t bytes; int sfd, cfd; char buf[7]; diff --git a/tools/testing/selftests/bpf/prog_tests/verifier_log.c b/tools/= testing/selftests/bpf/prog_tests/verifier_log.c index 8337c6bc5b95..aaa2854974c0 100644 --- a/tools/testing/selftests/bpf/prog_tests/verifier_log.c +++ b/tools/testing/selftests/bpf/prog_tests/verifier_log.c @@ -47,7 +47,7 @@ static int load_prog(struct bpf_prog_load_opts *opts, boo= l expect_load_error) static void verif_log_subtest(const char *name, bool expect_load_error, in= t log_level) { LIBBPF_OPTS(bpf_prog_load_opts, opts); - char *exp_log, prog_name[16], op_name[32]; + char *exp_log, prog_name[24], op_name[32]; struct test_log_buf *skel; struct bpf_program *prog; size_t fixed_log_sz; --=20 2.53.0 From nobody Thu Apr 2 17:32:51 2026 Received: from out-176.mta1.migadu.com (out-176.mta1.migadu.com [95.215.58.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88B5E268C42 for ; Thu, 12 Feb 2026 01:14:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858895; cv=none; b=YzN+jHt2soItqP8aeobwzgCn6/u8lyqgiZUi76YWDnYTJnfhbPLk8ijH3OqjMLAujRAs8WOa4mh1fAvio+4+VMPklCsRPeUj20SkASJZ5Jeasot0+kbjxElDZYHtv8/UYhJxbicn5qpo/bnjn3ZQYcuXx1YCpdluoXJgfX/E1Pk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770858895; c=relaxed/simple; bh=JhWpkW+RBS4CdBILjprhBmN5mYv1DZA64wlcJPzPyIY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TndELA6AF1rNHbb56BsVLZDG/i9NkOZzIAS5gok/dY2DNgTwFONMdtd1JZhjQEiWftR3l6jtBnMQ8kXFwsJzZj7DsU8+BGmIk+RhxWlrCUtb3uzli98e93wjLmiyn8BSY4tuWcQlFF1H9dtOXBsGLOMTpilj8XJI8n4pNfdL4Wc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=hm7X0r+B; arc=none smtp.client-ip=95.215.58.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="hm7X0r+B" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770858893; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TYateGUYWZT4rVCY9MRSYAbu22ESy2nd9yzyOUitGHE=; b=hm7X0r+BvmsCtZ775mK4d194tSwnprvL2mzSJrGozF2/uKZJWRz8yCAzYRsN6JjwzPIqe6 e7EV6aESyd5+uw3IPsh4tSUNHW3u2bWNyngYvMMfNQ/2AoXOLR6IsGLsUM8foUyFIaO4Ys ZzWHD6HIVEBnrWer1MAJtqAG2rGkwb8= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman Cc: Amery Hung , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf-next v1 14/14] selftests/bpf: Check BPFTOOL env var in detect_bpftool_path() Date: Wed, 11 Feb 2026 17:13:56 -0800 Message-ID: <20260212011356.3266753-15-ihor.solodrai@linux.dev> In-Reply-To: <20260212011356.3266753-1-ihor.solodrai@linux.dev> References: <20260212011356.3266753-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" The bpftool_maps_access and bpftool_metadata tests may fail on BPF CI with "command not found", depending on a workflow. This happens because detect_bpftool_path() only checks two hardcoded relative paths: - ./tools/sbin/bpftool - ../tools/sbin/bpftool Add support for a BPFTOOL environment variable that allows specifying the exact path to the bpftool binary. Also replace strncpy() with snprintf() for proper null-termination. Signed-off-by: Ihor Solodrai --- tools/testing/selftests/bpf/bpftool_helpers.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/bpftool_helpers.c b/tools/testing/= selftests/bpf/bpftool_helpers.c index a5824945a4a5..5435ecd720d1 100644 --- a/tools/testing/selftests/bpf/bpftool_helpers.c +++ b/tools/testing/selftests/bpf/bpftool_helpers.c @@ -12,13 +12,21 @@ static int detect_bpftool_path(char *buffer) { char tmp[BPFTOOL_PATH_MAX_LEN]; + const char *env_path; + + /* First, check if BPFTOOL environment variable is set */ + env_path =3D getenv("BPFTOOL"); + if (env_path && access(env_path, X_OK) =3D=3D 0) { + snprintf(buffer, BPFTOOL_PATH_MAX_LEN, "%s", env_path); + return 0; + } =20 /* Check default bpftool location (will work if we are running the * default flavor of test_progs) */ snprintf(tmp, BPFTOOL_PATH_MAX_LEN, "./%s", BPFTOOL_DEFAULT_PATH); if (access(tmp, X_OK) =3D=3D 0) { - strncpy(buffer, tmp, BPFTOOL_PATH_MAX_LEN); + snprintf(buffer, BPFTOOL_PATH_MAX_LEN, "%s", tmp); return 0; } =20 @@ -27,7 +35,7 @@ static int detect_bpftool_path(char *buffer) */ snprintf(tmp, BPFTOOL_PATH_MAX_LEN, "../%s", BPFTOOL_DEFAULT_PATH); if (access(tmp, X_OK) =3D=3D 0) { - strncpy(buffer, tmp, BPFTOOL_PATH_MAX_LEN); + snprintf(buffer, BPFTOOL_PATH_MAX_LEN, "%s", tmp); return 0; } =20 --=20 2.53.0