On Tue, Sep 11, 2018 at 11:25:52AM -0700, Ori Bernstein wrote:
> On Tue, 11 Sep 2018 15:36:49 +0800
> Michael Mikonos <[email protected]> wrote:
>
> > Hello,
> >
> > Sometimes vmd doesn't seem to check the result of malloc/calloc.
> > I tried to preserve the existing behavour w.r.t. return values
> > for the functions modified; some functions returned 1 on error
> > while others return -1. Does this look correct?
> >
> > - Michael
> >
> >
>
> > Index: vioqcow2.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/vmd/vioqcow2.c,v
> > retrieving revision 1.2
> > diff -u -p -u -r1.2 vioqcow2.c
> > --- vioqcow2.c 11 Sep 2018 04:06:32 -0000 1.2
> > +++ vioqcow2.c 11 Sep 2018 07:29:10 -0000
> > @@ -202,6 +202,9 @@ qc2_open(struct qcdisk *disk, int fd)
> > }
> >
> > disk->l1 = calloc(disk->l1sz, sizeof *disk->l1);
> > + if (disk->l1 == NULL)
> > + return -1;
> > +
> > if (pread(disk->fd, (char*)disk->l1, 8*disk->l1sz, disk->l1off)
> > != 8*disk->l1sz) {
> > free(disk->l1);
> > @@ -237,6 +240,8 @@ qc2_open(struct qcdisk *disk, int fd)
> > basepath[backingsz] = 0;
> >
> > disk->base = calloc(1, sizeof(struct qcdisk));
> > + if (disk->base == NULL)
> > + return -1;
>
> This early return leaks disk->l1. The other vioqcow2/vioraw changes
> look fine to me.
Thanks for the feedback.
The other eary returns which currently free disk->base don't free
disk->l1. I can change those error cases, and this calloc() one, to free
disk->l1 if that's what is intended.
>
> > if (qc2_openpath(disk->base, basepath, O_RDONLY) == -1) {
> > free(disk->base);
> > return -1;
> > Index: vioraw.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/vmd/vioraw.c,v
> > retrieving revision 1.1
> > diff -u -p -u -r1.1 vioraw.c
> > --- vioraw.c 25 Aug 2018 04:16:09 -0000 1.1
> > +++ vioraw.c 11 Sep 2018 07:29:10 -0000
> > @@ -62,6 +62,8 @@ virtio_init_raw(struct virtio_backing *f
> > return -1;
> >
> > fdp = malloc(sizeof(int));
> > + if (fdp == NULL)
> > + return -1;
> > *fdp = fd;
> > file->p = fdp;
> > file->pread = raw_pread;
> >
>
>
> --
> Ori Bernstein <[email protected]>
>