Skip to content

Commit

Permalink
isofs: fix timestamps beyond 2027
Browse files Browse the repository at this point in the history
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: [email protected]
Signed-off-by: Arnd Bergmann <[email protected]>
Signed-off-by: Jan Kara <[email protected]>
  • Loading branch information
arndb authored and jankara committed Oct 31, 2017
1 parent 89a4d97 commit 34be4db
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 3 deletions.
2 changes: 1 addition & 1 deletion fs/isofs/isofs.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,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 */

Expand Down
2 changes: 1 addition & 1 deletion fs/isofs/rock.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion fs/isofs/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,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;
Expand Down

0 comments on commit 34be4db

Please sign in to comment.