Hi Paul,

thank you for your review.

On 9/3/19 2:52 PM, Paul Burton wrote:
> 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 <[email protected]>
>> Fixes: 00b26474c2f1 ("lib/vdso: Provide generic VDSO implementation")
>> Signed-off-by: Vincenzo Frascino <[email protected]>
> 
> 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 <[email protected]>
> 

Please feel free to apply this to mips-next.

Thanks,
Vincenzo

> 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
>>

Reply via email to