On Thu, Sep 01, 2022 at 08:42:33PM +0300, Vitaliy Makkoveev wrote:
> Well, let's be conservative. The `unp2' assignment restored to it's
> original place.

OK bluhm@

> Index: sys/kern/uipc_usrreq.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/uipc_usrreq.c,v
> retrieving revision 1.181
> diff -u -p -r1.181 uipc_usrreq.c
> --- sys/kern/uipc_usrreq.c    31 Aug 2022 21:23:02 -0000      1.181
> +++ sys/kern/uipc_usrreq.c    1 Sep 2022 17:20:32 -0000
> @@ -140,6 +140,7 @@ const struct pr_usrreqs uipc_usrreqs = {
>       .pru_send       = uipc_send,
>       .pru_abort      = uipc_abort,
>       .pru_sense      = uipc_sense,
> +     .pru_connect2   = uipc_connect2,
>  };
>  
>  void
> @@ -215,7 +216,6 @@ uipc_usrreq(struct socket *so, int req, 
>      struct mbuf *control, struct proc *p)
>  {
>       struct unpcb *unp = sotounpcb(so);
> -     struct unpcb *unp2;
>       struct socket *so2;
>       int error = 0;
>  
> @@ -232,21 +232,6 @@ uipc_usrreq(struct socket *so, int req, 
>  
>       switch (req) {
>  
> -     case PRU_CONNECT2:
> -             error = unp_connect2(so, (struct socket *)nam);
> -             if (!error) {
> -                     unp->unp_connid.uid = p->p_ucred->cr_uid;
> -                     unp->unp_connid.gid = p->p_ucred->cr_gid;
> -                     unp->unp_connid.pid = p->p_p->ps_pid;
> -                     unp->unp_flags |= UNP_FEIDS;
> -                     unp2 = sotounpcb((struct socket *)nam);
> -                     unp2->unp_connid.uid = p->p_ucred->cr_uid;
> -                     unp2->unp_connid.gid = p->p_ucred->cr_gid;
> -                     unp2->unp_connid.pid = p->p_p->ps_pid;
> -                     unp2->unp_flags |= UNP_FEIDS;
> -             }
> -             break;
> -
>       case PRU_SOCKADDR:
>               uipc_setaddr(unp, nam);
>               break;
> @@ -592,6 +577,28 @@ uipc_sense(struct socket *so, struct sta
>           sb->st_mtim.tv_nsec =
>           sb->st_ctim.tv_nsec = unp->unp_ctime.tv_nsec;
>       sb->st_ino = unp->unp_ino;
> +
> +     return (0);
> +}
> +
> +int
> +uipc_connect2(struct socket *so, struct socket *so2)
> +{
> +     struct unpcb *unp = sotounpcb(so), *unp2;
> +     int error;
> +     
> +     if ((error = unp_connect2(so, so2)))
> +             return (error);
> +
> +     unp->unp_connid.uid = curproc->p_ucred->cr_uid;
> +     unp->unp_connid.gid = curproc->p_ucred->cr_gid;
> +     unp->unp_connid.pid = curproc->p_p->ps_pid;
> +     unp->unp_flags |= UNP_FEIDS;
> +     unp2 = sotounpcb(so2);
> +     unp2->unp_connid.uid = curproc->p_ucred->cr_uid;
> +     unp2->unp_connid.gid = curproc->p_ucred->cr_gid;
> +     unp2->unp_connid.pid = curproc->p_p->ps_pid;
> +     unp2->unp_flags |= UNP_FEIDS;
>  
>       return (0);
>  }
> Index: sys/net/pfkeyv2.c
> ===================================================================
> RCS file: /cvs/src/sys/net/pfkeyv2.c,v
> retrieving revision 1.248
> diff -u -p -r1.248 pfkeyv2.c
> --- sys/net/pfkeyv2.c 31 Aug 2022 21:23:02 -0000      1.248
> +++ sys/net/pfkeyv2.c 1 Sep 2022 17:20:33 -0000
> @@ -412,11 +412,6 @@ pfkeyv2_usrreq(struct socket *so, int re
>       }
>  
>       switch (req) {
> -     /* no connect, bind, accept. Socket is connected from the start */
> -     case PRU_CONNECT2:
> -             error = EOPNOTSUPP;
> -             break;
> -
>       /* minimal support, just implement a fake peer address */
>       case PRU_SOCKADDR:
>               error = EINVAL;
> Index: sys/net/rtsock.c
> ===================================================================
> RCS file: /cvs/src/sys/net/rtsock.c,v
> retrieving revision 1.349
> diff -u -p -r1.349 rtsock.c
> --- sys/net/rtsock.c  31 Aug 2022 21:23:02 -0000      1.349
> +++ sys/net/rtsock.c  1 Sep 2022 17:20:33 -0000
> @@ -237,11 +237,6 @@ route_usrreq(struct socket *so, int req,
>       }
>  
>       switch (req) {
> -     /* no connect, bind, accept. Socket is connected from the start */
> -     case PRU_CONNECT2:
> -             error = EOPNOTSUPP;
> -             break;
> -
>       /* minimal support, just implement a fake peer address */
>       case PRU_SOCKADDR:
>               error = EINVAL;
> Index: sys/netinet/ip_divert.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/ip_divert.c,v
> retrieving revision 1.82
> diff -u -p -r1.82 ip_divert.c
> --- sys/netinet/ip_divert.c   31 Aug 2022 21:23:02 -0000      1.82
> +++ sys/netinet/ip_divert.c   1 Sep 2022 17:20:33 -0000
> @@ -279,7 +279,6 @@ divert_usrreq(struct socket *so, int req
>               in_setpeeraddr(inp, addr);
>               break;
>  
> -     case PRU_CONNECT2:
>       case PRU_FASTTIMO:
>       case PRU_SLOWTIMO:
>       case PRU_PROTORCV:
> Index: sys/netinet/raw_ip.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/raw_ip.c,v
> retrieving revision 1.143
> diff -u -p -r1.143 raw_ip.c
> --- sys/netinet/raw_ip.c      31 Aug 2022 21:23:02 -0000      1.143
> +++ sys/netinet/raw_ip.c      1 Sep 2022 17:20:33 -0000
> @@ -478,10 +478,6 @@ rip_usrreq(struct socket *so, int req, s
>  
>       switch (req) {
>  
> -     case PRU_CONNECT2:
> -             error = EOPNOTSUPP;
> -             break;
> -
>       case PRU_SOCKADDR:
>               in_setsockaddr(inp, nam);
>               break;
> Index: sys/netinet/tcp_usrreq.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/tcp_usrreq.c,v
> retrieving revision 1.202
> diff -u -p -r1.202 tcp_usrreq.c
> --- sys/netinet/tcp_usrreq.c  31 Aug 2022 21:23:02 -0000      1.202
> +++ sys/netinet/tcp_usrreq.c  1 Sep 2022 17:20:34 -0000
> @@ -223,13 +223,6 @@ tcp_usrreq(struct socket *so, int req, s
>  
>       switch (req) {
>  
> -     /*
> -      * Create a TCP connection between two sockets.
> -      */
> -     case PRU_CONNECT2:
> -             error = EOPNOTSUPP;
> -             break;
> -
>       case PRU_SOCKADDR:
>  #ifdef INET6
>               if (inp->inp_flags & INP_IPV6)
> Index: sys/netinet/udp_usrreq.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/udp_usrreq.c,v
> retrieving revision 1.297
> diff -u -p -r1.297 udp_usrreq.c
> --- sys/netinet/udp_usrreq.c  31 Aug 2022 21:23:02 -0000      1.297
> +++ sys/netinet/udp_usrreq.c  1 Sep 2022 17:20:34 -0000
> @@ -1089,10 +1089,6 @@ udp_usrreq(struct socket *so, int req, s
>        */
>       switch (req) {
>  
> -     case PRU_CONNECT2:
> -             error = EOPNOTSUPP;
> -             break;
> -
>       case PRU_SOCKADDR:
>  #ifdef INET6
>               if (inp->inp_flags & INP_IPV6)
> Index: sys/netinet6/ip6_divert.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/ip6_divert.c,v
> retrieving revision 1.81
> diff -u -p -r1.81 ip6_divert.c
> --- sys/netinet6/ip6_divert.c 31 Aug 2022 21:23:02 -0000      1.81
> +++ sys/netinet6/ip6_divert.c 1 Sep 2022 17:20:34 -0000
> @@ -285,7 +285,6 @@ divert6_usrreq(struct socket *so, int re
>               in6_setpeeraddr(inp, addr);
>               break;
>  
> -     case PRU_CONNECT2:
>       case PRU_FASTTIMO:
>       case PRU_SLOWTIMO:
>       case PRU_PROTORCV:
> Index: sys/netinet6/raw_ip6.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/raw_ip6.c,v
> retrieving revision 1.164
> diff -u -p -r1.164 raw_ip6.c
> --- sys/netinet6/raw_ip6.c    31 Aug 2022 21:23:02 -0000      1.164
> +++ sys/netinet6/raw_ip6.c    1 Sep 2022 17:20:36 -0000
> @@ -593,10 +593,6 @@ rip6_usrreq(struct socket *so, int req, 
>       }
>  
>       switch (req) {
> -     case PRU_CONNECT2:
> -             error = EOPNOTSUPP;
> -             break;
> -
>       case PRU_SOCKADDR:
>               in6_setsockaddr(in6p, nam);
>               break;
> Index: sys/sys/protosw.h
> ===================================================================
> RCS file: /cvs/src/sys/sys/protosw.h,v
> retrieving revision 1.50
> diff -u -p -r1.50 protosw.h
> --- sys/sys/protosw.h 31 Aug 2022 21:23:02 -0000      1.50
> +++ sys/sys/protosw.h 1 Sep 2022 17:20:36 -0000
> @@ -81,6 +81,7 @@ struct pr_usrreqs {
>       int     (*pru_rcvoob)(struct socket *, struct mbuf *, int);
>       int     (*pru_sendoob)(struct socket *, struct mbuf *, struct mbuf *,
>                   struct mbuf *);
> +     int     (*pru_connect2)(struct socket *, struct socket *);
>  };
>  
>  struct protosw {
> @@ -395,8 +396,9 @@ pru_peeraddr(struct socket *so, struct m
>  static inline int
>  pru_connect2(struct socket *so1, struct socket *so2)
>  {
> -     return (*so1->so_proto->pr_usrreqs->pru_usrreq)(so1,
> -         PRU_CONNECT2, NULL, (struct mbuf *)so2, NULL, curproc);
> +     if (so1->so_proto->pr_usrreqs->pru_connect2)
> +             return (*so1->so_proto->pr_usrreqs->pru_connect2)(so1, so2);
> +     return (EOPNOTSUPP);
>  }
>  
>  #endif
> Index: sys/sys/unpcb.h
> ===================================================================
> RCS file: /cvs/src/sys/sys/unpcb.h,v
> retrieving revision 1.37
> diff -u -p -r1.37 unpcb.h
> --- sys/sys/unpcb.h   28 Aug 2022 21:35:12 -0000      1.37
> +++ sys/sys/unpcb.h   1 Sep 2022 17:20:36 -0000
> @@ -127,6 +127,7 @@ int       uipc_send(struct socket *, struct mb
>           struct mbuf *);
>  int  uipc_abort(struct socket *);
>  int  uipc_sense(struct socket *, struct stat *);
> +int  uipc_connect2(struct socket *, struct socket *);
>  
>  void unp_init(void);
>  int  unp_bind(struct unpcb *, struct mbuf *, struct proc *);

Reply via email to