mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-27 03:33:33 +08:00
hurd: Fix auth port leak
If access() was used before exec, _hurd_id.rid_auth would cache an "effective" auth port. We do not want this to leak into the executed program.
This commit is contained in:
parent
8df0def7a4
commit
0e298448aa
@ -229,6 +229,14 @@ retry:
|
||||
reflects that our whole ID set differs from what we've set it to. */
|
||||
__mutex_lock (&_hurd_id.lock);
|
||||
err = _hurd_check_ids ();
|
||||
|
||||
/* Avoid leaking the rid_auth port reference to the new progam */
|
||||
if (_hurd_id.rid_auth != MACH_PORT_NULL)
|
||||
{
|
||||
__mach_port_deallocate (__mach_task_self (), _hurd_id.rid_auth);
|
||||
_hurd_id.rid_auth = MACH_PORT_NULL;
|
||||
}
|
||||
|
||||
if (err == 0 && ((_hurd_id.aux.nuids >= 2 && _hurd_id.gen.nuids >= 1
|
||||
&& _hurd_id.aux.uids[1] != _hurd_id.gen.uids[0])
|
||||
|| (_hurd_id.aux.ngids >= 2 && _hurd_id.gen.ngids >= 1
|
||||
@ -244,11 +252,6 @@ retry:
|
||||
_hurd_id.aux.uids[1] = _hurd_id.gen.uids[0];
|
||||
_hurd_id.aux.gids[1] = _hurd_id.gen.gids[0];
|
||||
_hurd_id.valid = 0;
|
||||
if (_hurd_id.rid_auth != MACH_PORT_NULL)
|
||||
{
|
||||
__mach_port_deallocate (__mach_task_self (), _hurd_id.rid_auth);
|
||||
_hurd_id.rid_auth = MACH_PORT_NULL;
|
||||
}
|
||||
|
||||
err = __auth_makeauth (ports[INIT_PORT_AUTH],
|
||||
NULL, MACH_MSG_TYPE_COPY_SEND, 0,
|
||||
|
Loading…
Reference in New Issue
Block a user