mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
Merge branch 'akpm' (patches from Andrew)
Merge more updates from Andrew Morton: "87 patches. Subsystems affected by this patch series: mm (pagecache and hugetlb), procfs, misc, MAINTAINERS, lib, checkpatch, binfmt, kallsyms, ramfs, init, codafs, nilfs2, hfs, crash_dump, signals, seq_file, fork, sysvfs, kcov, gdb, resource, selftests, and ipc" * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (87 commits) ipc/ipc_sysctl.c: remove fallback for !CONFIG_PROC_SYSCTL ipc: check checkpoint_restore_ns_capable() to modify C/R proc files selftests/kselftest/runner/run_one(): allow running non-executable files virtio-mem: disallow mapping virtio-mem memory via /dev/mem kernel/resource: disallow access to exclusive system RAM regions kernel/resource: clean up and optimize iomem_is_exclusive() scripts/gdb: handle split debug for vmlinux kcov: replace local_irq_save() with a local_lock_t kcov: avoid enable+disable interrupts if !in_task() kcov: allocate per-CPU memory on the relevant node Documentation/kcov: define `ip' in the example Documentation/kcov: include types.h in the example sysv: use BUILD_BUG_ON instead of runtime check kernel/fork.c: unshare(): use swap() to make code cleaner seq_file: fix passing wrong private data seq_file: move seq_escape() to a header signal: remove duplicate include in signal.h crash_dump: remove duplicate include in crash_dump.h crash_dump: fix boolreturn.cocci warning hfs/hfsplus: use WARN_ON for sanity check ...
This commit is contained in:
@@ -156,7 +156,7 @@ static int padzero(unsigned long elf_bss)
|
||||
#define STACK_ADD(sp, items) ((elf_addr_t __user *)(sp) - (items))
|
||||
#define STACK_ROUND(sp, items) \
|
||||
(((unsigned long) (sp - items)) &~ 15UL)
|
||||
#define STACK_ALLOC(sp, len) ({ sp -= len ; sp; })
|
||||
#define STACK_ALLOC(sp, len) (sp -= len)
|
||||
#endif
|
||||
|
||||
#ifndef ELF_BASE_PLATFORM
|
||||
@@ -1074,20 +1074,26 @@ out_free_interp:
|
||||
|
||||
vaddr = elf_ppnt->p_vaddr;
|
||||
/*
|
||||
* If we are loading ET_EXEC or we have already performed
|
||||
* the ET_DYN load_addr calculations, proceed normally.
|
||||
* The first time through the loop, load_addr_set is false:
|
||||
* layout will be calculated. Once set, use MAP_FIXED since
|
||||
* we know we've already safely mapped the entire region with
|
||||
* MAP_FIXED_NOREPLACE in the once-per-binary logic following.
|
||||
*/
|
||||
if (elf_ex->e_type == ET_EXEC || load_addr_set) {
|
||||
if (load_addr_set) {
|
||||
elf_flags |= MAP_FIXED;
|
||||
} else if (elf_ex->e_type == ET_EXEC) {
|
||||
/*
|
||||
* This logic is run once for the first LOAD Program
|
||||
* Header for ET_EXEC binaries. No special handling
|
||||
* is needed.
|
||||
*/
|
||||
elf_flags |= MAP_FIXED_NOREPLACE;
|
||||
} else if (elf_ex->e_type == ET_DYN) {
|
||||
/*
|
||||
* This logic is run once for the first LOAD Program
|
||||
* Header for ET_DYN binaries to calculate the
|
||||
* randomization (load_bias) for all the LOAD
|
||||
* Program Headers, and to calculate the entire
|
||||
* size of the ELF mapping (total_size). (Note that
|
||||
* load_addr_set is set to true later once the
|
||||
* initial mapping is performed.)
|
||||
* Program Headers.
|
||||
*
|
||||
* There are effectively two types of ET_DYN
|
||||
* binaries: programs (i.e. PIE: ET_DYN with INTERP)
|
||||
@@ -1108,7 +1114,7 @@ out_free_interp:
|
||||
* Therefore, programs are loaded offset from
|
||||
* ELF_ET_DYN_BASE and loaders are loaded into the
|
||||
* independently randomized mmap region (0 load_bias
|
||||
* without MAP_FIXED).
|
||||
* without MAP_FIXED nor MAP_FIXED_NOREPLACE).
|
||||
*/
|
||||
if (interpreter) {
|
||||
load_bias = ELF_ET_DYN_BASE;
|
||||
@@ -1117,7 +1123,7 @@ out_free_interp:
|
||||
alignment = maximum_alignment(elf_phdata, elf_ex->e_phnum);
|
||||
if (alignment)
|
||||
load_bias &= ~(alignment - 1);
|
||||
elf_flags |= MAP_FIXED;
|
||||
elf_flags |= MAP_FIXED_NOREPLACE;
|
||||
} else
|
||||
load_bias = 0;
|
||||
|
||||
@@ -1129,7 +1135,14 @@ out_free_interp:
|
||||
* is then page aligned.
|
||||
*/
|
||||
load_bias = ELF_PAGESTART(load_bias - vaddr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the entire size of the ELF mapping (total_size).
|
||||
* (Note that load_addr_set is set to true later once the
|
||||
* initial mapping is performed.)
|
||||
*/
|
||||
if (!load_addr_set) {
|
||||
total_size = total_mapping_size(elf_phdata,
|
||||
elf_ex->e_phnum);
|
||||
if (!total_size) {
|
||||
|
Reference in New Issue
Block a user