Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit faa582ca authored by Ralph Wuerthner's avatar Ralph Wuerthner Committed by Martin Schwidefsky
Browse files

[S390] zcrypt: fix ap_device_list handling



In ap_device_probe() we can add the new ap device to the internal
device list only if the device probe function successfully returns.
Otherwise we might end up with an invalid device in the internal ap
device list.

Signed-off-by: default avatarRalph Wuerthner <rwuerthn@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent fa331ffc
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -490,10 +490,12 @@ static int ap_device_probe(struct device *dev)
	int rc;

	ap_dev->drv = ap_drv;
	rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
	if (!rc) {
		spin_lock_bh(&ap_device_lock);
		list_add(&ap_dev->list, &ap_device_list);
		spin_unlock_bh(&ap_device_lock);
	rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
	}
	return rc;
}

@@ -532,11 +534,11 @@ static int ap_device_remove(struct device *dev)

	ap_flush_queue(ap_dev);
	del_timer_sync(&ap_dev->timeout);
	if (ap_drv->remove)
		ap_drv->remove(ap_dev);
	spin_lock_bh(&ap_device_lock);
	list_del_init(&ap_dev->list);
	spin_unlock_bh(&ap_device_lock);
	if (ap_drv->remove)
		ap_drv->remove(ap_dev);
	spin_lock_bh(&ap_dev->lock);
	atomic_sub(ap_dev->queue_count, &ap_poll_requests);
	spin_unlock_bh(&ap_dev->lock);