From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759367AbcB1RAP (ORCPT ); Sun, 28 Feb 2016 12:00:15 -0500 Received: from mx1.redhat.com ([209.132.183.28]:52654 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758016AbcB1RAN (ORCPT ); Sun, 28 Feb 2016 12:00:13 -0500 Date: Sun, 28 Feb 2016 11:00:09 -0600 From: Josh Poimboeuf To: Ingo Molnar Cc: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, linux-kernel@vger.kernel.org, live-patching@vger.kernel.org, Michal Marek , Peter Zijlstra , Andy Lutomirski , Borislav Petkov , Linus Torvalds , Andi Kleen , Pedro Alves , Namhyung Kim , Bernd Petrovitsch , Chris J Arges , Andrew Morton , Jiri Slaby , Arnaldo Carvalho de Melo Subject: Re: [PATCH v18 0/9] Compile-time stack metadata validation Message-ID: <20160228170009.GA3079@treble.redhat.com> References: <20160228065729.GB20796@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20160228065729.GB20796@gmail.com> User-Agent: Mutt/1.5.23.1-rc1 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Feb 28, 2016 at 07:57:29AM +0100, Ingo Molnar wrote: > > Another thing I've noticed are _thousands_ of these warnings: > > objtool: kernel/sched/core.o: preempt_schedule_irq()+0x20: function has unreachable instruction > objtool: kernel/sched/core.o: preempt_schedule_irq()+0x27: function has unreachable instruction > objtool: kernel/sched/core.o: preempt_schedule_irq()+0x2c: function has unreachable instruction > objtool: kernel/sched/core.o: preempt_schedule_irq()+0x33: function has unreachable instruction > objtool: net/ceph/pagevec.o: ceph_put_page_vector()+0x171: function has unreachable instruction > objtool: net/ceph/pagevec.o: ceph_put_page_vector()+0x178: function has unreachable instruction > objtool: net/ceph/pagevec.o: ceph_put_page_vector()+0x17d: function has unreachable instruction > objtool: net/ceph/pagevec.o: ceph_put_page_vector()+0x184: function has unreachable instruction > objtool: net/ceph/pagevec.o: ceph_get_direct_page_vector()+0xe2: function has unreachable instruction > objtool: net/ceph/pagevec.o: ceph_get_direct_page_vector()+0xe9: function has unreachable instruction > objtool: net/ceph/pagevec.o: ceph_get_direct_page_vector()+0xee: function has unreachable instruction > objtool: net/ceph/pagevec.o: ceph_get_direct_page_vector()+0xf5: function has unreachable instruction > objtool: net/ceph/pagevec.o: zero_user_segment()+0x120: function has unreachable instruction > objtool: net/ceph/pagevec.o: zero_user_segment()+0x127: function has unreachable instruction > objtool: net/ceph/pagevec.o: zero_user_segment()+0x12c: function has unreachable instruction > objtool: net/ceph/pagevec.o: zero_user_segment()+0x133: function has unreachable instruction > > that's on an x86-64 allyesconfig kernel, with objtool merged to tip:master, using > GCC 4.9.2: > > gcc version 4.9.2 20150212 (Red Hat 4.9.2-6) (GCC) Those are caused by CONFIG_KASAN, CONFIG_UBSAN, and CONFIG_GCOV_KERNEL, which can all add unreachable instructions. Technically, an unreachable instruction isn't really a problem, but objtool warns about it because it often means there's something going on in the control flow which it doesn't understand. I guess we could make CONFIG_STACK_VALIDATION conflict with those options, but I think that would disable it on allyesconfig. I'll see if I can make objtool smarter so that it detects these special cases of unreachable instructions and ignores them. > Also, please prefix such warnings with the standard compiler prefix, something > like this: > > kernel/sched/core.c: warning: objtool: preempt_schedule_irq()+0x20: function has unreachable instruction > > so that scripts/tools monitoring new build warnings can pick them up > automatically? Yeah, good idea. -- Josh