All of lore.kernel.org
 help / color / mirror / Atom feed
From: Darren Hart <dvhart@linux.intel.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Shawn Bohrer <sbohrer@rgmadvisors.com>,
	KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	eric.dumazet@gmail.com, david@rgmadvisors.com,
	linux-kernel@vger.kernel.org, zvonler@rgmadvisors.com,
	hughd@google.com, tglx@linutronix.de, mingo@elte.hu
Subject: Re: [PATCH v3] futex: Fix regression with read only mappings
Date: Tue, 28 Jun 2011 07:52:06 -0700	[thread overview]
Message-ID: <4E09EA96.5080005@linux.intel.com> (raw)
In-Reply-To: <1309258475.6701.200.camel@twins>



On 06/28/2011 03:54 AM, Peter Zijlstra wrote:
> On Mon, 2011-06-27 at 17:22 -0500, Shawn Bohrer wrote:
>> commit 7485d0d3758e8e6491a5c9468114e74dc050785d (futexes: Remove rw
>> parameter from get_futex_key()) in 2.6.33 introduced a user-mode
>> regression in that it additionally prevented futex operations on a
>> region within a read only memory mapped file.  For example this breaks
>> workloads that have one or more reader processes doing a FUTEX_WAIT on a
>> futex within a read only shared mapping, and a writer processes that has
>> a writable mapping issuing the FUTEX_WAKE.
>>
>> This fixes the regression for futex operations that should be valid on
>> RO mappings by trying a RO get_user_pages_fast() when the RW
>> get_user_pages_fast() fails so as not to slow down the common path of
>> writable anonymous maps and bailing when we used the RO path on
>> anonymous memory.
>>
>> While fixing the regression this patch opens up two possible bad
>> scenarios as identified by KOSAKI Motohiro:
>>
>> 1) This patch also allows FUTEX_WAIT on RO private mappings which have
>> the following corner case.
>>
>>   Thread-A: call futex(FUTEX_WAIT, memory-region-A).
>>             get_futex_key() return inode based key.
>>             sleep on the key
>>   Thread-B: call mprotect(PROT_READ|PROT_WRITE, memory-region-A)
>>   Thread-B: write memory-region-A.
>>             COW happen. This process's memory-region-A become related
>>             to new COWed private (ie PageAnon=1) page.
>>   Thread-B: call futex(FUETX_WAKE, memory-region-A).
>>             get_futex_key() return mm based key.
>>             IOW, we fail to wake up Thread-A.
>>
>> 2) Current futex code doesn't handle zero page properly.
>>
>>   Read mode get_user_pages() can return zero page, but current futex
>>   code doesn't handle it at all. Then, zero page makes infinite loop
>>   internally.
>>
>> This Patch is based on Peter Zijlstra's initial patch with modifications to
>> only allow RO mappings for futex operations that need VERIFY_READ access.
>>
>> Reported-by: David Oliver <david@rgmadvisors.com>
>> Signed-off-by: Shawn Bohrer <sbohrer@rgmadvisors.com>
> 
> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>

I think we need to address #2 above first.

1) Is the loop killable?
2) If not, and we try to catch zero_page scenario, we need to ensure RO
   sparse file mapping work. Peter notes that these are probably fine,
   filemap.c doesn't seem to use the zero page - but we need to test.

It's agreed, I believe, between myself, Peter, and Shawn that we will
document Private RW mappings as unsupported.

-- 
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel

  reply	other threads:[~2011-06-28 14:53 UTC|newest]

Thread overview: 89+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-06 14:28 Change in functionality of futex() system call David Oliver
2011-06-06 15:23 ` Eric Dumazet
2011-06-06 15:56   ` Shawn Bohrer
2011-06-06 16:11   ` Peter Zijlstra
2011-06-06 16:16     ` Peter Zijlstra
2011-06-06 16:22       ` Eric Dumazet
2011-06-06 16:29         ` Peter Zijlstra
2011-06-06 16:42           ` Eric Dumazet
2011-06-06 17:05             ` Peter Zijlstra
2011-06-06 17:11               ` Eric Dumazet
2011-06-06 17:27                 ` Steven Rostedt
2011-06-06 17:56                   ` Darren Hart
2011-06-06 18:23                 ` Peter Zijlstra
2011-06-06 18:27                   ` Eric Dumazet
2011-06-25  0:00                     ` Darren Hart
2011-06-27 16:48                     ` Shawn Bohrer
2011-06-06 17:53             ` Darren Hart
2011-06-06 18:11               ` Eric Dumazet
2011-06-07  3:13                 ` Darren Hart
2011-06-07  3:49                   ` Eric Dumazet
2011-06-07 14:44                   ` Andy Lutomirski
2011-06-07 15:56                     ` Darren Hart
2011-06-07 15:58                     ` Eric Dumazet
2011-06-07 18:43                       ` Andrew Lutomirski
2011-06-07 19:01                         ` Darren Hart
2011-06-07 19:04                           ` Andrew Lutomirski
2011-06-07 19:06                         ` Eric Dumazet
2011-06-07 19:10                         ` David Oliver
2011-06-07 19:19                           ` Andrew Lutomirski
2011-06-07 19:33                             ` David Oliver
2011-06-07 19:53                               ` Andrew Lutomirski
2011-06-07 20:04                                 ` David Oliver
2011-06-07 20:12                                   ` Andrew Lutomirski
2011-06-07 22:26                             ` Kyle Moffett
2011-06-08 15:20                               ` David Oliver
2011-06-08 15:21                                 ` Andrew Lutomirski
2011-06-08 16:21                                 ` Darren Hart
2011-06-09 11:37                                   ` KOSAKI Motohiro
2011-06-09 12:05                                     ` Peter Zijlstra
2011-06-09 17:58                                       ` Peter Zijlstra
2011-06-10  3:30                                         ` KOSAKI Motohiro
2011-06-10  3:26                                       ` KOSAKI Motohiro
2011-06-07 18:30                 ` Joel Becker
2011-06-09 12:05                 ` Peter Zijlstra
2011-06-10 12:10       ` KOSAKI Motohiro
2011-06-10 17:29         ` Darren Hart
2011-06-13  2:11           ` KOSAKI Motohiro
2011-06-13 15:50             ` Darren Hart
2011-06-15 18:50         ` Shawn Bohrer
2011-06-15 18:54           ` Darren Hart
2011-06-17 13:40             ` Shawn Bohrer
2011-06-22 19:19             ` [PATCH RFC] futex: Fix regression with read only mappings Shawn Bohrer
2011-06-22 20:14               ` Darren Hart
2011-06-23  2:51                 ` KOSAKI Motohiro
2011-06-23 15:26                   ` Darren Hart
2011-06-23 19:49                     ` Shawn Bohrer
2011-06-24 15:59                       ` [PATCH v2] " Shawn Bohrer
2011-06-25  0:37                         ` Darren Hart
2011-06-25 15:10                           ` KOSAKI Motohiro
2011-06-27 16:40                           ` Shawn Bohrer
2011-06-27 18:15                             ` Peter Zijlstra
2011-06-27 20:41                               ` Darren Hart
2011-06-27 21:08                                 ` Shawn Bohrer
2011-06-27 21:39                                   ` Darren Hart
2011-06-27 22:14                                     ` Shawn Bohrer
2011-06-27 23:17                                       ` Darren Hart
2011-06-27 22:22                                     ` [PATCH v3] " Shawn Bohrer
2011-06-28 10:54                                       ` Peter Zijlstra
2011-06-28 14:52                                         ` Darren Hart [this message]
2011-06-28 17:38                                           ` Shawn Bohrer
2011-06-28 20:58                                             ` Darren Hart
2011-06-28 23:55                                             ` Darren Hart
2011-06-29 14:56                                               ` Shawn Bohrer
2011-06-29 15:17                                               ` [PATCH v4] " Shawn Bohrer
2011-06-29 18:41                                                 ` Darren Hart
2011-06-29 23:38                                                 ` Thomas Gleixner
2011-06-30  4:19                                                   ` Darren Hart
2011-06-30 14:02                                                     ` David C. Oliver
2011-06-30 15:41                                                       ` Darren Hart
2011-06-30 16:21                                                         ` [PATCH v5] " Shawn Bohrer
2011-07-12 15:27                                                           ` Shawn Bohrer
2011-07-25 15:20                                                           ` Shawn Bohrer
2011-07-25 19:28                                                             ` Thomas Gleixner
2011-07-26 19:04                                                           ` [tip:core/urgent] " tip-bot for Shawn Bohrer
2011-06-28 10:50                                     ` [PATCH v2] " Peter Zijlstra
2011-06-28 14:19                                       ` Darren Hart
2011-06-28 14:23                                         ` Peter Zijlstra
2011-06-23  3:58                 ` [PATCH RFC] " Shawn Bohrer
2011-06-23  3:23             ` Change in functionality of futex() system call KOSAKI Motohiro

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=4E09EA96.5080005@linux.intel.com \
    --to=dvhart@linux.intel.com \
    --cc=david@rgmadvisors.com \
    --cc=eric.dumazet@gmail.com \
    --cc=hughd@google.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=sbohrer@rgmadvisors.com \
    --cc=tglx@linutronix.de \
    --cc=zvonler@rgmadvisors.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.