segmentation fault on interface state change
Klemens Nanni
Tue Mar 27 19:37:36 2018
Running dhcpcd on OpenBSD -CURRENT for stateless DHCPv6 to configure DNS,
both 7.0.1 and 7.0.2 dump core whenever my egress interface goes up after being
down, that is everytime I resume/suspend, switch wifi on/off, etc.
Versions and configuration:
# sysctl kern.version
kern.version=OpenBSD 6.3 (GENERIC.MP) #92: Wed Mar 21 15:23:36 MDT 2018
deraadt@xxxxxxxxxxxxxxxxx:/usr/src/sys/arch/amd64/compile/GENERIC.MP
# dhcpcd --version
dhcpcd 7.0.2
Copyright (c) 2006-2018 Roy Marples
Compiled in features: INET ARP ARPing IPv4LL INET6 DHCPv6 AUTH
# cat /etc/dhcpcd.conf
background
ipv6only
ipv6ra_fork
ipv6ra_noautoconf
option domain_name domain_name_servers domain_search
require domain_name_servers
# rcctl get dhcpcd flags
trunk0
Reproduction (note how the first `ifconfig' does not trigger it):
# ifconfig trunk0 down up
# rcctl check dhcpcd
dhcpcd(ok)
# ifconfig trunk0 down ; ifconfig trunk0 up
# rcctl check dhcpcd
dhcpcd(failed)
Analysis (compiled with `-g3 -ggdb'):
# egdb -se $(which dhcpcd) -c /dhcpcd.core
GNU gdb (GDB) 7.12.1
[...]
Reading symbols from /usr/local/sbin/dhcpcd...done.
[New process 586556]
Core was generated by `dhcpcd'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x0000139685c3f269 in dhcp6_handleifa (cmd=12, ia=0x13990027ac00, pid=0) at dhcp6.c:3895
3895 ifp->options->options & DHCPCD_DHCP6 &&
(gdb) p ifp->options
$1 = (struct if_options *) 0x0
(gdb) bt
#0 0x0000139685c3f269 in dhcp6_handleifa (cmd=12, ia=0x13990027ac00, pid=0) at dhcp6.c:3895
#1 0x0000139685c35cf6 in ipv6_handleifa (ctx=0x7f7ffffe5e48, cmd=12, ifs=0x139911d75000, ifname=0x1398d72e9fed "trunk0", addr=0x1398d72e9e90, prefix_len=64 '@', addrflags=0, pid=0)
at ipv6.c:1179
#2 0x0000139685c0c418 in if_learnaddrs (ctx=0x7f7ffffe5e48, ifs=0x139911d75000, ifaddrs=0x7f7ffffe5ab8) at if.c:274
#3 0x0000139685c040c9 in dhcpcd_handleinterface (arg=0x7f7ffffe5e48, action=0, ifname=0x139970f7df18 "trunk0") at dhcpcd.c:1016
#4 0x0000139685c03b6a in dhcpcd_handlecarrier (ctx=0x7f7ffffe5e48, carrier=1, flags=34818, ifname=0x139970f7df18 "trunk0") at dhcpcd.c:739
#5 0x0000139685c221a0 in if_ifinfo (ctx=0x7f7ffffe5e48, ifm=0x139908953a00) at if-bsd.c:965
#6 0x0000139685c218db in if_dispatch (ctx=0x7f7ffffe5e48, rtm=0x139908953a00) at if-bsd.c:1199
#7 0x0000139685c2181e in if_handlelink (ctx=0x7f7ffffe5e48) at if-bsd.c:1235
#8 0x0000139685c0519d in dhcpcd_handlelink (arg=0x7f7ffffe5e48) at dhcpcd.c:1035
#9 0x0000139685c0a68b in eloop_start (eloop=0x1398e9fc6a00, signals=0x7f7ffffe5f58) at eloop.c:963
#10 0x0000139685c079ed in main (argc=2, argv=0x7f7ffffe61c8) at dhcpcd.c:1994
I have yet to look into this actually, but my time is limited. Feel free
to hit me with the clue-stick, I can also test other setups in order to
fix this.
Archive administrator: postmaster@marples.name