neuter the tun/tap ioctls that try and modify interface flags.
authordlg <dlg@openbsd.org>
Thu, 10 Oct 2024 06:50:58 +0000 (06:50 +0000)
committerdlg <dlg@openbsd.org>
Thu, 10 Oct 2024 06:50:58 +0000 (06:50 +0000)
commit2d7d7ba6dc813775270a7c8852e4981b7d00a0a1
tree38f9211ffd5659a3dbeb361fa386a3b3e6e3fd2f
parent9f532244047171ee3787053fcbfb221094396cfb
neuter the tun/tap ioctls that try and modify interface flags.

historically there was just tun(4) that supported both layer 3 p2p
and ethernet modes, but had to be reconfigured at runtime by userland
to properly change the interface type and interface flags. this is
obviously not a great idea, mostly because a lot of stack behaviour
around address management makes assumptions based on these parameters,
and changing them at runtime confuses things.

splitting tun so ethernet was handled by a specific tap(4) driver
was a first step at locking this down. this takes a further step
by restricting userlands ability to reconfigure the interface flags,
specifically IFF_BROADCAST, IFF_MULTICAST, and IFF_POINTOPOINT.

this change lets userland pass those values via the ioctls, but
only if they match the current set of flags on the interface. these
flags are set appropriate for the type of interface when it's
created, but should not be changed afterwards.

nothing in base uses these ioctls, so the only fall out will be
from ports doing weird things.

ok claudio@ kn@
sys/net/if_tun.c