On 8 Apr 2016, at 23:05, Eric Blake <ebl...@redhat.com> wrote: > The NBD protocol says that clients should not send a command flag > that has not been negotiated (whether by the client requesting an > option during a handshake, or because we advertise support for the > flag in response to NBD_OPT_EXPORT_NAME), and that servers should > reject invalid flags with EINVAL. We were silently ignoring the > flags instead. The client can't rely on our behavior, since it is > their fault for passing the bad flag in the first place, but it's > better to be robust up front than to possibly behave differently > than the client was expecting with the attempted flag. > > Signed-off-by: Eric Blake <ebl...@redhat.com>
Reviewed-by: Alex Bligh <a...@alex.org.uk> > --- > nbd/server.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/nbd/server.c b/nbd/server.c > index 81afae2..a10294e 100644 > --- a/nbd/server.c > +++ b/nbd/server.c > @@ -984,6 +984,11 @@ static ssize_t nbd_co_receive_request(NBDRequest *req, > struct nbd_request *reque > goto out; > } > > + if (request->type & ~NBD_CMD_MASK_COMMAND & ~NBD_CMD_FLAG_FUA) { > + LOG("unsupported flags (got 0x%x)", > + request->type & ~NBD_CMD_MASK_COMMAND); > + return -EINVAL; > + } > if ((request->from + request->len) < request->from) { > LOG("integer overflow detected! " > "you're probably being attacked"); > -- > 2.5.5 > > -- Alex Bligh