Commit ba21f0cc authored by Maxim Samoylov's avatar Maxim Samoylov Committed by Cornelia Huck
Browse files

pc-bios/s390-ccw: El Torito s390x boot entry check



Boot entry is considered compatible if boot image is Linux kernel
with matching S390 Linux magic string.

Empty boot images with sector_count == 0 are considered broken.

Signed-off-by: default avatarMaxim Samoylov <max7255@linux.vnet.ibm.com>
Reviewed-by: default avatarDavid Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
parent 866cac91
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -450,7 +450,16 @@ static void ipl_scsi(void)

static bool is_iso_bc_entry_compatible(IsoBcSection *s)
{
    return true;
    uint8_t *magic_sec = (uint8_t *)(sec + ISO_SECTOR_SIZE);

    if (s->unused || !s->sector_count) {
        return false;
    }
    read_iso_sector(bswap32(s->load_rba), magic_sec,
                    "Failed to read image sector 0");

    /* Checking bytes 8 - 32 for S390 Linux magic */
    return !_memcmp(magic_sec + 8, linux_s390_magic, 24);
}

static void load_iso_bc_entry(IsoBcSection *load)
+8 −0
Original line number Diff line number Diff line
@@ -495,6 +495,14 @@ typedef struct IsoBcHdr {
    uint8_t id[28];
} __attribute__((packed)) IsoBcHdr;

/*
 * Match two CCWs located after PSW and eight filler bytes.
 * From libmagic and arch/s390/kernel/head.S.
 */
const uint8_t linux_s390_magic[] = "\x02\x00\x00\x18\x60\x00\x00\x50\x02\x00"
                                   "\x00\x68\x60\x00\x00\x50\x40\x40\x40\x40"
                                   "\x40\x40\x40\x40";

typedef struct IsoBcEntry {
    uint8_t id;
    union {