From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5392D3126C2 for ; Sun, 12 Jul 2026 04:08:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783829334; cv=none; b=XNfXKIV5j58sSFYaH6HVM+dc4G69HD8DeKSEzBt6+5eZ28XCWVpKrXARvlWIkbDyBTsJDb7askegn+x3ay/oQTFJtlOXlHIrhZtzsGi+78/N09s/Se4gHHxDPxB3mZbH7HJZHaKdCJBicAa6Y2bwTXNneuQqgKzD9SsrjNT3dbI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783829334; c=relaxed/simple; bh=1q6mbB/bkD8j4HZw6McdfhEuY8vqwQWBAE158sj4Y8w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JZbJex8loTZJnxmxDMwUgIUhb8hdnBCPW/x5oJBZnVjNy8HPKzZHE92muycnWE7xzjGkSrkeeOeHY3NpuJdmC9Kkg9P0VH9NV8GIpMcrHcQxTs69SurZ2r4SkEXiSzMHZRmfcbUlEEZamM5COhxcjHTGiHdv0HqRBpuiKcuHufE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cbokcfpl; arc=none smtp.client-ip=209.85.216.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cbokcfpl" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-383cb94f742so1807010a91.3 for ; Sat, 11 Jul 2026 21:08:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783829332; x=1784434132; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=1vSs3PpxD7fzzGCyEVeEQofuGfZwATqltGOSkAKOV+Y=; b=cbokcfpllFKwZICTa8uyEtG3gK/7FawCR3BdoMCN2eYnV/UaEACwX8YYUUTY937kqu XrhvbfA812Px1NShMdXdMLykuPbxRC5P+2PoPv3ARp/vRKOFfCsUPO71qaLla4K85qfO ztngsdEEwdwI/6rv+0V2rsNJiSerwBjniugxklJfOUOAXlFU04Zch8ec5bzDlUImavL3 Id7FFDrNo72KepusQwMZi7n2BOfd/7MWmiPrCIH09//1ijwcKdTqEj093c8nw4Rw8EKl zjzAQu36pZUYE9gZQ+3xDntkT/jY0pnlf+I4CD2rhkkarpitFXpDnOZcUQt1p+r15IRj wyqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783829332; x=1784434132; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=1vSs3PpxD7fzzGCyEVeEQofuGfZwATqltGOSkAKOV+Y=; b=l7kDV4VdkPKRQ6LeTzLp3UvdcwoWfAX7WPT1MySFaik2hjwL9C6KJcaHbVSTuVuYUn iLNMvoy1yqL4oqqsa/hHSCLzig1Eij6cNYuGmW4834KeaOqGgfuASRg8UtKwD4IIjU8E J+S8qCDn3BtkVUtPnxtOKMhk0Mp+v7N2Auf+F97nF8XBHC968rMQ6+4vtDUz3ZFXdKSY 4WxMacT+Ojo/3FeeD5ODVUiuyXI3LLOxeMh9if0H5V1l82Hwpswk/l8TJPf3OwYo5sZc X+tCTW3AA4FaJL/yPlaXRWnd0hkWo6nGTn4wqJVnYJ1bi631WgbQtfevz8xNDfN/4phw VF8g== X-Forwarded-Encrypted: i=1; AHgh+RrS1ZugDhrRyRbDelyAvCwRyn/E3J8yejbKG6C/fSw9tlrx6jLHl7BCxX0ADYf1xHvYRoq/9zJKD1SdVlU=@vger.kernel.org X-Gm-Message-State: AOJu0Ywi5PwVLTFlyupp981g/b3LUCXdzmsZkRsvY6fnffnTsIAwDUhy +9OyaaS6+2yhE7U+H7rzs0VOrXF0Uy4FASbMXWH1CDF7mtnhpHmh+aYN X-Gm-Gg: AfdE7cljEEyPTVU21vndX91Zv5BuE1KmXEi00PGNckbyqjaidPybOSjnwvhYA/z2Ht/ 5d36pNDDWE2uFywuUdArGDQgJknuMAWGyCf67kXDuKpI6GQj0T95hUY+ZsFXLfK/3hZ/GI3TyQC HZeb8OZTANzbme6lRK6F+phYB46JMvhvF8kh+ulaJmp6up9yCtAwsGgqSnIDFAyuXQ4QE2Qd+5w 4S2IQjiC63KofQQPwtyKtlQSOhCncbSi9q1any09/2gkHZF6bON8n6cWvQg8jN8uD3hDgVoDn7k iZ1f7juP0wvGEpNy53oe6UInPmUzjaU76n4srvv8G/mRD6mxbOYyRIkmYz+KkWlvvlq2entRR/4 YQ6gljvcaMYxBOXs50j1FrlEA5LhE6dZH6WKtn9ROWDeZvYRPSoQtNWVBNgkVfmvD35mz6TkVBy vvUgmVukoYiwoo0w/zsJ02A/tJ7n8= X-Received: by 2002:a17:90a:e7c4:b0:38d:eaec:4396 with SMTP id 98e67ed59e1d1-38deaec5594mr631416a91.11.1783829331759; Sat, 11 Jul 2026 21:08:51 -0700 (PDT) Received: from [127.0.0.2] ([98.35.8.117]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-31174839f89sm56808928eec.10.2026.07.11.21.08.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jul 2026 21:08:51 -0700 (PDT) From: Farid Zakaria Date: Sat, 11 Jul 2026 21:08:14 -0700 Subject: [PATCH v2 1/5] exec: stash a bpf-selected interpreter in struct linux_binprm Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260711-binfmt-misc-bpf-v2-v2-1-d6591ceaf207@gmail.com> References: <20260711-binfmt-misc-bpf-v2-v2-0-d6591ceaf207@gmail.com> In-Reply-To: <20260711-binfmt-misc-bpf-v2-v2-0-d6591ceaf207@gmail.com> To: Christian Brauner , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Shuah Khan Cc: Andrii Nakryiko , Kees Cook , Alexander Viro , Jan Kara , Jonathan Corbet , Jann Horn , John Ericson , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Farid Zakaria X-Mailer: b4 0.14.3 From: Christian Brauner The upcoming bpf-backed binfmt_misc handlers select the interpreter for a binary programmatically at exec time. The selection runs before load_misc_binary() has copied the binary path from bprm->interp into the argument vector, so the selecting program cannot go through bprm_change_interp() directly without clobbering argv[1]. Stage the selected path in the bprm instead. The bprm is exclusively owned by the task doing the exec so no synchronization is needed. The consumer frees and clears the field once the exec attempt that set it is finished; free_bprm() covers all error paths. Signed-off-by: Christian Brauner (Amutable) --- fs/exec.c | 1 + include/linux/binfmts.h | 1 + 2 files changed, 2 insertions(+) diff --git a/fs/exec.c b/fs/exec.c index b92fe7db1..7c9e28f54 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -1418,6 +1418,7 @@ static void free_bprm(struct linux_binprm *bprm) /* If a binfmt changed the interp, free it. */ if (bprm->interp != bprm->filename) kfree(bprm->interp); + kfree(bprm->bpf_interp); kfree(bprm->fdpath); kfree(bprm); } diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index 7e7333b7b..1dbec6905 100644 --- a/include/linux/binfmts.h +++ b/include/linux/binfmts.h @@ -65,6 +65,7 @@ struct linux_binprm { of the time same as filename, but could be different for binfmt_{misc,script} */ const char *fdpath; /* generated filename for execveat */ + const char *bpf_interp; /* interpreter selected by a bpf handler */ unsigned interp_flags; int execfd; /* File descriptor of the executable */ unsigned long exec; -- 2.51.2