Use a workaround for detached parent in carp_proto_input_c().
authormpi <mpi@openbsd.org>
Thu, 25 Jan 2018 14:47:35 +0000 (14:47 +0000)
committermpi <mpi@openbsd.org>
Thu, 25 Jan 2018 14:47:35 +0000 (14:47 +0000)
commitc05fa6e051dd392d2aa073c1b05cc39dc361ab57
tree95382ca6f24c2fab98b9b291a3ccbea5b8f7a0b2
parent8124814956605482b4beb664ecbd29d2ed999f72
Use a workaround for detached parent in carp_proto_input_c().

A NULL dereference can happen since processing protocol layer is
deffered to a second task.  In other words the NET_LOCK() is released
then regrabbed between ip_input() and carp_proto_input().

The same workaround is already in use in carp_output() due to deffered
processing in case of IPsec.

The real fix is to make carp(4) MP-safe and use if_get(9) there, any
taker?

Found & fix tested by Hrvoje Popovski.
sys/netinet/ip_carp.c