OpenBSD cvs log

created 2022-11-26T11:41:17Z
begin 2022-11-23T00:00:00Z
end 2022-11-24T00:00:00Z
path src/sys
commits 13

date 2022-11-23T07:57:39Z
author kn
files src/sys/netinet6/in6.c log diff annotate
src/sys/netinet6/in6_var.h log diff annotate
src/sys/netinet6/nd6.h log diff annotate
message Recommit previous "Remove useless struct in6_ifextra"

This was the right diff after all, I just confused myself between trees.

OK bluhm
---
Remove useless struct in6_ifextra

in6_var.h r1.75 removed all other struct members.

Now It only contains a single struct nd_ifinfo pointer, so address family
specific data might as well be just that.

ND_IFINFO() is the only way nd6_nbr.c and nd6.c access this data, there is
no other usage of if_afdata[].

One allocation and unhelpful indirection less per interface.

All under _KERNEL.

OK claudio

date 2022-11-23T08:05:49Z
author kn
files src/sys/netinet6/nd6.c log diff annotate
message ND_IFINFO() cannot be NULL, use inline read-only idiom for clarity

ND_IFINFO() always points at a valid struct nd_ifinfo; ND6_LLINFO_DELAY
checks for NULL, while other cases in nd6_llinfo_timer() dereference it
unconditionally.

Inline all three per-case read-only usages rather than having one hoisted
*ndi pointer which could be used to write.

nd6_nbr.c already uses this `ND_IFINFO(ifp)->retrans' idiom which makes it
immediately clear that data is only read.

OK bluhm

date 2022-11-23T11:00:27Z
author mbuhl
files src/sys/kern/exec_elf.c log diff annotate
src/sys/kern/kern_exec.c log diff annotate
src/sys/sys/proc.h log diff annotate
message cache ps_auxinfo inside the kernel, to avoid codedump() reading the
copy on userland stack which points at an illicit region.
ok kettenis, deraadt

date 2022-11-23T14:48:27Z
author kn
files src/sys/net/if.c log diff annotate
src/sys/net/if_var.h log diff annotate
message Add *if_nd to struct ifnet, call nd6_if{at,de}tach() directly

*if_afdata[] and struct domain's dom_if{at,de}tach() are only used with
IPv6 Neighbour Discovery in6_dom{at,de}tach(), which allocate/init and
free single struct nd_ifinfo.

Set up a new ND-specific *if_nd member directly to avoid yet another
layer of indirection and thus make the generic domain API obsolete.

The per-interface data is only accessed in nd6.c and nd6_nbr.c through
the ND_IFINFO() macro; it is allocated and freed exactly once during
interface at/detach, so document it as [I]mmutable.

OK bluhm mvs claudio

date 2022-11-23T14:48:28Z
author kn
files src/sys/netinet6/in6.c log diff annotate
src/sys/netinet6/in6_proto.c log diff annotate
src/sys/netinet6/nd6.h log diff annotate
message Add *if_nd to struct ifnet, call nd6_if{at,de}tach() directly

*if_afdata[] and struct domain's dom_if{at,de}tach() are only used with
IPv6 Neighbour Discovery in6_dom{at,de}tach(), which allocate/init and
free single struct nd_ifinfo.

Set up a new ND-specific *if_nd member directly to avoid yet another
layer of indirection and thus make the generic domain API obsolete.

The per-interface data is only accessed in nd6.c and nd6_nbr.c through
the ND_IFINFO() macro; it is allocated and freed exactly once during
interface at/detach, so document it as [I]mmutable.

OK bluhm mvs claudio

date 2022-11-23T14:50:59Z
author kn
files src/sys/net/if.c log diff annotate
src/sys/net/if_var.h log diff annotate
src/sys/sys/domain.h log diff annotate
message Remove unused struct ifnet's *if_afdata[] and struct domain's dom_if{at,de}tach()

Both made obsolete through struct ifnet's previous *if_nd addition.

IPv6 Neighbour Discovery handles per-interface data directly, nothing
else uses this generic domain API anymore.

Outside of _KERNEL, but nothing in base uses them, either.

OK bluhm mvs claudio

date 2022-11-23T15:12:27Z
author mvs
files src/sys/net/if_pflow.c log diff annotate
src/sys/net/if_pflow.h log diff annotate
message Make `so' dereference safe within pflow_output_process().

sosend() has sleep points, so the kernel lock serialisation within
pflow_output_process() doesn't work as expected. The pflow(4) interface
associated socket `so' could be overwritten by concurrent pflowioctl()
thread.

Introduce pflow(4) interface's `sc_lock' rwlock(9) to make `so'
dereference safe. Since the solock() of udp(4) sockets uses netlock as
backend, the `sc_lock' should be taken first. This expands a little
netlock relocking within pflowioctl().

pflow_sendout_mbuf() called by pflow_output_process(), now called
without kernel lock held, so the mp safe counters_pkt(9) used instead
of manual `if_opackets' increment.

Since if_detach() does partial ifnet destruction, now it can't be called
before we finish pflow_output_process() task, otherwise we introduce use
after free for interface counters. In other hand, we need to deny
pflowioctl() to reschedule pflow_output_process() task. The `sc_dyind'
flag introduced for that.

Tested by Hrvoje Popovski.

ok bluhm@

date 2022-11-23T16:57:37Z
author kn
files src/sys/net/if.c log diff annotate
src/sys/netinet6/nd6.c log diff annotate
src/sys/netinet6/nd6.h log diff annotate
message Let nd6_if{at,de}tach() be void and take an ifp argument

Do it like the rest of at/detach routines which modify a struct ifnet
pointer without returning anything.

OK mvs

date 2022-11-23T16:59:10Z
author kn
files src/sys/netinet6/nd6.c log diff annotate
src/sys/netinet6/nd6.h log diff annotate
src/sys/netinet6/nd6_nbr.c log diff annotate
message Inline useless ND_IFINFO() macro

A single cast-free struct pointer dereference needs no indirection.
ND_IFINFO() is under _KERNEL.

OK mvs

date 2022-11-23T19:34:59Z
author kn
files src/sys/netinet6/nd6.h log diff annotate
message Remove unused struct prf_ra; dead since 2017 sys/netinet/icmp6.h r1.45

Get rid of ICMPV6CTL_ND6_DRLIST and ICMPV6CTL_ND6_PRLIST sysctls
With this we can also get rid of in6_prefix and in6_defrouter. They
are meaningless, the kernel no longer tracks this information.

Outside of _KERNEL, but nothing in base uses it, either.
codesearch.debian.net seems to agree.

OK mvs claudio bluhm

date 2022-11-23T19:35:18Z
author kn
files src/sys/netinet6/nd6.h log diff annotate
message Remove unused struct in6_ndifreq; dead since 2013 sys/netinet6/in6_var.h r1.37

Remove unused code manipulating a default interface and its index
This is a leftover from the on-link assumption behavior removal,
which has been deprecated by RFC4861 anyway.

Outside of _KERNEL, but nothing in base uses it, either.
codesearch.debian.net seems to agree.

OK mvs claudio bluhm

date 2022-11-23T19:35:42Z
author kn
files src/sys/netinet6/nd6.h log diff annotate
message Remove unused NDPRF_* defines; dead since 2017 sys/netinet6/nd6.c r1.210

Remove sending of router solicitations and processing of router
advertisements from the kernel. It's handled by slaacd(8) these days.

Outside of _KERNEL, but nothing in base uses it, either.
codesearch.debian.net seems to agree.

OK mvs claudio bluhm

date 2022-11-23T23:43:08Z
author kettenis
files src/sys/dev/fdt/files.fdt log diff annotate
src/sys/dev/fdt/pwmleds.c log diff annotate
message Add pwmleds(4), a driver for PWM controlled LEDs.
For now this only implements keyboard backlight support.

ok kn@