Message ID | 20240416202402.724492-5-aalbersh@redhat.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | xfsprogs random fixes found by Coverity scan | expand |
On Tue, Apr 16, 2024 at 10:24:02PM +0200, Andrey Albershteyn wrote: > Convert howlong argument to a time_t as it's truncated to int, but in > practice this is not an issue as duration will never be this big. > > Add check for howlong to fit into int (printf can use int format > specifier). Even longer interval doesn't make much sense. > > Signed-off-by: Andrey Albershteyn <aalbersh@redhat.com> > --- > fsr/xfs_fsr.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/fsr/xfs_fsr.c b/fsr/xfs_fsr.c > index 3077d8f4ef46..4e29a8a2c548 100644 > --- a/fsr/xfs_fsr.c > +++ b/fsr/xfs_fsr.c > @@ -72,7 +72,7 @@ static int packfile(char *fname, char *tname, int fd, > static void fsrdir(char *dirname); > static int fsrfs(char *mntdir, xfs_ino_t ino, int targetrange); > static void initallfs(char *mtab); > -static void fsrallfs(char *mtab, int howlong, char *leftofffile); > +static void fsrallfs(char *mtab, time_t howlong, char *leftofffile); > static void fsrall_cleanup(int timeout); > static int getnextents(int); > int xfsrtextsize(int fd); > @@ -165,6 +165,10 @@ main(int argc, char **argv) > break; > case 't': > howlong = atoi(optarg); > + if (howlong > INT_MAX) { > + fprintf(stderr, _("%s: too long\n"), progname); Don't just say that it's too long; tell the user what the maximum is. Also perhaps print the argument that was wrong so that the user knows exactly what they got wrong: fprintf(stderr, _("%s: the maximum runtime is %d seconds.\n"), optarg, INT_MAX); $ xfs_fsr -t 123456789123456789 123456789123456789: the maximum runtime is 2147483647 seconds. --D > + exit(1); > + } > break; > case 'f': > leftofffile = optarg; > @@ -387,7 +391,7 @@ initallfs(char *mtab) > } > > static void > -fsrallfs(char *mtab, int howlong, char *leftofffile) > +fsrallfs(char *mtab, time_t howlong, char *leftofffile) > { > int fd; > int error; > -- > 2.42.0 > >
diff --git a/fsr/xfs_fsr.c b/fsr/xfs_fsr.c index 3077d8f4ef46..4e29a8a2c548 100644 --- a/fsr/xfs_fsr.c +++ b/fsr/xfs_fsr.c @@ -72,7 +72,7 @@ static int packfile(char *fname, char *tname, int fd, static void fsrdir(char *dirname); static int fsrfs(char *mntdir, xfs_ino_t ino, int targetrange); static void initallfs(char *mtab); -static void fsrallfs(char *mtab, int howlong, char *leftofffile); +static void fsrallfs(char *mtab, time_t howlong, char *leftofffile); static void fsrall_cleanup(int timeout); static int getnextents(int); int xfsrtextsize(int fd); @@ -165,6 +165,10 @@ main(int argc, char **argv) break; case 't': howlong = atoi(optarg); + if (howlong > INT_MAX) { + fprintf(stderr, _("%s: too long\n"), progname); + exit(1); + } break; case 'f': leftofffile = optarg; @@ -387,7 +391,7 @@ initallfs(char *mtab) } static void -fsrallfs(char *mtab, int howlong, char *leftofffile) +fsrallfs(char *mtab, time_t howlong, char *leftofffile) { int fd; int error;
Convert howlong argument to a time_t as it's truncated to int, but in practice this is not an issue as duration will never be this big. Add check for howlong to fit into int (printf can use int format specifier). Even longer interval doesn't make much sense. Signed-off-by: Andrey Albershteyn <aalbersh@redhat.com> --- fsr/xfs_fsr.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)