From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33535) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZvooY-0006wJ-Ff for qemu-devel@nongnu.org; Mon, 09 Nov 2015 10:57:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZvooV-0004gr-5o for qemu-devel@nongnu.org; Mon, 09 Nov 2015 10:57:02 -0500 Received: from e06smtp13.uk.ibm.com ([195.75.94.109]:54277) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZvooU-0004ga-S4 for qemu-devel@nongnu.org; Mon, 09 Nov 2015 10:56:59 -0500 Received: from localhost by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 9 Nov 2015 15:56:57 -0000 Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by d06dlp03.portsmouth.uk.ibm.com (Postfix) with ESMTP id 867E41B08069 for ; Mon, 9 Nov 2015 15:57:10 +0000 (GMT) Received: from d06av03.portsmouth.uk.ibm.com (d06av03.portsmouth.uk.ibm.com [9.149.37.213]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id tA9Fussr10879304 for ; Mon, 9 Nov 2015 15:56:54 GMT Received: from d06av03.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av03.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id tA9FurgM025949 for ; Mon, 9 Nov 2015 08:56:53 -0700 From: Cornelia Huck Date: Mon, 9 Nov 2015 16:56:26 +0100 Message-Id: <1447084592-26322-10-git-send-email-cornelia.huck@de.ibm.com> In-Reply-To: <1447084592-26322-1-git-send-email-cornelia.huck@de.ibm.com> References: <1447084592-26322-1-git-send-email-cornelia.huck@de.ibm.com> Subject: [Qemu-devel] [PATCH for-2.5 09/15] pc-bios/s390-ccw: El Torito s390x boot entry check List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Cornelia Huck , borntraeger@de.ibm.com, jfrei@linux.vnet.ibm.com, agraf@suse.de, Maxim Samoylov From: Maxim Samoylov 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: Maxim Samoylov Reviewed-by: David Hildenbrand Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw/bootmap.c | 11 ++++++++++- pc-bios/s390-ccw/bootmap.h | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index 7c8dce1..82cca9c 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -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) diff --git a/pc-bios/s390-ccw/bootmap.h b/pc-bios/s390-ccw/bootmap.h index 4f6f767..cc77fd7 100644 --- a/pc-bios/s390-ccw/bootmap.h +++ b/pc-bios/s390-ccw/bootmap.h @@ -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 { -- 2.6.3