diff options
author | Bret Lambert <blambert@cvs.openbsd.org> | 2011-05-04 08:20:06 +0000 |
---|---|---|
committer | Bret Lambert <blambert@cvs.openbsd.org> | 2011-05-04 08:20:06 +0000 |
commit | 2898f6d9a936980751beb72e3b620c719fa619d6 (patch) | |
tree | ce03706e69fae307de1d0e0f91d5b9f6b3eae2e7 | |
parent | 6f3034cbe5b7d07259c0075e1c6e7704d7d8c89c (diff) |
Clean up gotos for listening sockets to make it obvious when packets
are dropped and when normal program flow occurs.
Change error return value of syn_cache_add() from 0 to -1 in order
to clearly communicate intent.
ok claudio@
-rw-r--r-- | sys/netinet/tcp_input.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 3c75cfa5bca..3eabda7633a 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tcp_input.c,v 1.248 2011/04/29 06:28:21 blambert Exp $ */ +/* $OpenBSD: tcp_input.c,v 1.249 2011/05/04 08:20:05 blambert Exp $ */ /* $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $ */ /* @@ -741,7 +741,7 @@ findpcb: case TH_RST: syn_cache_reset(&src.sa, &dst.sa, th, inp->inp_rtableid); - break; + goto drop; case TH_SYN|TH_ACK: /* @@ -772,6 +772,7 @@ findpcb: * do not free it. */ m = NULL; + goto drop; } else { /* * We have created a @@ -783,7 +784,6 @@ findpcb: if (tp == NULL) goto badsyn; /*XXX*/ - goto after_listen; } break; @@ -876,16 +876,15 @@ findpcb: * SYN looks ok; create compressed TCP * state for it. */ - if (so->so_qlen <= so->so_qlimit && + if (so->so_qlen > so->so_qlimit || syn_cache_add(&src.sa, &dst.sa, th, iphlen, - so, m, optp, optlen, &opti, reuse)) - m = NULL; + so, m, optp, optlen, &opti, reuse) == -1) + goto drop; + return; } - goto drop; } } -after_listen: #ifdef DIAGNOSTIC /* * Should not happen now that all embryonic connections @@ -4056,7 +4055,7 @@ syn_cache_add(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, tb.t_state = TCPS_LISTEN; if (tcp_dooptions(&tb, optp, optlen, th, m, iphlen, oi, sotoinpcb(so)->inp_rtableid)) - return (0); + return (-1); } else tb.t_flags = 0; @@ -4095,14 +4094,14 @@ syn_cache_add(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, tcpstat.tcps_sndacks++; tcpstat.tcps_sndtotal++; } - return (1); + return (0); } sc = pool_get(&syn_cache_pool, PR_NOWAIT|PR_ZERO); if (sc == NULL) { if (ipopts) (void) m_free(ipopts); - return (0); + return (-1); } /* @@ -4187,7 +4186,8 @@ syn_cache_add(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, syn_cache_put(sc); tcpstat.tcps_sc_dropped++; } - return (1); + + return (0); } int |