From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755480Ab0EJIFv (ORCPT ); Mon, 10 May 2010 04:05:51 -0400 Received: from fgwmail6.fujitsu.co.jp ([192.51.44.36]:57923 "EHLO fgwmail6.fujitsu.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752318Ab0EJIFt (ORCPT ); Mon, 10 May 2010 04:05:49 -0400 X-SecurityPolicyCheck-FJ: OK by FujitsuOutboundMailChecker v1.4.0 Message-ID: <4BE7BE10.8080000@np.css.fujitsu.com> Date: Mon, 10 May 2010 17:04:32 +0900 From: Jin Dongming User-Agent: Thunderbird 2.0.0.23 (Windows/20090812) MIME-Version: 1.0 To: LKLM CC: lenb , Andi Kleen , Huang Ying , Hidetoshi Seto , ACPI Subject: [Patch-next] Oops caused by ERST Table not supported. Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On my server(x86_64) when the mcelog is executed, it will cause oops. And following information could be gotten. Call Trace: [] ? avc_has_perm_noaudit+0x4d/0x680 [] ? avc_has_perm_noaudit+0x4d/0x680 [] erst_read_next+0x3b/0x100 [] apei_read_mce+0x2f/0x170 [] ? check_object+0x36d/0x430 [] ? init_object+0x9c/0xe0 [] ? __slab_alloc+0x7cf/0x8b0 [] ? mce_read+0x4a/0x510 [] ? __kmalloc+0x2db/0x390 [] ? mce_read+0x4a/0x510 [] ? check_bytes_and_report+0x3d/0x110 [] ? _cond_resched+0x3e/0x80 [] mce_read+0x4cb/0x510 [] ? security_file_permission+0x122/0x130 [] ? rw_verify_area+0x196/0x210 [] vfs_read+0x1bb/0x2f0 [] sys_read+0x8d/0xe0 [] system_call_fastpath+0x16/0x1b This is because of the ERST Table not supported on my server and it makes the variable "ctx" used by erst_read_nextis NULL. So I make the patch to solve this problem. And I confirmed it on my server(x86_64). Signed-off-by: Jin Dongming --- drivers/acpi/apei/erst.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c index 5fe5c0f..2ebc391 100644 --- a/drivers/acpi/apei/erst.c +++ b/drivers/acpi/apei/erst.c @@ -698,6 +698,9 @@ ssize_t erst_read_next(struct cper_record_header *record, size_t buflen) unsigned long flags; u64 record_id; + if (erst_disable) + return -ENODEV; + spin_lock_irqsave(&erst_lock, flags); rc = __erst_get_next_record_id(&record_id); if (rc) { -- 1.7.0.3