lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <307717BD-3233-4313-BAA8-7431F4C78773@goldelico.com>
Date:   Fri, 29 Nov 2019 15:52:45 +0100
From:   "H. Nikolaus Schaller" <hns@...delico.com>
To:     Vincenzo Frascino <vincenzo.frascino@....com>
Cc:     Paul Burton <paulburton@...nel.org>,
        mips-creator-ci20-dev@...glegroups.com,
        letux-kernel@...nphoenux.org, linux-mips@...r.kernel.org,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH] mips: Fix gettimeofday() in the vdso library


> Am 29.11.2019 um 15:36 schrieb Vincenzo Frascino <vincenzo.frascino@....com>:
> 
> The libc provides a discovery mechanism for vDSO library and its
> symbols. When a symbol is not exposed by the vDSOs the libc falls back
> on the system calls.
> 
> With the introduction of the unified vDSO library on mips this behavior
> is not honored anymore by the kernel in the case of gettimeofday().
> 
> The issue has been noticed and reported due to a dhclient failure on the
> CI20 board:
> 
> root@...ux:~# dhclient
> ../../../../lib/isc/unix/time.c:200: Operation not permitted
> root@...ux:~#
> 
> Restore the original behavior fixing gettimeofday() in the vDSO library.
> 
> Cc: Paul Burton <paulburton@...nel.org>
> Reported-by: H. Nikolaus Schaller <hns@...delico.com>
> Testes-by: H. Nikolaus Schaller <hns@...delico.com> # CI20 with JZ4780
^^^ funny typo... -> Tested-by:
> Signed-off-by: Vincenzo Frascino <vincenzo.frascino@....com>
> ---
> arch/mips/include/asm/vdso/gettimeofday.h | 13 -------------
> arch/mips/vdso/vgettimeofday.c            | 20 ++++++++++++++++++++
> 2 files changed, 20 insertions(+), 13 deletions(-)
> 
> diff --git a/arch/mips/include/asm/vdso/gettimeofday.h b/arch/mips/include/asm/vdso/gettimeofday.h
> index b08825531e9f..0ae9b4cbc153 100644
> --- a/arch/mips/include/asm/vdso/gettimeofday.h
> +++ b/arch/mips/include/asm/vdso/gettimeofday.h
> @@ -26,8 +26,6 @@
> 
> #define __VDSO_USE_SYSCALL		ULLONG_MAX
> 
> -#ifdef CONFIG_MIPS_CLOCK_VSYSCALL
> -
> static __always_inline long gettimeofday_fallback(
> 				struct __kernel_old_timeval *_tv,
> 				struct timezone *_tz)
> @@ -48,17 +46,6 @@ static __always_inline long gettimeofday_fallback(
> 	return error ? -ret : ret;
> }
> 
> -#else
> -
> -static __always_inline long gettimeofday_fallback(
> -				struct __kernel_old_timeval *_tv,
> -				struct timezone *_tz)
> -{
> -	return -1;
> -}
> -
> -#endif
> -
> static __always_inline long clock_gettime_fallback(
> 					clockid_t _clkid,
> 					struct __kernel_timespec *_ts)
> diff --git a/arch/mips/vdso/vgettimeofday.c b/arch/mips/vdso/vgettimeofday.c
> index 6ebdc37c89fc..6b83b6376a4b 100644
> --- a/arch/mips/vdso/vgettimeofday.c
> +++ b/arch/mips/vdso/vgettimeofday.c
> @@ -17,12 +17,22 @@ int __vdso_clock_gettime(clockid_t clock,
> 	return __cvdso_clock_gettime32(clock, ts);
> }
> 
> +#ifdef CONFIG_MIPS_CLOCK_VSYSCALL
> +
> +/*
> + * This is behind the ifdef so that we don't provide the symbol when there's no
> + * possibility of there being a usable clocksource, because there's nothing we
> + * can do without it. When libc fails the symbol lookup it should fall back on
> + * the standard syscall path.
> + */
> int __vdso_gettimeofday(struct __kernel_old_timeval *tv,
> 			struct timezone *tz)
> {
> 	return __cvdso_gettimeofday(tv, tz);
> }
> 
> +#endif /* CONFIG_MIPS_CLOCK_VSYSCALL */
> +
> int __vdso_clock_getres(clockid_t clock_id,
> 			struct old_timespec32 *res)
> {
> @@ -43,12 +53,22 @@ int __vdso_clock_gettime(clockid_t clock,
> 	return __cvdso_clock_gettime(clock, ts);
> }
> 
> +#ifdef CONFIG_MIPS_CLOCK_VSYSCALL
> +
> +/*
> + * This is behind the ifdef so that we don't provide the symbol when there's no
> + * possibility of there being a usable clocksource, because there's nothing we
> + * can do without it. When libc fails the symbol lookup it should fall back on
> + * the standard syscall path.
> + */
> int __vdso_gettimeofday(struct __kernel_old_timeval *tv,
> 			struct timezone *tz)
> {
> 	return __cvdso_gettimeofday(tv, tz);
> }
> 
> +#endif /* CONFIG_MIPS_CLOCK_VSYSCALL */
> +
> int __vdso_clock_getres(clockid_t clock_id,
> 			struct __kernel_timespec *res)
> {
> -- 
> 2.24.0
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ