From 032394856b284775fcb5fb8da2220946d043614b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Tue, 17 Nov 2020 11:56:46 +0000 Subject: [PATCH] nodedev: dont rely on ignoring errors on missing properties MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The udevProcessStorage method relies on udevGetIntProperty ignoring errors about non-existant properties and instead setting the value to zero. In theory when seeing ID_CDROM=1, you might expect that devices which are not CDs will get ID_CDROM=0, but that's not what happens in practice. Instead the property simply won't get set at all. IOW, the code does not need to care about the value of the property, merely whether it exists or not. Reviewed-by: Laine Stump Signed-off-by: Daniel P. Berrangé --- src/node_device/node_device_udev.c | 35 ++++++------------------------ 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index 49c194bb5e..a45a54938a 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -962,37 +962,16 @@ udevProcessStorage(struct udev_device *device, if (!storage->drive_type || STREQ(def->caps->data.storage.drive_type, "generic")) { - int val = 0; - const char *str = NULL; - /* All floppy drives have the ID_DRIVE_FLOPPY prop. This is * needed since legacy floppies don't have a drive_type */ - if (udevGetIntProperty(device, "ID_DRIVE_FLOPPY", &val, 0) < 0) + if (udevHasDeviceProperty(device, "ID_DRIVE_FLOPPY")) + storage->drive_type = g_strdup("floppy"); + else if (udevHasDeviceProperty(device, "ID_CDROM")) + storage->drive_type = g_strdup("cd"); + else if (udevHasDeviceProperty(device, "ID_DRIVE_FLASH_SD")) + storage->drive_type = g_strdup("sd"); + else if (udevKludgeStorageType(def) != 0) goto cleanup; - else if (val == 1) - str = "floppy"; - - if (!str) { - if (udevGetIntProperty(device, "ID_CDROM", &val, 0) < 0) - goto cleanup; - else if (val == 1) - str = "cd"; - } - - if (!str) { - if (udevGetIntProperty(device, "ID_DRIVE_FLASH_SD", &val, 0) < 0) - goto cleanup; - if (val == 1) - str = "sd"; - } - - if (str) { - storage->drive_type = g_strdup(str); - } else { - /* If udev doesn't have it, perhaps we can guess it. */ - if (udevKludgeStorageType(def) != 0) - goto cleanup; - } } if (STREQ(def->caps->data.storage.drive_type, "cd")) { -- 2.47.3