diff options
author | mm <mm@FreeBSD.org> | 2011-08-07 08:35:15 +0000 |
---|---|---|
committer | mm <mm@FreeBSD.org> | 2011-08-07 08:35:15 +0000 |
commit | 6a47448a9e4ed26220b7dc7f31976c4367152d2e (patch) | |
tree | 8024e72e887aa71f094a630bcce5eef780af4d45 /usr.sbin/makefs | |
parent | 24eb64102081422834bde0716200fd6db10b3ad6 (diff) | |
download | FreeBSD-src-6a47448a9e4ed26220b7dc7f31976c4367152d2e.zip FreeBSD-src-6a47448a9e4ed26220b7dc7f31976c4367152d2e.tar.gz |
Fix NetBSD PR bin/44114:
makefs with -t cd9660 -o rockridge against directories with
deep structure creates a corrupted cd9660 image.
http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=44114
Fix NetBSD PR bin/45217:
makefs creates ISO9660 images that violate the ECMA-119 (ISO9660)
specification. This is caused by erroneously writing 32 bytes
with value 0x20 to the volume_set_id field and 128 bytes with value 0x20
to the the following 37-byte fields in the PVD:
copyright_file_id, abstract_file_id, bibliographic_file_id
This causes, among other unwanted results the reserved4 field to be
overwritten with the value 0x20. To comply with the specification,
this field muse be zero. As a result, all FreeBSD distribution
images created with makefs have not been 100% valid ISO9660 files.
http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=45217
Reviewed by: kientzle
Approved by: re (kib)
Obtained from: NetBSD
MFC after: 3 days
Diffstat (limited to 'usr.sbin/makefs')
-rw-r--r-- | usr.sbin/makefs/cd9660.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/usr.sbin/makefs/cd9660.c b/usr.sbin/makefs/cd9660.c index 59b9ef4..281a203 100644 --- a/usr.sbin/makefs/cd9660.c +++ b/usr.sbin/makefs/cd9660.c @@ -223,13 +223,12 @@ cd9660_set_defaults(void) /* Make sure the PVD is clear */ memset(&diskStructure.primaryDescriptor, 0, 2048); - memset(diskStructure.primaryDescriptor.volume_set_id, 0x20,32); memset(diskStructure.primaryDescriptor.publisher_id, 0x20,128); memset(diskStructure.primaryDescriptor.preparer_id, 0x20,128); memset(diskStructure.primaryDescriptor.application_id, 0x20,128); - memset(diskStructure.primaryDescriptor.copyright_file_id, 0x20,128); - memset(diskStructure.primaryDescriptor.abstract_file_id, 0x20,128); - memset(diskStructure.primaryDescriptor.bibliographic_file_id, 0x20,128); + memset(diskStructure.primaryDescriptor.copyright_file_id, 0x20,37); + memset(diskStructure.primaryDescriptor.abstract_file_id, 0x20,37); + memset(diskStructure.primaryDescriptor.bibliographic_file_id, 0x20,37); strcpy(diskStructure.primaryDescriptor.system_id,"NetBSD"); @@ -669,11 +668,11 @@ cd9660_finalize_PVD(void) cd9660_pad_string_spaces(diskStructure.primaryDescriptor.application_id, 128); cd9660_pad_string_spaces( - diskStructure.primaryDescriptor.copyright_file_id, 128); + diskStructure.primaryDescriptor.copyright_file_id, 37); cd9660_pad_string_spaces( - diskStructure.primaryDescriptor.abstract_file_id, 128); + diskStructure.primaryDescriptor.abstract_file_id, 37); cd9660_pad_string_spaces( - diskStructure.primaryDescriptor.bibliographic_file_id, 128); + diskStructure.primaryDescriptor.bibliographic_file_id, 37); /* Setup dates */ time(&tim); @@ -1307,6 +1306,8 @@ cd9660_rrip_move_directory(cd9660node *dir) /* Set the new name */ memset(dir->isoDirRecord->name, 0, ISO_FILENAME_MAXLENGTH_WITH_PADDING); strncpy(dir->isoDirRecord->name, newname, 8); + dir->isoDirRecord->length[0] = 34 + 8; + dir->isoDirRecord->name_len[0] = 8; return dir; } |