mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* Crash after failed UBIFS mount
@ 2016-03-02  9:24 Dr.-Ing. Martin Däumler SYS TEC electronic GmbH
  2016-03-02 10:00 ` Sascha Hauer
  0 siblings, 1 reply; 2+ messages in thread
From: Dr.-Ing. Martin Däumler SYS TEC electronic GmbH @ 2016-03-02  9:24 UTC (permalink / raw)
  To: barebox; +Cc: Daniel Krüger, Alexander Stein

Hello,

we encountered a problem of barebox tag 2015.05.0, which is also 
reproducible with tag 2016.01.0. Mounting an UBIFS file system partition 
fails (correctly) and barebox crashes while cleaning up. The call 
hierarchy is
as follows:

-mount() (fs/fs.c:1243): try to mount ubifs partition; call 
register_device()
--register_device() (drivers/base/driver.c:138):
---match() (drivers/base/driver.c:117): look for a suitable device driver
----device_probe() (drivers/base/driver.c:82): ubifs partition fails to 
mount due to corrupted LEB
----device_probe(): delete device's 'active' list ('list_del(&dev->active)')
---match(): set device driver to NULL and return -1 to register_device()
--register_device(): return 0 (success) to mount()
-mount(): check device driver and call unregister_device() due to 
invalid driver
--unregister_device() (drivers/base/driver.c:180): delete device's 
'active' list the second time -> crash

Barebox does not crash if drivers/base/driver.c:92, i.e., list deletion 
in device_probe(), is removed. Is the removal of the list deletion a 
valid solution or does this have side effects?


With regards,
Martin Däumler

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Crash after failed UBIFS mount
  2016-03-02  9:24 Crash after failed UBIFS mount Dr.-Ing. Martin Däumler SYS TEC electronic GmbH
@ 2016-03-02 10:00 ` Sascha Hauer
  0 siblings, 0 replies; 2+ messages in thread
From: Sascha Hauer @ 2016-03-02 10:00 UTC (permalink / raw)
  To: Dr.-Ing. Martin Däumler SYS TEC electronic GmbH
  Cc: barebox, Daniel Krüger, Alexander Stein

Hi Martin,

On Wed, Mar 02, 2016 at 10:24:43AM +0100, Dr.-Ing. Martin Däumler SYS TEC electronic GmbH wrote:
> Hello,
> 
> we encountered a problem of barebox tag 2015.05.0, which is also
> reproducible with tag 2016.01.0. Mounting an UBIFS file system partition
> fails (correctly) and barebox crashes while cleaning up. The call hierarchy
> is
> as follows:
> 
> -mount() (fs/fs.c:1243): try to mount ubifs partition; call
> register_device()
> --register_device() (drivers/base/driver.c:138):
> ---match() (drivers/base/driver.c:117): look for a suitable device driver
> ----device_probe() (drivers/base/driver.c:82): ubifs partition fails to
> mount due to corrupted LEB
> ----device_probe(): delete device's 'active' list ('list_del(&dev->active)')
> ---match(): set device driver to NULL and return -1 to register_device()
> --register_device(): return 0 (success) to mount()
> -mount(): check device driver and call unregister_device() due to invalid
> driver
> --unregister_device() (drivers/base/driver.c:180): delete device's 'active'
> list the second time -> crash
> 
> Barebox does not crash if drivers/base/driver.c:92, i.e., list deletion in
> device_probe(), is removed. Is the removal of the list deletion a valid
> solution or does this have side effects?

This should be fixed with the following patch which currently sits in
the master branch.

Sascha

-----------------------8<-------------------------------------

From 46bb3a4d8490b318fbcfac7b69c217cec05d7a8f Mon Sep 17 00:00:00 2001
From: Sascha Hauer <s.hauer@pengutronix.de>
Date: Mon, 8 Feb 2016 11:31:00 +0100
Subject: [PATCH] driver: Fix unregister device after device probe failure

When a device probe fails the device is removed from the active list.
If then the device is unregistered afterwards it is removed from the
active list again resulting in a crash. To fix this initialize the
devices active list entry when removing it from the active list.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 drivers/base/driver.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index a70fbb2..c529296 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -101,6 +101,8 @@ int device_probe(struct device_d *dev)
 	}
 
 	list_del(&dev->active);
+	INIT_LIST_HEAD(&dev->active);
+
 	dev_err(dev, "probe failed: %s\n", strerror(-ret));
 
 	return ret;
@@ -258,6 +260,8 @@ static int device_probe_deferred(void)
 
 		list_for_each_entry_safe(dev, tmp, &deferred, active) {
 			list_del(&dev->active);
+			INIT_LIST_HEAD(&dev->active);
+
 			dev_dbg(dev, "re-probe device\n");
 			bus_for_each_driver(dev->bus, drv) {
 				if (match(drv, dev))
-- 
2.7.0

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-03-02 10:00 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-02  9:24 Crash after failed UBIFS mount Dr.-Ing. Martin Däumler SYS TEC electronic GmbH
2016-03-02 10:00 ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox