diff options
author | Andreas Schwab <schwab@suse.de> | 2014-12-08 15:13:38 +0100 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2014-12-10 15:58:22 +0100 |
commit | 217a74a85cdd60df236c296ad88142b78d35eccf (patch) | |
tree | 278502d0ed6e8a84d076725f917443585c4631f9 | |
parent | aa76a5c7010e98c737d79f37aa6ae668f60f7a00 (diff) | |
download | glibc-217a74a85cdd60df236c296ad88142b78d35eccf.tar glibc-217a74a85cdd60df236c296ad88142b78d35eccf.tar.gz glibc-217a74a85cdd60df236c296ad88142b78d35eccf.tar.bz2 glibc-217a74a85cdd60df236c296ad88142b78d35eccf.zip |
Don't touch user-controlled stdio locks in forked child (bug 12847)
The stdio locks for streams with the _IO_USER_LOCK flag should not be
touched by internal code.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | sysdeps/nptl/fork.c | 3 |
2 files changed, 8 insertions, 1 deletions
@@ -1,3 +1,9 @@ +2014-12-10 Andreas Schwab <schwab@suse.de> + + [BZ #12847] + * sysdeps/nptl/fork.c (fresetlockfiles): Skip files with + user-controlled locks. + 2014-12-10 Richard Earnshaw <rearnsha@arm.com> * sysdeps/aarch64/strchrnul.S (vrepmask): Use a call-clobbered diff --git a/sysdeps/nptl/fork.c b/sysdeps/nptl/fork.c index a7dafa82ab..7ef693d529 100644 --- a/sysdeps/nptl/fork.c +++ b/sysdeps/nptl/fork.c @@ -46,7 +46,8 @@ fresetlockfiles (void) _IO_ITER i; for (i = _IO_iter_begin(); i != _IO_iter_end(); i = _IO_iter_next(i)) - _IO_lock_init (*((_IO_lock_t *) _IO_iter_file(i)->_lock)); + if ((_IO_iter_file (i)->_flags & _IO_USER_LOCK) == 0) + _IO_lock_init (*((_IO_lock_t *) _IO_iter_file(i)->_lock)); } |