Skip site navigation (1)Skip section navigation (2)
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>