From f353a1f1b05724757241d55f0e941f974bbbc72a Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Thu, 25 Apr 2024 11:38:32 -0400 Subject: mke2fs: implement timestamp clamping if SOURCE_DATE_EPOCH is set When copying files to the newly created file system using "mke2fs -d", and there are timestamps greater than what is specified by SOURCE_DATE_EPOCH, clamp the timestamp to the SOURCE_DATE_EPOCH timestamp. Signed-off-by: Theodore Ts'o --- misc/create_inode.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/misc/create_inode.c b/misc/create_inode.c index 83100348c..e2676a057 100644 --- a/misc/create_inode.c +++ b/misc/create_inode.c @@ -109,6 +109,13 @@ errcode_t add_link(ext2_filsys fs, ext2_ino_t parent_ino, return retval; } +static time_t clamped_time(ext2_filsys fs, time_t t) +{ + if ((fs->flags2 & EXT2_FLAG2_USE_FAKE_TIME) && t > fs->now) + return fs->now; + return t; +} + /* Set the uid, gid, mode and time for the inode */ errcode_t set_inode_extra(ext2_filsys fs, ext2_ino_t ino, const struct stat *st) @@ -127,9 +134,9 @@ errcode_t set_inode_extra(ext2_filsys fs, ext2_ino_t ino, inode.i_gid = st->st_gid; ext2fs_set_i_gid_high(inode, st->st_gid >> 16); inode.i_mode = (LINUX_S_IFMT & inode.i_mode) | (~S_IFMT & st->st_mode); - ext2fs_inode_xtime_set(&inode, i_atime, st->st_atime); - ext2fs_inode_xtime_set(&inode, i_ctime, st->st_ctime); - ext2fs_inode_xtime_set(&inode, i_mtime, st->st_mtime); + ext2fs_inode_xtime_set(&inode, i_atime, clamped_time(fs, st->st_atime)); + ext2fs_inode_xtime_set(&inode, i_ctime, clamped_time(fs, st->st_ctime)); + ext2fs_inode_xtime_set(&inode, i_mtime, clamped_time(fs, st->st_mtime)); retval = ext2fs_write_inode(fs, ino, &inode); if (retval) -- cgit 1.2.3-korg