From nobody Fri Apr 3 04:40:03 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 4D4B21F4631 for ; Wed, 18 Feb 2026 00:31:11 +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=1771374673; cv=none; b=a3mKMuAWZXlfkyNrOra2jhPpI/tMOK/7e25E2f3R9dW5/+KiUWQMr9sy8CbB9Um17Cd+WXEVhurYZpoOt/OBHMgoHgMm2I7tzrSLikcfq/7YqhoEFkc1WCvbJxJZsLg2mlqEkAbDYe/Fhkrd+CK0+B4agi9M2Yb7Vcb6E0mmsyE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374673; c=relaxed/simple; bh=/UsnomEVJlN0FiGcA389tQ8IrZmWYsrwk9Wdy9V73GY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=upq6Ei8i2kI8yfCS23YC5aDX7vFmvMrhLEN4t0BRO1a0PTAmlVkU1b6f6yfRb1j/pOgpz/cezqg2mWtNJf5PrDLZyqmlLOQ01KmDBT34z8p3L36MRSeHx+IbdyU6gG1yVM+G0vuZSN+jowx83e4SZCRCxy9GuFjbhSsj/y5qtqw= 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=idt0CKLH; 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="idt0CKLH" 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=1771374669; 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=rl/m1jjxliizIz5vwB/zQc0iMVoBeg6z2tgc86AUFMM=; b=idt0CKLHmbzVOGsTKhtflfF/2BWzPII4b2Lenjh25Na4eBOc//Z1EWa+Aw292ka9MQsWZ9 B+/rwYGU48P0dv+sikorVUp7HI5phy3VLPED9+voh3fEfVesCcgFT4NbEPITwl5EWrFGcQ 1DoQmbAX3z+0jFpB8zvuTd+BcvbhHBI= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 01/15] selftests/bpf: Pass through build flags to bpftool and resolve_btfids Date: Tue, 17 Feb 2026 16:30:27 -0800 Message-ID: <20260218003041.1156774-2-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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 Also check for ASAN flag in selftests/bpf/Makefile for convenience. Signed-off-by: Ihor Solodrai --- tools/bpf/resolve_btfids/Makefile | 7 +++++-- tools/testing/selftests/bpf/Makefile | 13 +++++++++---- 2 files changed, 14 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..24f4ddb3783a 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile @@ -27,7 +27,11 @@ ifneq ($(wildcard $(GENHDR)),) endif =20 BPF_GCC ?=3D $(shell command -v bpf-gcc;) +ifdef ASAN +SAN_CFLAGS ?=3D -fsanitize=3Daddress -fno-omit-frame-pointer +else SAN_CFLAGS ?=3D +endif SAN_LDFLAGS ?=3D $(SAN_CFLAGS) RELEASE ?=3D OPT_FLAGS ?=3D $(if $(RELEASE),-O2,-O0) @@ -326,8 +330,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 +342,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 +408,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 Fri Apr 3 04:40:03 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 1BAAB27CCF2; Wed, 18 Feb 2026 00:31:13 +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=1771374675; cv=none; b=i6zAVBtJThXcdgP5NyFbgTWzGDQ6JDN1Eo+jKDN3ItVAVgRRIen/au9IwiNJxigq5WRReF3haN/tNQ+cy/BY9PfPJZZhlno2nkPIXOSF7yBC3LA9onHOAz1mpt/eBFAvk2YTiO3BXe+Y86PhdNH0K6DFB5TrgzDn9XRYVDJYYGk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374675; c=relaxed/simple; bh=dM4QGEXT/D9pDurHifV8OTpDMd4fGbpvmLcO5PvDpxQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rR+49sgkabakBfTmgnSwodjrXO8xK5PYn046dPI3fd6qObQ+fkAHVky189vLO9lnf7wWM507JeFwEf+0EqlIc4LGtN1056RjktvGUXqei4TWWKPx7mmR75NQFDUHIKIJKo5e4WIHC6BfTJl27V3TP+jBCeCXuoNAfZZVy5KrsRo= 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=aIh28qIa; 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="aIh28qIa" 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=1771374672; 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=6zvv5GEAcoBWd42ld/hJY9KlCqYIxZFl5fK7TBTDqRg=; b=aIh28qIaZx6A0yT9Zq50Q7ujDmb64u4K+4clyN++4pnzAuEW1PjdbusmuidtuYxqnamdE9 YGE/S1p78US1j2NL4q5HtafCKGGVIhZJzTChAt8Caiz7L5kxbygxOygf9cDg/p7o9xGcEN HXpXJp76F7i2jqzC23jdvvSCh2xZGcU= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 02/15] resolve_btfids: Fix memory leaks reported by ASAN Date: Tue, 17 Feb 2026 16:30:28 -0800 Message-ID: <20260218003041.1156774-3-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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 Acked-by: Jiri Olsa Signed-off-by: Ihor Solodrai --- tools/bpf/resolve_btfids/main.c | 81 ++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/mai= n.c index ca7fcd03efb6..5208f650080f 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,21 @@ 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, + const 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 +285,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 +343,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 +353,21 @@ 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 *next; + struct btf_id *id; + + next =3D rb_first(root); + while (next) { + id =3D rb_entry(next, struct btf_id, rb_node); + next =3D rb_next(&id->rb_node); + rb_erase(&id->rb_node, root); + free(id->name); + free(id); + } +} + static void bswap_32_data(void *data, u32 nr_bytes) { u32 cnt, i; @@ -1547,6 +1569,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 Fri Apr 3 04:40:03 2026 Received: from out-188.mta1.migadu.com (out-188.mta1.migadu.com [95.215.58.188]) (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 54159285C80 for ; Wed, 18 Feb 2026 00:31:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.188 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374678; cv=none; b=j5elEZw0k2+N/74hmFib7rU8BAvS1QBvUC0JZxBCsO4dNx1gFj0UPgks51Cn1F61cr7UZ2hX/aK5MKtZjuL5YbeefJRmn/VuD9X3ToTzFikuELN2SUgZfoptRnhzdpF0+h24qt+qOhCje7vz8T/2pwQdNKZ78jL2x/JXhMVShI0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374678; c=relaxed/simple; bh=M+dUUNDfpAIzgLSnvfWveVIwWVTjzjuQu5215zF1QPw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QOaOS1djQNGITh7ig7VmdMC/6RhLzaVowGAjI6XOcytDUyVFnQtBlAhyf6sGLYv4RxW0YW9vt8uY7CuV+L7hb0LdP8dSTJ8tY58JIlhoTl06/TtHLoOATok1zlfn2hVrV87SD4Q2Ccp6+5LVKtRLjE/sKmFxA5JxjdCHV/+IP38= 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=KiBMagpm; arc=none smtp.client-ip=95.215.58.188 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="KiBMagpm" 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=1771374675; 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=KiBMagpmF5+CVJVGTkfiOiNCfgUv3LBbMdACi5/mCKJ/+6OxnKuSLq5dAZQ2/Ip3gtYeX9 zbb47e7GrVRxDnHF2Z2c6fMqrYa8ykGx0m7QyakgoqKNK5YP9GrLbkP0eJj7LCtYtOztSn uLcW5zg4F5b8GSMyecXDqwXoAnqbhJI= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 03/15] selftests/bpf: Add DENYLIST.asan Date: Tue, 17 Feb 2026 16:30:29 -0800 Message-ID: <20260218003041.1156774-4-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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 Fri Apr 3 04:40:03 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 8FABE27057D for ; Wed, 18 Feb 2026 00:31:21 +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=1771374683; cv=none; b=Ng0Q1I60YtDuB8sbuAm/+gx9Ys9d80RBUOLbrodzwGfjdf74oazskHhU5kB7tHx4nOmNXgnV7/LjT1hgXxUrJZGPlmLHUjZOb6YH3vt+PxA6iD8Hp5iZ7Ai4v0AuTt98V3rMAEAA+8xdlGKO+UxihZVunX9W7Rq941Q51jvUSkM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374683; c=relaxed/simple; bh=f0olX1HLohMdoDBpNwTJTJD4HwX/HbTAm9QCIGCNLLA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SbOQomXA/hICrJpt8VVaqdBTxTGbLS4Um0dOpXFbW2q+AqIcsEpYKvwxpGjdCdIsV9OBYDjvHfQN27DTybNSWNSSxdG3/7LlhH7+LozEfe36x2nhMX+Mo42spVhkOeHFUeuHwQvuP6cJIMahf+1WZcYUElAVbIP/VOa7Eh1LjrA= 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=pYGllzJU; 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="pYGllzJU" 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=1771374679; 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=dQoMYze3DoKvqQ5P13/nXDg2u8X/q4xJEyhjtX/DYfw=; b=pYGllzJUp614yhAbKR0xFnykSPT1eZIRbpc6j8uO4kYJ7ydqLja9p5DX3F8oA4HQs/a7FZ q3TeuTtLavAEdxu7LQmAnScWoQ98kPuFHjnBaLYqxfVLmabZETYs94Z7tw48acdeQkPHol sJ3OxMkCXYilab8QkSZnWzr6BfV8zyo= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 04/15] selftests/bpf: Refactor bpf_get_ksyms() trace helper Date: Tue, 17 Feb 2026 16:30:30 -0800 Message-ID: <20260218003041.1156774-5-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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. Move 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 | 14 ++++++----- .../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, 34 insertions(+), 26 deletions(-) diff --git a/tools/testing/selftests/bpf/benchs/bench_trigger.c b/tools/tes= ting/selftests/bpf/benchs/bench_trigger.c index aeec9edd3851..f74b313d6ae4 100644 --- a/tools/testing/selftests/bpf/benchs/bench_trigger.c +++ b/tools/testing/selftests/bpf/benchs/bench_trigger.c @@ -230,8 +230,8 @@ 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 bpf_link *link =3D NULL; + struct ksyms *ksyms =3D NULL; =20 /* Some recursive functions will be skipped in * bpf_get_ksyms -> skip_entry, as they can introduce sufficient @@ -241,16 +241,18 @@ 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)) { + link =3D bpf_program__attach_kprobe_multi_opts(empty, NULL, &opts); + free_kallsyms_local(ksyms); + if (!link) { fprintf(stderr, "failed to attach bpf_program__attach_kprobe_multi_opts = to all\n"); exit(1); } 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 Fri Apr 3 04:40:03 2026 Received: from out-183.mta1.migadu.com (out-183.mta1.migadu.com [95.215.58.183]) (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 ECD7829346F for ; Wed, 18 Feb 2026 00:31:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374686; cv=none; b=at1u6KFIVI5Ig95wFVmd5A6oMceipDonmi6RJNHnGVteVz7RdeRm7MEugyJzZB+9t+BLthcJGZg55pQii4K6Bkr7ivNWbRL5rZ1OhyRoBEddCvZwtitcBKspypgCx3lTCGjAjs5VOaNNeHg7pAzdUazKS3Pn/eY75VhnGeRFNPw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374686; c=relaxed/simple; bh=Dqjt9da2F3+bSTPjCKiM2B8GO3yugqgHmf62RfXNF/M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Sn5a+rYVaWCQwHMH84eEKcycRZJ1YU9I1XKLdlZk2M1ieSYC0lFKQ+lX696iZi2elSmHG+eKRmO7qNdkRQx6YJWzFpw9nsf/0TWV+b2HVtfpeCvo3j7IAtlolwhxp+t/o9f12wTTKa0QztcfP2Mn0KNHT68yy1lJYB5CZSyItQA= 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=ZWNbUZ3k; arc=none smtp.client-ip=95.215.58.183 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="ZWNbUZ3k" 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=1771374683; 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=5WbVeiBXZtOYlCXL9iWHzaxACQwulopsaza7fJa1mOo=; b=ZWNbUZ3kU9uhSfgGZuLLjWRTE0DvSuZ2JMh5kr4SryOSyFVVwAkeepDW9RcaVlqaIFxatH C9KEOvn3aIsLGsFE9xomGm9vgs67le0kz+r4cL0iSoIv7labUNrxwxQftNHJWLLC4GAT9x w1Z0gSK2njwv59WgZL3aDkrm4HTkstU= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 05/15] selftests/bpf: Fix memory leaks in tests Date: Tue, 17 Feb 2026 16:30:31 -0800 Message-ID: <20260218003041.1156774-6-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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: inline pkt_stream_replace() in testapp_stats_rx_full() and testapp_stats_fill_empty() - testing_helpers: free buffer allocated by getline() in parse_test_list_file Signed-off-by: Ihor Solodrai Acked-by: Eduard Zingerman --- .../selftests/bpf/prog_tests/htab_update.c | 1 + .../selftests/bpf/prog_tests/test_xsk.c | 24 +++++++++++++++---- tools/testing/selftests/bpf/testing_helpers.c | 1 + 3 files changed, 22 insertions(+), 4 deletions(-) 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..7e38ec6e656b 100644 --- a/tools/testing/selftests/bpf/prog_tests/test_xsk.c +++ b/tools/testing/selftests/bpf/prog_tests/test_xsk.c @@ -2003,9 +2003,17 @@ int testapp_stats_tx_invalid_descs(struct test_spec = *test) =20 int testapp_stats_rx_full(struct test_spec *test) { - if (pkt_stream_replace(test, DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS = / 2, MIN_PKT_SIZE)) + struct pkt_stream *tmp; + + tmp =3D pkt_stream_generate(DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS /= 2, MIN_PKT_SIZE); + if (!tmp) + return TEST_FAILURE; + test->ifobj_tx->xsk->pkt_stream =3D tmp; + + tmp =3D pkt_stream_generate(DEFAULT_UMEM_BUFFERS, MIN_PKT_SIZE); + if (!tmp) return TEST_FAILURE; - test->ifobj_rx->xsk->pkt_stream =3D pkt_stream_generate(DEFAULT_UMEM_BUFF= ERS, MIN_PKT_SIZE); + test->ifobj_rx->xsk->pkt_stream =3D tmp; =20 test->ifobj_rx->xsk->rxqsize =3D DEFAULT_UMEM_BUFFERS; test->ifobj_rx->release_rx =3D false; @@ -2015,9 +2023,17 @@ int testapp_stats_rx_full(struct test_spec *test) =20 int testapp_stats_fill_empty(struct test_spec *test) { - if (pkt_stream_replace(test, DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS = / 2, MIN_PKT_SIZE)) + struct pkt_stream *tmp; + + tmp =3D pkt_stream_generate(DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS /= 2, MIN_PKT_SIZE); + if (!tmp) + return TEST_FAILURE; + test->ifobj_tx->xsk->pkt_stream =3D tmp; + + tmp =3D pkt_stream_generate(DEFAULT_UMEM_BUFFERS, MIN_PKT_SIZE); + if (!tmp) return TEST_FAILURE; - test->ifobj_rx->xsk->pkt_stream =3D pkt_stream_generate(DEFAULT_UMEM_BUFF= ERS, MIN_PKT_SIZE); + test->ifobj_rx->xsk->pkt_stream =3D tmp; =20 test->ifobj_rx->use_fill_ring =3D false; test->ifobj_rx->validation_func =3D validate_fill_empty; 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 Fri Apr 3 04:40:03 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 E367329C321 for ; Wed, 18 Feb 2026 00:31:27 +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=1771374689; cv=none; b=VMCKgfVCt2RowfGrUL3KHnbfEBgLRyLJK0fzUcrljolYYSg/Du6rNUp5HBdQrUEuGEzrHs6vuqsI9yOigYWQ96C4ly7MX4ODpIBSOa8hEkggHEyyMniIxtzWb0B+vpY0xaYLNqf9YdCQtTUdls1Dw8Ju7G7TvOtbkT8fRnJyC/A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374689; c=relaxed/simple; bh=ObsMtcRRjv9Zj6rFWk3J31bqxVbLTticfINT6Fj0dx8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FUrGICdsoiQuPa4ehhp9pzhEitfwKYG2ZNTBDq2Qm6bEwgDotMsFpx3Cbn3AThqblO0nB7nVhaQt9pyCz8O2lagGfxo22HTIFHSmPe9aV7B3P4TGrUtQdXPWorhaC/LlOw3fD5lXgPOFKL2DviumyLiSlnZFMezovdYM56vCWa4= 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=g7gjABUD; 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="g7gjABUD" 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=1771374686; 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=pa0F2SW5cYTzCEHbVS+ffKXWQRWV1EBeihritj2o+XI=; b=g7gjABUDFi3MRFDOdM4ZYmqvKXiegxQMKYsgufLPuIwSwMYePiFIomy32NneoGz4Cpp7eo amtW+vTP4PW6bFFCeB9oJM0jFdZEoH4z9Nn2AJ2jAJhprcxl89iWN48QgTcNRjNPSF73+B BMEQdQycHBlN7Hrc9ooDukdsNbYCDwo= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 06/15] selftests/bpf: Fix cleanup in check_fd_array_cnt__fd_array_too_big() Date: Tue, 17 Feb 2026 16:30:32 -0800 Message-ID: <20260218003041.1156774-7-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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. Acked-by: Eduard Zingerman Signed-off-by: Ihor Solodrai --- 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 Fri Apr 3 04:40:03 2026 Received: from out-183.mta1.migadu.com (out-183.mta1.migadu.com [95.215.58.183]) (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 2C56D283CBF for ; Wed, 18 Feb 2026 00:31:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374692; cv=none; b=pzcgnK9gOsik+hy2qvhh1vbSCsjBcgAeSW4hriGL2Uhij+DzFGe69lwzOYanwbwFwPRRLySToufEBz9JmFl+iWiGferOph90okkKx6uFw8mrL1zDU5hKlGJRyBRAu3Qa9wMSaanxErSdmfybcrNw7sllTxDm6SRQ6VyBswvjYig= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374692; c=relaxed/simple; bh=kwrsgq8rd0jKppaiL7WPQlFKokPcRkuuqua0r2Z1GHo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o+6Dlsr0AdLB2oYSiWHVmn/xiwjHJy19Eb1HocpTAPO7k2YP9mxQOPIyAZ5h/awcyMk5oPZBMVzizUXG93TB4fz9yJ2PI9FT/qF78oAaOEIQXe6isQxjHtpCQTq/FR+TFK9H6uJJ93LRluIj0XPfbipQ0cESsNWJXPRHY9vLKXM= 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=PQGwlAuQ; arc=none smtp.client-ip=95.215.58.183 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="PQGwlAuQ" 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=1771374689; 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=YxHDHTJszBQ9UY5j/vo3lm9Z9CQCJiWhYDvWpF8HC5A=; b=PQGwlAuQ2Tq4V5hBW3t5XDJyERxMviuceFBdhFaLWFRNyygxgiRjYfZltqOnB5z36VgLjo 6CvtnGbO/vFkYwjdfq0gNdlowpXkK1aN9j46EUibI1b24ERe7L/UIckOKwDuzVM6PF5jTt 5mDdXRo6BkMX7ippdqRkIOlKugocrmk= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 07/15] veristat: Fix a memory leak for preset ENUMERATOR Date: Tue, 17 Feb 2026 16:30:33 -0800 Message-ID: <20260218003041.1156774-8-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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. Acked-by: Mykyta Yatsenko Signed-off-by: Ihor Solodrai --- 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 Fri Apr 3 04:40:03 2026 Received: from out-177.mta1.migadu.com (out-177.mta1.migadu.com [95.215.58.177]) (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 47439260580 for ; Wed, 18 Feb 2026 00:31:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374695; cv=none; b=Il1detRNDHfhtXFiOXbuuxRzFJxapAzySffZfLorlPophkCmLnOjJGq18fkbSgBnvByj35hAiBhsvcOBiV/mB6MDwzz7aIHCoaWNklcRECf6vwUPMgjkYc3g2mUKYanOqZqjbYbJPkYwFfp04Guezcn8ghskhbE5h77UWgG2c/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374695; c=relaxed/simple; bh=MzkexYF0KXI6/3f5A4mloKiVVpwcWcpdxEdjkRZ1j64=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ulwugWYxeHt/rRfUZI7qGR+86TdEjNUfQVxALg6D3oRp58D6qt27TnJx9NUnZsKgZ+u6pVIrJ0hgN5VpPrYruWNFWRNT/s8dGiHJL4y+s1ty1hAHMTftMjOaTlrcrWjD0AKxBsn7J5Oy8MALrKRFSUcZXAfGXinnAxQ43PhsJJI= 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=C5UNJADe; arc=none smtp.client-ip=95.215.58.177 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="C5UNJADe" 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=1771374692; 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=t09EQpvSYD39X1EIK3P1BpaFzBMy5xyjK9v+7bVPEt8=; b=C5UNJADeqyWs/YvTFuoLIlyq9BH3Qt7/qzbTCsaZ4Y0ABuOgauTypM+AJzFD8/ibYU7UoF BZfFff2YjvJxtPUEOUcKcAzU66a8sEwRzus+w3MfntS09mbj8sGdfsoj1ZGNZWuxakWcS0 X9TiGSHZGIJiU8MTn6OEgrC4fmIFWdQ= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 08/15] selftests/bpf: Fix use-after-free in xdp_metadata test Date: Tue, 17 Feb 2026 16:30:34 -0800 Message-ID: <20260218003041.1156774-9-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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(). Acked-by: Mykyta Yatsenko Signed-off-by: Ihor Solodrai --- 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 Fri Apr 3 04:40:03 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 767832D46A9 for ; Wed, 18 Feb 2026 00:31:37 +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=1771374698; cv=none; b=jNAhblqBgMl9C1RVsSwVvtwMJyrDOoeWOYkeog1crLoHa/3Z1/Ohj1v0lYUjXFgtdjkCx8I5/CXTcwv6NehfAPVVL4vhbvsHOWaKpFXsJNCCNCkQkKne8lWQAL2a+Bwuvkt5CJ6UHEX42UE28EtxgMZVN4ie2lJ14odQTxOJga4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374698; c=relaxed/simple; bh=4XWG+yKNbjLV5S8DLeBinhCC+i5vGRqMtejq5J8ewuc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sS5K1v1wMJgY8egNoG8IOByKB+sVFs3dWUzniGBNMwMJ0eom96/404M9hpreEuQopZZ4PVlFKIuaumXdK8DupJOXsQKgXofd3BBZ+MdImGCNUS0WZNyu5VQOh3oRMcmxpcMqPMUfHBHWjaEFvCmrfRZ46QcnSSsZGen9Z43ozwo= 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=jqbdf8v0; 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="jqbdf8v0" 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=1771374695; 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=uneamLJI7gKkUe6gRTHtLyTvtCQ+Fkon9lXZOT1KJIs=; b=jqbdf8v0JoB0cXTKe5QTfKAv+xfmRIUjjylcRgqLZTVm05Zjw4suFBtQ+HBxfR9sO7tAoG S+0EDV4zZkw6NCjHkSBhMWSKh8s9RS+iwfAi1NMjfuLL2Ec9pLxf2SD9xOuano59weAyot 2a8d4DG6kOpKo5MfMh6KU8uF3EiynmM= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 09/15] selftests/bpf: Fix double thread join in uprobe_multi_test Date: Tue, 17 Feb 2026 16:30:35 -0800 Message-ID: <20260218003041.1156774-10-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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 with a memset(0) call at the end of release_child(). Acked-by: Mykyta Yatsenko Acked-by: Jiri Olsa Signed-off-by: Ihor Solodrai --- tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c | 1 + 1 file changed, 1 insertion(+) 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..be6ff1d4a75b 100644 --- a/tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c +++ b/tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c @@ -68,6 +68,7 @@ static void release_child(struct child *child) close(child->c2p[1]); if (child->pid > 0) waitpid(child->pid, &child_status, 0); + memset(child, 0, sizeof(*child)); } =20 static void kick_child(struct child *child) --=20 2.53.0 From nobody Fri Apr 3 04:40:03 2026 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) (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 A2CCA2D5C8E for ; Wed, 18 Feb 2026 00:31:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374702; cv=none; b=WdSwaInJHfusmJL2BddmTnlswRcMiSRmY7YoFkxk6VcfefIZMLNOQGhqiSFNAICUq4rHZ1D1seGIkgMXypoOZUxX7hDILOsKj9WJicIQKb1ON2L+pkuHP9bV8AGTAbVmasondqyqGSKb6zyZEGysQI3QrOlLsiPVQF/6EA+6scM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374702; c=relaxed/simple; bh=OXctf3NUqnAZuAxu1aLlPz/j7koALTJtVbkyAmLEJIw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LTQNwPbhaBzYsZhC0FQK4G32WVwXCaEed8clciL4sxYb+2eixUEph72n6C6kVsSbrJ8lR9muO4qM1I/kYyLoHQ6m+k18CSHObEo6qwbMVdz+lEBSxoO5nuRtmwiIfr1WC0VgUgi5b+E3x7hg5QnoN/h3Op2YHSrgHXm76vGGXP0= 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=duP+P2Fq; arc=none smtp.client-ip=95.215.58.170 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="duP+P2Fq" 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=1771374698; 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=Sv9Qc5Ceahl9eBJ7mgculwLxJBZp6JCNQGrz4aDmn0w=; b=duP+P2FqzMpP2MQqxrcnbcjhwz70Dgk7OkjmQDQ25R2FnbC8ZhKq6Cz2082L4wunAHvrp7 ZybKmmpfgZaU74WX3isHr+ujljo6asw8VKCI3irJsHHcux366hTPz5Jj5bfOeSpHQqORN4 i4LNz82fA3uP+0/j1YEC6tqW7u8P5Us= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 10/15] selftests/bpf: Fix resource leaks caused by missing cleanups Date: Tue, 17 Feb 2026 16:30:36 -0800 Message-ID: <20260218003041.1156774-11-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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() Acked-by: Eduard Zingerman Signed-off-by: Ihor Solodrai --- .../bpf/prog_tests/cgrp_local_storage.c | 4 ++- .../testing/selftests/bpf/prog_tests/dynptr.c | 5 +++- .../selftests/bpf/prog_tests/sockmap_basic.c | 28 +++++++++---------- .../selftests/bpf/prog_tests/sockmap_listen.c | 2 +- .../bpf/prog_tests/struct_ops_private_stack.c | 4 +-- .../selftests/bpf/prog_tests/tc_opts.c | 6 ++-- .../selftests/bpf/prog_tests/test_tc_tunnel.c | 5 +++- 7 files changed, 29 insertions(+), 25 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..dd3c757859f6 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,13 +747,13 @@ static void test_sockmap_skb_verdict_peek_with_link(v= oid) 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 static void test_sockmap_unconnected_unix(void) { - int err, map, stream =3D 0, dgram =3D 0, zero =3D 0; + int err, map, stream =3D -1, dgram =3D -1, zero =3D 0; struct test_sockmap_pass_prog *skel; =20 skel =3D test_sockmap_pass_prog__open_and_load(); @@ -764,22 +764,22 @@ static void test_sockmap_unconnected_unix(void) =20 stream =3D xsocket(AF_UNIX, SOCK_STREAM, 0); if (stream < 0) - return; + goto out; =20 dgram =3D xsocket(AF_UNIX, SOCK_DGRAM, 0); - if (dgram < 0) { - close(stream); - return; - } + if (dgram < 0) + goto out; =20 err =3D bpf_map_update_elem(map, &zero, &stream, BPF_ANY); - ASSERT_ERR(err, "bpf_map_update_elem(stream)"); + if (!ASSERT_ERR(err, "bpf_map_update_elem(stream)")) + goto out; =20 err =3D bpf_map_update_elem(map, &zero, &dgram, BPF_ANY); ASSERT_OK(err, "bpf_map_update_elem(dgram)"); - +out: close(stream); close(dgram); + test_sockmap_pass_prog__destroy(skel); } =20 static void test_sockmap_many_socket(void) @@ -1027,7 +1027,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..d42123a0fb16 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 @@ -54,9 +54,7 @@ static void test_private_stack_fail(void) } =20 err =3D struct_ops_private_stack_fail__load(skel); - if (!ASSERT_ERR(err, "struct_ops_private_stack_fail__load")) - goto cleanup; - return; + ASSERT_ERR(err, "struct_ops_private_stack_fail__load"); =20 cleanup: struct_ops_private_stack_fail__destroy(skel); 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..2955750ddada 100644 --- a/tools/testing/selftests/bpf/prog_tests/tc_opts.c +++ b/tools/testing/selftests/bpf/prog_tests/tc_opts.c @@ -1360,10 +1360,8 @@ static void test_tc_opts_dev_cleanup_target(int targ= et) =20 assert_mprog_count_ifindex(ifindex, target, 4); =20 - 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"); - return; + goto cleanup; + cleanup3: err =3D bpf_prog_detach_opts(fd3, loopback, target, &optd); ASSERT_OK(err, "prog_detach"); 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 Fri Apr 3 04:40:03 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 9032A28C5B1 for ; Wed, 18 Feb 2026 00:31:43 +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=1771374704; cv=none; b=nmZQXThR2qkQRkJ8Ht2C/5WA/iDt5mCTS2/CwxQD72jONVBbHzUJBIm5tHVUBvBYkhf53IZOeJByrk/OuFY5wFit6YP5cyfo2ziYADwKkeGsIOm1WIzsOD/z0x2/2AsshFbDx67HIQbRpyKBFgWWJpenE6QzNYUiVbUnrQXqLEc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374704; c=relaxed/simple; bh=XKGbSecU2dLHUHRJGHYW7f3B0TIZ1V1qfLoZdjsr3M8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i/a6aJR8Fa/fz3Z8Ts4MwNSHKsgQRyv22ttTNESSwmYb1FOsaVtbJ52wWxT2RRGgDu7Pzs0ZZCcCfhvx4kfClvtMzBBwogMgbO3LLoBoEa9WqVsOX8MuVFqNl3RfdeMfjnjQEcxVUt5Uy4TmCWTmchTI3z0nLOj+jDh4Td0hBhQ= 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=ZTWz0uoR; 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="ZTWz0uoR" 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=1771374701; 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=PkyNMdzaljwPDsSqK2+KDJHRyF0c97m/yxN597Cj3Rw=; b=ZTWz0uoR9UzyZ9mQO0/+AawhgR43jQeE9NrfZDHcik4GVP7dQ0U4iujPCQyKgWSg53SCsl 204PqA0J7tJaOxL2s0QWjfha8fmppx01FbPB6IGOEh/KudI2c+jbX7dJYsEc5QkJwjaK1C 150qOm0KHt4iDy+9WWWg9IS8Nvdecjk= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 11/15] selftests/bpf: Free bpf_object in test_sysctl Date: Tue, 17 Feb 2026 16:30:37 -0800 Message-ID: <20260218003041.1156774-12-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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 obj field to struct sysctl_test to properly clean up bpf_object if a program was loaded from a file. Signed-off-by: Ihor Solodrai --- .../testing/selftests/bpf/prog_tests/test_sysctl.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 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..4349b846f1b3 100644 --- a/tools/testing/selftests/bpf/prog_tests/test_sysctl.c +++ b/tools/testing/selftests/bpf/prog_tests/test_sysctl.c @@ -27,6 +27,7 @@ struct sysctl_test { OP_EPERM, SUCCESS, } result; + struct bpf_object *obj; }; =20 static struct sysctl_test tests[] =3D { @@ -1471,14 +1472,16 @@ static int load_sysctl_prog_file(struct sysctl_test= *test) return -1; } =20 + test->obj =3D obj; return prog_fd; } =20 static int load_sysctl_prog(struct sysctl_test *test, const char *sysctl_p= ath) { - 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); + test->obj =3D NULL; + return load_sysctl_prog_insns(test, sysctl_path); } =20 static int access_sysctl(const char *sysctl_path, @@ -1573,7 +1576,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 (test->obj) + bpf_object__close(test->obj); + else if (progfd !=3D -1) + close(progfd); printf("[%s]\n", err ? "FAIL" : "PASS"); return err; } --=20 2.53.0 From nobody Fri Apr 3 04:40:03 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 8740C28C5B1 for ; Wed, 18 Feb 2026 00:31:47 +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=1771374708; cv=none; b=lz8sLIXSfII340krDVQ7sMs64nhckbEJuUkIF79eZ4dfz0QhwbS1yirfkIVAtdeXLnjmJTSQHc9kOvA9CYtw/JNJEi6yd98BUPN7AzrPj6awH8QPIgCSWxQpDb/3c2nyJCv1E1zwHdviOgcaMTh/xtOPwffvTLS89eCNqHgrgfI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374708; c=relaxed/simple; bh=nkZ7EIP6LGyWvfc3u9kgQem5wfwCiKQ9vXWuzdwQiws=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c0kc9alXBhnQN0jcqfeQYFKJPdhqK6o+miX2WwYV5XtKEjwiDajMoIgpGTJijnQxGpNQXS+hHx0j1ZvUh43dKzwVwhgZJCCnv5gcFIcnu5ph9le1gJvlq43oU9QHf05VL8CKyqyabJEyzUit4zf2fDS3G7+pY8YIvdrmlxM9no8= 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=JU2tR1AS; 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="JU2tR1AS" 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=1771374705; 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=TNjpWtD8/OLKVZY+IfnvHA3Q+we+RTPqutZ3CXBQMnM=; b=JU2tR1ASGbxe5hOCfyAGm+KbfShJgz4weL/8VI8wO1f7n3id4Bd5dQ7oKeuGV/+258BHCB O9tygi05tcsLsq4owjLlTxaWv2Ymo/DHavsgWM1YNUQlfXj5VAWjWEDL6xC4BAJL1QVMU+ FOcDdR17ZGNFbk6w+3DnSeSRtlQRIXs= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 12/15] selftests/bpf: Fix array bounds warning in jit_disasm_helpers Date: Tue, 17 Feb 2026 16:30:38 -0800 Message-ID: <20260218003041.1156774-13-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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. Acked-by: Eduard Zingerman Signed-off-by: Ihor Solodrai --- .../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 Fri Apr 3 04:40:03 2026 Received: from out-183.mta1.migadu.com (out-183.mta1.migadu.com [95.215.58.183]) (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 BFF472D9EF3 for ; Wed, 18 Feb 2026 00:31:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374713; cv=none; b=Y9hO70eyNyFkgBQTXqqGuFtbGsZ5RW5ToNg2YK9N2fdHAhz9G+P5hHjHqupyc9kSqbHdnk/2/KOTPXBUds7JjlICfyZ80b47yqqA14fJ2YfXwhxfbHI4tcd6Ee2AiDBDcOYFXQ6DkTsNnRiYZ1lXijX7kSE1DfaesDfToZJ6kMg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374713; c=relaxed/simple; bh=OhwXEJpa4nTUiXqwkxQqB+DAIjkR6dlqqn333NLbtts=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iUZ6xcV4GNw9su17S8TcfEuuUW1CA2ejBQC2BdW1SWa4w208FDK5En3cw/fDp4sawrXhnYUiIF8sM7e4syLoc0g3KqgV4mKBPtveZLruDEkfntb+xbMfaRYWBhT7xKvy62OjRVnqYCHYn+i6kdh6xzvjnFXH8vO81jtw/ZP5a2Y= 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=xv8rzh2v; arc=none smtp.client-ip=95.215.58.183 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="xv8rzh2v" 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=1771374709; 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=TB4ypzf99oYRqj7vX8THS7uO7MYjSRJ+wJRwvR9VB+Y=; b=xv8rzh2vCb4e9wAf7IET1EYp+n91OjuNF3ibJekShFIrjEWkohaq/K30ydm1HDs8jb0shp yIBaBcSdcv15cw+wOvYkd7JnwlSz82LvGSyJeDU7DUfibbOUe+lTYKffVD6V1720YquFur WZ/7WoU0RO/Br+E5+LEDWx3D6rh6kG4= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 13/15] selftests/bpf: Fix out-of-bounds array access bugs reported by ASAN Date: Tue, 17 Feb 2026 16:30:39 -0800 Message-ID: <20260218003041.1156774-14-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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 Acked-by: Eduard Zingerman Signed-off-by: Ihor Solodrai --- 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 Fri Apr 3 04:40:03 2026 Received: from out-173.mta1.migadu.com (out-173.mta1.migadu.com [95.215.58.173]) (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 A69692BD030 for ; Wed, 18 Feb 2026 00:31:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374716; cv=none; b=IV47VnAthYFZE5nUOg0DElGGAeHXjGGjaZxjJM+VFCw027WzD6agqKlwUQiFrzOo9LuyqFeEhKlXroPK8BjZ/XmLHqgMizWmbwdJSKZB4kocWplT3EKtEAceOrV4Jr5xPXtiUTV9ijj1ua2Aj4btQjfc6vQWgYdXkrhoL6Sb6rU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374716; c=relaxed/simple; bh=smjiuInwcCQtLC8OWZ39uExnF3V6vhwhl8sv6ftERP8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AItq8P9IBcyL/8uVlWznnJBaBGMdkfpI14md+M0M7Zzrdfa8M+M8wqYmk2rKJPpU97mSCSWHN5xhhwyO0NawfMuHxfP7GdXtLrK2rQ3nJTIWJnwQ7XlxaSPHsnLfvKs1y5OytI5VUu3iqKonPyln4sHQ8JpD2Ig1X0StJYUdtFQ= 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=pu619S5W; arc=none smtp.client-ip=95.215.58.173 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="pu619S5W" 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=1771374714; 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=8X6kehvt+PWy9aq2ekWX663KglL6Yjb8cBvRGjnXqvY=; b=pu619S5WX3NM3T0xS73RfoIK99R/V9Yfzcqlnj2dvV9xfiVH/g7qj6PKYakO6QxKzFM554 owJW9ihqt8pEpQNk01ky9GQHL323zs6szUcmkhFWKRF+e+HGi4HuMcp97LF2nPbQPg4pTQ fIHCFmb/5faJwH+S6Ek9sxZJ19RgCZ8= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 14/15] selftests/bpf: Check BPFTOOL env var in detect_bpftool_path() Date: Tue, 17 Feb 2026 16:30:40 -0800 Message-ID: <20260218003041.1156774-15-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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 | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/bpf/bpftool_helpers.c b/tools/testing/= selftests/bpf/bpftool_helpers.c index a5824945a4a5..d810e73da6c8 100644 --- a/tools/testing/selftests/bpf/bpftool_helpers.c +++ b/tools/testing/selftests/bpf/bpftool_helpers.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only #include "bpftool_helpers.h" +#include #include #include #include @@ -12,13 +13,24 @@ 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; + } else if (env_path) { + fprintf(stderr, "bpftool '%s' doesn't exist or is not executable\n", env= _path); + return 1; + } =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,11 +39,11 @@ 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 - /* Failed to find bpftool binary */ + fprintf(stderr, "Failed to detect bpftool path, use BPFTOOL env var to ov= erride\n"); return 1; } =20 @@ -71,4 +83,3 @@ int get_bpftool_command_output(char *args, char *output_b= uf, size_t output_max_l { return run_command(args, output_buf, output_max_len); } - --=20 2.53.0 From nobody Fri Apr 3 04:40:03 2026 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) (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 D7BC32BEC45 for ; Wed, 18 Feb 2026 00:31:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374720; cv=none; b=pDgC6ad2HTYvOo3sLJ8nEwt3vgSRliO7T/RbbrE6Ihodo8gKhiMAmZKzy6jWHPhvmRvrrzvzBXU+E2YUnNNfZ7AoQ5tsn6F/sN/f4J645m15gJQH/WNko5si5Mu/wcmqqDwxEoEudtCgwoWzwJbu7Jx4gbw0TTlcRkW7XFLSUbs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771374720; c=relaxed/simple; bh=3wBy1oGQuqnsbe8/SZfR5pqp8AkWaIySqBSseQ1CCcs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r9C08qCKsGLe31RzpjOGJyIzVNyp4aADfL4cWIUFuvjai3c+v+87eRNDmoj/jlK/b6PNeQnu1SgRkx8aEbHhtM4Gta38jVgw1JaRIlYYG2r17ahvUXRSiQFoCWoVnhq/hG4HByHeh15SmQ66KH/fHhjhWOGXS1c1h0LbCQfoFfw= 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=kmzPTeal; arc=none smtp.client-ip=95.215.58.170 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="kmzPTeal" 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=1771374717; 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=U2xLOSBsD98PduL0Z57WRWswEy89xF176xk/7vXpEbU=; b=kmzPTeal4Ua+OGrLudPBFFNT/ce25/v5qq+f465WSpgslD5outDfPX+GNWUj8DDrX7sRpK S3hbvjxBSt63Z7STPnl9GAJbdkrzfvDHgQVuH9UEgSbJIA0myZOUQ04KTry0F3CmyM3bbB ug4Y1Z3u71SEZe1MIJWSYLNLDAgzW2U= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Jiri Olsa , Mykyta Yatsenko , =?UTF-8?q?Alexis=20Lothor=C3=A9?= Cc: Amery Hung , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v2 15/15] selftests/bpf: Don't override SIGSEGV handler with ASAN Date: Tue, 17 Feb 2026 16:30:41 -0800 Message-ID: <20260218003041.1156774-16-ihor.solodrai@linux.dev> In-Reply-To: <20260218003041.1156774-1-ihor.solodrai@linux.dev> References: <20260218003041.1156774-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" test_progs has custom SIGSEGV handler, which interferes with the address sanitizer [1]. Add an #ifndef to avoid this. [1] https://lore.kernel.org/bpf/73d832948b01dbc0ebc60d85574bdf8537f3a810.ca= mel@gmail.com/ Signed-off-by: Ihor Solodrai --- tools/testing/selftests/bpf/test_progs.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selft= ests/bpf/test_progs.c index 02a85dda30e6..b533cede933d 100644 --- a/tools/testing/selftests/bpf/test_progs.c +++ b/tools/testing/selftests/bpf/test_progs.c @@ -1944,13 +1944,15 @@ int main(int argc, char **argv) .parser =3D parse_arg, .doc =3D argp_program_doc, }; + int err, i; + +#ifndef __SANITIZE_ADDRESS__ struct sigaction sigact =3D { .sa_handler =3D crash_handler, .sa_flags =3D SA_RESETHAND, - }; - int err, i; - + }; sigaction(SIGSEGV, &sigact, NULL); +#endif =20 env.stdout_saved =3D stdout; env.stderr_saved =3D stderr; --=20 2.53.0