From nobody Thu Apr 2 19:06:53 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