From patchwork Fri Jul 13 14:47:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 943631 X-Patchwork-Delegate: boris.brezillon@free-electrons.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=arndb.de Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Ascdt03Y"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41RwfG54Rwz9s3R for ; Sat, 14 Jul 2018 00:48:22 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=7+q8EPEMEyvuPAZ5vwlbhoEpNu/mi9aoHXLuboP7Tsw=; b=Ascdt03YyC54gSCTGTW3E9OVm0 kaQxZrLqH8Cc1JJBoTdVW9dDhttMJonEC+0dccrmOxlSs8dv+qGd6jATnB3IeXAXY6KB8axgV7sNm nRNIP18DoNBqJ8qDqzZv9qUBcPmQS1BPv4vkbglbvIex95XYCgdLProCXyWTJQSVNHqrc6pyY2Cdy hPoD4VapizTRSvEL+2ogkD/zJJnBq2+P3Fx5tlu1wWOl9EDEd+xB9rlNOnyLHg2Ie1sJdOVi8dNrD MkYmQ+kwSg/xfCIMDvj29WaTWmhJHJdNMBigYAm0JIasAImxkk6iH2MUJ+lJdIqY8U6LdVAoPZieE xYgf2vuw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1fdzMm-00006Z-Ua; Fri, 13 Jul 2018 14:48:16 +0000 Received: from mout.kundenserver.de ([212.227.17.24]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fdzMc-0008Ju-7A for linux-mtd@lists.infradead.org; Fri, 13 Jul 2018 14:48:08 +0000 Received: from wuerfel.lan ([46.223.138.35]) by mrelayeu.kundenserver.de (mreue101 [212.227.15.145]) with ESMTPA (Nemesis) id 0Lecog-1gPdih0E2A-00qQL9; Fri, 13 Jul 2018 16:47:53 +0200 From: Arnd Bergmann To: Andrew Morton , Alexander Viro Subject: [PATCH 2/2] [RESEND] jffs2: use unsigned 32-bit timstamps consistently Date: Fri, 13 Jul 2018 16:47:17 +0200 Message-Id: <20180713144739.3150217-2-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20180713144739.3150217-1-arnd@arndb.de> References: <20180713144739.3150217-1-arnd@arndb.de> X-Provags-ID: V03:K1:/io4Z9LvC9PS8hE8ttxo0Nqb0WWyAlsTbMMvof4RvXGCkWzM/Uy 4OoVeFPdI9rdfCsYno5WZKpnd+Tm/fPl6JJj8wNDZ/7Zax04Wj228ifBlVxkAIMjagUSZXr JiSr/uELFvv1wRDF6/8vi4/PgNHwI8BfcxifwyEwLLKhxfetiVOPJl58y0sX/cmso8Du7Dh p4VjEuU8oCqWI8P5ZiyYQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:MFniaDVfd1Q=:qSUkUQk2mQxt45m2kdcCxa 6u3Y+FTXV06+0HErp75R/ZhdU3ZJL5yxiqEoO4aZJe51RoChZtFkJjSc2fXs/aN7CMRT4/sd0 6Qau3Vu3WFnTk4fmZJ6RligHtx7kcKWE9xRgzp3SyTjWID0xadrpp9gdA+1unPd3Lj0Z7RFRy HNVxdF5y6kDY1D3945IsAb01emyLsZ1rlhN9UEF043Pi33baF18cyrc0YX0yT//V3S6shxHiB Eep2GjBlLCffy4AP3ISrFISFL08XYc9MsS/uv+1eog7qelLCCASd3ePlNxE3w4SdeclER71// r5tZEVS4rpZIbRW6rDGTgybCs1pkL9iJHQnfj3BzQTOQL40uWmiirQesC3AbME1KoLGqmZT8l 6zfV47NxrCknNQb3WGV1UcLLCOQQUw9BJUT2VgN++kfqdYz1C9TpXOyDQj6HnH5tLmVg4dfXM 6waIum2/DhnsfubtYkHt7DZ+f52LqpA9TZZTZu/4dhWN0dmO/atF7ryHrnrIEe7YXbERkMqfF N2mxkEfuxGetu4Jsl2ds1zpAFojm4akacZtmprUFn0IuRjmHO/cWzDvlWB7HohkqYitmpK53h qO76tY/UtlYTYpQy7a/fjBXAkj2WMar/Plqb/eIWIsGIion9aWO0FD9ozYlvwEMdmtFXAe1CR npjR5Po0wk4DeFiO1ZJJ4vv19qYIyxPNtQ0a2BLRu1Zkl1FudW3EuhwJ583vDvSD/RNM= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180713_074806_564410_78FB36FC X-CRM114-Status: GOOD ( 11.66 ) X-Spam-Score: 0.0 (/) X-Spam-Report: SpamAssassin version 3.4.1 on bombadil.infradead.org summary: Content analysis details: (0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [212.227.17.24 listed in list.dnswl.org] X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Arnd Bergmann , y2038@lists.linaro.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, linux-fsdevel@vger.kernel.org, David Woodhouse MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Most users of jffs2 are 32-bit systems that traditionally only support timestamps using a 32-bit signed time_t, in the range from years 1902 to 2038. On 64-bit systems, jffs2 however interpreted the same timestamps as unsigned values, reading back negative times (before 1970) as times between 2038 and 2106. Now that Linux supports 64-bit inode timestamps even on 32-bit systems, let's use the second interpretation everywhere to allow jffs2 to be used on 32-bit systems beyond 2038 without a fundamental change to the inode format. This has a slight risk of regressions, when existing files with timestamps before 1970 are present in file system images and are now interpreted as future time stamps. I considered moving the wraparound point a bit, e.g. to 1960, in order to deal with timestamps that ended up on Dec 31, 1969 due to incorrect timezone handling. However, this would complicate the implementation unnecessarily, so I went with the simplest possible method of extending the timestamps. Writing files with timestamps before 1970 or after 2106 now results in those times being clamped in the file system. Signed-off-by: Arnd Bergmann --- fs/jffs2/os-linux.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h index acbe1f722f2d..a2dbbb3f4c74 100644 --- a/fs/jffs2/os-linux.h +++ b/fs/jffs2/os-linux.h @@ -31,13 +31,13 @@ struct kvec; #define JFFS2_F_I_GID(f) (i_gid_read(OFNI_EDONI_2SFFJ(f))) #define JFFS2_F_I_RDEV(f) (OFNI_EDONI_2SFFJ(f)->i_rdev) -#define ITIME(sec) ((struct timespec64){(int32_t)sec, 0}) -#define JFFS2_NOW() (ktime_get_real_seconds()) -#define I_SEC(tv) ((tv).tv_sec) -#define JFFS2_F_I_CTIME(f) (OFNI_EDONI_2SFFJ(f)->i_ctime.tv_sec) -#define JFFS2_F_I_MTIME(f) (OFNI_EDONI_2SFFJ(f)->i_mtime.tv_sec) -#define JFFS2_F_I_ATIME(f) (OFNI_EDONI_2SFFJ(f)->i_atime.tv_sec) - +#define JFFS2_CLAMP_TIME(t) ((uint32_t)clamp_t(time64_t, (t), 0, U32_MAX)) +#define ITIME(sec) ((struct timespec64){sec, 0}) +#define JFFS2_NOW() JFFS2_CLAMP_TIME(ktime_get_real_seconds()) +#define I_SEC(tv) JFFS2_CLAMP_TIME((tv).tv_sec) +#define JFFS2_F_I_CTIME(f) I_SEC(OFNI_EDONI_2SFFJ(f)->i_ctime) +#define JFFS2_F_I_MTIME(f) I_SEC(OFNI_EDONI_2SFFJ(f)->i_mtime) +#define JFFS2_F_I_ATIME(f) I_SEC(OFNI_EDONI_2SFFJ(f)->i_atime) #define sleep_on_spinunlock(wq, s) \ do { \ DECLARE_WAITQUEUE(__wait, current); \