<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/source/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in binfmt_misc_loader.c</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2015</copyright>
    <generator>Java</generator><item>
        <title>b9cba7ebfe539f3e4bbdd03a1e0efa3b30b3f592 - Merge tag &apos;vfs-7.3-rc1.binfmt&apos; of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs</title>
        <link>http://kernelsources.org:8080/source/history/linux/tools/testing/selftests/exec/binfmt_misc_loader.c#b9cba7ebfe539f3e4bbdd03a1e0efa3b30b3f592</link>
        <description>Merge tag &apos;vfs-7.3-rc1.binfmt&apos; of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfsPull binfmt updates from Christian Brauner: &quot;This contains a bunch of work for binfmt_misc. It fixes a bunch of  old bugs, reworks the locking, and then extends the format registry  so a binary type can be matched programmatically and its interpreter  computed per exec instead of being a fixed string recorded at  registration time.  This allows nixos and other to e.g., implement relocatable binaries  meaning the interpreter/dynamic loader can be determined  programatically, say found relative to the binary. The mechanism is  flexible and can support other policies:   - Handler lookup is now an rcu walk. An exec that matches no     binfmt_misc entry should now never write to a shared cacheline   - remove the VERBOSE_STATUS and USE_DEBUG compile time toggles   - convert the entry file to a seq_file which simplifies things quite     a bit and kills a lot of custom logic   - make flags proper enums   - rename struct Node to binfmt_misc_entry   - allow entries to be removed with unlink(2)   - Add the ability to attach bpf programs to binfmt_misc entries so     it&apos;s possible to dynamically choose the execution environment such     as the loader or interpreter on a per binary basis.     A handler is an instance of a binfmt_misc_ops struct_ops with a     -&gt;match() and a -&gt;load() program. match() decides from the entry     lookup walk whether the handler applies under the same     registration-order. It can read file content as needed not only the     prefetched 256 bytes in bprm-&gt;buf.     load() then selects the interpreter and stages it through the new     bpf_binprm_set_interp(), bpf_binprm_set_interp_arg() and     bpf_binprm_set_flags() kfuncs.     Handlers are published in a registry keyed by the registering     task&apos;s user namespace and activated through the existing text     interface with a new &apos;B&apos; type carrying the handler name:	echo &apos;:origin:B::::nix:&apos; &gt; /proc/sys/fs/binfmt_misc/register     The permission and namespacing model is unchanged. Activating a     handler requires the same write access to an instance as any other     registration. A container mounting its own instance escapes the     host&apos;s entries exactly as before. The computed interpreter is     opened with open_exec() under the caller&apos;s credentials and goes     through full LSM vetting as the next binprm level. A program can     only ever redirect the caller to something the caller could exec     anyway.   - Two dispatch modes are added. So far the chosen interpreter owns     the whole process identity (argv[0], /proc/pid/cmdline,     /proc/self/exe all name interpreter information). So relocatable     find the dynamic linker instead. Also a binary passed to execveat()     as an inaccessible O_CLOEXEC fd cannot run at all and gdb trips     because AT_ENTRY and AT_PHDR do not match the exe file. So PIE     symbols are unrelocated.     This adds transparent dispatch which allows the interpreter to load     the binary through AT_EXECFD and leaves the argument vector exactly     as the caller built it and labels mm-&gt;exe_file and comm with the     binary. It also raises the AT_FLAGS_TRANSPARENT_INTERP aux vector     bit. The interpreter keeps control of mapping the binary.     The second mode is loader substitution. This allows a binary to be     executed natively and only the interpreter to be changed.   - Last, interpreters can be bound at registration time. Each     interpreter is opened by its own write with the credentials the     entry file was opened with. The program picks one per exec with     bpf_binprm_select_interp().     Ucounts are used to properly account for pre-opened interpreters     via /proc/sys/user/max_binfmt_misc_interpreters&quot;* tag &apos;vfs-7.3-rc1.binfmt&apos; of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs: (63 commits)  binfmt_misc: document the pre-opened interpreter limit  selftests/exec: test the pre-opened interpreter limit  binfmt_misc: correctly account pre-opened interpreters  binfmt_misc: document interpreters bound by a &apos;B&apos; entry  selftests/exec: test interpreters bound to a &apos;B&apos; entry  binfmt_misc: let a &apos;B&apos; entry bind its interpreters  binfmt_misc: carry pre-opened interpreters in struct binfmt_misc_interp  selftests/exec: share the bpf handler preconditions  binfmt_misc: document registering an entry disabled  selftests/exec: test registering an entry disabled  selftests/exec: let binfmt_flag_supported() return a bool  selftests/exec: check that a binfmt_misc instance cannot be pinned  binfmt_misc: let a register string create an entry disabled  binfmt_misc: document loader substitution  selftests/exec: test binfmt_misc loader substitution  binfmt_misc: let a bpf handler request loader substitution  binfmt_misc: add the &apos;L&apos; loader substitution flag  binfmt_elf_fdpic: consume a stashed PT_INTERP substitute  binfmt_elf: consume a stashed PT_INTERP substitute  exec: carry a PT_INTERP substitute in struct linux_binprm  ...

            List of files:
            /linux/tools/testing/selftests/exec/binfmt_misc_loader.c</description>
        <pubDate>Mon, 17 Aug 2026 17:35:25 +0200</pubDate>
        <dc:creator>Linus Torvalds &lt;torvalds@linux-foundation.org&gt;</dc:creator>
    </item>
<item>
        <title>b2a52381541af862076b5e7d17db2ca76e921e95 - Merge patch series &quot;binfmt_misc: transparent interpreters and PT_INTERP loader substitution&quot;</title>
        <link>http://kernelsources.org:8080/source/history/linux/tools/testing/selftests/exec/binfmt_misc_loader.c#b2a52381541af862076b5e7d17db2ca76e921e95</link>
        <description>Merge patch series &quot;binfmt_misc: transparent interpreters and PT_INTERP loader substitution&quot;Christian Brauner &lt;brauner@kernel.org&gt; says:binfmt_misc has exactly one execution model where the registeredinterpreter becomes the executed program and the matched binary ishanded to it as an argument. For wine or qemu-user that is the point.For a per-binary loader it is backwards. The interpreter is animplementation detail of running the binary, yet it owns the entireprocess identity:- argv[0] and /proc/pid/cmdline show the interpreter invocation, not  what the caller executed.- /proc/self/exe names the interpreter. Relocatable programs commonly  locate themselves through it and find the dynamic linker instead.- A binary passed to execveat() as an inaccessible O_CLOEXEC fd  cannot run at all as the interpreter has no path to open it by.- gdb cross-validates AT_ENTRY/AT_PHDR against the exe file and  discards the load displacement on mismatch leaving PIE symbols  unrelocated.This series adds two dispatch modes that close the gap from oppositeends:(1) transparent dispatch    Registered with the &apos;T&apos; flag or chosen per exec with    BPF_BINPRM_TRANSPARENT. The binary is sent to the interpreter through    AT_EXECFD, the argument vector stays exactly as the caller built it,    and the kernel labels mm-&gt;exe_file and comm with the binary. A new    AT_FLAGS_TRANSPARENT_INTERP aux vector bit is raised indicating that    nothing was spliced, argv belongs to the program, and to load it from    the descriptor.    The interpreter keeps control of mapping the binary, so the mode    covers foreign architectures and non-ELF payloads.    The exe label is not a new privilege. It names precisely the file the    caller passed to execve(), not a file of the process&apos;s choosing. That    file is permission-checked, write-denied while the process runs and    recorded by audit. Credential derivation does not change exactly as    today.(2) loader substitution    The kernel executes the matched binary natively as the main image    and substitutes the registered interpreter for the binary&apos;s    PT_INTERP. binfmt_misc functions as a PT_INTERP override. There is    no contract and no identity to reconstruct. So a stock dynamic    loader works unchanged. Hence, &apos;L&apos; is for native-arch ELF with    PT_INTERP.The two modes compose. A bpf handler reads the ELF header from bprm-&gt;bufand grades per binary, picking &apos;L&apos; where it applies and &apos;T&apos; or classicdispatch for the rest. If userspace control over relocation is wanted&apos;T&apos; is the way to go.* patches from https://patch.msgid.link/20260721-work-bpf-binfmt_misc-ptinterp-v2-0-e57866e4ae0f@kernel.org: (21 commits)  binfmt_misc: document loader substitution  selftests/exec: test binfmt_misc loader substitution  binfmt_misc: let a bpf handler request loader substitution  binfmt_misc: add the &apos;L&apos; loader substitution flag  binfmt_elf_fdpic: consume a stashed PT_INTERP substitute  binfmt_elf: consume a stashed PT_INTERP substitute  exec: carry a PT_INTERP substitute in struct linux_binprm  binfmt_misc: document the transparent identity contract  selftests/exec: test the transparent binfmt_misc mode  binfmt_misc: let a bpf handler run the interpreter transparently  binfmt_misc: add a static transparent flag &apos;T&apos;  binfmt_misc: add transparent interpreter dispatch  exec: label mm-&gt;exe_file with the binary for a transparent dispatch  exec: add AT_FLAGS_TRANSPARENT_INTERP  selftests/exec: convert the binfmt_misc bpf test to the kselftest harness  exec: release the replaced file with do_close_execat()  binfmt_misc: split out entry_open_interpreter() and build_interp_argv()  binfmt_misc: normalize the per-exec invocation flags  binfmt_misc: table-drive the register string flags  docs, binfmt_misc: keep general usage out of the handler sections  ...Link: https://patch.msgid.link/20260721-work-bpf-binfmt_misc-ptinterp-v2-0-e57866e4ae0f@kernel.orgSigned-off-by: Christian Brauner (Amutable) &lt;brauner@kernel.org&gt;

            List of files:
            /linux/tools/testing/selftests/exec/binfmt_misc_loader.c</description>
        <pubDate>Sat, 25 Jul 2026 11:11:48 +0200</pubDate>
        <dc:creator>Christian Brauner &lt;brauner@kernel.org&gt;</dc:creator>
    </item>
<item>
        <title>87c50a5855cf0e1a4a42448b2245f6e90df20a4c - selftests/exec: test binfmt_misc loader substitution</title>
        <link>http://kernelsources.org:8080/source/history/linux/tools/testing/selftests/exec/binfmt_misc_loader.c#87c50a5855cf0e1a4a42448b2245f6e90df20a4c</link>
        <description>selftests/exec: test binfmt_misc loader substitutionExercise the &apos;L&apos; flag end to end. The payload runs as the main imagewith a copy of the system loader substituted for its PT_INTERP, andasserts the native identity from inside:- argv exactly as the caller built it- no AT_EXECFD- AT_FLAGS clear- AT_BASE set but outside its own image- AT_PHDR/AT_ENTRY inside it- /proc/self/{exe,comm,stat} and AT_EXECFN all describing the binary- ETXTBSY on the running binary- the substituted loader visible in /proc/self/maps under its real pathMagic matching pokes a marker into the ELF header&apos;s e_ident padding(EI_PAD, offset 9), which sits inside the match window and is ignored bykernel and loader alike. the same binary is also matched by extension.Two cases cover the paths where the substitution does not happen. A &apos;#!&apos;file that matched an &apos;L&apos; entry is claimed by binfmt_script rather than bybinfmt_elf, so the staged substitute has to be released when theinterpreter replaces the file; the test opens the loader for writingafterwards, which fails with ETXTBSY if the write denial was leakedinstead. A relative interpreter path is rejected at registration for both&apos;L&apos; and &apos;C&apos;, neither of which may resolve one against the workingdirectory of whoever runs the binary.The bpf-side BPF_BINPRM_LOADER path shares all machinery past the flagmapping. A harness case for it can join the bpf runtime coverage ofthe transparent series.Link: https://patch.msgid.link/20260721-work-bpf-binfmt_misc-ptinterp-v2-20-e57866e4ae0f@kernel.orgSigned-off-by: Christian Brauner (Amutable) &lt;brauner@kernel.org&gt;

            List of files:
            /linux/tools/testing/selftests/exec/binfmt_misc_loader.c</description>
        <pubDate>Tue, 21 Jul 2026 16:14:02 +0200</pubDate>
        <dc:creator>Christian Brauner &lt;brauner@kernel.org&gt;</dc:creator>
    </item>
</channel>
</rss>
