Index | Thread | Search

From:
Alexander Bluhm <bluhm@openbsd.org>
Subject:
Re: unix(4): use atomic_load_int() to unlocked access to `unp*_*space'
To:
Vitaliy Makkoveev <mvs@openbsd.org>
Cc:
tech@openbsd.org
Date:
Tue, 6 Aug 2024 18:51:26 +0200

Download raw body.

Thread
On Tue, Aug 06, 2024 at 06:35:53PM +0300, Vitaliy Makkoveev wrote:
> We decided to use atomic_load_*() to unlocked access to integers. So
> adjust uipc_attach(). 

OK bluhm@

> Index: sys/kern/uipc_usrreq.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/uipc_usrreq.c,v
> diff -u -p -r1.208 uipc_usrreq.c
> --- sys/kern/uipc_usrreq.c	28 Jun 2024 21:30:24 -0000	1.208
> +++ sys/kern/uipc_usrreq.c	6 Aug 2024 15:32:30 -0000
> @@ -235,12 +235,12 @@ uipc_setaddr(const struct unpcb *unp, st
>   * be large enough for at least one max-size datagram plus address.
>   */
>  #define	PIPSIZ	8192
> -u_int	unpst_sendspace = PIPSIZ;
> -u_int	unpst_recvspace = PIPSIZ;
> -u_int	unpsq_sendspace = PIPSIZ;
> -u_int	unpsq_recvspace = PIPSIZ;
> -u_int	unpdg_sendspace = 2*1024;	/* really max datagram size */
> -u_int	unpdg_recvspace = 16*1024;
> +u_int	unpst_sendspace = PIPSIZ;	/* [a] */
> +u_int	unpst_recvspace = PIPSIZ;	/* [a] */
> +u_int	unpsq_sendspace = PIPSIZ;	/* [a] */
> +u_int	unpsq_recvspace = PIPSIZ;	/* [a] */
> +u_int	unpdg_sendspace = 2*1024;	/* [a] really max datagram size */
> +u_int	unpdg_recvspace = 16*1024;	/* [a] */
>  
>  const struct sysctl_bounded_args unpstctl_vars[] = {
>  	{ UNPCTL_RECVSPACE, &unpst_recvspace, 0, SB_MAX },
> @@ -267,15 +267,21 @@ uipc_attach(struct socket *so, int proto
>  		switch (so->so_type) {
>  
>  		case SOCK_STREAM:
> -			error = soreserve(so, unpst_sendspace, unpst_recvspace);
> +			error = soreserve(so,
> +			    atomic_load_int(&unpst_sendspace),
> +			    atomic_load_int(&unpst_recvspace));
>  			break;
>  
>  		case SOCK_SEQPACKET:
> -			error = soreserve(so, unpsq_sendspace, unpsq_recvspace);
> +			error = soreserve(so,
> +			    atomic_load_int(&unpsq_sendspace),
> +			    atomic_load_int(&unpsq_recvspace));
>  			break;
>  
>  		case SOCK_DGRAM:
> -			error = soreserve(so, unpdg_sendspace, unpdg_recvspace);
> +			error = soreserve(so,
> +			    atomic_load_int(&unpdg_sendspace),
> +			    atomic_load_int(&unpdg_recvspace));
>  			break;
>  
>  		default: