* [PATCH] net: validate that ids are well formed
@ 2021-03-01 14:56 Paolo Bonzini
2021-03-01 15:07 ` Eric Blake
0 siblings, 1 reply; 3+ messages in thread
From: Paolo Bonzini @ 2021-03-01 14:56 UTC (permalink / raw)
To: qemu-devel; +Cc: Jason Wang, armbru
When a network or network device is created from the command line or HMP,
QemuOpts ensures that the id passes the id_wellformed check. However,
QMP skips this:
$ qemu-system-x86_64 -qmp stdio -S -nic user,id=123/456
qemu-system-x86_64: -nic user,id=123/456: Parameter id expects an identifier
Identifiers consist of letters, digits, -, ., _, starting with a letter.
$ qemu-system-x86_64 -qmp stdio -S
{"execute":"qmp_capabilities"}
{"return": {}}
{"execute":"netdev_add", "arguments": {"type": "user", "id": "123/456"}}
{"return": {}}
After:
$ qemu-system-x86_64 -qmp stdio -S
{"execute":"qmp_capabilities"}
{"return": {}}
{"execute":"netdev_add", "arguments": {"type": "user", "id": "123/456"}}
{"error": {"class": "GenericError", "desc": "Parameter "id" expects an identifier"}}
Validity checks should be performed always at the bottom of the call chain,
because QMP skips all the steps above. Do this for the network subsystem.
Cc: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
net/net.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/net/net.c b/net/net.c
index fb7b7dcc25..f7835aa0a8 100644
--- a/net/net.c
+++ b/net/net.c
@@ -43,6 +43,7 @@
#include "qemu/cutils.h"
#include "qemu/config-file.h"
#include "qemu/ctype.h"
+#include "qemu/id.h"
#include "qemu/iov.h"
#include "qemu/qemu-print.h"
#include "qemu/main-loop.h"
@@ -1011,6 +1012,17 @@ static int net_client_init1(const Netdev *netdev, bool is_netdev, Error **errp)
}
}
+ /*
+ * The id for -net has already been checked by QemuOpts and
+ * could be automatically generated, in which case it is not
+ * well-formed by design. HMP and QMP only call us with
+ * is_netdev == true.
+ */
+ if (is_netdev && !id_wellformed(netdev->id)) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "id", "an identifier");
+ return -1;
+ }
+
nc = qemu_find_netdev(netdev->id);
if (nc) {
error_setg(errp, "Duplicate ID '%s'", netdev->id);
--
2.26.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] net: validate that ids are well formed
2021-03-01 14:56 [PATCH] net: validate that ids are well formed Paolo Bonzini
@ 2021-03-01 15:07 ` Eric Blake
2021-03-02 5:55 ` Jason Wang
0 siblings, 1 reply; 3+ messages in thread
From: Eric Blake @ 2021-03-01 15:07 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: Jason Wang, armbru
On 3/1/21 8:56 AM, Paolo Bonzini wrote:
> When a network or network device is created from the command line or HMP,
> QemuOpts ensures that the id passes the id_wellformed check. However,
> QMP skips this:
>
> $ qemu-system-x86_64 -qmp stdio -S -nic user,id=123/456
> qemu-system-x86_64: -nic user,id=123/456: Parameter id expects an identifier
> Identifiers consist of letters, digits, -, ., _, starting with a letter.
>
> $ qemu-system-x86_64 -qmp stdio -S
> {"execute":"qmp_capabilities"}
> {"return": {}}
> {"execute":"netdev_add", "arguments": {"type": "user", "id": "123/456"}}
> {"return": {}}
>
> After:
>
> $ qemu-system-x86_64 -qmp stdio -S
> {"execute":"qmp_capabilities"}
> {"return": {}}
> {"execute":"netdev_add", "arguments": {"type": "user", "id": "123/456"}}
> {"error": {"class": "GenericError", "desc": "Parameter "id" expects an identifier"}}
>
> Validity checks should be performed always at the bottom of the call chain,
> because QMP skips all the steps above. Do this for the network subsystem.
>
> Cc: Jason Wang <jasowang@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> net/net.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] net: validate that ids are well formed
2021-03-01 15:07 ` Eric Blake
@ 2021-03-02 5:55 ` Jason Wang
0 siblings, 0 replies; 3+ messages in thread
From: Jason Wang @ 2021-03-02 5:55 UTC (permalink / raw)
To: Eric Blake, Paolo Bonzini, qemu-devel; +Cc: armbru
On 2021/3/1 11:07 下午, Eric Blake wrote:
> On 3/1/21 8:56 AM, Paolo Bonzini wrote:
>> When a network or network device is created from the command line or HMP,
>> QemuOpts ensures that the id passes the id_wellformed check. However,
>> QMP skips this:
>>
>> $ qemu-system-x86_64 -qmp stdio -S -nic user,id=123/456
>> qemu-system-x86_64: -nic user,id=123/456: Parameter id expects an identifier
>> Identifiers consist of letters, digits, -, ., _, starting with a letter.
>>
>> $ qemu-system-x86_64 -qmp stdio -S
>> {"execute":"qmp_capabilities"}
>> {"return": {}}
>> {"execute":"netdev_add", "arguments": {"type": "user", "id": "123/456"}}
>> {"return": {}}
>>
>> After:
>>
>> $ qemu-system-x86_64 -qmp stdio -S
>> {"execute":"qmp_capabilities"}
>> {"return": {}}
>> {"execute":"netdev_add", "arguments": {"type": "user", "id": "123/456"}}
>> {"error": {"class": "GenericError", "desc": "Parameter "id" expects an identifier"}}
>>
>> Validity checks should be performed always at the bottom of the call chain,
>> because QMP skips all the steps above. Do this for the network subsystem.
>>
>> Cc: Jason Wang <jasowang@redhat.com>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>> net/net.c | 12 ++++++++++++
>> 1 file changed, 12 insertions(+)
> Reviewed-by: Eric Blake <eblake@redhat.com>
Queued.
Thanks
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-03-02 6:02 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-01 14:56 [PATCH] net: validate that ids are well formed Paolo Bonzini
2021-03-01 15:07 ` Eric Blake
2021-03-02 5:55 ` Jason Wang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.