[PATCH] kernel-device: avoid potential NULL dereference

Ben Chan benchan at chromium.org
Sat Aug 12 07:08:33 UTC 2017


The patch fixes get_device_ids() in mm-kernel-device-udev.c to avoid
potential NULL dereferences of the 'vendor' argument. It also rearranges
the code such that the 'vendor' argument is updated only when the
function returns TRUE, just like how the 'product' argument is handled.
---
 src/kerneldevice/mm-kernel-device-udev.c | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/src/kerneldevice/mm-kernel-device-udev.c b/src/kerneldevice/mm-kernel-device-udev.c
index e8763f7e..e2c2bf34 100644
--- a/src/kerneldevice/mm-kernel-device-udev.c
+++ b/src/kerneldevice/mm-kernel-device-udev.c
@@ -119,23 +119,19 @@ get_device_ids (GUdevDevice *device,
     if (strlen (vid) != 4)
         goto out;
 
-    if (vendor) {
-        *vendor = (guint16) (mm_utils_hex2byte (vid + 2) & 0xFF);
-        *vendor |= (guint16) ((mm_utils_hex2byte (vid) & 0xFF) << 8);
-    }
-
     if (!pid)
         pid = g_udev_device_get_property (device, "ID_MODEL_ID");
-    if (!pid) {
-        *vendor = 0;
+    if (!pid)
         goto out;
-    }
 
     if (strncmp (pid, "0x", 2) == 0)
         pid += 2;
-    if (strlen (pid) != 4) {
-        *vendor = 0;
+    if (strlen (pid) != 4)
         goto out;
+
+    if (vendor) {
+        *vendor = (guint16) (mm_utils_hex2byte (vid + 2) & 0xFF);
+        *vendor |= (guint16) ((mm_utils_hex2byte (vid) & 0xFF) << 8);
     }
 
     if (product) {
-- 
2.14.0.434.g98096fd7a8-goog



More information about the ModemManager-devel mailing list