Date: Wed, 24 Dec 1997 23:09:25 -0800 From: David Greenman <dg@root.com> To: Gary Palmer <gjp@erols.com> Cc: current@FreeBSD.ORG Subject: Re: crash (in networking code?) Message-ID: <199712250709.XAA16844@implode.root.com> In-Reply-To: Your message of "Fri, 19 Dec 1997 20:02:16 EST." <349B1918.794BDF32@erols.com>
next in thread | previous in thread | raw e-mail | index | archive | help
>We have a weird proxying system here running 100% custom code. ...<panics>... >Anyone have any ideas what is going on? I know its pretty vague The problem might be fixed with the attached diff. I have also committed this in rev 1.37 of in_pcb.c. -DG David Greenman Core-team/Principal Architect, The FreeBSD Project Index: in_pcb.c =================================================================== RCS file: /home/ncvs/src/sys/netinet/in_pcb.c,v retrieving revision 1.36 diff -c -r1.36 in_pcb.c *** in_pcb.c 1997/12/23 01:40:40 1.36 --- in_pcb.c 1997/12/25 06:49:31 *************** *** 470,489 **** register struct inpcb *inp; register struct sockaddr_in *sin; s = splnet(); inp = sotoinpcb(so); if (!inp) { splx(s); return EINVAL; } - MALLOC(sin, struct sockaddr_in *, sizeof *sin, M_SONAME, M_WAITOK); - *nam = (struct sockaddr *)sin; - bzero(sin, sizeof *sin); - sin->sin_family = AF_INET; - sin->sin_len = sizeof(*sin); sin->sin_port = inp->inp_lport; sin->sin_addr = inp->inp_laddr; splx(s); return 0; } --- 482,504 ---- register struct inpcb *inp; register struct sockaddr_in *sin; + MALLOC(sin, struct sockaddr_in *, sizeof *sin, M_SONAME, M_WAITOK); + bzero(sin, sizeof *sin); + sin->sin_family = AF_INET; + sin->sin_len = sizeof(*sin); + s = splnet(); inp = sotoinpcb(so); if (!inp) { splx(s); + free(sin, M_SONAME); return EINVAL; } sin->sin_port = inp->inp_lport; sin->sin_addr = inp->inp_laddr; splx(s); + + *nam = (struct sockaddr *)sin; return 0; } *************** *** 496,515 **** struct inpcb *inp; register struct sockaddr_in *sin; s = splnet(); inp = sotoinpcb(so); if (!inp) { splx(s); return EINVAL; } - MALLOC(sin, struct sockaddr_in *, sizeof *sin, M_SONAME, M_WAITOK); - *nam = (struct sockaddr *)sin; - bzero((caddr_t)sin, sizeof (*sin)); - sin->sin_family = AF_INET; - sin->sin_len = sizeof(*sin); sin->sin_port = inp->inp_fport; sin->sin_addr = inp->inp_faddr; splx(s); return 0; } --- 511,533 ---- struct inpcb *inp; register struct sockaddr_in *sin; + MALLOC(sin, struct sockaddr_in *, sizeof *sin, M_SONAME, M_WAITOK); + bzero((caddr_t)sin, sizeof (*sin)); + sin->sin_family = AF_INET; + sin->sin_len = sizeof(*sin); + s = splnet(); inp = sotoinpcb(so); if (!inp) { splx(s); + free(sin, M_SONAME); return EINVAL; } sin->sin_port = inp->inp_fport; sin->sin_addr = inp->inp_faddr; splx(s); + + *nam = (struct sockaddr *)sin; return 0; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199712250709.XAA16844>