From patchwork Mon Jul 16 16:10:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 142045 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp2604164ljj; Mon, 16 Jul 2018 09:12:08 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdrLP+gu3oMSSgUXkwUda/nr5X9omdWRe80MFhYJPWytt0/BtcAylkfBejDBcAoVNFrgmFn X-Received: by 2002:a62:57dc:: with SMTP id i89-v6mr18661684pfj.65.1531757527946; Mon, 16 Jul 2018 09:12:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531757527; cv=none; d=google.com; s=arc-20160816; b=a77KAbazmfL0hDS+dqb33XNq4XiFoBwn5Jd3mz8Vn0tKbL2iB3mFIWV96u4fbjIRBa AeL36PG29jsk7dBVkYmaUvxQwj41vVkplpQJY6HH8BxzTR54NmN/9CRB38Uk0ob5fnjk nhgN0D4lio1PFCu3MxYjwX7UQjUyl1Jh7lM6WkxxP6sMqnisN4v8i42GhepHmhpVZ89m Lc6NDuHv4mAW4pNDPWE+aVZYSYM4cmYjk/XNTWRN0lCuFuMJdmWF6RhzoDxKjIK2fEKM 23EPeWHKuim/T0j2pv94n2nuINw8IBnMoi8ckJbYVHe6tOwKA+Xdn3IaByzglNiY56Bm TnGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=IwH3xqdAxvnjO23XFtPn6AuPrPHIM3PrZwyxlC4Hldc=; b=zMeGD2lYgTybh2ReLg/p28baKhSoHVGRt5mtr4tMuM5Q34s2fbY8xhh3WPpzypQf/F gG/VkguFlfPqqNz/dMqWAl6Lb1Nxj/YmSdaaTSeoRnFtA2ilqtxQQo+ASLDbh1x5YkOf GbP38ygVmXzYTIUNWxU4L6B/a+HRh5wJKxApj4Seuii7+RLonUWuUXLEjWj+f3ton+0U JMguARy6hvYFDNcxV7hlGFwkSKERYrfO1dFlnqzS7wrQZ58l0+H9O61lxhm2IzR/K+G8 Nik030tuUmmSfNhdUDQN2Rwrx3aNXlPOOeurjxDtfT7SeQj2r9ivxOMPiMOvdunfWD1z NyIw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x18-v6si30410996pfh.84.2018.07.16.09.12.07; Mon, 16 Jul 2018 09:12:07 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=netdev-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731012AbeGPQkM (ORCPT + 10 others); Mon, 16 Jul 2018 12:40:12 -0400 Received: from mout.kundenserver.de ([212.227.126.134]:35478 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730079AbeGPQkL (ORCPT ); Mon, 16 Jul 2018 12:40:11 -0400 Received: from wuerfel.lan ([46.223.138.35]) by mrelayeu.kundenserver.de (mreue007 [212.227.15.129]) with ESMTPA (Nemesis) id 0LqJdN-1gIqcR2zuT-00e1aJ; Mon, 16 Jul 2018 18:11:10 +0200 From: Arnd Bergmann To: tglx@linutronix.de Cc: y2038@lists.linaro.org, hch@infradead.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, libc-alpha@sourceware.org, albert.aribaud@3adev.fr, netdev@vger.kernel.org, viro@zeniv.linux.org.uk, peterz@infradead.org, dvhart@infradead.org, ebiederm@xmission.com, linux@dominikbrodowski.net, Arnd Bergmann Subject: [PATCH v2 08/17] y2038: utimes: Rework #ifdef guards for compat syscalls Date: Mon, 16 Jul 2018 18:10:54 +0200 Message-Id: <20180716161103.16239-9-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20180716161103.16239-1-arnd@arndb.de> References: <20180716161103.16239-1-arnd@arndb.de> X-Provags-ID: V03:K1:JY+Std/jQm+mN0iMWogdbWV9/JM4AOLXoILJbsB4AmEaKYkxtbP e/6QaNrAbt02s1ZbvPxCmly5k0o4pSmyJTRPsZChiulpQ91xoQydckoWzCmH4/Lur9oMGoF S/OiEiCBjMTrvljfUspbHOp9jnc9PLo3yq/gT+e3C/5adoRwiuh89tyPEnZjLQddCF8r0RF z20VtI4pjO2v1XDURN4BA== X-UI-Out-Filterresults: notjunk:1; V01:K0:7jz0qRybv4Q=:Rbn143lSd6Q6DGDxbqg8Zh yT8ay+SDhRuRkWnYxNVnsBqBC+VYpFeNVuLZUFe9Gm8ua2GsvpaLskeLKXPIXLjOurFLk44l3 uoF+GW4lrbK9WgHyAM5g47jiCgSCREnIRF+oMj2NK9sVvxM1/S9F/qw0HJ9fzymZQF5xmBV+j 7mpFxVezDcJs8HQq3CMDV4TdaeCK7AD5U0PMvTcv0+kv4THjt64vT6Ki/4Mk7YwfGZzPYsyxB 6l/S1MdrYpAV+wHrc02g9mvFrYoT1GijkHsEDzNb7wjB6XJoRXFehbB86FsLvbpCtYDoQfCmd jaWmfYUBtFqTha9lu+XLoLQONd6HDeF1YhiO23sapdfqu5P8bGtrG43TEcKHZsV+l1kESGWGs LLSYlJrlfJa7fffWuWV01RAHGIyTH6wG0nQgvt0huLq2s6Z9l0z6uLPOCdcJ27xRwuc4KUk0K l/igbADcpl81BcZUAOCEXWbjUcjqGE98COnWA2oP4daESzkmr0DWKDEPRlRyn849fGPq8/eMJ 0PhtRYeAbVKogNPYATtq0Q90fg2eUMliEGX+jFt+Sqm6O24wHtal0V6eDQ/R10b/NAZlJkBL4 Rsfq+CTKGzQRMaqOS8XFgraaUkeLPfn6rTLmFn8eambvZnzZsHBLyL/1SiliPP56FtPB6OqBq 9C0Sk99jnXHYGe++qVJTXoNkgxQ6wAXzAcIW9onca/9MKYFxsNnmPYvEbv84BuaDLE7c= Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org After changing over to 64-bit time_t syscalls, many architectures will want compat_sys_utimensat() but not respective handlers for utime(), utimes() and futimesat(). This adds a new __ARCH_WANT_COMPAT_SYS_UTIME to complement __ARCH_WANT_SYS_UTIME. For now, all 64-bit architectures that support CONFIG_COMPAT set it, but future 64-bit architectures will not (tile would not have needed it either, but got removed). As older 32-bit architectures get converted to using CONFIG_64BIT_TIME, they will have to use __ARCH_WANT_COMPAT_SYS_UTIME instead of __ARCH_WANT_SYS_UTIME. Architectures using the generic syscall ABI don't need either of them as they never had a utime syscall. Since the compat_utimbuf structure is now required outside of CONFIG_COMPAT, I'm moving it into compat_time.h. Signed-off-by: Arnd Bergmann --- If we proceed with Christoph's suggestion of renaming all the compat time handling to something that doesn't have compat in the name, the new macro here would have to get renamed as well. --- arch/arm64/include/asm/unistd.h | 1 + arch/mips/include/asm/unistd.h | 1 + arch/parisc/include/asm/unistd.h | 1 + arch/powerpc/include/asm/unistd.h | 1 + arch/s390/include/asm/unistd.h | 1 + arch/sparc/include/asm/unistd.h | 1 + arch/x86/include/asm/unistd.h | 1 + fs/utimes.c | 6 +++++- include/linux/compat.h | 5 ----- include/linux/compat_time.h | 5 +++++ 10 files changed, 17 insertions(+), 6 deletions(-) -- 2.9.0 diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h index 2af308f13463..17f2211e20f2 100644 --- a/arch/arm64/include/asm/unistd.h +++ b/arch/arm64/include/asm/unistd.h @@ -22,6 +22,7 @@ #define __ARCH_WANT_SYS_SIGPENDING #define __ARCH_WANT_SYS_SIGPROCMASK #define __ARCH_WANT_COMPAT_SYS_SENDFILE +#define __ARCH_WANT_COMPAT_SYS_UTIME #define __ARCH_WANT_SYS_FORK #define __ARCH_WANT_SYS_VFORK diff --git a/arch/mips/include/asm/unistd.h b/arch/mips/include/asm/unistd.h index c2174b80e50e..f47058485f7f 100644 --- a/arch/mips/include/asm/unistd.h +++ b/arch/mips/include/asm/unistd.h @@ -31,6 +31,7 @@ #define __ARCH_WANT_SYS_IPC #define __ARCH_WANT_SYS_PAUSE #define __ARCH_WANT_SYS_UTIME +#define __ARCH_WANT_COMPAT_SYS_UTIME #define __ARCH_WANT_SYS_WAITPID #define __ARCH_WANT_SYS_SOCKETCALL #define __ARCH_WANT_SYS_GETPGRP diff --git a/arch/parisc/include/asm/unistd.h b/arch/parisc/include/asm/unistd.h index a0c38374fff0..62ffafda0d50 100644 --- a/arch/parisc/include/asm/unistd.h +++ b/arch/parisc/include/asm/unistd.h @@ -152,6 +152,7 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ #define __ARCH_WANT_COMPAT_SYS_TIME #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL #define __ARCH_WANT_SYS_UTIME +#define __ARCH_WANT_COMPAT_SYS_UTIME #define __ARCH_WANT_SYS_WAITPID #define __ARCH_WANT_SYS_SOCKETCALL #define __ARCH_WANT_SYS_FADVISE64 diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h index 9326c9133516..51e56d85815a 100644 --- a/arch/powerpc/include/asm/unistd.h +++ b/arch/powerpc/include/asm/unistd.h @@ -47,6 +47,7 @@ #endif #ifdef CONFIG_PPC64 #define __ARCH_WANT_COMPAT_SYS_TIME +#define __ARCH_WANT_COMPAT_SYS_UTIME #define __ARCH_WANT_SYS_NEWFSTATAT #define __ARCH_WANT_COMPAT_SYS_SENDFILE #endif diff --git a/arch/s390/include/asm/unistd.h b/arch/s390/include/asm/unistd.h index a2d583ea526d..b4ba7781d396 100644 --- a/arch/s390/include/asm/unistd.h +++ b/arch/s390/include/asm/unistd.h @@ -34,6 +34,7 @@ #define __ARCH_WANT_SYS_SIGPROCMASK # ifdef CONFIG_COMPAT # define __ARCH_WANT_COMPAT_SYS_TIME +# define __ARCH_WANT_COMPAT_SYS_UTIME # endif #define __ARCH_WANT_SYS_FORK #define __ARCH_WANT_SYS_VFORK diff --git a/arch/sparc/include/asm/unistd.h b/arch/sparc/include/asm/unistd.h index f7514d3eae7b..610f6a8a14de 100644 --- a/arch/sparc/include/asm/unistd.h +++ b/arch/sparc/include/asm/unistd.h @@ -42,6 +42,7 @@ #define __ARCH_WANT_SYS_IPC #else #define __ARCH_WANT_COMPAT_SYS_TIME +#define __ARCH_WANT_COMPAT_SYS_UTIME #define __ARCH_WANT_COMPAT_SYS_SENDFILE #endif diff --git a/arch/x86/include/asm/unistd.h b/arch/x86/include/asm/unistd.h index 153d2a5e6b02..7d784b8bceb4 100644 --- a/arch/x86/include/asm/unistd.h +++ b/arch/x86/include/asm/unistd.h @@ -24,6 +24,7 @@ # include # include # define __ARCH_WANT_COMPAT_SYS_TIME +# define __ARCH_WANT_COMPAT_SYS_UTIME # define __ARCH_WANT_COMPAT_SYS_PREADV64 # define __ARCH_WANT_COMPAT_SYS_PWRITEV64 # define __ARCH_WANT_COMPAT_SYS_PREADV64V2 diff --git a/fs/utimes.c b/fs/utimes.c index ebc7fb713d91..6318443de15d 100644 --- a/fs/utimes.c +++ b/fs/utimes.c @@ -218,11 +218,12 @@ SYSCALL_DEFINE2(utime, char __user *, filename, struct utimbuf __user *, times) } #endif -#ifdef CONFIG_COMPAT +#ifdef CONFIG_COMPAT_32BIT_TIME /* * Not all architectures have sys_utime, so implement this in terms * of sys_utimes. */ +#ifdef __ARCH_WANT_COMPAT_SYS_UTIME COMPAT_SYSCALL_DEFINE2(utime, const char __user *, filename, struct compat_utimbuf __user *, t) { @@ -237,6 +238,7 @@ COMPAT_SYSCALL_DEFINE2(utime, const char __user *, filename, } return do_utimes(AT_FDCWD, filename, t ? tv : NULL, 0); } +#endif COMPAT_SYSCALL_DEFINE4(utimensat, unsigned int, dfd, const char __user *, filename, struct compat_timespec __user *, t, int, flags) { @@ -253,6 +255,7 @@ COMPAT_SYSCALL_DEFINE4(utimensat, unsigned int, dfd, const char __user *, filena return do_utimes(dfd, filename, t ? tv : NULL, flags); } +#ifdef __ARCH_WANT_COMPAT_SYS_UTIME static long do_compat_futimesat(unsigned int dfd, const char __user *filename, struct compat_timeval __user *t) { @@ -285,3 +288,4 @@ COMPAT_SYSCALL_DEFINE2(utimes, const char __user *, filename, struct compat_time return do_compat_futimesat(AT_FDCWD, filename, t); } #endif +#endif diff --git a/include/linux/compat.h b/include/linux/compat.h index c40bc39fe05f..ab0b1f48dc5b 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -113,11 +113,6 @@ typedef __compat_gid32_t compat_gid_t; struct compat_sel_arg_struct; struct rusage; -struct compat_utimbuf { - compat_time_t actime; - compat_time_t modtime; -}; - struct compat_itimerval { struct compat_timeval it_interval; struct compat_timeval it_value; diff --git a/include/linux/compat_time.h b/include/linux/compat_time.h index e70bfd1d2c3f..df1b2c638f32 100644 --- a/include/linux/compat_time.h +++ b/include/linux/compat_time.h @@ -22,6 +22,11 @@ struct compat_itimerspec { struct compat_timespec it_value; }; +struct compat_utimbuf { + compat_time_t actime; + compat_time_t modtime; +}; + extern int compat_get_timespec64(struct timespec64 *, const void __user *); extern int compat_put_timespec64(const struct timespec64 *, void __user *); extern int get_compat_itimerspec64(struct itimerspec64 *its,