On Fri, Oct 9, 2020 at 7:02 PM Aleksandr Nogikh <a.nogikh@xxxxxxxxx> wrote: > > From: Aleksandr Nogikh <nogikh@xxxxxxxxxx> > > 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@xxxxxxxxxx> > --- > 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@xxxxxxxxxx>