In revision 1.43 of kcov.c, the redundant conditional of checking for
authoranton <anton@openbsd.org>
Tue, 11 Jan 2022 06:00:41 +0000 (06:00 +0000)
committeranton <anton@openbsd.org>
Tue, 11 Jan 2022 06:00:41 +0000 (06:00 +0000)
commitc1a72b652b73c91009631bf5d600078106f9d359
tree61caa4d97247fdae8d97052581a8fb4fc464eced
parent8e544e80ad051c7ebb0293f80569ecb775fbd3bf
In revision 1.43 of kcov.c, the redundant conditional of checking for
an exising kcov descriptor with the given device minor was removed since
kcov is a cloning device; i.e. the device minor should always be unique.

However, there's one edge case to still consider in which one thread
have tracing enabled while another thread closes the same kcov
descriptor. The kcov descriptor is kept alive until thread with tracing
enabled exits to prevent usage after free. This does however cause the
spec file layer above to flag the device minor as unused. Any subsequent
open of /dev/kcov would trip on the assertion in kcovopen() until the
thread with tracing enabled exits.

Therefore unconditionally remove the kcov descriptor from the global
list of active descriptors which is fine since the same kcov descriptor
will later be freed in kcov_exit().

I have never seen this in the wild but realized while hunting another
bug.
sys/dev/kcov.c