public inbox for glibc-bugs@sourceware.org help / color / mirror / Atom feed
From: "bugdal at aerifal dot cx" <sourceware-bugzilla@sourceware.org> To: glibc-bugs@sources.redhat.com Subject: [Bug nptl/14485] New: File corruption race condition in robust mutex unlocking Date: Fri, 17 Aug 2012 18:52:00 -0000 [thread overview] Message-ID: <bug-14485-131@http.sourceware.org/bugzilla/> (raw) http://sourceware.org/bugzilla/show_bug.cgi?id=14485 Bug #: 14485 Summary: File corruption race condition in robust mutex unlocking Product: glibc Version: unspecified Status: NEW Severity: normal Priority: P2 Component: nptl AssignedTo: unassigned@sourceware.org ReportedBy: bugdal@aerifal.cx CC: drepper.fsp@gmail.com Classification: Unclassified The general procedure for unlocking a robust mutex is: 1. Put the mutex address in the "pending" slot of the thread's robust mutex list. 2. Remove the mutex from the thread's linked list of locked robust mutexes. 3. Low level unlock (clear the futex and possibly wake waiters). 4. Clear the "pending" slot in the thread's robust mutex list. Suppose between steps 3 and 4, another thread in the same process obtains the mutex in such a way that it is necessarily the last user of the mutex, then unlocks, destroys, and frees it. It then calls mmap with MAP_SHARED on a file, device, or shared memory segment, which happens to be assigned the same address the robust mutex had, and the file contents at the offset where the futex was located happen to contain the tid of the first thread that was in between steps 3 and 4 above. Now, suppose the process is immediately killed. The kernel then sets bit 30 (owner died) at this offset in the mapped file, wrongly trusting that the pending field in the robust list header still points to a valid robust mutex. As far as I can tell, the ONLY solution to this problem is to introduce a global (within the process) lock on mmap and munmap, and to hold it between steps 2 and 4 of the robust mutex unlock procedure. The same lock can also be used to fix bug #13064. To minimize cost, this lock should be a rwlock where mmap and munmap count as "read" operations (so they don't block one another) and only the dangerous robust mutex unlock and barrier operations count as "write" operations. -- Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
next reply other threads:[~2012-08-17 18:52 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-08-17 18:52 bugdal at aerifal dot cx [this message] 2012-08-17 22:34 ` [Bug nptl/14485] " bugdal at aerifal dot cx 2014-06-17 18:35 ` fweimer at redhat dot com 2014-06-25 10:47 ` fweimer at redhat dot com 2014-06-25 15:47 ` bugdal at aerifal dot cx 2015-02-09 0:28 ` mail at nh2 dot me 2015-02-09 20:41 ` carlos at redhat dot com 2015-02-09 21:13 ` carlos at redhat dot com 2015-02-09 22:51 ` bugdal at aerifal dot cx 2015-02-10 0:18 ` bugdal at aerifal dot cx 2015-02-10 21:57 ` triegel at redhat dot com 2015-02-10 22:17 ` bugdal at aerifal dot cx 2015-08-09 12:29 ` mail at nh2 dot me 2021-10-21 15:42 ` fweimer at redhat dot com
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-14485-131@http.sourceware.org/bugzilla/ \ --to=sourceware-bugzilla@sourceware.org \ --cc=glibc-bugs@sources.redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).