From proff@profane.iq.org  Sat Jan 25 06:59:22 1997
Received: from profane.iq.org (profane.iq.org [203.4.184.217])
          by freefall.freebsd.org (8.8.5/8.8.5) with ESMTP id GAA04497;
          Sat, 25 Jan 1997 06:59:14 -0800 (PST)
Received: (from proff@localhost)
          by profane.iq.org (8.8.4/8.8.2) id BAA12419;
          Sun, 26 Jan 1997 01:59:34 +1100 (EST)
Message-Id: <199701251459.BAA12419@profane.iq.org>
Date: Sun, 26 Jan 1997 01:59:34 +1100 (EST)
From: Julian Assange <proff@iq.org>
Reply-To: proff@iq.org
To: FreeBSD-gnats-submit@freebsd.org, dyson@freebsd.org
Subject: potential security hole in rcmd.c
X-Send-Pr-Version: 3.2

>Number:         2579
>Category:       bin
>Synopsis:       potential security hole in rcmd.c
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    imp
>State:          closed
>Quarter:
>Keywords:
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jan 25 07:00:01 PST 1997
>Closed-Date:    Sat Feb 8 23:58:23 MST 1997
>Last-Modified:  Sat Feb  8 23:59:23 MST 1997
>Originator:     Julian Assange
>Release:        FreeBSD 3.0-CURRENT i386
>Organization:
>Environment:

	

>Description:

	rcmd trusts h_length as returned from resolver

	

>How-To-Repeat:

	

>Fix:
	
	


--- src/lib/libc/net/rcmd.c.orig	Tue Aug 13 00:14:09 1996
+++ src/lib/libc/net/rcmd.c	Sun Jan 26 01:26:58 1997
@@ -104,7 +104,7 @@
 		sin.sin_len = sizeof(struct sockaddr_in);
 		sin.sin_family = hp->h_addrtype;
 		sin.sin_port = rport;
-		bcopy(hp->h_addr_list[0], &sin.sin_addr, hp->h_length);
+		bcopy(hp->h_addr_list[0], &sin.sin_addr, MIN(hp->h_length, sizeof sin.sin_addr));
 		if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) >= 0)
 			break;
 		(void)close(s);
@@ -125,7 +125,7 @@
 			errno = oerrno;
 			perror(0);
 			hp->h_addr_list++;
-			bcopy(hp->h_addr_list[0], &sin.sin_addr, hp->h_length);
+			bcopy(hp->h_addr_list[0], &sin.sin_addr, MIN(hp->h_length, sizeof sin.sin_addr));
 			(void)fprintf(stderr, "Trying %s...\n",
 			    inet_ntoa(sin.sin_addr));
 			continue;
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: gnats-admin->freebsd-bugs 
Responsible-Changed-By: mpp 
Responsible-Changed-When: Sat Jan 25 23:08:54 PST 1997 
Responsible-Changed-Why:  
Misfiled PR. 
Responsible-Changed-From-To: freebsd-bugs->freebsd-bugs 
Responsible-Changed-By: fenner 
Responsible-Changed-When: Mon Jan 27 10:31:52 PST 1997 
Responsible-Changed-Why:  
It didn't. 
Responsible-Changed-From-To: freebsd-bugs->imp 
Responsible-Changed-By: imp 
Responsible-Changed-When: Sat Feb 8 23:39:24 MST 1997 
Responsible-Changed-Why:  
Cause I'm going to fix this bug. 
State-Changed-From-To: open->closed 
State-Changed-By: imp 
State-Changed-When: Sat Feb 8 23:58:23 MST 1997 
State-Changed-Why:  
Fixed in rev 1.11 of rcmd.c.  Backported to 2.1.x and 2.2. 
>Unformatted:
