Hi Vincenzo, On Fri, Aug 30, 2019 at 02:58:57PM +0100, Vincenzo Frascino wrote: > The generic VDSO implementation uses the Y2038 safe clock_gettime64() and > clock_getres_time64() syscalls as fallback for 32bit VDSO. This breaks > seccomp setups because these syscalls might be not (yet) allowed. > > Implement the 32bit variants which use the legacy syscalls and select the > variant in the core library. > > The 64bit time variants are not removed because they are required for the > time64 based vdso accessors. > > Cc: Paul Burton <paul.burton@xxxxxxxx> > Fixes: 00b26474c2f1 ("lib/vdso: Provide generic VDSO implementation") > Signed-off-by: Vincenzo Frascino <vincenzo.frascino@xxxxxxx> How would you like this to be applied? I'd be happy to apply this one to mips-next, where commit 24640f233b46 ("mips: Add support for generic vDSO") added the file being modified here. Otherwise: Acked-by: Paul Burton <paul.burton@xxxxxxxx> Thanks, Paul > --- > arch/mips/include/asm/vdso/gettimeofday.h | 45 +++++++++++++++++++++++ > arch/mips/vdso/config-n32-o32-env.c | 1 + > 2 files changed, 46 insertions(+) > > diff --git a/arch/mips/include/asm/vdso/gettimeofday.h b/arch/mips/include/asm/vdso/gettimeofday.h > index c59fe08b0347..e78462e8ca2e 100644 > --- a/arch/mips/include/asm/vdso/gettimeofday.h > +++ b/arch/mips/include/asm/vdso/gettimeofday.h > @@ -105,6 +105,51 @@ static __always_inline int clock_getres_fallback( > return error ? -ret : ret; > } > > +#if _MIPS_SIM != _MIPS_SIM_ABI64 > + > +#define VDSO_HAS_32BIT_FALLBACK 1 > + > +static __always_inline long clock_gettime32_fallback( > + clockid_t _clkid, > + struct old_timespec32 *_ts) > +{ > + register struct old_timespec32 *ts asm("a1") = _ts; > + register clockid_t clkid asm("a0") = _clkid; > + register long ret asm("v0"); > + register long nr asm("v0") = __NR_clock_gettime; > + register long error asm("a3"); > + > + asm volatile( > + " syscall\n" > + : "=r" (ret), "=r" (error) > + : "r" (clkid), "r" (ts), "r" (nr) > + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", > + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); > + > + return error ? -ret : ret; > +} > + > +static __always_inline int clock_getres32_fallback( > + clockid_t _clkid, > + struct old_timespec32 *_ts) > +{ > + register struct old_timespec32 *ts asm("a1") = _ts; > + register clockid_t clkid asm("a0") = _clkid; > + register long ret asm("v0"); > + register long nr asm("v0") = __NR_clock_getres; > + register long error asm("a3"); > + > + asm volatile( > + " syscall\n" > + : "=r" (ret), "=r" (error) > + : "r" (clkid), "r" (ts), "r" (nr) > + : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", > + "$14", "$15", "$24", "$25", "hi", "lo", "memory"); > + > + return error ? -ret : ret; > +} > +#endif > + > #ifdef CONFIG_CSRC_R4K > > static __always_inline u64 read_r4k_count(void) > diff --git a/arch/mips/vdso/config-n32-o32-env.c b/arch/mips/vdso/config-n32-o32-env.c > index 7f8d957abd4a..0011a632aef2 100644 > --- a/arch/mips/vdso/config-n32-o32-env.c > +++ b/arch/mips/vdso/config-n32-o32-env.c > @@ -10,6 +10,7 @@ > */ > #undef CONFIG_64BIT > > +#define BUILD_VDSO32 > #define CONFIG_32BIT 1 > #define CONFIG_GENERIC_ATOMIC64 1 > #define BUILD_VDSO32_64 > -- > 2.23.0 >