]> git.hungrycats.org Git - linux/commitdiff
isofs: fix timestamps beyond 2027
authorArnd Bergmann <arnd@arndb.de>
Thu, 19 Oct 2017 14:47:48 +0000 (16:47 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 30 Nov 2017 08:35:50 +0000 (08:35 +0000)
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
fs/isofs/rock.h
fs/isofs/util.c

index 0ac4c1f73fbd6c2616e04ad6310995426c03da68..25177e6bd60373e247a83385d83402047a56ed85 100644 (file)
@@ -103,7 +103,7 @@ static inline unsigned int isonum_733(char *p)
        /* 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 */
 
index ed09e2b086372f0954200e487814e8e12e315542..f835976ce03339ac72939565c94c90cd9d9c9b12 100644 (file)
@@ -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 {
index 01e1ee7a998b8a17b409b2118b28274c027bd1c1..5cdf5359b0e925976b079c9b02213057b4128be8 100644 (file)
@@ -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;