Driver core / sysfs fixes for 3.12-rc3
Here are 2 fixes for 3.12-rc3. One fixes a sysfs problem with mounting caused by 3.12-rc1, and the other is a bug reported by the chromeos developers with the driver core. Both have been in linux-next for a bit. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.21 (GNU/Linux) iEYEABECAAYFAlJIgMUACgkQMUfUDdst+ykyEACffJolqapfQjTzTcMhFmIoTdV/ YgkAn3P+5ujuVC/MYwNCwWaeNuaM/8XV =BYA2 -----END PGP SIGNATURE----- Merge tag 'driver-core-3.12-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core Pull driver core / sysfs fixes from Greg KH: "Here are 2 fixes for 3.12-rc3. One fixes a sysfs problem with mounting caused by 3.12-rc1, and the other is a bug reported by the chromeos developers with the driver core. Both have been in linux-next for a bit" * tag 'driver-core-3.12-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: driver core : Fix use after free of dev->parent in device_shutdown sysfs: Allow mounting without CONFIG_NET
This commit is contained in:
Коммит
434ac47d0f
|
@ -2017,7 +2017,7 @@ EXPORT_SYMBOL_GPL(device_move);
|
|||
*/
|
||||
void device_shutdown(void)
|
||||
{
|
||||
struct device *dev;
|
||||
struct device *dev, *parent;
|
||||
|
||||
spin_lock(&devices_kset->list_lock);
|
||||
/*
|
||||
|
@ -2034,7 +2034,7 @@ void device_shutdown(void)
|
|||
* prevent it from being freed because parent's
|
||||
* lock is to be held
|
||||
*/
|
||||
get_device(dev->parent);
|
||||
parent = get_device(dev->parent);
|
||||
get_device(dev);
|
||||
/*
|
||||
* Make sure the device is off the kset list, in the
|
||||
|
@ -2044,8 +2044,8 @@ void device_shutdown(void)
|
|||
spin_unlock(&devices_kset->list_lock);
|
||||
|
||||
/* hold lock to avoid race with probe/release */
|
||||
if (dev->parent)
|
||||
device_lock(dev->parent);
|
||||
if (parent)
|
||||
device_lock(parent);
|
||||
device_lock(dev);
|
||||
|
||||
/* Don't allow any more runtime suspends */
|
||||
|
@ -2063,11 +2063,11 @@ void device_shutdown(void)
|
|||
}
|
||||
|
||||
device_unlock(dev);
|
||||
if (dev->parent)
|
||||
device_unlock(dev->parent);
|
||||
if (parent)
|
||||
device_unlock(parent);
|
||||
|
||||
put_device(dev);
|
||||
put_device(dev->parent);
|
||||
put_device(parent);
|
||||
|
||||
spin_lock(&devices_kset->list_lock);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче