mirror of
git://sourceware.org/git/glibc.git
synced 2025-04-24 14:41:06 +08:00
Add a hook to enable load-time inspection of program headers
This hook can be used to perform additional compatibility checks between shared libraries by inspecting custom program header information. * elf/dl-machine-reject-phdr.h: New file. * elf/dl-load.c: #include that. (open_verify): Call elf_machine_reject_phdr_p and ignore the file if that returned true.
This commit is contained in:
parent
67c379871e
commit
d6f373d21b
@ -1,3 +1,10 @@
|
||||
2014-10-31 Matthew Fortune <matthew.fortune@imgtec.com>
|
||||
|
||||
* elf/dl-machine-reject-phdr.h: New file.
|
||||
* elf/dl-load.c: #include that.
|
||||
(open_verify): Call elf_machine_reject_phdr_p and ignore the file
|
||||
if that returned true.
|
||||
|
||||
2014-10-31 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
[BZ #17496]
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include <dl-load.h>
|
||||
#include <dl-map-segments.h>
|
||||
#include <dl-unmap-segments.h>
|
||||
#include <dl-machine-reject-phdr.h>
|
||||
|
||||
|
||||
#include <endian.h>
|
||||
@ -1683,6 +1684,11 @@ open_verify (const char *name, struct filebuf *fbp, struct link_map *loader,
|
||||
}
|
||||
}
|
||||
|
||||
if (__glibc_unlikely (elf_machine_reject_phdr_p
|
||||
(phdr, ehdr->e_phnum, fbp->buf, fbp->len,
|
||||
loader, fd)))
|
||||
goto close_and_out;
|
||||
|
||||
/* Check .note.ABI-tag if present. */
|
||||
for (ph = phdr; ph < &phdr[ehdr->e_phnum]; ++ph)
|
||||
if (ph->p_type == PT_NOTE && ph->p_filesz >= 32 && ph->p_align >= 4)
|
||||
|
34
elf/dl-machine-reject-phdr.h
Normal file
34
elf/dl-machine-reject-phdr.h
Normal file
@ -0,0 +1,34 @@
|
||||
/* Machine-dependent program header inspection for the ELF loader.
|
||||
Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _DL_MACHINE_REJECT_PHDR_H
|
||||
#define _DL_MACHINE_REJECT_PHDR_H 1
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
/* Return true iff ELF program headers are incompatible with the running
|
||||
host. */
|
||||
static inline bool
|
||||
elf_machine_reject_phdr_p (const ElfW(Phdr) *phdr, uint_fast16_t phnum,
|
||||
const char *buf, size_t len, struct link_map *map,
|
||||
int fd)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif /* dl-machine-reject-phdr.h */
|
Loading…
x
Reference in New Issue
Block a user