Download raw body.
solock assert in in_pcbrtentry()
> On 24 Dec 2024, at 16:00, Alexander Bluhm <bluhm@openbsd.org> wrote:
>
> Hi,
>
> I would like to assert that socket lock is taken when modifying the
> route cached at the inpcb. This is better than just documenting
> inp_route with [s].
>
> ok?
>
ok mvs
> bluhm
>
> Index: netinet/in_pcb.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.c,v
> diff -u -p -r1.306 in_pcb.c
> --- netinet/in_pcb.c 21 Dec 2024 00:10:04 -0000 1.306
> +++ netinet/in_pcb.c 23 Dec 2024 17:44:33 -0000
> @@ -923,6 +923,8 @@ in_pcblookup_local_lock(struct inpcbtabl
> struct rtentry *
> in_pcbrtentry(struct inpcb *inp)
> {
> + soassertlocked(inp->inp_socket);
> +
> #ifdef INET6
> if (ISSET(inp->inp_flags, INP_IPV6))
> return in6_pcbrtentry(inp);
> Index: netinet/in_pcb.h
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.h,v
> diff -u -p -r1.160 in_pcb.h
> --- netinet/in_pcb.h 21 Dec 2024 00:10:04 -0000 1.160
> +++ netinet/in_pcb.h 23 Dec 2024 19:01:37 -0000
> @@ -138,7 +138,7 @@ struct inpcb {
> u_int16_t inp_lport; /* [t] local port */
> struct socket *inp_socket; /* [I] back pointer to socket */
> caddr_t inp_ppcb; /* pointer to per-protocol pcb */
> - struct route inp_route; /* cached route */
> + struct route inp_route; /* [s] cached route */
> struct refcnt inp_refcnt; /* refcount PCB, delay memory free */
> int inp_flags; /* generic IP/datagram flags */
> union { /* Header prototype. */
>
solock assert in in_pcbrtentry()