[PATCH] busybox: use settimeofday() instead of syscall
Rosen Penev
rosenp at gmail.com
Fri Aug 7 16:44:04 EDT 2020
On Thu, Aug 6, 2020 at 10:02 PM Rosen Penev <rosenp at gmail.com> wrote:
>
> On Thu, Aug 6, 2020 at 9:49 PM <mutsugi at allied-telesis.co.jp> wrote:
> >
> > From: Masafumi UTSUGI <mutsugi at allied-telesis.co.jp>
> >
> > SYS_settimeofday syscall is not time64 safe.
> > Using settimeofday() instead of syscall() is recommended or
> > some C libraries such as musl might cause compile error.
More information here: https://github.com/systemd/systemd/issues/13305
> Eh no.
>
> The reason for using the syscall is that musl ignores the tz
> parameter. See:
> https://github.com/openwrt/openwrt/commit/5a7c064bdbb71bfbcded073c7c0a8723be306009
>
> A proper fix is here:
> https://github.com/openwrt/openwrt/pull/3004/commits/bd6af541da7b27399143ce91081c44c3c9a155d9
>
> I will resend once busybox 1.3.2 gets merged.
> >
> > Signed-off-by: Masafumi UTSUGI <mutsugi at allied-telesis.co.jp>
> > ---
> > Makefile | 2 +-
> > patches/250-date-k-flag.patch | 26 +++++++++++---------------
> > 2 files changed, 12 insertions(+), 16 deletions(-)
> >
> > diff --git a/Makefile b/Makefile
> > index 01441d1..baf375e 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
> >
> > PKG_NAME:=busybox
> > PKG_VERSION:=1.31.1
> > -PKG_RELEASE:=1
> > +PKG_RELEASE:=2
> > PKG_FLAGS:=essential
> >
> > PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
> > diff --git a/patches/250-date-k-flag.patch b/patches/250-date-k-flag.patch
> > index 5aadbb2..ef0545c 100644
> > --- a/patches/250-date-k-flag.patch
> > +++ b/patches/250-date-k-flag.patch
> > @@ -8,19 +8,15 @@
> > //usage: "\n"
> > //usage: "\nRecognized TIME formats:"
> > //usage: "\n hh:mm[:ss]"
> > -@@ -139,9 +140,8 @@
> > -
> > - #include "libbb.h"
> > - #include "common_bufsiz.h"
> > --#if ENABLE_FEATURE_DATE_NANO
> > --# include <sys/syscall.h>
> > --#endif
> > +@@ -142,6 +143,7 @@
> > + #if ENABLE_FEATURE_DATE_NANO
> > + # include <sys/syscall.h>
> > + #endif
> > +#include <sys/time.h>
> > -+#include <sys/syscall.h>
> >
> > enum {
> > OPT_RFC2822 = (1 << 0), /* R */
> > -@@ -149,8 +149,9 @@ enum {
> > +@@ -149,8 +151,9 @@ enum {
> > OPT_UTC = (1 << 2), /* u */
> > OPT_DATE = (1 << 3), /* d */
> > OPT_REFERENCE = (1 << 4), /* r */
> > @@ -32,7 +28,7 @@
> > };
> >
> > #if ENABLE_LONG_OPTS
> > -@@ -162,6 +163,7 @@ static const char date_longopts[] ALIGN1
> > +@@ -162,6 +165,7 @@ static const char date_longopts[] ALIGN1 =
> > /* "universal\0" No_argument "u" */
> > "date\0" Required_argument "d"
> > "reference\0" Required_argument "r"
> > @@ -40,7 +36,7 @@
> > ;
> > #endif
> >
> > -@@ -181,6 +183,8 @@ static void maybe_set_utc(int opt)
> > +@@ -181,6 +185,8 @@ static void maybe_set_utc(int opt)
> > int date_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
> > int date_main(int argc UNUSED_PARAM, char **argv)
> > {
> > @@ -49,7 +45,7 @@
> > struct timespec ts;
> > struct tm tm_time;
> > char buf_fmt_dt2str[64];
> > -@@ -193,7 +197,7 @@ int date_main(int argc UNUSED_PARAM, cha
> > +@@ -193,7 +199,7 @@ int date_main(int argc UNUSED_PARAM, char **argv)
> > char *isofmt_arg = NULL;
> >
> > opt = getopt32long(argv, "^"
> > @@ -58,7 +54,7 @@
> > IF_FEATURE_DATE_ISOFMT("I::D:")
> > "\0"
> > "d--s:s--d"
> > -@@ -256,6 +260,31 @@ int date_main(int argc UNUSED_PARAM, cha
> > +@@ -256,6 +262,31 @@ int date_main(int argc UNUSED_PARAM, char **argv)
> > if (*argv)
> > bb_show_usage();
> >
> > @@ -69,7 +65,7 @@
> > +
> > + /* workaround warp_clock() on first invocation */
> > + memset(&tz, 0, sizeof(tz));
> > -+ syscall(SYS_settimeofday, NULL, &tz);
> > ++ settimeofday(NULL, &tz);
> > +
> > + memset(&tz, 0, sizeof(tz));
> > +#ifdef __USE_MISC
> > @@ -78,7 +74,7 @@
> > + tz.tz_minuteswest = -(tm_time.__tm_gmtoff / 60);
> > +#endif
> > +
> > -+ if (syscall(SYS_settimeofday, NULL, &tz))
> > ++ if (settimeofday(NULL, &tz))
> > + {
> > + bb_perror_msg("can't set kernel time zone");
> > + return EXIT_FAILURE;
> > --
> > 2.7.4
> >
> >
> > _______________________________________________
> > openwrt-devel mailing list
> > openwrt-devel at lists.openwrt.org
> > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list