Re: Looks like the kyua zfs tests likely are not used on aarch64 or other contexts with unsigned char

From: Mike Karels <mike_at_karels.net>
Date: Sun, 10 Sep 2023 12:58:37 UTC
On 10 Sep 2023, at 2:31, Mark Millard wrote:

> kyua tests that use the:
>
> /usr/tests/sys/cddl/zfs/bin/mkfile
>
> program like so (for example):
>
> mkfile 500M /testpool.1861/bigfile.0
>
> (which should be valid) end up with mkfile
> instead reporting:
>
> Standard error:
> Usage: mkfile [-nv] <size>[e|p|t|g|m|k|b] <filename> ...
>
> which prevent the kyua test involved from working.
>
> Turns out this is from expecting char to be always
> signed (so a -1 vs. 255 distinction, here in an
> aarch64 context):
>
> . . .
> (gdb) list
> 179		/* Options. */
> 180		while ((ch = getopt(argc, argv, "nv")) != -1) {
> 181			switch (ch) {
> 182			case 'n':
> 183				nofill = 1;
> 184				break;
> 185			case 'v':
> (gdb) print ch
> $16 = 255 '\377'
> (gdb) print/x -1
> $17 = 0xffffffff
> (gdb) print/x ch
> $18 = 0xff
> . . .
>
> With the mix of unsigned and signed it ends up
> being a 0xffu != 0xffffffffu test, which is
> always true.

mkfile is broken.  getopt returns an int, and -1 on end.
It never returns 0xff.  But mkfile declares ch as char,
which truncates the return value -1.  ch is a bad (misleading)
variable name, although getopt(3) uses it as well (but declared
as int).

		Mike

> So the switch is reached as if a "-" prefix was
> present (that is not). Then the "option" is classified
> as invalid and the usage message is produced.
>
> Apparently no one had noticed. That, in turn, suggests a
> lack of inspected testing on aarch64, powerpc64,
> powerpc64le, armv7, powerpc, and powerpcspe. That, in
> turn, suggests that kyua test inspection for the likes
> of aarch64 is not historically a part of the release
> process for openzfs or for operating systems that include
> openzfs.
>
>
> ===
> Mark Millard
> marklmi at yahoo.com