diff options
author | Greg Kurz <groug@kaod.org> | 2018-01-08 11:18:22 +0100 |
---|---|---|
committer | Greg Kurz <groug@kaod.org> | 2018-01-08 11:18:22 +0100 |
commit | d1471233bb07611458b701e670e5e2ba0ac12e7c (patch) | |
tree | 655fea1077f8fa5dd563ac4601a2a98c47622d12 /hw/9pfs | |
parent | 7bd41d3db6b16775f5e17151fd380b976fed2d2f (diff) |
9pfs: fix error path in pdu_submit()
If we receive an unsupported request id, we first decide to
return -ENOTSUPP to the client, but since the request id
causes is_read_only_op() to return false, we change the
error to be -EROFS if the fsdev is read-only. This doesn't
make sense since we don't know what the client asked for.
This patch ensures that -EROFS can only be returned if the
request id is supported.
Signed-off-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'hw/9pfs')
-rw-r--r-- | hw/9pfs/9p.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index 76f90f2b78..558efb41de 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -3473,14 +3473,12 @@ void pdu_submit(V9fsPDU *pdu, P9MsgHeader *hdr) if (pdu->id >= ARRAY_SIZE(pdu_co_handlers) || (pdu_co_handlers[pdu->id] == NULL)) { handler = v9fs_op_not_supp; + } else if (is_ro_export(&s->ctx) && !is_read_only_op(pdu)) { + handler = v9fs_fs_ro; } else { handler = pdu_co_handlers[pdu->id]; } - if (is_ro_export(&s->ctx) && !is_read_only_op(pdu)) { - handler = v9fs_fs_ro; - } - qemu_co_queue_init(&pdu->complete); co = qemu_coroutine_create(handler, pdu); qemu_coroutine_enter(co); |