From ebf1c08960f171cb37c81e1d1e17b12cbddb4e4e Mon Sep 17 00:00:00 2001 From: Benno Rice Date: Fri, 23 Mar 2018 22:52:26 +0000 Subject: [PATCH] Correctly mark the last El Torito section header. Reported by: Thomas Schmitt Reviewed by: emaste, imp MFC after: 1 week Sponsored by: iXsystems, Inc. Differential Revision: https://reviews.freebsd.org/D14812 --- usr.sbin/makefs/cd9660/cd9660_eltorito.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/usr.sbin/makefs/cd9660/cd9660_eltorito.c b/usr.sbin/makefs/cd9660/cd9660_eltorito.c index 303f51819e58..b0ed19eee4b3 100644 --- a/usr.sbin/makefs/cd9660/cd9660_eltorito.c +++ b/usr.sbin/makefs/cd9660/cd9660_eltorito.c @@ -294,7 +294,10 @@ cd9660_boot_setup_section_head(char platform) return NULL; sh = &entry->entry_data.SH; - /* More by default. The last one will manually be set to 0x91 */ + /* + * More by default. + * The last one will manually be set to ET_SECTION_HEADER_LAST + */ sh->header_indicator[0] = ET_SECTION_HEADER_MORE; sh->platform_id[0] = platform; sh->num_section_entries[0] = 0; @@ -464,6 +467,13 @@ cd9660_setup_boot(iso9660_disk *diskStructure, int first_sector) tmp_disk = TAILQ_NEXT(tmp_disk, image_list); } + /* Find the last Section Header entry and mark it as the last. */ + LIST_FOREACH(next, &diskStructure->boot_entries, ll_struct) { + if (next->entry_type == ET_ENTRY_SH) + head = next; + } + head->entry_data.SH.header_indicator[0] = ET_SECTION_HEADER_LAST; + /* TODO: Remaining boot disks when implemented */ return first_sector + used_sectors;