Re: [PATCH] [next] initramfs: Parse KBUILD_BUILD_TIMESTAMP as UTC date

From: Andrew Donnellan
Date: Thu Aug 17 2023 - 20:36:06 EST


On Sat, 2023-07-29 at 17:02 +1200, Paulo Miguel Almeida wrote:
> When KBUILD_BUILD_TIMESTAMP is specified, the date command will parse
> it to Unix Epoch time in UTC. However, the date command is
> timezone-aware so it will convert from the local timezone to UTC
> first
> which hits some of the sanity checks added on commit 5efb685bb3af1
> ("initramfs: Check negative timestamp to prevent broken cpio
> archive")
>
> This creates an edge case for the UTC+<N> part of the world. For
> instance
>
>  - In New Zealand (UTC+12:00):
>         $ date -d"1970-01-01" +%s
>         -43200
>
>         $ make KBUILD_BUILD_TIMESTAMP=1970-01-01
>         make[1]: Entering directory '<snip>/linux/'
>           GEN     Makefile
>           DESCEND objtool
>           INSTALL libsubcmd_headers
>           CALL    ../scripts/checksyscalls.sh
>           GEN     usr/initramfs_data.cpio
>         ERROR: Timestamp out of range for cpio format
>         make[4]: *** [../usr/Makefile:76: usr/initramfs_data.cpio]
> Error 1
>
>  - In Seattle, WA (UTC-07:00):
>         $ date -d"1970-01-01" +%s
>         32400
>
>         $ make KBUILD_BUILD_TIMESTAMP=1970-01-01
>         <builds fine>
>
> Parse KBUILD_BUILD_TIMESTAMP date string as UTC so no localtime
> conversion is done which fixes the edge case aforementioned.
>
> Signed-off-by: Paulo Miguel Almeida
> <paulo.miguel.almeida.rodenas@xxxxxxxxx>

This should also be documented in Documentation/kbuild/kbuild.rst,
including a note that you can still use local time if you include the
timezone specifier.

Thanks,
--
Andrew Donnellan OzLabs, ADL Canberra
ajd@xxxxxxxxxxxxx IBM Australia Limited