diff options
author | David Turner <novalis@novalis.org> | 2015-11-24 14:34:37 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2015-11-24 14:34:37 -0500 |
commit | a4dad1ae24f850410c4e60f22823cba1289b8d52 (patch) | |
tree | 333adcee80d1cca76f30f93e3f39775bd891fb72 /fs/jbd2 | |
parent | be69e1c19f0efb091f29521715c380842fa4cd7e (diff) |
ext4: Fix handling of extended tv_sec
In ext4, the bottom two bits of {a,c,m}time_extra are used to extend
the {a,c,m}time fields, deferring the year 2038 problem to the year
2446.
When decoding these extended fields, for times whose bottom 32 bits
would represent a negative number, sign extension causes the 64-bit
extended timestamp to be negative as well, which is not what's
intended. This patch corrects that issue, so that the only negative
{a,c,m}times are those between 1901 and 1970 (as per 32-bit signed
timestamps).
Some older kernels might have written pre-1970 dates with 1,1 in the
extra bits. This patch treats those incorrectly-encoded dates as
pre-1970, instead of post-2311, until kernel 4.20 is released.
Hopefully by then e2fsck will have fixed up the bad data.
Also add a comment explaining the encoding of ext4's extra {a,c,m}time
bits.
Signed-off-by: David Turner <novalis@novalis.org>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reported-by: Mark Harris <mh8928@yahoo.com>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=23732
Cc: stable@vger.kernel.org
Diffstat (limited to 'fs/jbd2')
0 files changed, 0 insertions, 0 deletions