Discussion:
[libvirt] [PATCH v2 0/2] lxc: Fix a bug related to IPv{4, 6} gateway persistent setting.
Julio Faracco
2018-11-28 03:38:55 UTC
Permalink
This serie fixes a bug related to IPv{4,6} gateway settings when it is
defined and used with multiple network definitions. Basically, this data
is being carried on to the next network settings because the pointer is
not being cleaned up/initialized properly.

This serie add a new test case to cover this scenario too. It will be so
important to network index implemented on LXC 3.X.

v1-v2: Fixing tabs inside the code.

Julio Faracco (2):
lxc: Initializing IPv6 and IPv4 gateway to overwrite old settings.
tests: Adding test case to include multiple network definitions.

src/lxc/lxc_native.c | 3 ++
.../lxcconf2xml-miscnetwork-v3.config | 23 ++++++++++
.../lxcconf2xml-miscnetwork.config | 23 ++++++++++
.../lxcconf2xml-miscnetwork.xml | 45 +++++++++++++++++++
tests/lxcconf2xmltest.c | 2 +
5 files changed, 96 insertions(+)
create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-miscnetwork-v3.config
create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.config
create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.xml
--
2.19.1
Julio Faracco
2018-11-28 03:38:56 UTC
Permalink
This commit fixes a bug when you have multiple network settings defined.
Basically, if you set an IPv6 or IPv4 gateway, it carries on next
network settings. It is happening because the data is not being
initialized when a new network type is defined. So, the old data still
persists into the pointer.

Signed-off-by: Julio Faracco <***@gmail.com>
---
src/lxc/lxc_native.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c
index 9f6d4b3de8..246623d4a1 100644
--- a/src/lxc/lxc_native.c
+++ b/src/lxc/lxc_native.c
@@ -583,6 +583,9 @@ lxcNetworkWalkCallback(const char *name, virConfValuePtr value, void *data)
parseData->ips = NULL;
parseData->nips = 0;

+ parseData->gateway_ipv4 = NULL;
+ parseData->gateway_ipv6 = NULL;
+
/* Keep the new value */
parseData->type = value->str;
}
--
2.19.1
Michal Privoznik
2018-11-28 14:54:06 UTC
Permalink
Post by Julio Faracco
This commit fixes a bug when you have multiple network settings defined.
Basically, if you set an IPv6 or IPv4 gateway, it carries on next
network settings. It is happening because the data is not being
initialized when a new network type is defined. So, the old data still
persists into the pointer.
---
src/lxc/lxc_native.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c
index 9f6d4b3de8..246623d4a1 100644
--- a/src/lxc/lxc_native.c
+++ b/src/lxc/lxc_native.c
@@ -583,6 +583,9 @@ lxcNetworkWalkCallback(const char *name, virConfValuePtr value, void *data)
parseData->ips = NULL;
parseData->nips = 0;
+ parseData->gateway_ipv4 = NULL;
+ parseData->gateway_ipv6 = NULL;
+
/* Keep the new value */
parseData->type = value->str;
}
So all members are reset except .def, .networks, .privnet. How about
storing them in a temporary variables and calling memset? Alternatively,
we can have a temp variable with c99 initialization + memcpy.

This is just horrible. It's very easy to clear out new member (should
they be added).

Michal

Julio Faracco
2018-11-28 03:38:57 UTC
Permalink
This commit includes a test case for multiple network definitions. It is
useful right now, but it will be more useful when the index used by LXC
version 3.X is implemented to support this new settings.

Signed-off-by: Julio Faracco <***@gmail.com>
---
.../lxcconf2xml-miscnetwork-v3.config | 23 ++++++++++
.../lxcconf2xml-miscnetwork.config | 23 ++++++++++
.../lxcconf2xml-miscnetwork.xml | 45 +++++++++++++++++++
tests/lxcconf2xmltest.c | 2 +
4 files changed, 93 insertions(+)
create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-miscnetwork-v3.config
create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.config
create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.xml

diff --git a/tests/lxcconf2xmldata/lxcconf2xml-miscnetwork-v3.config b/tests/lxcconf2xmldata/lxcconf2xml-miscnetwork-v3.config
new file mode 100644
index 0000000000..b46cb3ee7d
--- /dev/null
+++ b/tests/lxcconf2xmldata/lxcconf2xml-miscnetwork-v3.config
@@ -0,0 +1,23 @@
+lxc.network.type = phys
+lxc.network.link = eth0
+lxc.network.name = eth1
+lxc.network.ipv4 = 192.168.122.2/24
+lxc.network.ipv4.gateway = 192.168.122.1
+lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3596/64
+lxc.network.ipv6.gateway = 2003:db8:1:0:214:1234:fe0b:3595
+
+lxc.network.type = vlan
+lxc.network.flags = up
+lxc.network.link = eth0
+lxc.network.hwaddr = 02:00:15:8f:05:c1
+lxc.network.vlan.id = 2
+
+lxc.network.type = macvlan
+lxc.network.flags = up
+lxc.network.link = eth0
+lxc.network.hwaddr = 02:00:15:8f:05:c1
+lxc.network.macvlan.mode = vepa
+
+lxc.rootfs = /var/lib/lxc/migrate_test/rootfs
+lxc.utsname = migrate_test
+lxc.autodev=1
diff --git a/tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.config b/tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.config
new file mode 100644
index 0000000000..b46cb3ee7d
--- /dev/null
+++ b/tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.config
@@ -0,0 +1,23 @@
+lxc.network.type = phys
+lxc.network.link = eth0
+lxc.network.name = eth1
+lxc.network.ipv4 = 192.168.122.2/24
+lxc.network.ipv4.gateway = 192.168.122.1
+lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3596/64
+lxc.network.ipv6.gateway = 2003:db8:1:0:214:1234:fe0b:3595
+
+lxc.network.type = vlan
+lxc.network.flags = up
+lxc.network.link = eth0
+lxc.network.hwaddr = 02:00:15:8f:05:c1
+lxc.network.vlan.id = 2
+
+lxc.network.type = macvlan
+lxc.network.flags = up
+lxc.network.link = eth0
+lxc.network.hwaddr = 02:00:15:8f:05:c1
+lxc.network.macvlan.mode = vepa
+
+lxc.rootfs = /var/lib/lxc/migrate_test/rootfs
+lxc.utsname = migrate_test
+lxc.autodev=1
diff --git a/tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.xml b/tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.xml
new file mode 100644
index 0000000000..63189cfaec
--- /dev/null
+++ b/tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.xml
@@ -0,0 +1,45 @@
+<domain type='lxc'>
+ <name>migrate_test</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>65536</memory>
+ <currentMemory unit='KiB'>65536</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type>exe</type>
+ <init>/sbin/init</init>
+ </os>
+ <features>
+ <capabilities policy='allow'>
+ </capabilities>
+ </features>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/libexec/libvirt_lxc</emulator>
+ <filesystem type='mount' accessmode='passthrough'>
+ <source dir='/var/lib/lxc/migrate_test/rootfs'/>
+ <target dir='/'/>
+ </filesystem>
+ <interface type='direct'>
+ <mac address='02:00:15:8f:05:c1'/>
+ <source dev='eth0' mode='vepa'/>
+ <link state='up'/>
+ </interface>
+ <hostdev mode='capabilities' type='net'>
+ <source>
+ <interface>eth0</interface>
+ </source>
+ <ip address='192.168.122.2' family='ipv4' prefix='24'/>
+ <ip address='2003:db8:1:0:214:1234:fe0b:3596' family='ipv6' prefix='64'/>
+ <route family='ipv4' address='0.0.0.0' gateway='192.168.122.1'/>
+ <route family='ipv6' address='::' gateway='2003:db8:1:0:214:1234:fe0b:3595'/>
+ </hostdev>
+ <hostdev mode='capabilities' type='net'>
+ <source>
+ <interface>eth0.2</interface>
+ </source>
+ </hostdev>
+ </devices>
+</domain>
diff --git a/tests/lxcconf2xmltest.c b/tests/lxcconf2xmltest.c
index 0766239ec4..2a277042ce 100644
--- a/tests/lxcconf2xmltest.c
+++ b/tests/lxcconf2xmltest.c
@@ -137,6 +137,7 @@ mymain(void)
DO_TEST("physnetwork", false);
DO_TEST("macvlannetwork", false);
DO_TEST("vlannetwork", false);
+ DO_TEST("miscnetwork", false);
DO_TEST("idmap", false);
DO_TEST("memtune", false);
DO_TEST("cputune", false);
@@ -161,6 +162,7 @@ mymain(void)
DO_TEST3("physnetwork", false);
DO_TEST3("macvlannetwork", false);
DO_TEST3("vlannetwork", false);
+ DO_TEST3("miscnetwork", false);
DO_TEST3("idmap", false);
DO_TEST3("memtune", false);
DO_TEST3("cputune", false);
--
2.19.1
Michal Privoznik
2018-11-28 14:54:07 UTC
Permalink
Post by Julio Faracco
This commit includes a test case for multiple network definitions. It is
useful right now, but it will be more useful when the index used by LXC
version 3.X is implemented to support this new settings.
---
.../lxcconf2xml-miscnetwork-v3.config | 23 ++++++++++
.../lxcconf2xml-miscnetwork.config | 23 ++++++++++
.../lxcconf2xml-miscnetwork.xml | 45 +++++++++++++++++++
tests/lxcconf2xmltest.c | 2 +
4 files changed, 93 insertions(+)
create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-miscnetwork-v3.config
create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.config
create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-miscnetwork.xml
ACK

Michal
Loading...