summaryrefslogtreecommitdiff
path: root/devel/elfutils/files/patch-libelf_elf_update.c
blob: d09bd2c2f695754ba234fe26c1ddc147683a0f94 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
--- libelf/elf_update.c.orig	2018-09-14 03:23:36.000000000 -0700
+++ libelf/elf_update.c
@@ -106,9 +106,13 @@
 	  if (elf->cmd == ELF_C_RDWR_MMAP
 	      && (size_t) size > elf->maximum_size)
 	    {
-	      if (mremap (elf->map_address, elf->maximum_size,
-			  size, 0) == MAP_FAILED)
+	      if (munmap (elf->map_address, elf->maximum_size) != 0 ||
+			  mmap (elf->map_address, size, PROT_READ | PROT_WRITE,
+			  MAP_SHARED | MAP_FIXED | MAP_EXCL, elf->fildes,
+			  0) == MAP_FAILED)
 		{
+		  elf->map_address = NULL;
+		  elf->flags &= ~ELF_F_MMAPPED;
 		  __libelf_seterrno (ELF_E_WRITE_ERROR);
 		  return -1;
 		}