[Virtio-fs] [PATCH] virtiofsd: fix incorrect error handling in lo_do_lookup

Dr. David Alan Gilbert dgilbert at redhat.com
Tue Jun 11 18:43:16 UTC 2019


* Liu Bo (bo.liu at linux.alibaba.com) wrote:
> On Tue, Jun 11, 2019 at 06:38:33PM +0100, Dr. David Alan Gilbert wrote:
> > * Eric Ren (renzhen at linux.alibaba.com) wrote:
> > > Signed-off-by: Eric Ren <renzhen at linux.alibaba.com>
> > > ---
> > >  contrib/virtiofsd/passthrough_ll.c | 3 ++-
> > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/contrib/virtiofsd/passthrough_ll.c b/contrib/virtiofsd/passthrough_ll.c
> > > index 574e209d95..78716c8aca 100644
> > > --- a/contrib/virtiofsd/passthrough_ll.c
> > > +++ b/contrib/virtiofsd/passthrough_ll.c
> > > @@ -670,7 +670,6 @@ static int lo_do_lookup(fuse_req_t req, fuse_ino_t parent, const char *name,
> > >  		close(newfd);
> > >  		newfd = -1;
> > >  	} else {
> > > -		saverr = ENOMEM;
> > >  		inode = calloc(1, sizeof(struct lo_inode));
> > >  		if (!inode)
> > >  			goto out_err;
> > 
> > Can you explain why you remove that?   How does it
> > get a sensible errno in this case?
> >
> 
> Are you suggesting that calloc() doesn't set errno on failure?
> 
> the manual reads that
> 
> "The UNIX 98 standard requires malloc(), calloc(), and realloc() to
> set errno to ENOMEM upon failure. Glibc assumes that this is done (and
> the glibc versions of these routines do this); if you use a private
> malloc implementation that does not set errno, then certain library
> routines may fail without having a reason in errno."

Oh OK, and the spec I just found also says it should; the linux manpage
wasn't clear to me.

In that case,

Reviewed-by: Dr. David Alan Gilbert <dgilbert at redhat.com>

and I'll merge it.

> 
> 
> > > @@ -691,7 +690,9 @@ static int lo_do_lookup(fuse_req_t req, fuse_ino_t parent, const char *name,
> > >  	res = fstatat(inode->fd, "", &e->attr,
> > >  		      AT_EMPTY_PATH | AT_SYMLINK_NOFOLLOW);
> > >  	if (res == -1) {
> > > +		saverr = errno;
> > >  		unref_inode(lo, inode, 1);
> > > +		errno = saverr;
> > 
> > That one I agree with.
> >
> 
> Well...can we instead set errno in place to avoid any surprise in the future?
> 
> thanks,
> -liubo
> 
> > 
> > >  		goto out_err;
> > >  	}
> > >  
> > > -- 
> > > 2.17.2 (Apple Git-113)
> > > 
> > > _______________________________________________
> > > Virtio-fs mailing list
> > > Virtio-fs at redhat.com
> > > https://www.redhat.com/mailman/listinfo/virtio-fs
> > --
> > Dr. David Alan Gilbert / dgilbert at redhat.com / Manchester, UK
> > 
> > _______________________________________________
> > Virtio-fs mailing list
> > Virtio-fs at redhat.com
> > https://www.redhat.com/mailman/listinfo/virtio-fs
--
Dr. David Alan Gilbert / dgilbert at redhat.com / Manchester, UK




More information about the Virtio-fs mailing list