Hi,

The variable swapping between inp, newinp and oldinpcb in syn_cache_get()
is overly complicated.  Simplify the code without functional change.

ok?

bluhm

Index: netinet/tcp_input.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/tcp_input.c,v
retrieving revision 1.319
diff -u -p -r1.319 tcp_input.c
--- netinet/tcp_input.c 9 Jun 2016 23:09:51 -0000       1.319
+++ netinet/tcp_input.c 26 Jun 2016 23:47:27 -0000
@@ -3627,7 +3627,7 @@ syn_cache_get(struct sockaddr *src, stru
 {
        struct syn_cache *sc;
        struct syn_cache_head *scp;
-       struct inpcb *inp = NULL;
+       struct inpcb *inp, *oldinp;
        struct tcpcb *tp = NULL;
        struct mbuf *am;
        int s;
@@ -3670,7 +3670,8 @@ syn_cache_get(struct sockaddr *src, stru
        if (so == NULL)
                goto resetandabort;
 
-       inp = sotoinpcb(oso);
+       oldinp = sotoinpcb(oso);
+       inp = sotoinpcb(so);
 
 #ifdef IPSEC
        /*
@@ -3678,30 +3679,18 @@ syn_cache_get(struct sockaddr *src, stru
         * from the old pcb. Ditto for any other
         * IPsec-related information.
         */
-       {
-         struct inpcb *newinp = sotoinpcb(so);
-         memcpy(newinp->inp_seclevel, inp->inp_seclevel,
-             sizeof(inp->inp_seclevel));
-       }
+       memcpy(inp->inp_seclevel, oldinp->inp_seclevel,
+           sizeof(oldinp->inp_seclevel));
 #endif /* IPSEC */
 #ifdef INET6
        /*
         * inp still has the OLD in_pcb stuff, set the
         * v6-related flags on the new guy, too.
         */
-       {
-         int flags = inp->inp_flags;
-         struct inpcb *oldinpcb = inp;
-
-         inp = sotoinpcb(so);
-         inp->inp_flags |= (flags & INP_IPV6);
-         if ((inp->inp_flags & INP_IPV6) != 0) {
-           inp->inp_ipv6.ip6_hlim =
-             oldinpcb->inp_ipv6.ip6_hlim;
-         }
+       inp->inp_flags |= (oldinp->inp_flags & INP_IPV6);
+       if (ISSET(inp->inp_flags, INP_IPV6)) {
+               inp->inp_ipv6.ip6_hlim = oldinp->inp_ipv6.ip6_hlim;
        }
-#else /* INET6 */
-       inp = sotoinpcb(so);
 #endif /* INET6 */
 
 #if NPF > 0

Reply via email to