]> www.infradead.org Git - users/mchehab/rasdaemon.git/commitdiff
rasdaemon: check if sscanf() processed all arguments on dev_name
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 19 Nov 2024 07:20:38 +0000 (08:20 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 19 Nov 2024 07:20:38 +0000 (08:20 +0100)
Ensure that all arguments are parsed by sscanf() when dealing
with dev_name.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
ras-aer-handler.c
unified-sel.c

index 30b4d75e815660a626955a6861e56480a22bed70..5d069f3fd36e28df2e98a1915905cc260a540db9 100644 (file)
@@ -187,18 +187,19 @@ int ras_aer_event_handler(struct trace_seq *s,
         * number, byte 16[7:3] is device number, byte 16[2:0] is
         * function number
         */
-       sscanf(ev.dev_name, "%x:%x:%x.%x", &seg, &bus, &dev, &fn);
-
-       sel_data[1] = seg & 0xff;
-       sel_data[2] = (seg & 0xff00) >> 8;
-       sel_data[3] = bus;
-       sel_data[4] = (((dev & 0x1f) << 3) | (fn & 0x7));
-
-       snprintf(ipmi_add_sel, sizeof(ipmi_add_sel),
-                "ipmitool raw 0x0a 0x44 0x00 0x00 0xc0 0x00 0x00 0x00 0x00 0x3a 0xcd 0x00 0xc0 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x",
-                sel_data[0], sel_data[1], sel_data[2], sel_data[3], sel_data[4]);
-
-       rc = system(ipmi_add_sel);
+       rc = sscanf(ev.dev_name, "%x:%x:%x.%x", &seg, &bus, &dev, &fn);
+       if (rc == 4) {
+               sel_data[1] = seg & 0xff;
+               sel_data[2] = (seg & 0xff00) >> 8;
+               sel_data[3] = bus;
+               sel_data[4] = (((dev & 0x1f) << 3) | (fn & 0x7));
+
+               snprintf(ipmi_add_sel, sizeof(ipmi_add_sel),
+                        "ipmitool raw 0x0a 0x44 0x00 0x00 0xc0 0x00 0x00 0x00 0x00 0x3a 0xcd 0x00 0xc0 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x",
+                        sel_data[0], sel_data[1], sel_data[2], sel_data[3], sel_data[4]);
+
+               rc = system(ipmi_add_sel);
+       }
        if (rc)
                log(SYSLOG, LOG_WARNING, "Failed to execute ipmitool\n");
 #endif
index d0a94b1c1c4c6185cb149e2fa277bc26431f0810..78578d687188dcebbfd3234ea1896c58603d6802 100644 (file)
@@ -73,7 +73,9 @@ int openbmc_unified_sel_log(uint64_t severity, const char *dev_name, uint64_t st
 {
        int bus, dev, dev_fn, fn;
 
-       sscanf(dev_name, "%*x:%x:%x.%x", &bus, &dev, &fn);
+       if (sscanf(dev_name, "%*x:%x:%x.%x", &bus, &dev, &fn) != 3)
+               return -1;
+
        dev_fn = (((dev & 0x1f) << 3) | (fn & 0x7));
 
        /*