aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2017-10-19 10:47:48 -0400
committerJan Kara <jack@suse.cz>2017-10-31 12:56:53 -0400
commit34be4dbf87fc3e474a842305394534216d428f5d (patch)
treeeff6a52a4aa4d9d6e9260203b3e7fba574a11e06
parent89a4d970ef2a74e921dcd717965a55baefd26eed (diff)
isofs: fix timestamps beyond 2027
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. Cc: stable@vger.kernel.org Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Jan Kara <jack@suse.cz>
-rw-r--r--fs/isofs/isofs.h2
-rw-r--r--fs/isofs/rock.h2
-rw-r--r--fs/isofs/util.c2
3 files changed, 3 insertions, 3 deletions
diff --git a/fs/isofs/isofs.h b/fs/isofs/isofs.h
index 133a456b0425..bd4047585431 100644
--- a/fs/isofs/isofs.h
+++ b/fs/isofs/isofs.h
@@ -106,7 +106,7 @@ static inline unsigned int isonum_733(char *p)
106 /* Ignore bigendian datum due to broken mastering programs */ 106 /* Ignore bigendian datum due to broken mastering programs */
107 return get_unaligned_le32(p); 107 return get_unaligned_le32(p);
108} 108}
109extern int iso_date(char *, int); 109extern int iso_date(u8 *, int);
110 110
111struct inode; /* To make gcc happy */ 111struct inode; /* To make gcc happy */
112 112
diff --git a/fs/isofs/rock.h b/fs/isofs/rock.h
index ed09e2b08637..f835976ce033 100644
--- a/fs/isofs/rock.h
+++ b/fs/isofs/rock.h
@@ -65,7 +65,7 @@ struct RR_PL_s {
65}; 65};
66 66
67struct stamp { 67struct stamp {
68 char time[7]; 68 __u8 time[7]; /* actually 6 unsigned, 1 signed */
69} __attribute__ ((packed)); 69} __attribute__ ((packed));
70 70
71struct RR_TF_s { 71struct RR_TF_s {
diff --git a/fs/isofs/util.c b/fs/isofs/util.c
index 005a15cfd30a..37860fea364d 100644
--- a/fs/isofs/util.c
+++ b/fs/isofs/util.c
@@ -15,7 +15,7 @@
15 * to GMT. Thus we should always be correct. 15 * to GMT. Thus we should always be correct.
16 */ 16 */
17 17
18int iso_date(char * p, int flag) 18int iso_date(u8 *p, int flag)
19{ 19{
20 int year, month, day, hour, minute, second, tz; 20 int year, month, day, hour, minute, second, tz;
21 int crtime; 21 int crtime;