diff mbox

[OpenWrt-Devel,2/4] netifd: Fix device usage after free

Message ID 1438698165-19447-2-git-send-email-dedeckeh@gmail.com
State Accepted
Headers show

Commit Message

Hans Dedecker Aug. 4, 2015, 2:22 p.m. UTC
Prevent new device from being freed in device_replace when
device_unlock is called along the function chain triggered
by setting the old device as not present

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
---
 device.c | 3 +++
 1 file changed, 3 insertions(+)
diff mbox

Patch

diff --git a/device.c b/device.c
index 6f31e36..59a57f4 100644
--- a/device.c
+++ b/device.c
@@ -704,6 +704,7 @@  device_replace(struct device *dev, struct device *odev)
 	struct device_user *dep, *tmp;
 	bool present = odev->present;
 
+	__devlock++;
 	if (present)
 		device_set_present(odev, false);
 
@@ -713,6 +714,8 @@  device_replace(struct device *dev, struct device *odev)
 		safe_list_add(&dep->list, &dev->users);
 		dep->dev = dev;
 	}
+	__devlock--;
+
 	device_free(odev);
 
 	if (present)