HomeFreeBSD

Fix a tracepoint lookup race in fasttrap_pid_probe().

Description

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

Details

Committed
markjFeb 21 2019, 10:54 PM
Reviewer
cem
Differential Revision
D19273: Fix a hash table lookup race in fasttrap_pid_probe().
Parents
rS344451: Fix the usage error I introduced in r344192.
Branches
Unknown
Tags
Unknown