[PATCH] udevadm: update prev properly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Hi,

When I tried to boot a system with 256 disks x 4 paths with 
device-mapper, udevadm trigger (--type=devices) that was called
from start_udev ended up dumping a core due to a segmentation
fault.

In udev_enumerate_get_list_entry(), if it finds the devices that 
should be delayed, it calls syspath_add().  If realloc() in 
syspath_add() allocates the required memory at a different memory
address, referring prev->len afterward causes the segmentation
fault.  I think something like this patch may be needed.

Signed-off-by: Kei Tokunaga <tokunaga.keiich@xxxxxxxxxxxxxx>
---

 udev-166-kei/libudev/libudev-enumerate.c |    3 +++
 1 file changed, 3 insertions(+)

diff -puN libudev/libudev-enumerate.c~fix-prev-segfault libudev/libudev-enumerate.c
--- udev-166/libudev/libudev-enumerate.c~fix-prev-segfault	2011-02-15 13:40:23.000000000 +0900
+++ udev-166-kei/libudev/libudev-enumerate.c	2011-02-15 13:40:23.000000000 +0900
@@ -274,6 +274,9 @@ struct udev_list_entry *udev_enumerate_g
 			/* skip to be delayed devices, and add them to the end of the list */
 			if (devices_delay_end(udev_enumerate->udev, entry->syspath)) {
 				syspath_add(udev_enumerate, entry->syspath);
+				/* need to update prev here for the case realloc() gives
+				   a different address */
+				prev = &udev_enumerate->devices[i];
 				continue;
 			}
 

_



--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel]     [Linux DVB]     [Asterisk Internet PBX]     [DCCP]     [Netdev]     [X.org]     [Util Linux NG]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux