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-all mailing list