Message ID | 20201009170202.103512-2-a.nogikh@gmail.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | net, mac80211, kernel: enable KCOV remote coverage collection for 802.11 frame handling | expand |
On Fri, Oct 9, 2020 at 7:02 PM Aleksandr Nogikh <a.nogikh@gmail.com> wrote: > > From: Aleksandr Nogikh <nogikh@google.com> > > kcov_common_handle is a method that is used to obtain a "default" KCOV > remote handle of the current process. The handle can later be passed > to kcov_remote_start in order to collect coverage for the processing > that is initiated by one process, but done in another. For details see > Documentation/dev-tools/kcov.rst and comments in kernel/kcov.c. > > Presently, if kcov_common_handle is called in a hard IRQ context, it > will return a handle for the interrupted process. This may lead to > unreliable and incorrect coverage collection. FWIW it's the same for soft IRQ context. > > Adjust the behavior of kcov_common_handle in the following way. If it > is called in a task context, return the common handle for the > currently running task. Otherwise, return 0. It will make the returned > value more reliable and also will make it possible to use > kcov_remote_handle in routines that can be called from any context. > > Signed-off-by: Aleksandr Nogikh <nogikh@google.com> > --- > v2: > * Added this patch to the series. > --- > kernel/kcov.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/kernel/kcov.c b/kernel/kcov.c > index 6b8368be89c8..80bfe71bbe13 100644 > --- a/kernel/kcov.c > +++ b/kernel/kcov.c > @@ -1023,6 +1023,8 @@ EXPORT_SYMBOL(kcov_remote_stop); > /* See the comment before kcov_remote_start() for usage details. */ > u64 kcov_common_handle(void) > { > + if (!in_task()) > + return 0; > return current->kcov_handle; > } > EXPORT_SYMBOL(kcov_common_handle); > -- > 2.28.0.1011.ga647a8990f-goog > Reviewed-by: Andrey Konovalov <andreyknvl@google.com>
diff --git a/kernel/kcov.c b/kernel/kcov.c index 6b8368be89c8..80bfe71bbe13 100644 --- a/kernel/kcov.c +++ b/kernel/kcov.c @@ -1023,6 +1023,8 @@ EXPORT_SYMBOL(kcov_remote_stop); /* See the comment before kcov_remote_start() for usage details. */ u64 kcov_common_handle(void) { + if (!in_task()) + return 0; return current->kcov_handle; } EXPORT_SYMBOL(kcov_common_handle);