tile BZ #15759: Fix bug in _dl_unmap

We returned without calling __munmap if not in the simulator.
Now we call a separate sim_dlclose() function to make the
control flow work correctly.
This commit is contained in:
Chris Metcalf 2013-07-22 11:46:44 -04:00
parent a8fc7a03a8
commit 1fe2988f52
3 changed files with 18 additions and 5 deletions

3
NEWS
View file

@ -21,7 +21,8 @@ Version 2.18
15395, 15405, 15406, 15409, 15416, 15418, 15419, 15423, 15424, 15426,
15429, 15431, 15432, 15441, 15442, 15448, 15465, 15480, 15485, 15488,
15490, 15492, 15493, 15497, 15506, 15529, 15536, 15553, 15577, 15583,
15618, 15627, 15631, 15654, 15655, 15666, 15667, 15674, 15711, 15755.
15618, 15627, 15631, 15654, 15655, 15666, 15667, 15674, 15711, 15755,
15759.
* CVE-2013-2207 Incorrectly granting access to another user's pseudo-terminal
has been fixed by disabling the use of pt_chown (Bugzilla #15755).

View file

@ -1,3 +1,9 @@
2013-07-22 Chris Metcalf <cmetcalf@tilera.com>
[BZ #15759]
* sysdeps/tile/dl-runtime.c (sim_dlclose): New function.
(_dl_unmap): Call sim_dlclose().
2013-07-19 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/sys/ptrace.h

View file

@ -127,8 +127,8 @@ _dl_after_load (struct link_map *l)
}
/* Support notifying the simulator about removed objects prior to munmap(). */
void internal_function
_dl_unmap (struct link_map *l)
static void
sim_dlclose (ElfW(Addr) map_start)
{
int shift;
@ -144,9 +144,15 @@ _dl_unmap (struct link_map *l)
DLPUTC ('0');
DLPUTC ('x');
for (shift = (int) sizeof (unsigned long) * 8 - 4; shift >= 0; shift -= 4)
DLPUTC ("0123456789abcdef"[(l->l_map_start >> shift) & 0xF]);
DLPUTC ("0123456789abcdef"[(map_start >> shift) & 0xF]);
DLPUTC ('\0');
#undef DLPUTC
#undef DLPUTC
}
void internal_function
_dl_unmap (struct link_map *l)
{
sim_dlclose (l->l_map_start);
__munmap ((void *) l->l_map_start, l->l_map_end - l->l_map_start);
}