From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752849AbcAGC5C (ORCPT ); Wed, 6 Jan 2016 21:57:02 -0500 Received: from mga09.intel.com ([134.134.136.24]:40151 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752697AbcAGC47 (ORCPT ); Wed, 6 Jan 2016 21:56:59 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,531,1444719600"; d="scan'208";a="721763512" Message-ID: <568DD3F8.9050903@linux.intel.com> Date: Thu, 07 Jan 2016 10:56:56 +0800 From: "Zhang, Yanmin" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: "Qiu, PeiyangX" , linux-kernel@vger.kernel.org CC: Steven Rostedt , Rusty Russell , Ingo Molnar Subject: Re: [PATCH] trace: correct start_index in find_next References: <5684B900.9000309@intel.com> In-Reply-To: <5684B900.9000309@intel.com> Content-Type: text/plain; charset=gbk Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2015/12/31 13:11, Qiu, PeiyangX wrote: > From: Qiu Peiyang > > When we do cat /sys/kernel/debug/tracing/printk_formats, we hit kernel > panic at t_show. > > general protection fault: 0000 [#1] PREEMPT SMP > CPU: 0 PID: 2957 Comm: sh Tainted: G W O 3.14.55-x86_64-01062-gd4acdc7 #2 > RIP: 0010:[] > [] t_show+0x22/0xe0 > RSP: 0000:ffff88002b4ebe80 EFLAGS: 00010246 > RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000004 > RDX: 0000000000000004 RSI: ffffffff81fd26a6 RDI: ffff880032f9f7b1 > RBP: ffff88002b4ebe98 R08: 0000000000001000 R09: 000000000000ffec > R10: 0000000000000000 R11: 000000000000000f R12: ffff880004d9b6c0 > R13: 7365725f6d706400 R14: ffff880004d9b6c0 R15: ffffffff82020570 > FS: 0000000000000000(0000) GS:ffff88003aa00000(0063) knlGS:00000000f776bc40 > CS: 0010 DS: 002b ES: 002b CR0: 0000000080050033 > CR2: 00000000f6c02ff0 CR3: 000000002c2b3000 CR4: 00000000001007f0 > Call Trace: > [] seq_read+0x2f6/0x3e0 > [] vfs_read+0x9b/0x160 > [] SyS_read+0x49/0xb0 > [] ia32_do_call+0x13/0x13 > ---[ end trace 5bd9eb630614861e ]--- > Kernel panic - not syncing: Fatal exception > > When the first time find_next calls find_next_mod_format, it should > iterate the trace_bprintk_fmt_list to find the first print format of > the module. However in current code, start_index is smaller than *pos > at first, and code will not iterate the list. Latter container_of will > get the wrong address with former v, which will cause mod_fmt be a > meaningless object and so is the returned mod_fmt->fmt. > > This patch will fix it by correcting the start_index. After fixed, > when the first time calls find_next_mod_format, start_index will be > equal to *pos, and code will iterate the trace_bprintk_fmt_list to > get the right module printk format, so is the returned mod_fmt->fmt. > > Signed-off-by: Qiu Peiyang > --- > kernel/trace/trace_printk.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/kernel/trace/trace_printk.c b/kernel/trace/trace_printk.c > index 1c2b285..64f0a26 100644 > --- a/kernel/trace/trace_printk.c > +++ b/kernel/trace/trace_printk.c > @@ -273,6 +273,7 @@ static const char **find_next(void *v, loff_t *pos) > if (*pos < last_index + start_index) > return __start___tracepoint_str + (*pos - last_index); > > + start_index += last_index; > return find_next_mod_format(start_index, v, fmt, pos); > } Rusty, Steven, How is this patch? It fixes a kernel panic. Yanmin