From patchwork Tue Jun 19 15:59:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 931692 X-Patchwork-Delegate: dwmw2@infradead.org 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="clG8+Fve"; 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 419CNN2ZTRz9s3R for ; Wed, 20 Jun 2018 02:00:20 +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=clG8+FveCdzw4CCKhvmc761MKG HdqzXO3OSfwS8IuhPf/fSY/vJpH3jcpCAr94fV9feinspth0mrZL25pGWB5QtFiODJ90G8mA3Xbeq o7yZXzakVMZOrw7+lY49WaUXK37BiKouHSnJcWKp5P/1xldx3e4/LRDu6M6zRirusVA7VQj/b6T25 adTq0gzbsGKqkQsWerp2xAQhb08xxpxDTVCaQaCoU3pihGxOtiiNvVJuXDB7VtAXhGjQgnJyYpnyY s84pP8Ogd0Hj4AbbwL1HaCSrGeuLK1h5tx2XrcBaRJwGp42bFtoMvNToaUMJdeLF8u9bcX82KEfz+ Gxzg7Zxg==; 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 1fVJ3B-0001Sm-TW; Tue, 19 Jun 2018 16:00:09 +0000 Received: from mout.kundenserver.de ([217.72.192.73]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fVJ2m-00013a-Qp for linux-mtd@lists.infradead.org; Tue, 19 Jun 2018 15:59:47 +0000 Received: from wuerfel.lan ([95.208.111.237]) by mrelayeu.kundenserver.de (mreue103 [212.227.15.145]) with ESMTPA (Nemesis) id 0MPrBi-1faH7m1TJC-0052b7; Tue, 19 Jun 2018 17:59:32 +0200 From: Arnd Bergmann To: David Woodhouse Subject: [PATCH 2/2] jffs2: use unsigned 32-bit timstamps consistently Date: Tue, 19 Jun 2018 17:59:04 +0200 Message-Id: <20180619155925.4107498-2-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20180619155925.4107498-1-arnd@arndb.de> References: <20180619155925.4107498-1-arnd@arndb.de> X-Provags-ID: V03:K1:In2LSs2gpZ6AWdNNz8wswR1amcrtt1fvcMaLH4XrQYVXOTjCte5 W0zgt3tCHO2KTSW6qtCP6bZXGM9gX1a2EKA8ViknC2A3TZSf+90vpg3slG9PLATLCN8ZNSN VRA54wjzBWp+fAY7OExnsjqXlVymv55BhjQ3nTHxhWj4fyH50jOTIjZGOC8RFtIqfeisk60 BAlQQKHVATAM4wECPv0bg== X-UI-Out-Filterresults: notjunk:1; V01:K0:qB1l/bvs9X0=:nFq66kTEoAr7Pv3OGwTMGc AtJzjyBkBLLG6qTI/vPrhC+0odb82wOdT65HJ2gsJ+PqoD8WJF7WRXyRsPmDDK+l3UYXYFyB9 X6sJgPvfLdvzLgbjudavfxeBb1MFniBAWqz53ePxTX7Fd1tJI186+wZTmychcIlAo9mwzEwUJ PqNwOiW+FfFPjwmeAXnD2OepGfXXHKK4I9J3k1c/T+fxoUGbqJ8qbMdbsON3UFiDUusyZD6Qg o9Ua1ot96uKncvI0994XVU9bsbuhNRVHh4J/N6AFRER/w5E6dANWp4FqgGUmt5QEZKikMfBTr /aQS/bIBcnS/UN0v7E7dmYsvd7Ozal4E7Xhmb7sRSJHHrsJTyM9uJeFmBM2URvm1UEfhxgsWY naLUf0vPRwtPcEypwjBOhAqmMC5D+bUeVS42DVxAPlnXDxdLyjN1PTMrG7QOcp1wWFOf10szf k2/9kB3BIkn/s/zGJ/m4F6tBTGg78ssTaLeLa79g8lm410J67wOjDmzIwiBWsi+xaDwZAEHg0 6tvBBRg8w+vLgCPmkPB8ElxV/Qg/Cc25SQ4TmQODQyuWOdrMp4G27mYyUiu3FEkC1SLaA40gj XoxAIfKJ5cZFsB8GMqZHsi3CifqvEqLQziP8etMZwbxz7O7XkDeIoboj7NcUu1/UJ1RFk8YnV 2Db1UDFkzCpumh3+pSEV6ablVQC+ChNil26U77DWt7aaRo0A+HiwJL2kuI4qxCbgcq6Q= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180619_085945_182810_684CAC4C X-CRM114-Status: GOOD ( 10.90 ) 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 [217.72.192.73 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: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Arnd Bergmann 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); \