There is as far as we know no type field in the struct dev_header
provided. Thus, assume that values of all properties are type of u32.

Deterministic type of property values is required to avoid union
aliasing in the code.

Signed-off-by: Andy Shevchenko <[email protected]>
---

- the union aliasing fix for built-in device properties will be sent during
next cycle, though I can share through one of my temporary branches if needed

 drivers/firmware/efi/apple-properties.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/firmware/efi/apple-properties.c 
b/drivers/firmware/efi/apple-properties.c
index b9602e0d7b50..a4847bcd26be 100644
--- a/drivers/firmware/efi/apple-properties.c
+++ b/drivers/firmware/efi/apple-properties.c
@@ -40,8 +40,9 @@ struct dev_header {
        u32 prop_count;
        struct efi_dev_path path[0];
        /*
-        * followed by key/value pairs, each key and value preceded by u32 len,
-        * len includes itself, value may be empty (in which case its len is 4)
+        * Followed by key/value pairs, each key and value preceded by u32 len,
+        * len includes itself, value may be empty (in which case its len is 4).
+        * REVISIT: Non-empty values have one or more u32 items.
         */
 };
 
@@ -92,16 +93,18 @@ static void __init unmarshal_key_value_pairs(struct 
dev_header *dev_header,
                ucs2_as_utf8(key, ptr + sizeof(key_len),
                             key_len - sizeof(key_len));
 
+               /* For now only 32-bit values are supported */
                entry[i].name = key;
                entry[i].length = val_len - sizeof(val_len);
                entry[i].is_array = !!entry[i].length;
-               entry[i].pointer.raw_data = ptr + key_len + sizeof(val_len);
+               entry[i].pointer.u32_data = ptr + key_len + sizeof(val_len);
 
                if (dump_properties) {
                        dev_info(dev, "property: %s\n", entry[i].name);
                        print_hex_dump(KERN_INFO, pr_fmt(), DUMP_PREFIX_OFFSET,
-                               16, 1, entry[i].pointer.raw_data,
-                               entry[i].length, true);
+                                      16, 4,
+                                      entry[i].pointer.u32_data, 
entry[i].length,
+                                      true);
                }
 
                ptr += key_len + val_len;
-- 
2.16.1

--
To unsubscribe from this list: send the line "unsubscribe linux-efi" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to