On Thu, Aug 18, 2022 at 04:36:13PM +0100, Richard W.M. Jones wrote:
This is what I pushed - how does it look? I ignored the cases we
cannot deal with, except O_WRONLY where I emit a debug message but
continue:
https://gitlab.com/nbdkit/nbdkit/-/blob/master/plugins/file/file.c#L572
> >
> > There's also the case where r == O_WRONLY which the plugin (and NBD)
> > cannot deal with. Not sure what to do about that - error?
>
> Or allow it, but with the caveat that every NBD_CMD_READ will fail.
> The only reason to special case h->can_write=false for O_RDONLY is
> because then we don't advertise it to the client; to save them from
> getting failures on NBD_CMD_WRITE - but that's because it is an easy
> thing to advertise. Advertising that NBD_CMD_READ will fail is not
> easy (and less likely to happen in practice), so failing to serve the
> file is just as viable as serving it and letting every NBD_CMD_READ
> fail.
That's basically what I did, plus a debug message :-)
What you have committed looks okay to me for handling the common case
of O_RDONLY without worrying about the other cases. And if someone
tries to play with passing in an fd opened under O_EXEC, they deserve
whatever behavior happens naturally from that explicitly unusual
corner-case.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization:
qemu.org |
libvirt.org