Message ID | 1596775478-12127-1-git-send-email-mutsugi@allied-telesis.co.jp |
---|---|
State | New |
Headers | show |
Series | busybox: use settimeofday() instead of syscall | expand |
On Thu, Aug 6, 2020 at 9:49 PM <mutsugi@allied-telesis.co.jp> wrote: > > From: Masafumi UTSUGI <mutsugi@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. 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@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@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
On Thu, Aug 6, 2020 at 10:02 PM Rosen Penev <rosenp@gmail.com> wrote: > > On Thu, Aug 6, 2020 at 9:49 PM <mutsugi@allied-telesis.co.jp> wrote: > > > > From: Masafumi UTSUGI <mutsugi@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@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@lists.openwrt.org > > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
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;