Hi,
CLANG plus peculiarities in the HFS+ code contributed to libisofs
by Vladimir Serbinenko are the best suspects for now.
libisofs/hfsplus.c:618
"sb" is of type
Code: Select all
struct hfsplus_volheader {
uint16_t magic;
uint16_t version;
uint32_t attributes;
uint32_t last_mounted_version;
uint32_t journal;
uint32_t ctime;
uint32_t utime;
...
} __attribute__ ((packed));
Vladimir will not have used this without a reason, i fear.
The struct goes unchanged into the ISO result byte stream:
libisofs/hfsplus.c:656
Code: Select all
ret = iso_write(t, &sb, sizeof (sb));
(Those who started their programmer's life with C rather than BASIC
are hard to convince that it is unwise to do that.)
I do not really understand the mapping from struct to byte array.
Shouldn't one of the two neighbors
be aligned to 64 bit ?
Why do both cause a warning ?
Well, in any case one of the two should be unaligned, indeed.
The warnings about line 853 ff. are about struct hfsplus_catfile_common
with similar gestures as in line 656 ff.
The code in xorriso/cmp_update.c:243 and test/compare_file.c:246
is not supposed to be visited by a run for grub-mkrescue.
---------------------------------------------------------------------
A remedy could be to replace this gesture
by
Code: Select all
uint32_t timebuf;
...
set_time (&timebuf, t->now);
memcpy((char *) &sb.utime, (char *) timebuf, 4);
If you can reproduce the SIGSEGV with above struct in a small test program,
then please try whether my idea of a remedy would prevent the SIGSEGV.
(Grmpf. HFS+ is hard for me to test. Linux hates HFS+ block size 2048.
I would have to try making a reproducible ISO without the change and
then reproduce it with the code change. Not impossible.)
---------------------------------------------------------------------
Have a nice day
Thomas