Message ID | 20161220110145.f3f3io7r4sg5tvtf@lenoch |
---|---|
State | Deferred |
Delegated to: | Tom Rini |
Headers | show |
On 20.12.2016 12:01, Ladislav Michl wrote: > Hi Michal, > > On Tue, Dec 20, 2016 at 09:58:31AM +0100, Michal Simek wrote: >> This patch is fixing missing fclose() calls >> in error patch introduced by: >> "tools: mkimage: Use fstat instead of stat to avoid malicious hacks" >> (sha1: ebe0f53f48e8f9ecc823e533a85b05c13638c350) >> >> Reported-by: Coverity (CID: 155064, 155065) >> Signed-off-by: Michal Simek <michal.simek@xilinx.com> >> --- >> >> tools/zynqimage.c | 8 ++++++-- >> tools/zynqmpimage.c | 8 ++++++-- >> 2 files changed, 12 insertions(+), 4 deletions(-) >> >> diff --git a/tools/zynqimage.c b/tools/zynqimage.c >> index b47132b02a60..021d2d3fc91f 100644 >> --- a/tools/zynqimage.c >> +++ b/tools/zynqimage.c >> @@ -239,11 +239,15 @@ static void zynqimage_parse_initparams(struct zynq_header *zynqhdr, >> } >> >> err = fstat(fileno(fp), &path_stat); >> - if (err) >> + if (err) { >> + fclose(fp); >> return; >> + } >> >> - if (!S_ISREG(path_stat.st_mode)) >> + if (!S_ISREG(path_stat.st_mode)) { >> + fclose(fp); >> return; >> + } >> >> do { >> r = fscanf(fp, "%x %x", ®init.address, ®init.data); >> diff --git a/tools/zynqmpimage.c b/tools/zynqmpimage.c >> index 60d8ed23b4a1..0c9a3daddd6a 100644 >> --- a/tools/zynqmpimage.c >> +++ b/tools/zynqmpimage.c >> @@ -251,11 +251,15 @@ static void zynqmpimage_parse_initparams(struct zynqmp_header *zynqhdr, >> } >> >> err = fstat(fileno(fp), &path_stat); >> - if (err) >> + if (err) { >> + fclose(fp); >> return; >> + } >> >> - if (!S_ISREG(path_stat.st_mode)) >> + if (!S_ISREG(path_stat.st_mode)) { >> + fclose(fp); >> return; >> + } >> >> do { >> r = fscanf(fp, "%x %x", ®init.address, ®init.data); > > what about something like this? Sure that will work too. Thanks, Michal > > Best regards, > ladis (bored waiting for the lunch ;-)) > > Signed-off-by: Ladislav Michl <ladis@linux-mips.org> > --- > diff --git a/tools/zynqimage.c b/tools/zynqimage.c > index b47132b02a..026e99c00b 100644 > --- a/tools/zynqimage.c > +++ b/tools/zynqimage.c > @@ -228,7 +228,7 @@ static void zynqimage_parse_initparams(struct zynq_header *zynqhdr, > FILE *fp; > struct zynq_reginit reginit; > unsigned int reg_count = 0; > - int r, err; > + int r; > struct stat path_stat; > > /* Expect a table of register-value pairs, e.g. "0x12345678 0x4321" */ > @@ -238,12 +238,10 @@ static void zynqimage_parse_initparams(struct zynq_header *zynqhdr, > exit(1); > } > > - err = fstat(fileno(fp), &path_stat); > - if (err) > - return; > - > - if (!S_ISREG(path_stat.st_mode)) > + if (fstat(fileno(fp), &path_stat) || !S_ISREG(path_stat.st_mode)) { > + fclose(fp); > return; > + } > > do { > r = fscanf(fp, "%x %x", ®init.address, ®init.data); > diff --git a/tools/zynqmpimage.c b/tools/zynqmpimage.c > index 60d8ed23b4..767e93a2ab 100644 > --- a/tools/zynqmpimage.c > +++ b/tools/zynqmpimage.c > @@ -240,7 +240,7 @@ static void zynqmpimage_parse_initparams(struct zynqmp_header *zynqhdr, > FILE *fp; > struct zynqmp_reginit reginit; > unsigned int reg_count = 0; > - int r, err; > + int r; > struct stat path_stat; > > /* Expect a table of register-value pairs, e.g. "0x12345678 0x4321" */ > @@ -250,12 +250,10 @@ static void zynqmpimage_parse_initparams(struct zynqmp_header *zynqhdr, > exit(1); > } > > - err = fstat(fileno(fp), &path_stat); > - if (err) > - return; > - > - if (!S_ISREG(path_stat.st_mode)) > + if (fstat(fileno(fp), &path_stat) || !S_ISREG(path_stat.st_mode)) { > + fclose(fp); > return; > + } > > do { > r = fscanf(fp, "%x %x", ®init.address, ®init.data); >
diff --git a/tools/zynqimage.c b/tools/zynqimage.c index b47132b02a..026e99c00b 100644 --- a/tools/zynqimage.c +++ b/tools/zynqimage.c @@ -228,7 +228,7 @@ static void zynqimage_parse_initparams(struct zynq_header *zynqhdr, FILE *fp; struct zynq_reginit reginit; unsigned int reg_count = 0; - int r, err; + int r; struct stat path_stat; /* Expect a table of register-value pairs, e.g. "0x12345678 0x4321" */ @@ -238,12 +238,10 @@ static void zynqimage_parse_initparams(struct zynq_header *zynqhdr, exit(1); } - err = fstat(fileno(fp), &path_stat); - if (err) - return; - - if (!S_ISREG(path_stat.st_mode)) + if (fstat(fileno(fp), &path_stat) || !S_ISREG(path_stat.st_mode)) { + fclose(fp); return; + } do { r = fscanf(fp, "%x %x", ®init.address, ®init.data); diff --git a/tools/zynqmpimage.c b/tools/zynqmpimage.c index 60d8ed23b4..767e93a2ab 100644 --- a/tools/zynqmpimage.c +++ b/tools/zynqmpimage.c @@ -240,7 +240,7 @@ static void zynqmpimage_parse_initparams(struct zynqmp_header *zynqhdr, FILE *fp; struct zynqmp_reginit reginit; unsigned int reg_count = 0; - int r, err; + int r; struct stat path_stat; /* Expect a table of register-value pairs, e.g. "0x12345678 0x4321" */ @@ -250,12 +250,10 @@ static void zynqmpimage_parse_initparams(struct zynqmp_header *zynqhdr, exit(1); } - err = fstat(fileno(fp), &path_stat); - if (err) - return; - - if (!S_ISREG(path_stat.st_mode)) + if (fstat(fileno(fp), &path_stat) || !S_ISREG(path_stat.st_mode)) { + fclose(fp); return; + } do { r = fscanf(fp, "%x %x", ®init.address, ®init.data);