Index | Thread | Search

From:
Vitaliy Makkoveev <otto@bsdbox.dev>
Subject:
Re: solock assert in in_pcbrtentry()
To:
Alexander Bluhm <bluhm@openbsd.org>
Cc:
tech@openbsd.org
Date:
Tue, 24 Dec 2024 19:04:15 +0300

Download raw body.

Thread
> 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. */
>