tools/xcutils/readnotes: adjust print_l1_mfn_valid_note
authorIan Jackson <ian.jackson@eu.citrix.com>
Fri, 14 Jun 2013 15:39:36 +0000 (16:39 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Fri, 14 Jun 2013 15:39:36 +0000 (16:39 +0100)
Use the new PTRVAL macros and elf_access_unsigned in
print_l1_mfn_valid_note.

No functional change unless the input is wrong, or we are reading a
file for a different endianness.

Separated out from the previous patch because this change does produce
a difference in the generated code.

This is part of the fix to a security issue, XSA-55.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Chuck Anderson <chuck.anderson@oracle.com>
v2: Split out into its own patch.

tools/xcutils/readnotes.c

index 2af047dc2fff81fdf3a7280877bcc8a801f99b8f..7ff2530ed2435f406da30930fcb6947c3326828b 100644 (file)
@@ -77,22 +77,23 @@ static void print_numeric_note(const char *prefix, struct elf_binary *elf,
 }
 
 static void print_l1_mfn_valid_note(const char *prefix, struct elf_binary *elf,
-                                   const elf_note *note)
+                                   ELF_HANDLE_DECL(elf_note) note)
 {
        int descsz = elf_uval(elf, note, descsz);
-       const uint32_t *desc32 = elf_note_desc(elf, note);
-       const uint64_t *desc64 = elf_note_desc(elf, note);
+       ELF_PTRVAL_CONST_VOID desc = elf_note_desc(elf, note);
 
        /* XXX should be able to cope with a list of values. */
        switch ( descsz / 2 )
        {
        case 8:
                printf("%s: mask=%#"PRIx64" value=%#"PRIx64"\n", prefix,
-                      desc64[0], desc64[1]);
+                      elf_access_unsigned(elf, desc, 0, 8),
+                      elf_access_unsigned(elf, desc, 8, 8));
                break;
        case 4:
                printf("%s: mask=%#"PRIx32" value=%#"PRIx32"\n", prefix,
-                      desc32[0],desc32[1]);
+                      (uint32_t)elf_access_unsigned(elf, desc, 0, 4),
+                      (uint32_t)elf_access_unsigned(elf, desc, 4, 4));
                break;
        }