• Andrea Parri's avatar
    uprobes: Fix handle_swbp() vs. unregister() + register() race once more · c9271209
    Andrea Parri authored
    commit 09d3f015d1e1b4fee7e9bbdcf54201d239393391 upstream.
    
    Commit:
    
      142b18dd ("uprobes: Fix handle_swbp() vs unregister() + register() race")
    
    added the UPROBE_COPY_INSN flag, and corresponding smp_wmb() and smp_rmb()
    memory barriers, to ensure that handle_swbp() uses fully-initialized
    uprobes only.
    
    However, the smp_rmb() is mis-placed: this barrier should be placed
    after handle_swbp() has tested for the flag, thus guaranteeing that
    (program-order) subsequent loads from the uprobe can see the initial
    stores performed by prepare_uprobe().
    
    Move the smp_rmb() accordingly.  Also amend the comments associated
    to the two memory barriers to indicate their actual locations.
    Signed-off-by: default avatarAndrea Parri <andrea.parri@amarulasolutions.com>
    Acked-by: default avatarOleg Nesterov <oleg@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vince Weaver <vincent.weaver@maine.edu>
    Cc: stable@kernel.org
    Fixes: 142b18dd ("uprobes: Fix handle_swbp() vs unregister() + register() race")
    Link: http://lkml.kernel.org/r/20181122161031.15179-1-andrea.parri@amarulasolutions.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    c9271209
Name
Last commit
Last update
Documentation Loading commit data...
arch Loading commit data...
block Loading commit data...
certs Loading commit data...
crypto Loading commit data...
drivers Loading commit data...
firmware Loading commit data...
fs Loading commit data...
include Loading commit data...
init Loading commit data...
ipc Loading commit data...
kernel Loading commit data...
lib Loading commit data...
mm Loading commit data...
net Loading commit data...
samples Loading commit data...
scripts Loading commit data...
security Loading commit data...
sound Loading commit data...
tools Loading commit data...
usr Loading commit data...
virt Loading commit data...
.get_maintainer.ignore Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
COPYING Loading commit data...
CREDITS Loading commit data...
Kbuild Loading commit data...
Kconfig Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README Loading commit data...
REPORTING-BUGS Loading commit data...