diff mbox series

kasan: fix build by including kernel.h

Message ID 20210705072716.2125074-1-elver@google.com (mailing list archive)
State New
Headers show
Series kasan: fix build by including kernel.h | expand

Commit Message

Marco Elver July 5, 2021, 7:27 a.m. UTC
The <linux/kasan.h> header relies on _RET_IP_ being defined, and had
been receiving that definition via inclusion of bug.h which includes
kernel.h. However, since f39650de687e that is no longer the case and get
the following build error when building CONFIG_KASAN_HW_TAGS on arm64:

  In file included from arch/arm64/mm/kasan_init.c:10:
  ./include/linux/kasan.h: In function 'kasan_slab_free':
  ./include/linux/kasan.h:230:39: error: '_RET_IP_' undeclared (first use in this function)
    230 |   return __kasan_slab_free(s, object, _RET_IP_, init);

Fix it by including kernel.h from kasan.h.

Fixes: f39650de687e ("kernel.h: split out panic and oops helpers")
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Marco Elver <elver@google.com>
---
 include/linux/kasan.h | 1 +
 1 file changed, 1 insertion(+)

Comments

Andy Shevchenko July 5, 2021, 8:49 a.m. UTC | #1
On Mon, Jul 5, 2021 at 10:28 AM Marco Elver <elver@google.com> wrote:
>
> The <linux/kasan.h> header relies on _RET_IP_ being defined, and had
> been receiving that definition via inclusion of bug.h which includes
> kernel.h. However, since f39650de687e that is no longer the case and get
> the following build error when building CONFIG_KASAN_HW_TAGS on arm64:
>
>   In file included from arch/arm64/mm/kasan_init.c:10:
>   ./include/linux/kasan.h: In function 'kasan_slab_free':
>   ./include/linux/kasan.h:230:39: error: '_RET_IP_' undeclared (first use in this function)
>     230 |   return __kasan_slab_free(s, object, _RET_IP_, init);
>
> Fix it by including kernel.h from kasan.h.

...which I would like to avoid in the long term, but for now it's
probably the best quick fix, otherwise it will require the real split
of _RET_IP or at least rethinking its location.

Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.org>
Thanks!

> Fixes: f39650de687e ("kernel.h: split out panic and oops helpers")

P.S. I have tested the initial patch against full build of x86_64, and
it was long time available for different CIs/build bots, none
complained so far.

> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Marco Elver <elver@google.com>
> ---
>  include/linux/kasan.h | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/include/linux/kasan.h b/include/linux/kasan.h
> index 5310e217bd74..dd874a1ee862 100644
> --- a/include/linux/kasan.h
> +++ b/include/linux/kasan.h
> @@ -3,6 +3,7 @@
>  #define _LINUX_KASAN_H
>
>  #include <linux/bug.h>
> +#include <linux/kernel.h>
>  #include <linux/static_key.h>
>  #include <linux/types.h>
>
> --
> 2.32.0.93.g670b81a890-goog
>
Marco Elver July 5, 2021, 9:01 a.m. UTC | #2
On Mon, 5 Jul 2021 at 10:50, Andy Shevchenko <andy.shevchenko@gmail.com> wrote:
> On Mon, Jul 5, 2021 at 10:28 AM Marco Elver <elver@google.com> wrote:
> > The <linux/kasan.h> header relies on _RET_IP_ being defined, and had
> > been receiving that definition via inclusion of bug.h which includes
> > kernel.h. However, since f39650de687e that is no longer the case and get
> > the following build error when building CONFIG_KASAN_HW_TAGS on arm64:
> >
> >   In file included from arch/arm64/mm/kasan_init.c:10:
> >   ./include/linux/kasan.h: In function 'kasan_slab_free':
> >   ./include/linux/kasan.h:230:39: error: '_RET_IP_' undeclared (first use in this function)
> >     230 |   return __kasan_slab_free(s, object, _RET_IP_, init);
> >
> > Fix it by including kernel.h from kasan.h.
>
> ...which I would like to avoid in the long term, but for now it's
> probably the best quick fix, otherwise it will require the real split
> of _RET_IP or at least rethinking its location.
>
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.org>
> Thanks!

Thanks!

> > Fixes: f39650de687e ("kernel.h: split out panic and oops helpers")
>
> P.S. I have tested the initial patch against full build of x86_64, and
> it was long time available for different CIs/build bots, none
> complained so far.

It only manifests on arm64 when using CONFIG_KASAN_HW_TAGS mode
(requires Arm64 MTE extensions). The other 2 modes include
<linux/pgtable.h> in kasan.h, and that seems to include kernel.h
somewhere. The HW_TAGS mode, however, doesn't receive -next testing by
a CI system AFAIK, so this was missed because it's not yet used by
many (I'd expect that to change when CPUs with MTE are more
widespread).

Thanks,
-- Marco
Andrey Konovalov July 5, 2021, 2:41 p.m. UTC | #3
On Mon, Jul 5, 2021 at 9:27 AM Marco Elver <elver@google.com> wrote:
>
> The <linux/kasan.h> header relies on _RET_IP_ being defined, and had
> been receiving that definition via inclusion of bug.h which includes
> kernel.h. However, since f39650de687e that is no longer the case and get
> the following build error when building CONFIG_KASAN_HW_TAGS on arm64:
>
>   In file included from arch/arm64/mm/kasan_init.c:10:
>   ./include/linux/kasan.h: In function 'kasan_slab_free':
>   ./include/linux/kasan.h:230:39: error: '_RET_IP_' undeclared (first use in this function)
>     230 |   return __kasan_slab_free(s, object, _RET_IP_, init);
>
> Fix it by including kernel.h from kasan.h.
>
> Fixes: f39650de687e ("kernel.h: split out panic and oops helpers")
> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Marco Elver <elver@google.com>
> ---
>  include/linux/kasan.h | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/include/linux/kasan.h b/include/linux/kasan.h
> index 5310e217bd74..dd874a1ee862 100644
> --- a/include/linux/kasan.h
> +++ b/include/linux/kasan.h
> @@ -3,6 +3,7 @@
>  #define _LINUX_KASAN_H
>
>  #include <linux/bug.h>
> +#include <linux/kernel.h>
>  #include <linux/static_key.h>
>  #include <linux/types.h>
>
> --
> 2.32.0.93.g670b81a890-goog
>

Reviewed-by: Andrey Konovalov <andreyknvl@gmail.com>
Andy Shevchenko July 6, 2021, 9:49 a.m. UTC | #4
On Mon, Jul 05, 2021 at 11:01:44AM +0200, Marco Elver wrote:
> On Mon, 5 Jul 2021 at 10:50, Andy Shevchenko <andy.shevchenko@gmail.com> wrote:
> > On Mon, Jul 5, 2021 at 10:28 AM Marco Elver <elver@google.com> wrote:
> > > The <linux/kasan.h> header relies on _RET_IP_ being defined, and had
> > > been receiving that definition via inclusion of bug.h which includes
> > > kernel.h. However, since f39650de687e that is no longer the case and get
> > > the following build error when building CONFIG_KASAN_HW_TAGS on arm64:
> > >
> > >   In file included from arch/arm64/mm/kasan_init.c:10:
> > >   ./include/linux/kasan.h: In function 'kasan_slab_free':
> > >   ./include/linux/kasan.h:230:39: error: '_RET_IP_' undeclared (first use in this function)
> > >     230 |   return __kasan_slab_free(s, object, _RET_IP_, init);
> > >
> > > Fix it by including kernel.h from kasan.h.
> >
> > ...which I would like to avoid in the long term, but for now it's
> > probably the best quick fix, otherwise it will require the real split
> > of _RET_IP or at least rethinking its location.
> >
> > Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.org>
> > Thanks!
> 
> Thanks!

Should be:
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>

> > > Fixes: f39650de687e ("kernel.h: split out panic and oops helpers")
> >
> > P.S. I have tested the initial patch against full build of x86_64, and
> > it was long time available for different CIs/build bots, none
> > complained so far.
> 
> It only manifests on arm64 when using CONFIG_KASAN_HW_TAGS mode
> (requires Arm64 MTE extensions). The other 2 modes include
> <linux/pgtable.h> in kasan.h, and that seems to include kernel.h
> somewhere. The HW_TAGS mode, however, doesn't receive -next testing by
> a CI system AFAIK, so this was missed because it's not yet used by
> many (I'd expect that to change when CPUs with MTE are more
> widespread).

Got it.
diff mbox series

Patch

diff --git a/include/linux/kasan.h b/include/linux/kasan.h
index 5310e217bd74..dd874a1ee862 100644
--- a/include/linux/kasan.h
+++ b/include/linux/kasan.h
@@ -3,6 +3,7 @@ 
 #define _LINUX_KASAN_H
 
 #include <linux/bug.h>
+#include <linux/kernel.h>
 #include <linux/static_key.h>
 #include <linux/types.h>