Re: [PATCH] isofs: fix timestamps beyond 2027

2017-10-19 Thread Anders Larsen
On Thursday, 19 October 2017 12:51:05 CEST Al Viro wrote:
> On Thu, Oct 19, 2017 at 11:50:18AM +0200, Arnd Bergmann wrote:
> > 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 adds a cast to 'u8' for the year number, which should extend
> > the shelf life of the file system until 2155.
> > 
> > This should be backported to all kernels that might still be
> > in use by that date.
> > 
> > Cc: sta...@vger.kernel.org
> > Signed-off-by: Arnd Bergmann 
> > ---
> > 
> >  fs/isofs/util.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/fs/isofs/util.c b/fs/isofs/util.c
> > index 005a15cfd30a..f40796c4c6c2 100644
> > --- a/fs/isofs/util.c
> > +++ b/fs/isofs/util.c
> > @@ -20,7 +20,7 @@ int iso_date(char * p, int flag)
> > 
> > int year, month, day, hour, minute, second, tz;
> > int crtime;
> > 
> > -   year = p[0];
> > +   year = (int)(u8)p[0];
> 
> This is BS; just turn that
> char time[7];
> in struct stamp into
>   unsigned char time[7];
> and adjust iso_date() accordingly.  Or make that
> sucker actually take struct stamp *, while we are at it.
> 
> And I'd suggest going through the rest of on-disk structures in
> rock.h and looking for other trouble of that sort.

There are more candidates in include/uapi/linux/iso_fs.h - most of them seems 
to be unused (by us), but at the very least struct iso_directory_record 
contains a date-field of the same sort that is indeed used.

Cheers
Anders



Re: [PATCH] isofs: fix timestamps beyond 2027

2017-10-19 Thread Anders Larsen
On Thursday, 19 October 2017 12:51:05 CEST Al Viro wrote:
> On Thu, Oct 19, 2017 at 11:50:18AM +0200, Arnd Bergmann wrote:
> > 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 adds a cast to 'u8' for the year number, which should extend
> > the shelf life of the file system until 2155.
> > 
> > This should be backported to all kernels that might still be
> > in use by that date.
> > 
> > Cc: sta...@vger.kernel.org
> > Signed-off-by: Arnd Bergmann 
> > ---
> > 
> >  fs/isofs/util.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/fs/isofs/util.c b/fs/isofs/util.c
> > index 005a15cfd30a..f40796c4c6c2 100644
> > --- a/fs/isofs/util.c
> > +++ b/fs/isofs/util.c
> > @@ -20,7 +20,7 @@ int iso_date(char * p, int flag)
> > 
> > int year, month, day, hour, minute, second, tz;
> > int crtime;
> > 
> > -   year = p[0];
> > +   year = (int)(u8)p[0];
> 
> This is BS; just turn that
> char time[7];
> in struct stamp into
>   unsigned char time[7];
> and adjust iso_date() accordingly.  Or make that
> sucker actually take struct stamp *, while we are at it.
> 
> And I'd suggest going through the rest of on-disk structures in
> rock.h and looking for other trouble of that sort.

There are more candidates in include/uapi/linux/iso_fs.h - most of them seems 
to be unused (by us), but at the very least struct iso_directory_record 
contains a date-field of the same sort that is indeed used.

Cheers
Anders



Re: [PATCH] isofs: fix timestamps beyond 2027

2017-10-19 Thread Al Viro
On Thu, Oct 19, 2017 at 11:50:18AM +0200, Arnd Bergmann wrote:
> 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 adds a cast to 'u8' for the year number, which should extend
> the shelf life of the file system until 2155.
> 
> This should be backported to all kernels that might still be
> in use by that date.
> 
> Cc: sta...@vger.kernel.org
> Signed-off-by: Arnd Bergmann 
> ---
>  fs/isofs/util.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/isofs/util.c b/fs/isofs/util.c
> index 005a15cfd30a..f40796c4c6c2 100644
> --- a/fs/isofs/util.c
> +++ b/fs/isofs/util.c
> @@ -20,7 +20,7 @@ int iso_date(char * p, int flag)
>   int year, month, day, hour, minute, second, tz;
>   int crtime;
>  
> - year = p[0];
> + year = (int)(u8)p[0];

This is BS; just turn that
char time[7];
in struct stamp into
unsigned char time[7];
and adjust iso_date() accordingly.  Or make that
sucker actually take struct stamp *, while we are at it.

And I'd suggest going through the rest of on-disk structures in
rock.h and looking for other trouble of that sort.  


Re: [PATCH] isofs: fix timestamps beyond 2027

2017-10-19 Thread Al Viro
On Thu, Oct 19, 2017 at 11:50:18AM +0200, Arnd Bergmann wrote:
> 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 adds a cast to 'u8' for the year number, which should extend
> the shelf life of the file system until 2155.
> 
> This should be backported to all kernels that might still be
> in use by that date.
> 
> Cc: sta...@vger.kernel.org
> Signed-off-by: Arnd Bergmann 
> ---
>  fs/isofs/util.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/isofs/util.c b/fs/isofs/util.c
> index 005a15cfd30a..f40796c4c6c2 100644
> --- a/fs/isofs/util.c
> +++ b/fs/isofs/util.c
> @@ -20,7 +20,7 @@ int iso_date(char * p, int flag)
>   int year, month, day, hour, minute, second, tz;
>   int crtime;
>  
> - year = p[0];
> + year = (int)(u8)p[0];

This is BS; just turn that
char time[7];
in struct stamp into
unsigned char time[7];
and adjust iso_date() accordingly.  Or make that
sucker actually take struct stamp *, while we are at it.

And I'd suggest going through the rest of on-disk structures in
rock.h and looking for other trouble of that sort.  


[PATCH] isofs: fix timestamps beyond 2027

2017-10-19 Thread Arnd Bergmann
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 adds a cast to 'u8' for the year number, which should extend
the shelf life of the file system until 2155.

This should be backported to all kernels that might still be
in use by that date.

Cc: sta...@vger.kernel.org
Signed-off-by: Arnd Bergmann 
---
 fs/isofs/util.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/isofs/util.c b/fs/isofs/util.c
index 005a15cfd30a..f40796c4c6c2 100644
--- a/fs/isofs/util.c
+++ b/fs/isofs/util.c
@@ -20,7 +20,7 @@ int iso_date(char * p, int flag)
int year, month, day, hour, minute, second, tz;
int crtime;
 
-   year = p[0];
+   year = (int)(u8)p[0];
month = p[1];
day = p[2];
hour = p[3];
-- 
2.9.0



[PATCH] isofs: fix timestamps beyond 2027

2017-10-19 Thread Arnd Bergmann
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 adds a cast to 'u8' for the year number, which should extend
the shelf life of the file system until 2155.

This should be backported to all kernels that might still be
in use by that date.

Cc: sta...@vger.kernel.org
Signed-off-by: Arnd Bergmann 
---
 fs/isofs/util.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/isofs/util.c b/fs/isofs/util.c
index 005a15cfd30a..f40796c4c6c2 100644
--- a/fs/isofs/util.c
+++ b/fs/isofs/util.c
@@ -20,7 +20,7 @@ int iso_date(char * p, int flag)
int year, month, day, hour, minute, second, tz;
int crtime;
 
-   year = p[0];
+   year = (int)(u8)p[0];
month = p[1];
day = p[2];
hour = p[3];
-- 
2.9.0