From patchwork Tue Sep 19 17:35:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 142015 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp3567784vqi; Tue, 19 Sep 2023 10:43:27 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE0nqfpUU85nWG0Cvf50Y3e/VXqEMVGwAJNc4hDQG/oyW2fwzMQABCzfjj/gebgGyEIdLGW X-Received: by 2002:a17:90a:ec18:b0:26b:9e2:1298 with SMTP id l24-20020a17090aec1800b0026b09e21298mr430151pjy.11.1695145407614; Tue, 19 Sep 2023 10:43:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695145407; cv=none; d=google.com; s=arc-20160816; b=mWVQaNylj4SGqzAQG1hLBFi5ZnS9NwUjUtj4gMVa2sHhL0FzD8FKr4imAKSVJ02vi+ 7f3h1Uf2J/R/4qc6l6D9Vl3cfCENUDAjU2jx+CoklW7o/3TtWF1Px9rCx0f4wtnM1p65 GuykXjSk6EdZf+l+80oCkdzGS+3tNlPtOdomOaIhzf5k/UfzvBQJFuU7F5ct/1ir+Jcp efSa33A9cJ4RQHO4A6RyCAdlVs18UkSYuxlTs16VqsWViKftCfnoLcv8wyHT/4oYk6pB bLHqPvbwhGdHpztefy9B0CMA0fk9lXvUkpNnzMmmNA+JyIbXeh7ybuL9Wvgm/Xrvi4cn 4m7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:message-id:content-transfer-encoding :mime-version:subject:date:from:dkim-signature; bh=XBqHZ4mKIgM50dsjfIzLWLfh5PAG6VRdiL3vqznnNzM=; fh=ff2ZGO9kIcdoHo+LRkDhO9NlVXueUiJddGagKVnIX4M=; b=VZmDy5FEfXAPB6BUw5qoDUZUCuguc97NlgwOIbRTkg49wXWAAz6YJBpQhN44rArmr7 pcM7O24mPqESObhZToXfz1V6YWg0xI0jx3ESBOv1T68KqJntyxOmY4/tvm/EWbVXtkux Mb28R2YqfIxAmR29K+fBuuuCs4R2tn4YxjZ+8/Lh+Ayp8bGqtRbVNmYUefCPlZe45i0K MGHCnSSkNxX8nYmG2vyglXS4PteRtMyPsVrRAq/EZtg5zQNUe9lCe4vfVd3wD1YtQ24t P7PP9KJn8iL7Li/LLhjTuaih1UDoQz6eze3I7p/b8x84NZq/bCxcKI3r5hY5fTlYS0s7 Kcxg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=nU4dg3pp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id h19-20020a17090acf1300b0026390b4a4e0si12151560pju.124.2023.09.19.10.43.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 10:43:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=nU4dg3pp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 5D0B6807D40A; Tue, 19 Sep 2023 10:35:36 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232078AbjISRfW (ORCPT + 26 others); Tue, 19 Sep 2023 13:35:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43572 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232041AbjISRfU (ORCPT ); Tue, 19 Sep 2023 13:35:20 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 34536A6; Tue, 19 Sep 2023 10:35:15 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5297CC433C8; Tue, 19 Sep 2023 17:35:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1695144914; bh=buIiKDmPcBdHJjlDhXrf/70sfOuxVlPTssagt+Ng5L8=; h=From:Date:Subject:To:Cc:From; b=nU4dg3ppyNiwRzStDv0igVykhehDpZfiC1nCSk+eqGpTzHh2IhPpyaKC4t7+gCtAB NZjTNBbe0ZBDgDY4GNSnMpwOPqGII39GgLCsYt+q2gGEshQsx5OMUcTRn0XYoLFuP2 tddIpnq0d+7B9j9h2f3dCWU9+p27FLTrieO3o+piX+d4/iB3XN+a6RPl0VJOdCSTXL TYKRdsD8k2MmIq9FO6nyHeupZlq3hok3zbo51e5BvTZ56wb0gmsKOx3FBepw1bbKvk sbzHCZgY7w8xbVunOyzgmw35coPaPQS7OzdKszfhguCcSbFzxx+NC9qrT4hacRscAb Q67GYTYxAJ81g== From: Jeff Layton Date: Tue, 19 Sep 2023 13:35:11 -0400 Subject: [PATCH] fs: add bounds checking when updating ctime MIME-Version: 1.0 Message-Id: <20230919-ctime-v1-1-97b3da92f504@kernel.org> X-B4-Tracking: v=1; b=H4sIAM7bCWUC/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE vPSU3UzU4B8JSMDI2MDS0NL3eSSzNxUXUOTxBQDE0MLS+O0JCWg2oKi1LTMCrA50bG1tQDcfEH uVwAAAA== To: Alexander Viro , Christian Brauner Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Linus Torvalds , Jeff Layton X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2284; i=jlayton@kernel.org; h=from:subject:message-id; bh=buIiKDmPcBdHJjlDhXrf/70sfOuxVlPTssagt+Ng5L8=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBlCdvSP2lqIz9HmK1OuN14Ts0NWqv8wkW+XeUY/ X0EyrQc+iuJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZQnb0gAKCRAADmhBGVaC FXmDEACA5G1nfl+pr2KRX9lVf5noAgkEZ8s8QCZt6sqWnHCnuA+LCVWFmYezIPAuH9sJAO3zJ2G IAK6L8FuueWQZHeujiqyl2/S/WA/aTh4J3qWgI7aCqiEy9uU3v1ws6/IHvloxYOAXJfyKnfKtVy PlgQafMrPFshObdFU5mjWgjQ1IueOD2+JQzMzc8hCbYInHR7+8gG/mGuqsh+CF2QlKNomBdK1lh wB+4fh4kKmBOFcem1Pnb4htPhE3JCSgGlJLo6DvLKGpxbTzEdaREXQtbf6cIapcDT10N1/2LENZ F4ud38DMguzd+UvkT0C3AUlGsZ7gjT3cJQdxCeqjGBYNVLa+nRTEFKbgQ28FIg6Zf1f3UfNS+Pn z46uKLbluCGqqc9q4Sy2M9X4dhhfQqKg8AkvKIiMk2KjvRvljFiW7i4MON3FBNnG2nbjyKXrKtm N6GivAm2pXyEswuKcPXR1SayTG9engN3xwbF3GWTABnkDbqgNbW4ilSeFdrVf8WKSNmffuH8GjT Eo6O2/1ThnbeXJ76CNkl+mJBxFSmK+PM66aWqDf7Fv5K6xSW5o5kDxKlc9XNxeSlNdS11sRt8v+ 02ab1TcAccCRkFoVVB9T9XkPNaEjT28WSPtYYhSK7oSnApvyi7sBBkfjdw3cJuu42FWcX+kv3wf U5sDV0lNKsYLLZw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Tue, 19 Sep 2023 10:35:36 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777488791199705899 X-GMAIL-MSGID: 1777488791199705899 During some discussion around another patch, Linus pointed out that we don't want to skip updating the ctime unless the current coarse time is in a reasonable range. When updating the ctime on a multigrain filesystem, only keep the current ctime if the coarse time is less than 2 jiffies earlier. Suggested-by: Linus Torvalds Signed-off-by: Jeff Layton --- While we're still discussing whether to keep this series in, here's the fix for the issue that Linus identified yesterday, basically that a large clock jump backward could result in the m/ctime not being updated properly. --- fs/inode.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) --- base-commit: 0b4cbb6924ecf459c12b2b5ff4370ae29a276fee change-id: 20230919-ctime-14ad041893fb Best regards, diff --git a/fs/inode.c b/fs/inode.c index 54237f4242ff..f3d68e4b8df7 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -2571,6 +2571,13 @@ struct timespec64 current_time(struct inode *inode) } EXPORT_SYMBOL(current_time); +/* + * Coarse timer ticks happen (roughly) every jiffy. If we see a coarse time + * more than 2 jiffies earlier than the current ctime, then we need to + * update it. This is the max delta allowed (in ns). + */ +#define COARSE_TIME_MAX_DELTA (2 / HZ * NSEC_PER_SEC) + /** * inode_set_ctime_current - set the ctime to current_time * @inode: inode @@ -2599,8 +2606,19 @@ struct timespec64 inode_set_ctime_current(struct inode *inode) * existing ctime. Just keep the existing value if so. */ ctime.tv_sec = inode->__i_ctime.tv_sec; - if (timespec64_compare(&ctime, &now) > 0) - return ctime; + if (timespec64_compare(&ctime, &now) > 0) { + struct timespec64 limit = now; + + /* + * If the current coarse-grained clock is earlier than + * it should be, then that's an indication that there + * may have been a backward clock jump, and that the + * update should not be skipped. + */ + timespec64_add_ns(&limit, COARSE_TIME_MAX_DELTA); + if (timespec64_compare(&ctime, &limit) < 0) + return ctime; + } /* * Ctime updates are usually protected by the inode_lock, but