From mboxrd@z Thu Jan 1 00:00:00 1970 From: Deepa Dinamani Subject: [PATCH v4 5/5] utimes: Clamp the timestamps before update Date: Fri, 24 Feb 2017 17:41:03 -0800 Message-ID: <1487986863-6005-6-git-send-email-deepa.kernel@gmail.com> References: <1487986863-6005-1-git-send-email-deepa.kernel@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: linux-fsdevel@vger.kernel.org, y2038@lists.linaro.org, linux-kernel@vger.kernel.org, arnd@arndb.de To: viro@zeniv.linux.org.uk, tytso@mit.edu, adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org Return-path: In-Reply-To: <1487986863-6005-1-git-send-email-deepa.kernel@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: y2038-bounces@lists.linaro.org Sender: "Y2038" List-Id: linux-ext4.vger.kernel.org UE9TSVguMSBzZWN0aW9uIGZvciBmdXRpbWVucywgdXRpbWVuc2F0IGFuZCB1dGltZXMgc2F5czoK VGhlIGZpbGUncyByZWxldmFudCB0aW1lc3RhbXAgc2hhbGwgYmUgc2V0IHRvIHRoZQpncmVhdGVz dCB2YWx1ZSBzdXBwb3J0ZWQgYnkgdGhlIGZpbGUgc3lzdGVtIHRoYXQgaXMKbm90IGdyZWF0ZXIg dGhhbiB0aGUgc3BlY2lmaWVkIHRpbWUuCgpDbGFtcCB0aGUgdGltZXN0YW1wcyBhY2NvcmRpbmds eSBiZWZvcmUgYXNzaWdubWVudC4KCk5vdGUgdGhhdCB0aGUgY2xhbXBfdCBtYWNybyBpcyB1c2Vk IGZvciBjbGFtcGluZyBoZXJlIGFzIHZmcwppcyBub3QgeWV0IHVzaW5nIHN0cnVjdCB0aW1lc3Bl YzY0IGludGVybmFsbHkuIFRoaXMgaXMKcmVxdWlyZWQgZm9yIGNvbXBpbGF0aW9uIHB1cnBvc2Vz LgpBbHNvIG5vdGUgdGhhdCBjbGFtcCB3b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIHRpbWVz dGFtcHMKYmV5b25kIDIwMzggb24gMzItYml0IG1hY2hpbmVzIHVudGlsIHRoZSB2ZnMgdXNlcyB0 aW1lc3BlYzY0LgpBZnRlciB0aGUgdmZzIGlzIHRyYW5zaXRpb25lZCB0byB1c2UgdGltZXNwZWM2 NCBmb3IgdGltZXN0YW1wcywKY2xhbXBfdCgpIGNhbiBiZSByZXBsYWNlZCBieSBjbGFtcCgpLgoK U2lnbmVkLW9mZi1ieTogRGVlcGEgRGluYW1hbmkgPGRlZXBhLmtlcm5lbEBnbWFpbC5jb20+Ci0t LQogZnMvdXRpbWVzLmMgfCAxNyArKysrKysrKysrKysrLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEz IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZnMvdXRpbWVzLmMg Yi9mcy91dGltZXMuYwppbmRleCAzMmIxNWIzLi4wNTJmZTVkIDEwMDY0NAotLS0gYS9mcy91dGlt ZXMuYworKysgYi9mcy91dGltZXMuYwpAQCAtNTMsNiArNTMsNyBAQCBzdGF0aWMgaW50IHV0aW1l c19jb21tb24oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCB0aW1lc3BlYyAqdGltZXMp CiAJaW50IGVycm9yOwogCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKIAlzdHJ1Y3QgaW5vZGUgKmlu b2RlID0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBp bm9kZS0+aV9zYjsKIAlzdHJ1Y3QgaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSA9IE5VTEw7CiAKIAll cnJvciA9IG1udF93YW50X3dyaXRlKHBhdGgtPm1udCk7CkBAIC02OCwxNiArNjksMjQgQEAgc3Rh dGljIGludCB1dGltZXNfY29tbW9uKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgdGlt ZXNwZWMgKnRpbWVzKQogCQlpZiAodGltZXNbMF0udHZfbnNlYyA9PSBVVElNRV9PTUlUKQogCQkJ bmV3YXR0cnMuaWFfdmFsaWQgJj0gfkFUVFJfQVRJTUU7CiAJCWVsc2UgaWYgKHRpbWVzWzBdLnR2 X25zZWMgIT0gVVRJTUVfTk9XKSB7Ci0JCQluZXdhdHRycy5pYV9hdGltZS50dl9zZWMgPSB0aW1l c1swXS50dl9zZWM7Ci0JCQluZXdhdHRycy5pYV9hdGltZS50dl9uc2VjID0gdGltZXNbMF0udHZf bnNlYzsKKwkJCW5ld2F0dHJzLmlhX2F0aW1lLnR2X3NlYyA9CisJCQkJY2xhbXBfdCh0aW1lNjRf dCwgdGltZXNbMF0udHZfc2VjLCBzYi0+c190aW1lX21pbiwgc2ItPnNfdGltZV9tYXgpOworCQkJ aWYgKHRpbWVzWzBdLnR2X3NlYyA+PSBzYi0+c190aW1lX21heCkKKwkJCQluZXdhdHRycy5pYV9h dGltZS50dl9uc2VjID0gMDsKKwkJCWVsc2UKKwkJCQluZXdhdHRycy5pYV9hdGltZS50dl9uc2Vj ID0gdGltZXNbMF0udHZfbnNlYzsKIAkJCW5ld2F0dHJzLmlhX3ZhbGlkIHw9IEFUVFJfQVRJTUVf U0VUOwogCQl9CiAKIAkJaWYgKHRpbWVzWzFdLnR2X25zZWMgPT0gVVRJTUVfT01JVCkKIAkJCW5l d2F0dHJzLmlhX3ZhbGlkICY9IH5BVFRSX01USU1FOwogCQllbHNlIGlmICh0aW1lc1sxXS50dl9u c2VjICE9IFVUSU1FX05PVykgewotCQkJbmV3YXR0cnMuaWFfbXRpbWUudHZfc2VjID0gdGltZXNb MV0udHZfc2VjOwotCQkJbmV3YXR0cnMuaWFfbXRpbWUudHZfbnNlYyA9IHRpbWVzWzFdLnR2X25z ZWM7CisJCQluZXdhdHRycy5pYV9tdGltZS50dl9zZWMgPQorCQkJCWNsYW1wX3QodGltZTY0X3Qs IHRpbWVzWzFdLnR2X3NlYywgc2ItPnNfdGltZV9taW4sIHNiLT5zX3RpbWVfbWF4KTsKKwkJCWlm ICh0aW1lc1sxXS50dl9zZWMgPj0gc2ItPnNfdGltZV9tYXgpCisJCQkJbmV3YXR0cnMuaWFfbXRp bWUudHZfbnNlYyA9IDA7CisJCQllbHNlCisJCQkJbmV3YXR0cnMuaWFfbXRpbWUudHZfbnNlYyA9 IHRpbWVzWzFdLnR2X25zZWM7CiAJCQluZXdhdHRycy5pYV92YWxpZCB8PSBBVFRSX01USU1FX1NF VDsKIAkJfQogCQkvKgotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClkyMDM4IG1haWxpbmcgbGlzdApZMjAzOEBsaXN0cy5saW5hcm8ub3Jn Cmh0dHBzOi8vbGlzdHMubGluYXJvLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3kyMDM4Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg0-f66.google.com ([74.125.83.66]:35760 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751588AbdBYBmA (ORCPT ); Fri, 24 Feb 2017 20:42:00 -0500 From: Deepa Dinamani To: viro@zeniv.linux.org.uk, tytso@mit.edu, adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, arnd@arndb.de, y2038@lists.linaro.org Subject: [PATCH v4 5/5] utimes: Clamp the timestamps before update Date: Fri, 24 Feb 2017 17:41:03 -0800 Message-Id: <1487986863-6005-6-git-send-email-deepa.kernel@gmail.com> In-Reply-To: <1487986863-6005-1-git-send-email-deepa.kernel@gmail.com> References: <1487986863-6005-1-git-send-email-deepa.kernel@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: POSIX.1 section for futimens, utimensat and utimes says: The file's relevant timestamp shall be set to the greatest value supported by the file system that is not greater than the specified time. Clamp the timestamps accordingly before assignment. Note that the clamp_t macro is used for clamping here as vfs is not yet using struct timespec64 internally. This is required for compilation purposes. Also note that clamp won't do the right thing for timestamps beyond 2038 on 32-bit machines until the vfs uses timespec64. After the vfs is transitioned to use timespec64 for timestamps, clamp_t() can be replaced by clamp(). Signed-off-by: Deepa Dinamani --- fs/utimes.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/fs/utimes.c b/fs/utimes.c index 32b15b3..052fe5d 100644 --- a/fs/utimes.c +++ b/fs/utimes.c @@ -53,6 +53,7 @@ static int utimes_common(const struct path *path, struct timespec *times) int error; struct iattr newattrs; struct inode *inode = path->dentry->d_inode; + struct super_block *sb = inode->i_sb; struct inode *delegated_inode = NULL; error = mnt_want_write(path->mnt); @@ -68,16 +69,24 @@ static int utimes_common(const struct path *path, struct timespec *times) if (times[0].tv_nsec == UTIME_OMIT) newattrs.ia_valid &= ~ATTR_ATIME; else if (times[0].tv_nsec != UTIME_NOW) { - newattrs.ia_atime.tv_sec = times[0].tv_sec; - newattrs.ia_atime.tv_nsec = times[0].tv_nsec; + newattrs.ia_atime.tv_sec = + clamp_t(time64_t, times[0].tv_sec, sb->s_time_min, sb->s_time_max); + if (times[0].tv_sec >= sb->s_time_max) + newattrs.ia_atime.tv_nsec = 0; + else + newattrs.ia_atime.tv_nsec = times[0].tv_nsec; newattrs.ia_valid |= ATTR_ATIME_SET; } if (times[1].tv_nsec == UTIME_OMIT) newattrs.ia_valid &= ~ATTR_MTIME; else if (times[1].tv_nsec != UTIME_NOW) { - newattrs.ia_mtime.tv_sec = times[1].tv_sec; - newattrs.ia_mtime.tv_nsec = times[1].tv_nsec; + newattrs.ia_mtime.tv_sec = + clamp_t(time64_t, times[1].tv_sec, sb->s_time_min, sb->s_time_max); + if (times[1].tv_sec >= sb->s_time_max) + newattrs.ia_mtime.tv_nsec = 0; + else + newattrs.ia_mtime.tv_nsec = times[1].tv_nsec; newattrs.ia_valid |= ATTR_MTIME_SET; } /* -- 2.7.4