From scode@hyperion.scode.org  Sat Jan 12 19:54:49 2008
Return-Path: <scode@hyperion.scode.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id A15C616A419
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 12 Jan 2008 19:54:49 +0000 (UTC)
	(envelope-from scode@hyperion.scode.org)
Received: from hyperion.scode.org (hyperion.scode.org [85.17.42.115])
	by mx1.freebsd.org (Postfix) with ESMTP id 5568513C442
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 12 Jan 2008 19:54:48 +0000 (UTC)
	(envelope-from scode@hyperion.scode.org)
Received: by hyperion.scode.org (Postfix, from userid 1001)
	id CD0F423C42D; Sat, 12 Jan 2008 20:54:47 +0100 (CET)
Message-Id: <20080112195447.CD0F423C42D@hyperion.scode.org>
Date: Sat, 12 Jan 2008 20:54:47 +0100 (CET)
From: peter.schuller@infidyne.com
Reply-To: peter.schuller@infidyne.com
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [patch] iostat -x leaks memory
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         119608
>Category:       bin
>Synopsis:       [patch] iostat -x leaks memory
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jan 12 20:00:05 UTC 2008
>Closed-Date:    Sat Jan 19 17:28:24 UTC 2008
>Last-Modified:  Sat Jan 19 17:28:24 UTC 2008
>Originator:     peter.schuller@infidyne.com
>Release:        FreeBSD 7.0 BETA 3
>Organization:
>Environment:
        FreeBSD prometheus.scode.org 7.0-BETA3 FreeBSD 7.0-BETA3 #0: Wed Nov 28 23:06:52 CET 2007     scode@prometheus.scode.org:/usr/obj/usr/src/sys/GENERIC  amd64

   	(patch against slightly newer RELENG_7 for source code management reasons)
>Description:
	When using -x, iostat leaks memory indefinitely due to the use of asprintf() without freeing
	the allocated buffer. Also, the return value of asprintf() is not checked and undefined
	behavior will ensue if it fails to allocate memory.
>How-To-Repeat:
>Fix:
--- iostat.c.orig	2008-01-12 20:49:31.564883495 +0100
+++ iostat.c	2008-01-12 20:53:24.195670928 +0100
@@ -735,9 +735,10 @@
 		}
 
 		if (xflag > 0) {
-			asprintf(&devname, "%s%d",
-			    cur.dinfo->devices[di].device_name,
-			    cur.dinfo->devices[di].unit_number);
+			if (asprintf(&devname, "%s%d",
+				     cur.dinfo->devices[di].device_name,
+				     cur.dinfo->devices[di].unit_number) == -1)
+				errx(1, "asprintf() failed (out of memory?)");
 			/*
 			 * If zflag is set, skip any devices with zero I/O.
 			 */
@@ -781,6 +782,7 @@
 				}
 				printf("\n");
 			}
+			free(devname);
 		} else if (oflag > 0) {
 			int msdig = (ms_per_transaction < 100.0) ? 1 : 0;
 
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->patched 
State-Changed-By: maxim 
State-Changed-When: Sat Jan 12 20:37:17 UTC 2008 
State-Changed-Why:  
Fixed in HEAD.  Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=119608 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/119608: commit references a PR
Date: Sat, 12 Jan 2008 20:37:12 +0000 (UTC)

 maxim       2008-01-12 20:37:06 UTC
 
   FreeBSD src repository
 
   Modified files:
     usr.sbin/iostat      iostat.c 
   Log:
   o Plug a memory leak: do not forget to free asprintf(3) allocated
   memory.
   
   PR:             bin/119608
   Submitted by:   peter.schuller
   MFC after:      1 week
   
   Revision  Changes    Path
   1.38      +4 -2      src/usr.sbin/iostat/iostat.c
 _______________________________________________
 cvs-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/cvs-all
 To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: maxim 
State-Changed-When: Sat Jan 19 17:28:03 UTC 2008 
State-Changed-Why:  
Merged to RELENG_6 and RELENG_7. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=119608 
>Unformatted:
