From nobody@FreeBSD.org  Tue Sep  4 04:59:31 2001
Return-Path: <nobody@FreeBSD.org>
Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21])
	by hub.freebsd.org (Postfix) with ESMTP id 08FBE37B401
	for <freebsd-gnats-submit@FreeBSD.org>; Tue,  4 Sep 2001 04:59:22 -0700 (PDT)
Received: (from nobody@localhost)
	by freefall.freebsd.org (8.11.4/8.11.4) id f84BxMD67053;
	Tue, 4 Sep 2001 04:59:22 -0700 (PDT)
	(envelope-from nobody)
Message-Id: <200109041159.f84BxMD67053@freefall.freebsd.org>
Date: Tue, 4 Sep 2001 04:59:22 -0700 (PDT)
From: Mike Potanin <potanin@mccme.ru>
To: freebsd-gnats-submit@FreeBSD.org
Subject: Memory leak in __getcwd
X-Send-Pr-Version: www-1.0

>Number:         30306
>Category:       kern
>Synopsis:       Memory leak in __getcwd
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Sep 04 05:00:01 PDT 2001
>Closed-Date:    Tue Sep 4 12:05:25 PDT 2001
>Last-Modified:  Tue Sep 04 12:12:41 PDT 2001
>Originator:     Mike Potanin
>Release:        4.3-RELEASE
>Organization:
asplinux
>Environment:
FreeBSD pm.asplinux.ru 4.3-RELEASE FreeBSD 4.3-RELEASE #40: Mon Sep  3 19:40:01 MSD 2001     root@pm.asplinux.ru:/usr/src/sys/compile/PM  i386
>Description:

>How-To-Repeat:
mount ... /mnt
mkdir /mnt/test
cd /mnt/test
umount -f /mnt
/bin/pwd  # Many times :-)
>Fix:
"kern/vfs_cache.c" line 540
 	buf = bp = malloc(uap->buflen, M_TEMP, M_WAITOK);
 	bp += uap->buflen - 1;
 	*bp = '\0';
 	fdp = p->p_fd;
 	slash_prefixed = 0;
 	for (vp = fdp->fd_cdir; vp != fdp->fd_rdir && vp != rootvnode;) {
 		if (vp->v_flag & VROOT) {
-			if (vp->v_mount == NULL) {	/* forced unmount */
-				free(buf, M_TEMP);
+			if (vp->v_mount == NULL)	/* forced unmount */
 				return (EBADF);
-			}
 			vp = vp->v_mount->mnt_vnodecovered;
 			continue;
 		}
 		if (vp->v_dd->v_id != vp->v_ddid) {
 			numcwdfail1++;
 			free(buf, M_TEMP);
 			return (ENOTDIR);
 		}

>Release-Note:
>Audit-Trail:

From: Poul-Henning Kamp <phk@critter.freebsd.dk>
To: Mike Potanin <potanin@mccme.ru>
Cc: freebsd-gnats-submit@FreeBSD.ORG
Subject: Re: kern/30306: Memory leak in __getcwd 
Date: Tue, 04 Sep 2001 14:08:54 +0200

 In message <200109041159.f84BxMD67053@freefall.freebsd.org>, Mike Potanin writes:
 
 > 	for (vp = fdp->fd_cdir; vp != fdp->fd_rdir && vp != rootvnode;) {
 > 		if (vp->v_flag & VROOT) {
 >-			if (vp->v_mount == NULL) {	/* forced unmount */
 >-				free(buf, M_TEMP);
 >+			if (vp->v_mount == NULL)	/* forced unmount */
 > 				return (EBADF);
 >-			}
 > 			vp = vp->v_mount->mnt_vnodecovered;
 > 			continue;
 
 Uhm, is this patch reversed by any chance ?
 
 -- 
 Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
 phk@FreeBSD.ORG         | TCP/IP since RFC 956
 FreeBSD committer       | BSD since 4.3-tahoe    
 Never attribute to malice what can adequately be explained by incompetence.
State-Changed-From-To: open->closed 
State-Changed-By: iedowse 
State-Changed-When: Tue Sep 4 12:05:25 PDT 2001 
State-Changed-Why:  

Committed in revision 1.60 of vfs_cache.c. Thanks for the bug report 
and the patch! Unfortunately this won't make it into 4.4 release, 
but I will merge it into -stable next week. 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=30306 
>Unformatted:
