NetBSD Problem Report #57914
From www@netbsd.org Fri Feb 9 07:03:57 2024
Return-Path: <www@netbsd.org>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))
(Client CN "mail.NetBSD.org", Issuer "mail.NetBSD.org CA" (not verified))
by mollari.NetBSD.org (Postfix) with ESMTPS id CFE971A9238
for <gnats-bugs@gnats.NetBSD.org>; Fri, 9 Feb 2024 07:03:57 +0000 (UTC)
Message-Id: <20240209070356.3DE1B1A9239@mollari.NetBSD.org>
Date: Fri, 9 Feb 2024 07:03:56 +0000 (UTC)
From: jbglaw@lug-owl.de
Reply-To: jbglaw@lug-owl.de
To: gnats-bugs@NetBSD.org
Subject: [RB] evbarm/earmv4eb mkubootimage: Set reproducible timestamp
X-Send-Pr-Version: www-1.0
>Number: 57914
>Category: misc
>Synopsis: [RB] evbarm/earmv4eb mkubootimage: Set reproducible timestamp
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: misc-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Fri Feb 09 07:05:00 +0000 2024
>Last-Modified: Sun Dec 15 14:40:01 +0000 2024
>Originator: Jan-Benedict Glaw
>Release: current
>Organization:
>Environment:
>Description:
uBoot images contain (build) timestamps. For reproducible builds, use the top commit's timestamp instead.
>How-To-Repeat:
Build twice, compare build artifacts.
>Fix:
index 3a101134aaa2..9ef4c3eb15a4 100644
--- a/distrib/evbarm/instkernel/ramdisk/Makefile
+++ b/distrib/evbarm/instkernel/ramdisk/Makefile
@@ -34,6 +34,10 @@ UBOOT_IMAGE_ARCH= arm64
UBOOT_IMAGE_ARCH= arm
.endif
+.if ${MKREPRO_TIMESTAMP:Uno} != "no"
+MKUBOOTIMAGE_TIMESTAMP=-t "${MKREPRO_TIMESTAMP}"
+.endif
+
# Use stubs to eliminate some large stuff from libc
HACKSRC= ${DISTRIBDIR}/utils/libhack
.include "${HACKSRC}/Makefile.inc"
@@ -50,7 +54,7 @@ release: ${IMAGE}
${INSTALL} -d -m 755 ${RAMDISKDIR}
${RELEASE_INSTALL} ${IMAGE} ${RAMDISKDIR}
${TOOL_MKUBOOTIMAGE} -A ${UBOOT_IMAGE_ARCH} -C none -O linux \
- -T ramdisk -a 0 -n "NetBSD/${MACHINE_ARCH} ramdisk" ${IMAGE} \
- ${RAMDISKDIR}/${IMAGE:S/.fs/.ub/}
+ -T ramdisk -a 0 -n "NetBSD/${MACHINE_ARCH} ramdisk" \
+ ${MKUBOOTIMAGE_TIMESTAMP} ${IMAGE} ${RAMDISKDIR}/${IMAGE:S/.fs/.ub/}
.include <bsd.prog.mk>
diff --git a/usr.bin/mkubootimage/mkubootimage.1 b/usr.bin/mkubootimage/mkubootimage.1
index a02e34d8160d..82dae3247e02 100644
--- a/usr.bin/mkubootimage/mkubootimage.1
+++ b/usr.bin/mkubootimage/mkubootimage.1
@@ -27,7 +27,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd December 4, 2019
+.Dd February 7, 2024
.Dt MKUBOOTIMAGE 1
.Os
.Sh NAME
@@ -119,6 +119,8 @@ This is required.
Defines the operating system type.
The default OS name is
.Qq netbsd .
+.It Fl t Ar epoch
+Use given epoch timestamp as image creation time. (This is only used for legacy U-Boot images.)
.It Fl T No ( fs Ns | Ns kernel Ns | Ns kernel_noload Ns | Ns ramdisk Ns | Ns script Ns | Ns standalone )
Defines the image type.
This is required for
diff --git a/usr.bin/mkubootimage/mkubootimage.c b/usr.bin/mkubootimage/mkubootimage.c
index b7ebcb6d7abe..15f1dd16f4fe 100644
--- a/usr.bin/mkubootimage/mkubootimage.c
+++ b/usr.bin/mkubootimage/mkubootimage.c
@@ -266,7 +266,7 @@ usage(void)
{
fprintf(stderr, "usage: mkubootimage [-hu] -A "
"<arm|arm64|i386|mips|mips64|or1k|powerpc|sh> -a address\n");
- fprintf(stderr, "\t-C <bz2|gz|lzma|lzo|none> [-E address] [-e address]\n");
+ fprintf(stderr, "\t-C <bz2|gz|lzma|lzo|none> [-E address] [-e address] [ -t epoch]\n");
fprintf(stderr, "\t[-f <arm64|uimg>] [-m magic] -n image -O <freebsd|linux|netbsd|openbsd>\n");
fprintf(stderr, "\t-T <fs|kernel|kernel_noload|ramdisk|script|standalone>\n");
fprintf(stderr, "\tsource destination\n");
@@ -298,7 +298,7 @@ dump_header_uimg(struct uboot_image_header *hdr)
}
static int
-generate_header_uimg(struct uboot_image_header *hdr, int kernel_fd)
+generate_header_uimg(struct uboot_image_header *hdr, time_t repro_time, int kernel_fd)
{
uint8_t *p;
struct stat st;
@@ -342,7 +342,7 @@ generate_header_uimg(struct uboot_image_header *hdr, int kernel_fd)
memset(hdr, 0, sizeof(*hdr));
hdr->ih_magic = htonl(image_magic);
- hdr->ih_time = htonl(st.st_mtime);
+ hdr->ih_time = htonl(repro_time? repro_time: st.st_mtime);
hdr->ih_size = htonl(dsize);
hdr->ih_load = htonl(image_loadaddr);
hdr->ih_ep = htonl(image_entrypoint);
@@ -462,8 +462,9 @@ main(int argc, char *argv[])
int kernel_fd, image_fd;
int ch;
unsigned long long num;
+ time_t repro_time = 0;
- while ((ch = getopt(argc, argv, "A:C:E:O:T:a:e:f:hm:n:u")) != -1) {
+ while ((ch = getopt(argc, argv, "A:C:E:O:T:a:e:f:hm:n:ut:")) != -1) {
switch (ch) {
case 'A': /* arch */
image_arch = get_arch(optarg);
@@ -474,6 +475,9 @@ main(int argc, char *argv[])
case 'O': /* os */
image_os = get_os(optarg);
break;
+ case 't': /* FS timestamp */
+ repro_time = atol(optarg);
+ break;
case 'T': /* type */
image_type = get_type(optarg);
break;
@@ -584,7 +588,7 @@ main(int argc, char *argv[])
switch (image_format) {
case FMT_UIMG:
- if (generate_header_uimg(&hdr_uimg, kernel_fd) != 0)
+ if (generate_header_uimg(&hdr_uimg, repro_time, kernel_fd) != 0)
return EXIT_FAILURE;
if (write_image(&hdr_uimg, sizeof(hdr_uimg),
>Audit-Trail:
From: "Christos Zoulas" <christos@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/57914 CVS commit: src/usr.bin/mkubootimage
Date: Fri, 9 Feb 2024 11:10:18 -0500
Module Name: src
Committed By: christos
Date: Fri Feb 9 16:10:18 UTC 2024
Modified Files:
src/usr.bin/mkubootimage: crc32.c mkubootimage.1 mkubootimage.c
Added Files:
src/usr.bin/mkubootimage: crc32.h
Log Message:
PR/57914: Jan-Benedict Glaw: Set reproducible timestamp
Cleanup lint.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/usr.bin/mkubootimage/crc32.c
cvs rdiff -u -r0 -r1.1 src/usr.bin/mkubootimage/crc32.h
cvs rdiff -u -r1.14 -r1.15 src/usr.bin/mkubootimage/mkubootimage.1
cvs rdiff -u -r1.30 -r1.31 src/usr.bin/mkubootimage/mkubootimage.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "Martin Husemann" <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/57914 CVS commit: [netbsd-10] src/usr.bin/mkubootimage
Date: Sun, 15 Dec 2024 14:38:14 +0000
Module Name: src
Committed By: martin
Date: Sun Dec 15 14:38:14 UTC 2024
Modified Files:
src/usr.bin/mkubootimage [netbsd-10]: crc32.c mkubootimage.1
mkubootimage.c
Added Files:
src/usr.bin/mkubootimage [netbsd-10]: crc32.h
Log Message:
Pull up following revision(s) (requested by gutteridge in ticket #1023):
usr.bin/mkubootimage/mkubootimage.1: revision 1.15
usr.bin/mkubootimage/crc32.c: revision 1.5
usr.bin/mkubootimage/mkubootimage.c: revision 1.31
usr.bin/mkubootimage/mkubootimage.c: revision 1.34
usr.bin/mkubootimage/crc32.h: revision 1.1
PR/57914: Jan-Benedict Glaw: Set reproducible timestamp
Cleanup lint.
mkubootimage.c: consistently use endian.h origin functions
Since this already uses bswap32(3), le64toh(3), etc., switch to also
use htobe32(3) and be32toh(3) instead of htonl(3) and ntohl(3). This
seems the best way to fix build breakages under recent Linux distros
where GCC objects to missing prototypes (since otherwise we'd need to
include arpa/inet.h, which wasn't declared). Another issue related to
PR lib/58674.
Confirmed this fixes builds on Fedora 40 (since all these functions are
provided by NetBSD compat). No changes noted to resulting installation
images generated for armv7hf on a NetBSD build.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.4.40.1 src/usr.bin/mkubootimage/crc32.c
cvs rdiff -u -r0 -r1.2.2.2 src/usr.bin/mkubootimage/crc32.h
cvs rdiff -u -r1.14 -r1.14.8.1 src/usr.bin/mkubootimage/mkubootimage.1
cvs rdiff -u -r1.30 -r1.30.8.1 src/usr.bin/mkubootimage/mkubootimage.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
(Contact us)
$NetBSD: query-full-pr,v 1.49 2026/05/14 01:52:41 riastradh Exp $
$NetBSD: gnats_config.sh,v 1.10 2026/05/13 22:00:09 riastradh Exp $
Copyright © 1994-2026
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.