Add sanity check for return of sotoinpcb() and intotcpcb()
[unix-history] / sys / netinet / tcp_usrreq.c
index 9ba0fb6..0ddf870 100644 (file)
@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *     from: @(#)tcp_usrreq.c  7.15 (Berkeley) 6/28/90
  * SUCH DAMAGE.
  *
  *     from: @(#)tcp_usrreq.c  7.15 (Berkeley) 6/28/90
- *     $Id: tcp_usrreq.c,v 1.2 1993/10/16 18:26:36 rgrimes Exp $
+ *     $Id: tcp_usrreq.c,v 1.5 1994/01/24 05:12:36 davidg Exp $
  */
 
 #include "param.h"
  */
 
 #include "param.h"
 #include "tcp_timer.h"
 #include "tcp_var.h"
 #include "tcpip.h"
 #include "tcp_timer.h"
 #include "tcp_var.h"
 #include "tcpip.h"
+#ifdef TCPDEBUG
 #include "tcp_debug.h"
 #include "tcp_debug.h"
+#endif
 
 /*
  * TCP protocol interface to socket abstraction.
  */
 extern char *tcpstates[];
 
 /*
  * TCP protocol interface to socket abstraction.
  */
 extern char *tcpstates[];
-struct tcpcb *tcp_newtcpcb();
 
 /*
  * Process a TCP user request for TCP tb.  If this is a send request
 
 /*
  * Process a TCP user request for TCP tb.  If this is a send request
@@ -73,10 +74,11 @@ struct      tcpcb *tcp_newtcpcb();
  */
 /*ARGSUSED*/
 int
  */
 /*ARGSUSED*/
 int
-tcp_usrreq(so, req, m, nam, control)
+tcp_usrreq(so, req, m, nam, control, dummy)
        struct socket *so;
        int req;
        struct mbuf *m, *nam, *control;
        struct socket *so;
        int req;
        struct mbuf *m, *nam, *control;
+       struct mbuf *dummy;
 {
        register struct inpcb *inp;
        register struct tcpcb *tp = 0;
 {
        register struct inpcb *inp;
        register struct tcpcb *tp = 0;
@@ -332,8 +334,10 @@ tcp_usrreq(so, req, m, nam, control)
        default:
                panic("tcp_usrreq");
        }
        default:
                panic("tcp_usrreq");
        }
+#ifdef TCPDEBUG
        if (tp && (so->so_options & SO_DEBUG))
                tcp_trace(TA_USER, ostate, tp, (struct tcpiphdr *)0, req);
        if (tp && (so->so_options & SO_DEBUG))
                tcp_trace(TA_USER, ostate, tp, (struct tcpiphdr *)0, req);
+#endif
        splx(s);
        return (error);
 }
        splx(s);
        return (error);
 }
@@ -347,12 +351,15 @@ tcp_ctloutput(op, so, level, optname, mp)
 {
        int error = 0;
        struct inpcb *inp = sotoinpcb(so);
 {
        int error = 0;
        struct inpcb *inp = sotoinpcb(so);
-       register struct tcpcb *tp = intotcpcb(inp);
+       register struct tcpcb *tp;
        register struct mbuf *m;
 
        if (level != IPPROTO_TCP)
                return (ip_ctloutput(op, so, level, optname, mp));
 
        register struct mbuf *m;
 
        if (level != IPPROTO_TCP)
                return (ip_ctloutput(op, so, level, optname, mp));
 
+       if (!inp || !(tp = intotcpcb(inp)))
+               return (EINVAL);
+
        switch (op) {
 
        case PRCO_SETOPT:
        switch (op) {
 
        case PRCO_SETOPT:
@@ -397,14 +404,6 @@ tcp_ctloutput(op, so, level, optname, mp)
        return (error);
 }
 
        return (error);
 }
 
-#ifdef TCP_SMALLSPACE
-u_long tcp_sendspace = 1024*4;
-u_long tcp_recvspace = 1024*4;
-#else
-u_long tcp_sendspace = 1024*16;
-u_long tcp_recvspace = 1024*16;
-#endif /* TCP_SMALLSPACE */
-
 /*
  * Attach TCP protocol to socket, allocating
  * internet protocol control block, tcp control block,
 /*
  * Attach TCP protocol to socket, allocating
  * internet protocol control block, tcp control block,