summaryrefslogtreecommitdiff
path: root/iprule.c
diff options
context:
space:
mode:
authorHans Dedecker <dedeckeh@gmail.com>2018-10-01 17:52:01 +0200
committerHans Dedecker <dedeckeh@gmail.com>2018-10-01 22:14:14 +0200
commitaeec2a0c6b6bc16a2e43de8f79ddee1bf3d1af40 (patch)
tree4661fee837f55ae59518c926868643748932fdad /iprule.c
parent94e156f90a58e0d4bea1248bd6088cf92192cdc1 (diff)
downloadnetifd-aeec2a0c6b6bc16a2e43de8f79ddee1bf3d1af40.tar.gz
iprule: fix segfault (FS#1875)
Fix segfault in generic_interface_cb by checking the IPRULE_OUT/IPRULE_IN flags before doing the strcmp for the possible configured out/in interface(s) of the ip rule. Also don't copy the interface layer3 device as the layer 3 device is not yet known when IFEV_CREATE event is launched. The layer3 device will be known when the IFEV_UP event is processed in rule_out_cb/rule_in_cb. Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Diffstat (limited to 'iprule.c')
-rw-r--r--iprule.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/iprule.c b/iprule.c
index d3f6073..27f0c89 100644
--- a/iprule.c
+++ b/iprule.c
@@ -180,15 +180,11 @@ static void generic_interface_cb(
if (rule_ready(rule))
continue;
- if (!strcmp(rule->out_iface, iface->name)) {
- memcpy(rule->out_dev, iface->l3_dev.dev->ifname, sizeof(rule->out_dev));
+ if ((rule->flags & IPRULE_OUT) && !strcmp(rule->out_iface, iface->name))
interface_add_user(&rule->out_iface_user, iface);
- }
- if (!strcmp(rule->in_iface, iface->name)) {
- memcpy(rule->in_dev, iface->l3_dev.dev->ifname, sizeof(rule->in_dev));
+ if ((rule->flags & IPRULE_IN) && !strcmp(rule->in_iface, iface->name))
interface_add_user(&rule->in_iface_user, iface);
- }
}
}