On Wed, 12 Apr 2023 12:02:47 +0200 Philippe Mathieu-Daudé <phi...@linaro.org> wrote:
> On 12/4/23 09:16, Hao Zeng wrote: > > The bug in this code (CID 1507822) is that the > > check on the return value of fread() is wrong. fread() > > returns the number of items read or written, so > > checking for == 0 only catches "no data read at all", > > not "only read half the data". > > > > Signed-off-by: Zeng Hao <zeng...@kylinos.cn> > > Suggested-by: Peter Maydell <peter.mayd...@linaro.org> > > --- > > hw/cxl/cxl-cdat.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/hw/cxl/cxl-cdat.c b/hw/cxl/cxl-cdat.c > > index ba7ed1aafd..130531a9cd 100644 > > --- a/hw/cxl/cxl-cdat.c > > +++ b/hw/cxl/cxl-cdat.c > > @@ -126,7 +126,7 @@ static void ct3_load_cdat(CDATObject *cdat, Error > > **errp) > > fseek(fp, 0, SEEK_SET); > > cdat->buf = g_malloc0(file_size); > > Pointless bzero in g_malloc0, however this code would be > simplified using g_file_get_contents(). Agreed - switching this whole thing to g_file_get_contents() will get rid of this code and be a lot simpler. Perhaps just jump directly to that and note the two bugs that existed in the code that is replaced? Jonathan > > > > > - if (fread(cdat->buf, file_size, 1, fp) == 0) { > > + if (fread(cdat->buf, file_size, 1, fp) != file_size) { > > error_setg(errp, "CDAT: File read failed"); > > fclose(fp); > > return; >