diff options
author | Pekka Paalanen <pq@iki.fi> | 2009-02-24 21:44:15 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-03-02 10:20:37 +0100 |
commit | 340430c572f7b2b275d39965e88bafa71693cb23 (patch) | |
tree | 4be609589171a4bd8c5744178625454c6e5efa3a /lib/syscall.c | |
parent | 3e39aa156a24ce386da378784edd0f748c770087 (diff) |
x86 mmiotrace: fix race with release_kmmio_fault_page()
There was a theoretical possibility to a race between arming a page in
post_kmmio_handler() and disarming the page in
release_kmmio_fault_page():
cpu0 cpu1
------------------------------------------------------------------
mmiotrace shutdown
enter release_kmmio_fault_page
fault on the page
disarm the page
disarm the page
handle the MMIO access
re-arm the page
put the page on release list
remove_kmmio_fault_pages()
fault on the page
page not known to mmiotrace
fall back to do_page_fault()
*KABOOM*
(This scenario also shows the double disarm case which is allowed.)
Fixed by acquiring kmmio_lock in post_kmmio_handler() and checking
if the page is being released from mmiotrace.
Signed-off-by: Pekka Paalanen <pq@iki.fi>
Cc: Stuart Bennett <stuart@freedesktop.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'lib/syscall.c')
0 files changed, 0 insertions, 0 deletions