mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
Check for __mprotect failure in _dl_map_segments [BZ #20831]
* elf/dl-map-segments.h (_dl_map_segments): Check for failure of __mprotect to change protection on the excess portion to disallow all access.
This commit is contained in:
parent
bf7730194f
commit
9ace4692b2
@ -1,3 +1,10 @@
|
||||
2017-04-09 Dmitry V. Levin <ldv@altlinux.org>
|
||||
|
||||
[BZ #20831]
|
||||
* elf/dl-map-segments.h (_dl_map_segments): Check for failure
|
||||
of __mprotect to change protection on the excess portion
|
||||
to disallow all access.
|
||||
|
||||
2017-04-07 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/i386/fpu/fclrexcpt.c (__feclearexcept): Use
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user