| From 34be4dbf87fc3e474a842305394534216d428f5d Mon Sep 17 00:00:00 2001 |
| From: Arnd Bergmann <arnd@arndb.de> |
| Date: Thu, 19 Oct 2017 16:47:48 +0200 |
| Subject: isofs: fix timestamps beyond 2027 |
| |
| From: Arnd Bergmann <arnd@arndb.de> |
| |
| commit 34be4dbf87fc3e474a842305394534216d428f5d upstream. |
| |
| isofs uses a 'char' variable to load the number of years since |
| 1900 for an inode timestamp. On architectures that use a signed |
| char type by default, this results in an invalid date for |
| anything beyond 2027. |
| |
| This changes the function argument to a 'u8' array, which |
| is defined the same way on all architectures, and unambiguously |
| lets us use years until 2155. |
| |
| This should be backported to all kernels that might still be |
| in use by that date. |
| |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Signed-off-by: Jan Kara <jack@suse.cz> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/isofs/isofs.h | 2 +- |
| fs/isofs/rock.h | 2 +- |
| fs/isofs/util.c | 2 +- |
| 3 files changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/fs/isofs/isofs.h |
| +++ b/fs/isofs/isofs.h |
| @@ -103,7 +103,7 @@ static inline unsigned int isonum_733(ch |
| /* Ignore bigendian datum due to broken mastering programs */ |
| return get_unaligned_le32(p); |
| } |
| -extern int iso_date(char *, int); |
| +extern int iso_date(u8 *, int); |
| |
| struct inode; /* To make gcc happy */ |
| |
| --- a/fs/isofs/rock.h |
| +++ b/fs/isofs/rock.h |
| @@ -65,7 +65,7 @@ struct RR_PL_s { |
| }; |
| |
| struct stamp { |
| - char time[7]; |
| + __u8 time[7]; /* actually 6 unsigned, 1 signed */ |
| } __attribute__ ((packed)); |
| |
| struct RR_TF_s { |
| --- a/fs/isofs/util.c |
| +++ b/fs/isofs/util.c |
| @@ -14,7 +14,7 @@ |
| * to GMT. Thus we should always be correct. |
| */ |
| |
| -int iso_date(char * p, int flag) |
| +int iso_date(u8 *p, int flag) |
| { |
| int year, month, day, hour, minute, second, tz; |
| int crtime, days, i; |