On Tue, Aug 08, 2023 at 10:40:46PM +0200, Alexander Bluhm wrote:
> On Fri, Aug 04, 2023 at 12:38:23AM +0300, Vitaliy Makkoveev wrote:
> > @@ -1856,6 +1856,9 @@ sosetopt(struct socket *so, int level, i
> > case SO_SNDLOWAT:
> > case SO_RCVLOWAT:
> > {
> > + struct sockbuf *sb = (optname == SO_SNDBUF ||
> > + optname == SO_SNDLOWAT ?
> > + &so->so_snd : &so->so_rcv);
> > @@ -1910,6 +1896,8 @@ sosetopt(struct socket *so, int level, i
> > case SO_SNDTIMEO:
> > case SO_RCVTIMEO:
> > {
> > + struct sockbuf *sb = (optname == SO_SNDTIMEO ?
> > + &so->so_snd : &so->so_rcv);
>
> Would it be nicer to set sb in the switch (optname) at the begining?
>
> struct sockbuf *sb = NULL;
>
> switch (optname) {
> case SO_SNDBUF:
> case SO_SNDLOWAT:
> case SO_SNDTIMEO:
> sb = &so->so_snd;
> break;
> case SO_RCVBUF:
> case SO_RCVLOWAT:
> case SO_RCVTIMEO:
> sb = &so->so_rcv;
> break;
> case SO_BINDANY:
> ...
> }
>
> Anyway, OK bluhm@
>
I think it's better to merge SO_BINDANY cases from both switch blocks.
This time SO_LINGER case is separated, so there is no reason for
dedicated switch block.
Index: sys/kern/uipc_socket.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_socket.c,v
retrieving revision 1.307
diff -u -p -r1.307 uipc_socket.c
--- sys/kern/uipc_socket.c 3 Aug 2023 09:49:08 -0000 1.307
+++ sys/kern/uipc_socket.c 8 Aug 2023 21:35:50 -0000
@@ -1800,13 +1800,6 @@ sosetopt(struct socket *so, int level, i
error = ENOPROTOOPT;
} else {
switch (optname) {
- case SO_BINDANY:
- if ((error = suser(curproc)) != 0) /* XXX */
- return (error);
- break;
- }
-
- switch (optname) {
case SO_LINGER:
if (m == NULL || m->m_len != sizeof (struct linger) ||
@@ -1824,6 +1817,9 @@ sosetopt(struct socket *so, int level, i
break;
case SO_BINDANY:
+ if ((error = suser(curproc)) != 0) /* XXX */
+ return (error);
+ /* FALLTHROUGH */
case SO_DEBUG:
case SO_KEEPALIVE:
case SO_USELOOPBACK: