Re: [PATCH v7 22/27] binfmt_elf: Extract .note.gnu.property from an ELF file
From: Yu-cheng Yu <hidden>
Date: 2019-06-10 16:37:13
Also in:
linux-arch, linux-doc, linux-mm, lkml
On Fri, 2019-06-07 at 19:01 +0100, Dave Martin wrote:
On Thu, Jun 06, 2019 at 01:06:41PM -0700, Yu-cheng Yu wrote:quoted
An ELF file's .note.gnu.property indicates features the executable file can support. For example, the property GNU_PROPERTY_X86_FEATURE_1_AND indicates the file supports GNU_PROPERTY_X86_FEATURE_1_IBT and/or GNU_PROPERTY_X86_FEATURE_1_SHSTK. With this patch, if an arch needs to setup features from ELF properties, it needs CONFIG_ARCH_USE_GNU_PROPERTY to be set, and a specific arch_setup_property(). For example, for X86_64: int arch_setup_property(void *ehdr, void *phdr, struct file *f, bool inter) { int r; uint32_t property; r = get_gnu_property(ehdr, phdr, f, GNU_PROPERTY_X86_FEATURE_1_AND, &property); ... }Although this code works for the simple case, I have some concerns about some aspects of the implementation here. There appear to be some bounds checking / buffer overrun issues, and the code seems quite complex. Maybe this patch tries too hard to be compatible with toolchains that do silly things such as embedding huge notes in an executable, or mixing NT_GNU_PROPERTY_TYPE_0 in a single PT_NOTE with a load of junk not relevant to the loader. I wonder whether Linux can dictate what interpretation(s) of the ELF specs it is prepared to support, rather than trying to support absolutely anything.
To me, looking at PT_GNU_PROPERTY and not trying to support anything is a logical choice. And it breaks only a limited set of toolchains. I will simplify the parser and leave this patch as-is for anyone who wants to back-port. Are there any objections or concerns? Yu-cheng