efi_loader: correct text conversion for vendor DP
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Wed, 4 Sep 2019 10:52:01 +0000 (12:52 +0200)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 5 Sep 2019 21:18:51 +0000 (23:18 +0200)
Vendor device paths may contain data. When converting vendor device paths
to text this binary data has to be rendered.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
lib/efi_loader/efi_device_path_to_text.c

index 96fd089..133542a 100644 (file)
@@ -60,9 +60,18 @@ static char *dp_hardware(char *s, struct efi_device_path *dp)
                break;
        }
        case DEVICE_PATH_SUB_TYPE_VENDOR: {
+               int i, n;
                struct efi_device_path_vendor *vdp =
                        (struct efi_device_path_vendor *)dp;
-               s += sprintf(s, "VenHw(%pUl)", &vdp->guid);
+
+               s += sprintf(s, "VenHw(%pUl", &vdp->guid);
+               n = (int)vdp->dp.length - sizeof(struct efi_device_path_vendor);
+               if (n > 0) {
+                       s += sprintf(s, ",");
+                       for (i = 0; i < n; ++i)
+                               s += sprintf(s, "%02x", vdp->vendor_data[i]);
+               }
+               s += sprintf(s, ")");
                break;
        }
        default: