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>
