[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 05/17] net: avoid using variable length array in net_
From: |
Jason Wang |
Subject: |
[Qemu-devel] [PULL 05/17] net: avoid using variable length array in net_client_init() |
Date: |
Tue, 2 Jul 2019 10:31:17 +0800 |
From: Stefano Garzarella <address@hidden>
net_client_init() uses a variable length array to store the prefix
of 'ipv6-net' parameter (e.g. if ipv6-net=fec0::0/64, the prefix
is 'fec0::0').
This patch introduces g_strsplit() to split the 'ipv6-net' parameter,
so we can remove the variable length array.
Suggested-by: Markus Armbruster <address@hidden>
Signed-off-by: Stefano Garzarella <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Signed-off-by: Jason Wang <address@hidden>
---
net/net.c | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/net/net.c b/net/net.c
index d21c2c7..76ba0b7 100644
--- a/net/net.c
+++ b/net/net.c
@@ -1105,6 +1105,7 @@ static void show_netdevs(void)
static int net_client_init(QemuOpts *opts, bool is_netdev, Error **errp)
{
+ gchar **substrings = NULL;
void *object = NULL;
Error *err = NULL;
int ret = -1;
@@ -1120,28 +1121,33 @@ static int net_client_init(QemuOpts *opts, bool
is_netdev, Error **errp)
const char *ip6_net = qemu_opt_get(opts, "ipv6-net");
if (ip6_net) {
- char buf[strlen(ip6_net) + 1];
+ char *prefix_addr;
+ unsigned long prefix_len = 64; /* Default 64bit prefix length. */
+
+ substrings = g_strsplit(ip6_net, "/", 2);
+ if (!substrings || !substrings[0]) {
+ error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "ipv6-net",
+ "a valid IPv6 prefix");
+ goto out;
+ }
- if (get_str_sep(buf, sizeof(buf), &ip6_net, '/') < 0) {
- /* Default 64bit prefix length. */
- qemu_opt_set(opts, "ipv6-prefix", ip6_net, &error_abort);
- qemu_opt_set_number(opts, "ipv6-prefixlen", 64, &error_abort);
- } else {
+ prefix_addr = substrings[0];
+
+ if (substrings[1]) {
/* User-specified prefix length. */
- unsigned long len;
int err;
- qemu_opt_set(opts, "ipv6-prefix", buf, &error_abort);
- err = qemu_strtoul(ip6_net, NULL, 10, &len);
-
+ err = qemu_strtoul(substrings[1], NULL, 10, &prefix_len);
if (err) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
"ipv6-prefixlen", "a number");
goto out;
}
-
- qemu_opt_set_number(opts, "ipv6-prefixlen", len, &error_abort);
}
+
+ qemu_opt_set(opts, "ipv6-prefix", prefix_addr, &error_abort);
+ qemu_opt_set_number(opts, "ipv6-prefixlen", prefix_len,
+ &error_abort);
qemu_opt_unset(opts, "ipv6-net");
}
}
@@ -1164,6 +1170,7 @@ static int net_client_init(QemuOpts *opts, bool
is_netdev, Error **errp)
out:
error_propagate(errp, err);
+ g_strfreev(substrings);
visit_free(v);
return ret;
}
--
2.5.0
- [Qemu-devel] [PULL 00/17] Net patches, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 04/17] net: fix assertion failure when ipv6-prefixlen is not a number, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 06/17] net: use g_strsplit() for parsing host address and port, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 07/17] net: remove unused get_str_sep() function, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 03/17] ftgmac100: do not link to netdev, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 08/17] net/announce: Allow optional list of interfaces, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 01/17] MAINTAINERS: Add qemu-bridge-helper.c to "Network device backends", Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 02/17] qemu-bridge-helper: Document known shortcomings, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 09/17] net/announce: Add HMP optional interface list, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 05/17] net: avoid using variable length array in net_client_init(),
Jason Wang <=
- [Qemu-devel] [PULL 10/17] net/announce: Add optional ID, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 11/17] net/announce: Add HMP optional ID, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 12/17] net/announce: Expand test for stopping self announce, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 13/17] COLO-compare: Add new parameter to communicate with remote colo-frame, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 14/17] COLO-compare: Add remote notification chardev handler frame, Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 15/17] COLO-compare: Make the compare_chr_send() can send notification message., Jason Wang, 2019/07/01
- [Qemu-devel] [PULL 16/17] COLO-compare: Add colo-compare remote notify support, Jason Wang, 2019/07/01