svn commit: r315558 - stable/11/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Sun Mar 19 15:46:27 UTC 2017
Author: kib
Date: Sun Mar 19 15:46:25 2017
New Revision: 315558
URL: https://svnweb.freebsd.org/changeset/base/315558
Log:
MFC r315157:
Accept linkers representation for ELF segments with zero on-disk length.
Modified:
stable/11/sys/kern/imgact_elf.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/kern/imgact_elf.c
==============================================================================
--- stable/11/sys/kern/imgact_elf.c Sun Mar 19 15:44:08 2017 (r315557)
+++ stable/11/sys/kern/imgact_elf.c Sun Mar 19 15:46:25 2017 (r315558)
@@ -522,7 +522,8 @@ __elfN(load_section)(struct image_params
* While I'm here, might as well check for something else that
* is invalid: filsz cannot be greater than memsz.
*/
- if ((off_t)filsz + offset > imgp->attr->va_size || filsz > memsz) {
+ if ((filsz != 0 && (off_t)filsz + offset > imgp->attr->va_size) ||
+ filsz > memsz) {
uprintf("elf_load_section: truncated ELF file\n");
return (ENOEXEC);
}
@@ -538,7 +539,9 @@ __elfN(load_section)(struct image_params
* early and copy the initialized data into that first page. We
* choose the second.
*/
- if (memsz > filsz)
+ if (filsz == 0)
+ map_len = 0;
+ else if (memsz > filsz)
map_len = trunc_page_ps(offset + filsz, pagesize) - file_addr;
else
map_len = round_page_ps(offset + filsz, pagesize) - file_addr;
@@ -570,7 +573,8 @@ __elfN(load_section)(struct image_params
* segment in the file is extended to provide bss. It's a neat idea
* to try and save a page, but it's a pain in the behind to implement.
*/
- copy_len = (offset + filsz) - trunc_page_ps(offset + filsz, pagesize);
+ copy_len = filsz == 0 ? 0 : (offset + filsz) - trunc_page_ps(offset +
+ filsz, pagesize);
map_addr = trunc_page_ps((vm_offset_t)vmaddr + filsz, pagesize);
map_len = round_page_ps((vm_offset_t)vmaddr + memsz, pagesize) -
map_addr;
More information about the svn-src-stable
mailing list