Reflect script failure in exit code
authorkn <kn@openbsd.org>
Fri, 9 Sep 2022 15:53:16 +0000 (15:53 +0000)
committerkn <kn@openbsd.org>
Fri, 9 Sep 2022 15:53:16 +0000 (15:53 +0000)
commit20f1db5491bc29cb04de8e4f6518c684ace7660e
treeedc27919e87fa31a86121b07c6f0e1b1db381a0b
parent130b77e82660efef251bf4c61f77ecf65bf952b5
Reflect script failure in exit code

installboot(8) runs newfs(8) and fsck(8) via system(3) but only checks
failures of the function itself, always returning zero no matter what the
programs/shell returned.

This is bad for regress tests relying on correct return codes.

create_filesystem() itself must not exit as write_filesystem() calls it and
cleans up temporary files upon failure.

Make it return -1 if the script returned non-zero so write_filesystem()
handles it as error, cleans up and makes installboot exit 1.

Stop ignoring create_filesystem()'s return code in md_prepareboot() and
exit the same way.

Here's the change in behaviour on arm64 (newfs fails because of the
vnd/disklabel race, see "Race in disk_attach_callback?" on tech@):

# installboot -vp vnd0 ; echo $?
newfsing 6694ae5b0d7596ed.i
newfs_msdos: /dev/r6694ae5b0d7596ed.i: No such file or directory
0
# ./obj/installboot -vp vnd0 ; echo $?
newfsing 6694ae5b0d7596ed.i
newfs_msdos: /dev/r6694ae5b0d7596ed.i: No such file or directory
1

Tested on amd64 arm64 macppc octeon powerpc64 sparc64
OK millert
usr.sbin/installboot/efi_installboot.c
usr.sbin/installboot/i386_installboot.c
usr.sbin/installboot/loongson_installboot.c
usr.sbin/installboot/macppc_installboot.c
usr.sbin/installboot/octeon_installboot.c
usr.sbin/installboot/powerpc64_installboot.c