lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 22 Nov 2011 11:40:57 +0100
From:	Peter Zijlstra <peterz@...radead.org>
To:	Stephane Eranian <eranian@...gle.com>
Cc:	linux-kernel@...r.kernel.org, mingo@...e.hu
Subject: Re: [PATCH] perf_event: fix loss of notification with multi-event
 sampling

On Wed, 2011-11-16 at 15:53 +0100, Stephane Eranian wrote:
> +       /* ring_buffer waitq pointer */
> +       wait_queue_head_t               *waitq; 

Not a big issue, but is there a reason to keep this pointer instead of
always having to do:

  rcu_read_lock();
  rb = rcu_dereference(event->rb);
  if (rb)
    wake_up_all(rb->waitq);
  rcu_read_unlock();

Hmm, looking at that there must be a reason we go through all the RCU
trouble for event->rb, assuming there is, your lack of rcu in say
perf_poll() could go funny.

/me ponders..

Ah, could it be a race of poll()/wakeup() vs perf_event_set_output() ?

Suppose you're a threaded proglet and either one cpu/thread has an
incoming event that does a wakeup, or one thread is stuck in poll()
whilst another thread does perf_event_set_output(), it could swizzle the
event->rb right out from under you.

Now, this is of course a somewhat silly thing to do.. but still it
shouldn't make things go *bang*.

Now the above wake_up_all() thing would work just fine, its just poll()
that I'm not sure how to fix.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ