Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp613617pxk; Thu, 17 Sep 2020 11:20:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyHaAW0EAm1tYweFyWhxSwz+U/ZhlvS6ck9DEC3pWLgOEPbbwaQv1+xBwUuW1UVEgafsmRo X-Received: by 2002:a17:906:30c5:: with SMTP id b5mr32650361ejb.98.1600366817097; Thu, 17 Sep 2020 11:20:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600366817; cv=none; d=google.com; s=arc-20160816; b=pQqIvGInAjz6j3/z8tzmLsPbphNFaoDFNjdcMcnBA4jptPpEu3iISmj5ymVNZ1CA66 CIODPOBdPrbStE6xSOuv/nyQ3ReAFyCN6ATdhbSuc57aLB6Xk/MZEgpY8lpFRySaoLBd aRzUcMziiOkgSmFLRWNbIsfMYwpJnW0E1CGrrk5gAHhYiSCcIj8JOv8hFKJlnv9UQ5zW LzTLU/rOgjg4S4R8gK/oj/PLZg5dJu72fwrPVPqMus/UhhGY0LcQLfQsRUm5/J2p+nIV eBAhBdJ7qs0h3UOKOvPmpPh7z+6D381LgHr1UbXdXFhpD88/ah3mkGr4zUW1oII6S2Oz uJBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=pJlz1lyl7aTxHeTmVzs1SzNTrj8gWqaynH0CCR1cE3c=; b=WvAAvUkynPjnx4v2eHQSmesR/PDWoi5Acm6c6YOkuyMg3jmkOXgH7zV8su4yY7Jj51 jBgZI3P0o84hGUT6Z4Uien5DWyR6e+NsHiLcT0ISx6WBFju7o6XD2+FXnPqlqlLhHFAt rXi/L/Kt6zzy3lxyWxOdMCNSSl48oulh+NEHqrd2QC0+Ahb8GHxVMKsa79WlK2SVtfdx LDuDlA2Y7ctTJDxLrr093E0OmpJo0vhLZk4SmRWINeC7CAvkDN4iEL6iVpiV4HUyumqe jUKga4vpnqPtOKkcGZTas7nobeTxauuspvDP+VRhKgkta2yx/BmFFMFZPVc7ZzXL+8PD OYmg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=vxxCO7Jr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cd4si552839ejb.107.2020.09.17.11.19.52; Thu, 17 Sep 2020 11:20:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=vxxCO7Jr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726650AbgIQSRE (ORCPT + 99 others); Thu, 17 Sep 2020 14:17:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37944 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726580AbgIQSQL (ORCPT ); Thu, 17 Sep 2020 14:16:11 -0400 Received: from mail-pl1-x642.google.com (mail-pl1-x642.google.com [IPv6:2607:f8b0:4864:20::642]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B80AC06174A for ; Thu, 17 Sep 2020 11:16:06 -0700 (PDT) Received: by mail-pl1-x642.google.com with SMTP id c3so1566164plz.5 for ; Thu, 17 Sep 2020 11:16:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=pJlz1lyl7aTxHeTmVzs1SzNTrj8gWqaynH0CCR1cE3c=; b=vxxCO7JrsXxxBjFE/gc/+7PK3qsqBFAMeta0e7CTjimDTcb1Qd6WbNIYHDg5tV0eeU Ue++GYwhiiLr06kUcYpJtnF7Xgrqn3mHlXiuS7oaTHnj5VKII/k4PVq/jkklkDfaStMb spncaSTprr6YQXgjDnnajTILY3yiUgr25FtfZyusBZjSiJHt5jeoh5BLVTO2CHcbTcl6 VC77ItAMwt3nkoHprfkBzIpYpO7Ah7Pp/NpmFJwrnWTR3v1v+n9QvD20910Up2zYdFD/ Xkf4dV6c6jwBGqffyqt8VvYFfWV0LkfnWpVxHk3TUHl7SPaGUVGkGR34wpvSln8+tcXI TrUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=pJlz1lyl7aTxHeTmVzs1SzNTrj8gWqaynH0CCR1cE3c=; b=Ti3EeD+M/ARwzc1YyHC87RX4s1iHM3imJfrO6VfP7+s87qsP9GTE4vSdQAUxaIAEE3 rwqeJQWHpgvWCIV98wx/TT7ZPkYOUTSmNKoUOfAI8mJzSqL6/IjEaEdFq80ZiAqNKvO5 vGNuPnNGTOlnnzkCrpOQXWtUE0P7vKVWS3Wn0fhrLv2GOt3qVhXOlVexCI1vN8fGQSec 8PxtRUJd6J2Jr1REithmsjiBdV3blojzrK8nybuPb94bsclZiXVK+VvQzZPsCQP+s8AT TCDvHw1yzsSGRacvOQcEUcwWkqjjqay9MJ9/uLjH06QXLCvm51Wv0KgSR+/paxPh5rC0 EsCw== X-Gm-Message-State: AOAM532LWvapXnyOJKIQmFB/otirnGTjRjLkNxlZcEAWwuqZUVv4vR9K i+GVYzfOas81bdKR+BR9gXTx1p37/xL9rdDypfFdZQ== X-Received: by 2002:a17:90a:e517:: with SMTP id t23mr9138243pjy.25.1600366565663; Thu, 17 Sep 2020 11:16:05 -0700 (PDT) MIME-Version: 1.0 References: <20200917084905.1647262-1-ilie.halip@gmail.com> In-Reply-To: <20200917084905.1647262-1-ilie.halip@gmail.com> From: Nick Desaulniers Date: Thu, 17 Sep 2020 11:15:54 -0700 Message-ID: Subject: Re: [PATCH] objtool: ignore unreachable trap after call to noreturn functions To: Ilie Halip Cc: LKML , Rong Chen , Marco Elver , Philip Li , Borislav Petkov , kasan-dev , "maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)" , clang-built-linux , Josh Poimboeuf , Peter Zijlstra , Nathan Chancellor Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Sep 17, 2020 at 1:49 AM Ilie Halip wrote: > > With CONFIG_UBSAN_TRAP enabled, the compiler may insert a trap instruction > after a call to a noreturn function. In this case, objtool warns that the > ud2 instruction is unreachable. > > objtool silences similar warnings (trap after dead end instructions), so > expand that check to include dead end functions. Reviewed-by: Nick Desaulniers Tested-by: Nick Desaulniers Reported-by: kbuild test robot Thanks for the patch, Ilie! With this, a defconfig+CONFIG_UBSAN+CONFIG_UBSAN_TRAP goes from 82 unreachable instruction warnings from objtool to 0. $ make LLVM=1 -j71 defconfig $ make LLVM=1 -j71 menuconfig $ make LLVM=1 -j71 2> log.txt $ grep warning: log.txt | cut -d ' ' -f 2- | sort | uniq -c | wc -l 82 $ b4 am https://lore.kernel.org/lkml/20200917084905.1647262-1-ilie.halip@gmail.com/ -o - | git am $ make LLVM=1 -j71 clean $ make LLVM=1 -j71 2> log.txt $ grep warning: log.txt | cut -d ' ' -f 2- | sort | uniq -c | wc -l 0 > > Cc: Nick Desaulniers > Cc: Rong Chen > Cc: Marco Elver > Cc: Philip Li > Cc: Borislav Petkov > Cc: kasan-dev@googlegroups.com > Cc: x86@kernel.org > Cc: clang-built-linux@googlegroups.com > BugLink: https://github.com/ClangBuiltLinux/linux/issues/1148 > Link: https://lore.kernel.org/lkml/CAKwvOdmptEpi8fiOyWUo=AiZJiX+Z+VHJOM2buLPrWsMTwLnyw@mail.gmail.com > Suggested-by: Nick Desaulniers > Signed-off-by: Ilie Halip > --- > tools/objtool/check.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/tools/objtool/check.c b/tools/objtool/check.c > index e034a8f24f46..eddf8bf16b05 100644 > --- a/tools/objtool/check.c > +++ b/tools/objtool/check.c > @@ -2612,9 +2612,10 @@ static bool is_ubsan_insn(struct instruction *insn) > "__ubsan_handle_builtin_unreachable")); > } > > -static bool ignore_unreachable_insn(struct instruction *insn) > +static bool ignore_unreachable_insn(struct objtool_file *file, struct instruction *insn) > { > int i; > + struct instruction *prev_insn; > > if (insn->ignore || insn->type == INSN_NOP) > return true; > @@ -2639,8 +2640,11 @@ static bool ignore_unreachable_insn(struct instruction *insn) > * __builtin_unreachable(). The BUG() macro has an unreachable() after > * the UD2, which causes GCC's undefined trap logic to emit another UD2 > * (or occasionally a JMP to UD2). > + * CONFIG_UBSAN_TRAP may also insert a UD2 after calling a __noreturn > + * function. > */ > - if (list_prev_entry(insn, list)->dead_end && > + prev_insn = list_prev_entry(insn, list); > + if ((prev_insn->dead_end || dead_end_function(file, prev_insn->call_dest)) && > (insn->type == INSN_BUG || > (insn->type == INSN_JUMP_UNCONDITIONAL && > insn->jump_dest && insn->jump_dest->type == INSN_BUG))) > @@ -2767,7 +2771,7 @@ static int validate_reachable_instructions(struct objtool_file *file) > return 0; > > for_each_insn(file, insn) { > - if (insn->visited || ignore_unreachable_insn(insn)) > + if (insn->visited || ignore_unreachable_insn(file, insn)) > continue; > > WARN_FUNC("unreachable instruction", insn->sec, insn->offset); > -- > 2.25.1 > -- Thanks, ~Nick Desaulniers