mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
binfmt_elf_fdpic: only honour the first PT_INTERP
The program header scan handles PT_INTERP from a switch nested in the
scan loop, so its break leaves the switch and not the loop. A binary
carrying more than one PT_INTERP runs the case again and overwrites both
interpreter_name and interpreter. The previous name allocation leaks and
so does the previous interpreter reference, along with the write denial
open_exec() took on it. The denial is never released, so the file stays
unwritable for as long as the system runs.
An unprivileged caller reaches this with a crafted binary and repeats it
at will. binfmt_elf stops at the first PT_INTERP. Do the same here.
The flaw dates back to the driver's introduction in the pre-git history
tree introduced in v2.6.11 by 91808d6ebe39 ("[PATCH] FRV: Add FDPIC ELF
binary format driver").
Link: https://patch.msgid.link/20260721-gezittert-medium-kreide-b41fc1f0277e@brauner
Fixes: 1da177e4c3 ("Linux-2.6.12-rc2")
Cc: stable@vger.kernel.org
Reviewed-by: Jori Koolstra <jkoolstra@xs4all.nl>
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
This commit is contained in:
parent
16cc4f5c1c
commit
3349ef6a36
|
|
@ -231,6 +231,10 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm)
|
|||
for (i = 0; i < exec_params.hdr.e_phnum; i++, phdr++) {
|
||||
switch (phdr->p_type) {
|
||||
case PT_INTERP:
|
||||
/* elf ABI allows only one interpreter */
|
||||
if (interpreter_name)
|
||||
continue;
|
||||
|
||||
retval = -ENOMEM;
|
||||
if (phdr->p_filesz > PATH_MAX)
|
||||
goto error;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user