diff options
author | Hans Dedecker <dedeckeh@gmail.com> | 2018-10-01 17:52:01 +0200 |
---|---|---|
committer | Hans Dedecker <dedeckeh@gmail.com> | 2018-10-07 15:18:45 +0200 |
commit | d0fa124eac8bb0e35680d80ea719eada873267be (patch) | |
tree | bfa133760d22f8a867d777ed4963b6ff971e1c9b | |
parent | a0a1e52eb300b574098ae18fc7e6849ff50c2e5e (diff) | |
download | netifd-d0fa124eac8bb0e35680d80ea719eada873267be.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>
-rw-r--r-- | iprule.c | 8 |
1 files changed, 2 insertions, 6 deletions
@@ -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); - } } } |