summaryrefslogtreecommitdiff
path: root/elf/dl-map-segments.h
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2018-12-27 19:06:20 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2018-12-27 19:06:58 +0000
commit3fcbb67b7949a8b362de5558bf1c6dd7ec5d21cf (patch)
treeb867f9a6d3426f212b2f073bef8067a830f13022 /elf/dl-map-segments.h
parentb6df7ac2cbe11e6a72f2ab7bd35c6130b72d21d9 (diff)
parentcab56836b146bc129f1ad43f0393d95a9deca63a (diff)
Merge commit 'refs/top-bases/t/tls-threadvar' into t/tls-threadvar
Diffstat (limited to 'elf/dl-map-segments.h')
-rw-r--r--elf/dl-map-segments.h22
1 files changed, 13 insertions, 9 deletions
diff --git a/elf/dl-map-segments.h b/elf/dl-map-segments.h
index e583f64b3e..084076a283 100644
--- a/elf/dl-map-segments.h
+++ b/elf/dl-map-segments.h
@@ -1,5 +1,5 @@
/* Map in a shared object's segments. Generic version.
- Copyright (C) 1995-2016 Free Software Foundation, Inc.
+ Copyright (C) 1995-2018 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
@@ -64,14 +64,18 @@ _dl_map_segments (struct link_map *l, int fd,
l->l_addr = l->l_map_start - c->mapstart;
if (has_holes)
- /* Change protection on the excess portion to disallow all access;
- the portions we do not remap later will be inaccessible as if
- unallocated. Then jump into the normal segment-mapping loop to
- handle the portion of the segment past the end of the file
- mapping. */
- __mprotect ((caddr_t) (l->l_addr + c->mapend),
- loadcmds[nloadcmds - 1].mapstart - c->mapend,
- PROT_NONE);
+ {
+ /* Change protection on the excess portion to disallow all access;
+ the portions we do not remap later will be inaccessible as if
+ unallocated. Then jump into the normal segment-mapping loop to
+ handle the portion of the segment past the end of the file
+ mapping. */
+ if (__glibc_unlikely
+ (__mprotect ((caddr_t) (l->l_addr + c->mapend),
+ loadcmds[nloadcmds - 1].mapstart - c->mapend,
+ PROT_NONE) < 0))
+ return DL_MAP_SEGMENTS_ERROR_MPROTECT;
+ }
l->l_contiguous = 1;