FreeBSD/src 4f1b715 (r344452)sys/cddl/contrib/opensolaris/uts/common/dtrace fasttrap.c, sys/cddl/contrib/opensolaris/uts/intel/dtrace fasttrap_isa.c

Fix a tracepoint lookup race in fasttrap_pid_probe().

fasttrap hooks the userspace breakpoint handler; the hook looks up the
breakpoint address in a hash table of tracepoints.  It is possible for
the tracepoint to be removed by a different thread in between the
breakpoint trap and the hash table lookup, in which case SIGTRAP gets
delivered to the target process.  Fix the problem by adding a
per-process generation counter that gets incremented when a tracepoint
belonging to that process is removed.  Then, when a lookup fails, the
trapping instruction is restarted if the thread's counter doesn't match
that of the process.

Reviewed by:    cem
MFC after:      2 weeks
Sponsored by:   The FreeBSD Foundation
Differential Revision:  https://reviews.freebsd.org/D19273
DeltaFile
+34-2sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c
+4-1sys/cddl/dev/dtrace/dtrace_cddl.h
+2-0sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c
+40-33 files

UnifiedSplitRaw