[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20160228170009.GA3079@treble.redhat.com>
Date: Sun, 28 Feb 2016 11:00:09 -0600
From: Josh Poimboeuf <jpoimboe@...hat.com>
To: Ingo Molnar <mingo@...nel.org>
Cc: Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>,
"H. Peter Anvin" <hpa@...or.com>, x86@...nel.org,
linux-kernel@...r.kernel.org, live-patching@...r.kernel.org,
Michal Marek <mmarek@...e.cz>,
Peter Zijlstra <peterz@...radead.org>,
Andy Lutomirski <luto@...nel.org>,
Borislav Petkov <bp@...en8.de>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Andi Kleen <andi@...stfloor.org>,
Pedro Alves <palves@...hat.com>,
Namhyung Kim <namhyung@...il.com>,
Bernd Petrovitsch <bernd@...rovitsch.priv.at>,
Chris J Arges <chris.j.arges@...onical.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Jiri Slaby <jslaby@...e.cz>,
Arnaldo Carvalho de Melo <acme@...nel.org>
Subject: Re: [PATCH v18 0/9] Compile-time stack metadata validation
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
Powered by blists - more mailing lists