]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: make netdev_load_one "public" and add a fuzzer for it
authorEvgeny Vereshchagin <evvers@ya.ru>
Sun, 4 Nov 2018 21:06:03 +0000 (22:06 +0100)
committerEvgeny Vereshchagin <evvers@ya.ru>
Tue, 6 Nov 2018 18:01:32 +0000 (19:01 +0100)
32 files changed:
src/network/fuzz-netdev-parser.c [new file with mode: 0644]
src/network/meson.build
src/network/netdev/netdev.c
src/network/netdev/netdev.h
test/fuzz/fuzz-netdev-parser/11-dummy.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/12-dummy.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/21-macvlan.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/21-macvtap.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/21-vlan.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-bond-active-backup-slave.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-bond.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-bridge.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-geneve.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-gre-tunnel.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-gretap-tunnel.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-ip6gre-tunnel.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-ip6tnl-tunnel.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-ipip-tunnel-independent.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-ipip-tunnel.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-ipvlan.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-sit-tunnel.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-tap.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-tun.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-vcan.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-veth.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-vrf.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-vti-tunnel.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-vti6-tunnel.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-vxlan.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/25-wireguard.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/26-bridge.netdev [new file with mode: 0644]
test/fuzz/fuzz-netdev-parser/github-10615 [new file with mode: 0644]

diff --git a/src/network/fuzz-netdev-parser.c b/src/network/fuzz-netdev-parser.c
new file mode 100644 (file)
index 0000000..adc8554
--- /dev/null
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include "fd-util.h"
+#include "fileio.h"
+#include "fs-util.h"
+#include "fuzz.h"
+#include "networkd-manager.h"
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+        _cleanup_(manager_freep) Manager *manager = NULL;
+        _cleanup_fclose_ FILE *f = NULL;
+        _cleanup_(unlink_tempfilep) char netdev_config[] = "/tmp/fuzz-networkd.XXXXXX";
+
+        assert_se(fmkostemp_safe(netdev_config, "r+", &f) == 0);
+        if (size != 0)
+                assert_se(fwrite(data, size, 1, f) == 1);
+
+        rewind(f);
+        assert_se(manager_new(&manager) >= 0);
+        (void) netdev_load_one(manager, netdev_config);
+        return 0;
+}
index 175d2f822cc3357a8337eab0e5fca333997ac1e7..db03e2234ffbef8bb03e7cc72160f40be48734ee 100644 (file)
@@ -136,6 +136,16 @@ if conf.get('ENABLE_NETWORKD') == 1
         install_data('networkd.conf',
                      install_dir : pkgsysconfdir)
 
+        fuzzers += [
+    [['src/network/fuzz-netdev-parser.c',
+      'src/fuzz/fuzz.h'],
+     [libnetworkd_core,
+      libudev_static,
+      libsystemd_network,
+      libshared],
+     [threads]],
+    ]
+
         tests += [
     [['src/network/test-networkd-conf.c'],
      [libnetworkd_core,
index 52b40dd68e296682fee8f3a7778b28484c97aa7c..9ec16579e414ad00ce1fe74ab6bb326922850aa7 100644 (file)
@@ -594,7 +594,7 @@ int netdev_join(NetDev *netdev, Link *link, sd_netlink_message_handler_t callbac
         return 0;
 }
 
-static int netdev_load_one(Manager *manager, const char *filename) {
+int netdev_load_one(Manager *manager, const char *filename) {
         _cleanup_(netdev_unrefp) NetDev *netdev_raw = NULL, *netdev = NULL;
         _cleanup_fclose_ FILE *file = NULL;
         const char *dropin_dirname;
index 8c884bb124a44ccbab9d781420b4512dfec96d5c..a1557bec4184be7b4c3f49c2cc34704ed749fef1 100644 (file)
@@ -146,6 +146,7 @@ extern const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX];
 #define NETDEV(n) (&(n)->meta)
 
 int netdev_load(Manager *manager);
+int netdev_load_one(Manager *manager, const char *filename);
 void netdev_drop(NetDev *netdev);
 
 NetDev *netdev_unref(NetDev *netdev);
diff --git a/test/fuzz/fuzz-netdev-parser/11-dummy.netdev b/test/fuzz/fuzz-netdev-parser/11-dummy.netdev
new file mode 100644 (file)
index 0000000..6797eb4
--- /dev/null
@@ -0,0 +1,3 @@
+[NetDev]
+Name=test1
+Kind=dummy
diff --git a/test/fuzz/fuzz-netdev-parser/12-dummy.netdev b/test/fuzz/fuzz-netdev-parser/12-dummy.netdev
new file mode 100644 (file)
index 0000000..a7fdc0f
--- /dev/null
@@ -0,0 +1,3 @@
+[NetDev]
+Name=dummy98
+Kind=dummy
diff --git a/test/fuzz/fuzz-netdev-parser/21-macvlan.netdev b/test/fuzz/fuzz-netdev-parser/21-macvlan.netdev
new file mode 100644 (file)
index 0000000..e9a3c5b
--- /dev/null
@@ -0,0 +1,3 @@
+[NetDev]
+Name=macvlan99
+Kind=macvlan
diff --git a/test/fuzz/fuzz-netdev-parser/21-macvtap.netdev b/test/fuzz/fuzz-netdev-parser/21-macvtap.netdev
new file mode 100644 (file)
index 0000000..2c23aac
--- /dev/null
@@ -0,0 +1,3 @@
+[NetDev]
+Name=macvtap99
+Kind=macvtap
diff --git a/test/fuzz/fuzz-netdev-parser/21-vlan.netdev b/test/fuzz/fuzz-netdev-parser/21-vlan.netdev
new file mode 100644 (file)
index 0000000..fe9801c
--- /dev/null
@@ -0,0 +1,10 @@
+[NetDev]
+Name=vlan99
+Kind=vlan
+
+[VLAN]
+Id=99
+GVRP=true
+MVRP=true
+LooseBinding=true
+ReorderHeader=true
diff --git a/test/fuzz/fuzz-netdev-parser/25-bond-active-backup-slave.netdev b/test/fuzz/fuzz-netdev-parser/25-bond-active-backup-slave.netdev
new file mode 100644 (file)
index 0000000..1bbbf75
--- /dev/null
@@ -0,0 +1,6 @@
+[NetDev]
+Name=bond199
+Kind=bond
+
+[Bond]
+Mode=active-backup
diff --git a/test/fuzz/fuzz-netdev-parser/25-bond.netdev b/test/fuzz/fuzz-netdev-parser/25-bond.netdev
new file mode 100644 (file)
index 0000000..61c54c4
--- /dev/null
@@ -0,0 +1,18 @@
+[NetDev]
+Name=bond99
+Kind=bond
+
+[Bond]
+Mode=802.3ad
+TransmitHashPolicy=layer3+4
+MIIMonitorSec=1s
+LACPTransmitRate=fast
+UpDelaySec=2s
+DownDelaySec=2s
+ResendIGMP=4
+MinLinks=1
+AdActorSysPrio=1218
+AdUserPortKey=811
+AdActorSystem=00:11:22:33:44:55
+# feed the sanitizer
+AdActorSystem=00:11:22:33:44:55
diff --git a/test/fuzz/fuzz-netdev-parser/25-bridge.netdev b/test/fuzz/fuzz-netdev-parser/25-bridge.netdev
new file mode 100644 (file)
index 0000000..e23abd5
--- /dev/null
@@ -0,0 +1,13 @@
+[NetDev]
+Name=bridge99
+Kind=bridge
+
+[Bridge]
+HelloTimeSec=9
+MaxAgeSec=9
+ForwardDelaySec=9
+AgeingTimeSec=9
+Priority=9
+MulticastQuerier= true
+MulticastSnooping=true
+STP=true
diff --git a/test/fuzz/fuzz-netdev-parser/25-geneve.netdev b/test/fuzz/fuzz-netdev-parser/25-geneve.netdev
new file mode 100644 (file)
index 0000000..279d713
--- /dev/null
@@ -0,0 +1,12 @@
+[NetDev]
+Name=geneve99
+Kind=geneve
+
+[GENEVE]
+Id=99
+Remote=192.168.22.1
+TTL=1
+UDPChecksum=true
+UDP6ZeroChecksumTx=true
+UDP6ZeroChecksumRx=true
+DestinationPort=6082
diff --git a/test/fuzz/fuzz-netdev-parser/25-gre-tunnel.netdev b/test/fuzz/fuzz-netdev-parser/25-gre-tunnel.netdev
new file mode 100644 (file)
index 0000000..94d9320
--- /dev/null
@@ -0,0 +1,7 @@
+[NetDev]
+Name=gretun99
+Kind=gre
+
+[Tunnel]
+Local=10.65.223.238
+Remote=10.65.223.239
diff --git a/test/fuzz/fuzz-netdev-parser/25-gretap-tunnel.netdev b/test/fuzz/fuzz-netdev-parser/25-gretap-tunnel.netdev
new file mode 100644 (file)
index 0000000..769e765
--- /dev/null
@@ -0,0 +1,7 @@
+[NetDev]
+Name=gretap99
+Kind=gretap
+
+[Tunnel]
+Local=10.65.223.238
+Remote=10.65.223.239
diff --git a/test/fuzz/fuzz-netdev-parser/25-ip6gre-tunnel.netdev b/test/fuzz/fuzz-netdev-parser/25-ip6gre-tunnel.netdev
new file mode 100644 (file)
index 0000000..b16e0b4
--- /dev/null
@@ -0,0 +1,7 @@
+[NetDev]
+Name=ip6gretap99
+Kind=ip6gretap
+
+[Tunnel]
+Local=2a00:ffde:4567:edde::4987
+Remote=2001:473:fece:cafe::5179
diff --git a/test/fuzz/fuzz-netdev-parser/25-ip6tnl-tunnel.netdev b/test/fuzz/fuzz-netdev-parser/25-ip6tnl-tunnel.netdev
new file mode 100644 (file)
index 0000000..713e685
--- /dev/null
@@ -0,0 +1,8 @@
+[NetDev]
+Name=ip6tnl99
+Kind=ip6tnl
+
+[Tunnel]
+Mode=ip6ip6
+Local=2a00:ffde:4567:edde::4987
+Remote=2001:473:fece:cafe::5179
diff --git a/test/fuzz/fuzz-netdev-parser/25-ipip-tunnel-independent.netdev b/test/fuzz/fuzz-netdev-parser/25-ipip-tunnel-independent.netdev
new file mode 100644 (file)
index 0000000..36ff8d9
--- /dev/null
@@ -0,0 +1,9 @@
+[NetDev]
+Name=ipiptun99
+Kind=ipip
+MTUBytes=1480
+
+[Tunnel]
+Local=192.168.223.238
+Remote=192.169.224.239
+Independent=true
diff --git a/test/fuzz/fuzz-netdev-parser/25-ipip-tunnel.netdev b/test/fuzz/fuzz-netdev-parser/25-ipip-tunnel.netdev
new file mode 100644 (file)
index 0000000..159ac72
--- /dev/null
@@ -0,0 +1,8 @@
+[NetDev]
+Name=ipiptun99
+Kind=ipip
+MTUBytes=1480
+
+[Tunnel]
+Local=192.168.223.238
+Remote=192.169.224.239
diff --git a/test/fuzz/fuzz-netdev-parser/25-ipvlan.netdev b/test/fuzz/fuzz-netdev-parser/25-ipvlan.netdev
new file mode 100644 (file)
index 0000000..9921b78
--- /dev/null
@@ -0,0 +1,6 @@
+[NetDev]
+Name=ipvlan99
+Kind=ipvlan
+
+[IPVLAN]
+Mode=L2
diff --git a/test/fuzz/fuzz-netdev-parser/25-sit-tunnel.netdev b/test/fuzz/fuzz-netdev-parser/25-sit-tunnel.netdev
new file mode 100644 (file)
index 0000000..406d74b
--- /dev/null
@@ -0,0 +1,7 @@
+[NetDev]
+Name=sittun99
+Kind=sit
+
+[Tunnel]
+Local=10.65.223.238
+Remote=10.65.223.239
diff --git a/test/fuzz/fuzz-netdev-parser/25-tap.netdev b/test/fuzz/fuzz-netdev-parser/25-tap.netdev
new file mode 100644 (file)
index 0000000..bf5e7fe
--- /dev/null
@@ -0,0 +1,7 @@
+[NetDev]
+Name=tap99
+Kind=tap
+
+[Tap]
+MultiQueue=true
+PacketInfo=true
diff --git a/test/fuzz/fuzz-netdev-parser/25-tun.netdev b/test/fuzz/fuzz-netdev-parser/25-tun.netdev
new file mode 100644 (file)
index 0000000..380ab21
--- /dev/null
@@ -0,0 +1,7 @@
+[NetDev]
+Name=tun99
+Kind=tun
+
+[Tun]
+MultiQueue=true
+PacketInfo=true
diff --git a/test/fuzz/fuzz-netdev-parser/25-vcan.netdev b/test/fuzz/fuzz-netdev-parser/25-vcan.netdev
new file mode 100644 (file)
index 0000000..ff19795
--- /dev/null
@@ -0,0 +1,3 @@
+[NetDev]
+Name=vcan99
+Kind=vcan
diff --git a/test/fuzz/fuzz-netdev-parser/25-veth.netdev b/test/fuzz/fuzz-netdev-parser/25-veth.netdev
new file mode 100644 (file)
index 0000000..9ae4ad5
--- /dev/null
@@ -0,0 +1,8 @@
+[NetDev]
+Name=veth99
+Kind=veth
+MACAddress=12:34:56:78:9a:bc
+
+[Peer]
+Name=veth-peer
+MACAddress=12:34:56:78:9a:bd
diff --git a/test/fuzz/fuzz-netdev-parser/25-vrf.netdev b/test/fuzz/fuzz-netdev-parser/25-vrf.netdev
new file mode 100644 (file)
index 0000000..bf949ec
--- /dev/null
@@ -0,0 +1,6 @@
+[NetDev]
+Name=vrf99
+Kind=vrf
+
+[VRF]
+TableId=42
diff --git a/test/fuzz/fuzz-netdev-parser/25-vti-tunnel.netdev b/test/fuzz/fuzz-netdev-parser/25-vti-tunnel.netdev
new file mode 100644 (file)
index 0000000..cec6259
--- /dev/null
@@ -0,0 +1,7 @@
+[NetDev]
+Name=vtitun99
+Kind=vti
+
+[Tunnel]
+Local=10.65.223.238
+Remote=10.65.223.239
diff --git a/test/fuzz/fuzz-netdev-parser/25-vti6-tunnel.netdev b/test/fuzz/fuzz-netdev-parser/25-vti6-tunnel.netdev
new file mode 100644 (file)
index 0000000..d150c9c
--- /dev/null
@@ -0,0 +1,7 @@
+[NetDev]
+Name=vti6tun99
+Kind=vti6
+
+[Tunnel]
+Local=2a00:ffde:4567:edde::4987
+Remote=2001:473:fece:cafe::5179
diff --git a/test/fuzz/fuzz-netdev-parser/25-vxlan.netdev b/test/fuzz/fuzz-netdev-parser/25-vxlan.netdev
new file mode 100644 (file)
index 0000000..819a583
--- /dev/null
@@ -0,0 +1,16 @@
+[NetDev]
+Name=vxlan99
+Kind=vxlan
+
+[VXLAN]
+Id=999
+L2MissNotification=true
+L3MissNotification=true
+RouteShortCircuit=true
+UDPChecksum=true
+UDP6ZeroChecksumTx=true
+UDP6ZeroChecksumRx=true
+RemoteChecksumTx=true
+RemoteChecksumRx=true
+GroupPolicyExtension=true
+DestinationPort=5555
diff --git a/test/fuzz/fuzz-netdev-parser/25-wireguard.netdev b/test/fuzz/fuzz-netdev-parser/25-wireguard.netdev
new file mode 100644 (file)
index 0000000..e07d685
--- /dev/null
@@ -0,0 +1,12 @@
+[NetDev]
+Name=wg99
+Kind=wireguard
+
+[WireGuard]
+PrivateKey=EEGlnEPYJV//kbvvIqxKkQwOiS+UENyPncC4bF46ong=
+ListenPort=51820
+
+[WireGuardPeer]
+PublicKey=RDf+LSpeEre7YEIKaxg+wbpsNV7du+ktR99uBEtIiCA=
+AllowedIPs=fd31:bf08:57cb::/48,192.168.26.0/24
+Endpoint=wireguard.example.com:51820
diff --git a/test/fuzz/fuzz-netdev-parser/26-bridge.netdev b/test/fuzz/fuzz-netdev-parser/26-bridge.netdev
new file mode 100644 (file)
index 0000000..9b31e06
--- /dev/null
@@ -0,0 +1,3 @@
+[NetDev]
+Name=bridge99
+Kind=bridge
diff --git a/test/fuzz/fuzz-netdev-parser/github-10615 b/test/fuzz/fuzz-netdev-parser/github-10615
new file mode 100644 (file)
index 0000000..1151ebf
--- /dev/null
@@ -0,0 +1,5 @@
+[NetDev]
+Name=veth99
+Kind=veth
+MACAddress=12:34:56:78:9a:bc
+MACAddress=12:34:56:78:9a:bc