diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-12-27 19:06:20 +0000 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-12-27 19:06:58 +0000 |
commit | 3fcbb67b7949a8b362de5558bf1c6dd7ec5d21cf (patch) | |
tree | b867f9a6d3426f212b2f073bef8067a830f13022 /elf/dl-map-segments.h | |
parent | b6df7ac2cbe11e6a72f2ab7bd35c6130b72d21d9 (diff) | |
parent | cab56836b146bc129f1ad43f0393d95a9deca63a (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.h | 22 |
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; |