History

lib/buildid: Handle memfd_secret() files in build_id_parse()

>From memfd_secret(2) manpage: The memory areas backing the file created with memfd_secret(2) are visible only to the processes that have access to the file descriptor. The memory region is removed from the kernel page tables and only the page tables of the processes holding the file descriptor map the corresponding physical memory. (Thus, the pages in the region can't be accessed by the kernel itself, so that, for example, pointers to the region can't be passed to system calls.) We need to handle this special case gracefully in build ID fetching code. Return -EFAULT whenever secretmem file is passed to build_id_parse() family of APIs. Original report and repro can be found in [0]. [0] https://lore.kernel.org/bpf/ZwyG8Uro%2FSyTXAni@ly-workstation/

Andrii Nakryiko committed 2 years ago

Commit 5ac9b4e1 parent db123e41 file · +5 −0Browse files

Unified · Split

lib/buildid.c+5−0
@@ -5,6 +5,7 @@ · 4 unmodified lines
55 #include <linux/elf.h>
66 #include <linux/kernel.h>
77 #include <linux/pagemap.h>
8+#include <linux/secretmem.h>
89
910 #define BUILD_ID 3
1011
@@ -64,6 +65,10 @@ static int freader_get_folio(struct freader *r, loff_t file_off) · 53 unmodified lines
6465
6566 freader_put_folio(r);
6667
68+ /* reject secretmem folios created with memfd_secret() */
69+ if (secretmem_mapping(r->file->f_mapping))
70+ return -EFAULT;
71+
6772 r->folio = filemap_get_folio(r->file->f_mapping, file_off >> PAGE_SHIFT);
6873
6974 /* if sleeping is allowed, wait for the page, if necessary */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t