From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933935AbeAKUdC (ORCPT + 1 other); Thu, 11 Jan 2018 15:33:02 -0500 Received: from mail-pf0-f195.google.com ([209.85.192.195]:32784 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932386AbeAKUdA (ORCPT ); Thu, 11 Jan 2018 15:33:00 -0500 X-Google-Smtp-Source: ACJfBov2ouPHpPGPyiQhb+pFsS6JlrYroZ1gMFooRsLx62YQ628FkWD9djttPGXLIPcsMhd+VRqRmg== Date: Thu, 11 Jan 2018 12:32:57 -0800 From: Kees Cook To: Mikael Starvik , Jesper Nilsson Cc: kbuild test robot , linux-cris-kernel@axis.com, linux-kernel@vger.kernel.org Subject: [PATCH] cris: Mark end of BUG() implementation as unreachable Message-ID: <20180111203257.GA29326@beast> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: 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 Signed-off-by: Kees Cook --- 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