On Tue, Oct 29, 2019 at 12:36:05AM +0000, Dr. David Alan Gilbert wrote: > * Stefan Hajnoczi ([email protected]) wrote: > > +static void after_test(void *arg G_GNUC_UNUSED) > > +{ > > + unlink(socket_path); > > + > > + remove_dir_and_children(shared_dir); > > This scares me. Especially since it's running as root. > Can we add a bunch of paranoid checks to make sure it doesn't > end up rm -rf / ?
Yes, we can resolve the path and check it is not "/".
> > +/* Open a file by nodeid using FUSE_OPEN */
> > +static int32_t fuse_open(QVirtioFS *vfs, uint64_t nodeid, uint32_t flags,
> > + uint64_t *fh)
> > +{
> > + struct fuse_in_header in_hdr = {
> > + .opcode = guest32(FUSE_OPEN),
> > + .unique = guest64(virtio_fs_get_unique(vfs)),
> > + .nodeid = guest64(nodeid),
> > + };
> > + struct fuse_open_in in = {
> > + .flags = guest32(flags),
> > + };
> > + struct iovec sg_in[] = {
> > + { .iov_base = &in_hdr, .iov_len = sizeof(in_hdr) },
> > + { .iov_base = &in, .iov_len = sizeof(in) },
> > + };
> > + struct fuse_out_header out_hdr;
> > + struct fuse_open_out out;
> > + struct iovec sg_out[] = {
> > + { .iov_base = &out_hdr, .iov_len = sizeof(out_hdr) },
> > + { .iov_base = &out, .iov_len = sizeof(out) },
> > + };
>
> I wonder if anything can be done to reduce the size of the iovec boiler
> plate?
I'm not aware of a clean way to build the iovec array automatically but
we could do this if you prefer it:
#define IOVEC(elem) { .iov_base = &elem, .iov_len = sizeof(elem) }
struct iovec sg_in[] = {
IOVEC(in_hdr),
IOVEC(in),
};
Do you find this nicer?
Stefan
signature.asc
Description: PGP signature
