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.
Signed-off-by: Kei Tokunaga <tokunaga.keiich@jp.fujitsu.com>
/* 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;
}