From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755429AbbEUI6N (ORCPT ); Thu, 21 May 2015 04:58:13 -0400 Received: from mga01.intel.com ([192.55.52.88]:57067 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751784AbbEUI6J (ORCPT ); Thu, 21 May 2015 04:58:09 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,467,1427785200"; d="scan'208";a="698217432" From: Lu Baolu To: Heikki Krogerus , Greg Kroah-Hartman , Sasha Levin , David Cohen Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Lu Baolu Subject: [PATCH 1/1] usb: ulpi: don't register drivers if bus doesn't exist Date: Thu, 21 May 2015 16:57:52 +0800 Message-Id: <1432198672-384-1-git-send-email-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.1.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ULPI registers its bus at module_init, so if the bus fails to register, the module will fail to load and all will be well in the world. However, if the ULPI code is built-in rather than a module, the bus initialization may fail, but we'd still try to register drivers later onto a non-existent bus, which will panic the kernel. Fix that by checking that the bus was indeed initialized before trying to register drivers on top of it. Signed-off-by: Sasha Levin Signed-off-by: Heikki Krogerus Signed-off-by: Lu Baolu Reported-by: Zhuo Qiuxu Reviewed-by: David Cohen --- drivers/usb/common/ulpi.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c index 0e6f968..af52b46 100644 --- a/drivers/usb/common/ulpi.c +++ b/drivers/usb/common/ulpi.c @@ -132,6 +132,10 @@ int ulpi_register_driver(struct ulpi_driver *drv) if (!drv->probe) return -EINVAL; + /* Was the bus registered successfully? */ + if (unlikely(WARN_ON(!ulpi_bus.p))) + return -ENODEV; + drv->driver.bus = &ulpi_bus; return driver_register(&drv->driver); @@ -242,7 +246,7 @@ static int __init ulpi_init(void) { return bus_register(&ulpi_bus); } -module_init(ulpi_init); +subsys_initcall(ulpi_init); static void __exit ulpi_exit(void) { -- 2.1.4