From: Hans Dedecker Date: Mon, 1 Oct 2018 15:52:01 +0000 (+0200) Subject: iprule: fix segfault (FS#1875) X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=aeec2a0c6b6bc16a2e43de8f79ddee1bf3d1af40;p=oweals%2Fnetifd.git 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 --- 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); - } } }