Messages in this thread Patch in this message | | | Date | Thu, 11 Jan 2018 12:32:57 -0800 | From | Kees Cook <> | Subject | [PATCH] cris: Mark end of BUG() implementation as unreachable |
| |
When building the cris v10 architecture, the compiler doesn't realize that BUG() doesn't return, so it will complain about functions using BUG() that are marked with the noreturn attribute:
mm/usercopy.c: In function 'usercopy_abort': >> mm/usercopy.c:86:1: warning: 'noreturn' function does return } ^
This fixes it for v10, similar to how it already works on v32.
Reported-by: kbuild test robot <fengguang.wu@intel.com> Signed-off-by: Kees Cook <keescook@chromium.org> --- arch/cris/include/arch-v10/arch/bug.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/cris/include/arch-v10/arch/bug.h b/arch/cris/include/arch-v10/arch/bug.h index 905afeacfedf..ca9de0b250de 100644 --- a/arch/cris/include/arch-v10/arch/bug.h +++ b/arch/cris/include/arch-v10/arch/bug.h @@ -44,18 +44,26 @@ struct bug_frame { * not be used like this with newer versions of gcc. */ #define BUG() \ +do { \ __asm__ __volatile__ ("clear.d [" __stringify(BUG_MAGIC) "]\n\t"\ "movu.w " __stringify(__LINE__) ",$r0\n\t"\ "jump 0f\n\t" \ ".section .rodata\n" \ "0:\t.string \"" __FILE__ "\"\n\t" \ - ".previous") + ".previous"); \ + unreachable(); \ +} while (0) #endif #else /* This just causes an oops. */ -#define BUG() (*(int *)0 = 0) +#define BUG() \ +do { \ + (*(int *)0 = 0); \ + do {} while (1); \ + unreachable(); \ +} while (0) #endif -- 2.7.4
-- Kees Cook Pixel Security
| |