Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756519Ab3JQN7r (ORCPT ); Thu, 17 Oct 2013 09:59:47 -0400 Received: from mail-ob0-f171.google.com ([209.85.214.171]:62748 "EHLO mail-ob0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755476Ab3JQN7n (ORCPT ); Thu, 17 Oct 2013 09:59:43 -0400 MIME-Version: 1.0 In-Reply-To: <1380131111-21708-1-git-send-email-khalid.aziz@oracle.com> References: <1380131111-21708-1-git-send-email-khalid.aziz@oracle.com> Date: Thu, 17 Oct 2013 06:59:41 -0700 X-Google-Sender-Auth: _R4mURR9xHjfftBKUbrcOKASHNY Message-ID: Subject: Re: [PATCH] scsi: BusLogic: Fix an oops when intializing multimaster adapter From: Josh Boyer To: Khalid Aziz Cc: Jej B , "linux-scsi@vger.kernel.org" , "Linux-Kernel@Vger. Kernel. Org" , Khalid Aziz , Bojan Smojver Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 7281 Lines: 143 On Wed, Sep 25, 2013 at 10:45 AM, Khalid Aziz wrote: > This fixes an oops caused by buslogic driver when initializing a BusLogic > MultiMaster adapter. Initialization code used scope of a variable > incorrectly which created a NULL pointer. Oops message is below: > > BUG: unable to handle kernel NULL pointer dereference at 0000000c > IP: [] blogic_init_mm_probeinfo.isra.17+0x20a/0x583 > *pde = 00000000 > Oops: 002 [#1] PREEMPT SMP > Modules linked in: > CPU: 1 PID: 1 Comm: swapper/0 Not tainted 3.11.1.puz1 #1 > Hardware name: /Canterwood, BIOS 6.00 PG 05/16/2003 > task: f7050000 ti: f7054000 task.ti: f7054000 > EIP: 0060:[] EFLAGS: 00010246 CPU:1 > EIP is at blogic_init_mm_probeinfo.isra.17+0x20a/0x583 > EAX: 00000013 EBX: 00000000 ECX: 00000000 EDX: f8001000 > ESI: f71cb800 EDI: f7388000 EBP: 00007800 ESP: f7055c84 > DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068 > CR0: 8005003b CR2: 0000000c CR3: 0154f000 CR4: 000007d0 > Stack: > 0000001c 00000000 c11a59f6 f7055c98 00008130 ffffffff ffffffff 00000000 > 00000003 00000000 00000000 00000000 00000013 f8001000 00000001 000003d0 > 00000000 00000000 00000000 c14e3f84 f78803c8 00000000 f738c000 000000e9 > Call Trace: > [] ? pci_get_subsys+0x33/0x38 > [] ? blogic_init_probeinfo_list+0x4b/0x19e > [] ? __alloc_pages_nodemask+0xe3/0x623 > [] ? __alloc_pages_nodemask+0xe3/0x623 > [] ? sysfs_link_sibling+0x61/0x8d > [] ? kmem_cache_alloc+0x8b/0xb5 > [] ? blogic_init+0xa1/0x10e8 > [] ? sysfs_add_one+0x10/0x9d > [] ? sysfs_addrm_finish+0x12/0x85 > [] ? sysfs_do_create_link_sd+0x9d/0x1b4 > [] ? blk_register_queue+0x69/0xb3 > [] ? sysfs_create_link+0x1a/0x2c > [] ? add_disk+0x1a1/0x3c7 > [] ? klist_next+0x60/0xc3 > [] ? scsi_dh_detach+0x68/0x68 > [] ? bus_for_each_dev+0x51/0x61 > [] ? do_one_initcall+0x22/0x12c > [] ? __proc_create+0x8c/0xba > [] ? blogic_setup+0x5f6/0x5f6 > [] ? repair_env_string+0xf/0x4d > [] ? do_early_param+0x71/0x71 > [] ? parse_args+0x21f/0x33d > [] ? kernel_init_freeable+0xdf/0x17d > [] ? do_early_param+0x71/0x71 > [] ? kernel_init+0x8/0xc0 > [] ? ret_from_kernel_thread+0x6/0x28 > [] ? ret_from_kernel_thread+0x1b/0x28 > [] ? rest_init+0x6c/0x6c > Code: 89 44 24 10 0f b6 44 24 3d 89 44 24 0c c7 44 24 08 00 00 00 00 c7 44 24 04 38 62 46 c1 c7 04 24 02 00 00 00 e8 78 13 d2 ff 31 db <89> 6b 0c b0 20 89 ea ee > c7 44 24 08 04 00 00 00 8d 44 24 4c 89 > EIP: [] blogic_init_mm_probeinfo.isra.17+0x20a/0x583 SS:ESP 0068:f7055c84 > CR2: 000000000000000c > ---[ end trace 17f45f5196d40487 ]--- > Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000009 > > Signed-off-by: Khalid Aziz > Cc: # 3.11.x > Cc: Khalid Aziz > Reported-by: Pierre Uszynski > Tested-by: Pierre Uszynski We had a user report an issue starting VMWare guests using BusLogic with the 3.11 kernel in Fedora. They tested a kernel build based on 3.11.5 plus this patch and it fixes their issue. Details here: https://bugzilla.redhat.com/show_bug.cgi?id=1015558 You can add a Tested-by: Bojan Smojver if you'd like. josh > --- > drivers/scsi/BusLogic.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c > index feab3a5..757eb07 100644 > --- a/drivers/scsi/BusLogic.c > +++ b/drivers/scsi/BusLogic.c > @@ -696,7 +696,7 @@ static int __init blogic_init_mm_probeinfo(struct blogic_adapter *adapter) > while ((pci_device = pci_get_device(PCI_VENDOR_ID_BUSLOGIC, > PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER, > pci_device)) != NULL) { > - struct blogic_adapter *adapter = adapter; > + struct blogic_adapter *host_adapter = adapter; > struct blogic_adapter_info adapter_info; > enum blogic_isa_ioport mod_ioaddr_req; > unsigned char bus; > @@ -744,9 +744,9 @@ static int __init blogic_init_mm_probeinfo(struct blogic_adapter *adapter) > known and enabled, note that the particular Standard ISA I/O > Address should not be probed. > */ > - adapter->io_addr = io_addr; > - blogic_intreset(adapter); > - if (blogic_cmd(adapter, BLOGIC_INQ_PCI_INFO, NULL, 0, > + host_adapter->io_addr = io_addr; > + blogic_intreset(host_adapter); > + if (blogic_cmd(host_adapter, BLOGIC_INQ_PCI_INFO, NULL, 0, > &adapter_info, sizeof(adapter_info)) == > sizeof(adapter_info)) { > if (adapter_info.isa_port < 6) > @@ -762,7 +762,7 @@ static int __init blogic_init_mm_probeinfo(struct blogic_adapter *adapter) > I/O Address assigned at system initialization. > */ > mod_ioaddr_req = BLOGIC_IO_DISABLE; > - blogic_cmd(adapter, BLOGIC_MOD_IOADDR, &mod_ioaddr_req, > + blogic_cmd(host_adapter, BLOGIC_MOD_IOADDR, &mod_ioaddr_req, > sizeof(mod_ioaddr_req), NULL, 0); > /* > For the first MultiMaster Host Adapter enumerated, > @@ -779,12 +779,12 @@ static int __init blogic_init_mm_probeinfo(struct blogic_adapter *adapter) > > fetch_localram.offset = BLOGIC_AUTOSCSI_BASE + 45; > fetch_localram.count = sizeof(autoscsi_byte45); > - blogic_cmd(adapter, BLOGIC_FETCH_LOCALRAM, > + blogic_cmd(host_adapter, BLOGIC_FETCH_LOCALRAM, > &fetch_localram, sizeof(fetch_localram), > &autoscsi_byte45, > sizeof(autoscsi_byte45)); > - blogic_cmd(adapter, BLOGIC_GET_BOARD_ID, NULL, 0, &id, > - sizeof(id)); > + blogic_cmd(host_adapter, BLOGIC_GET_BOARD_ID, NULL, 0, > + &id, sizeof(id)); > if (id.fw_ver_digit1 == '5') > force_scan_order = > autoscsi_byte45.force_scan_order; > -- > 1.7.10.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/