Return to BSD News archive
Path: sserve!manuel.anu.edu.au!munnari.oz.au!news.hawaii.edu!ames!sun-barr!cs.utexas.edu!uwm.edu!ogicse!news.u.washington.edu!ns1.nodak.edu!plains.NoDak.edu!tinguely
From: tinguely@plains.NoDak.edu (Mark Tinguely)
Newsgroups: comp.unix.bsd
Subject: Small buffer leak in kern__physio.c
Message-ID: <BxGz47.9w8@ns1.nodak.edu>
Date: 9 Nov 92 22:14:31 GMT
Article-I.D.: ns1.BxGz47.9w8
Sender: usenet@ns1.nodak.edu (News login)
Organization: North Dakota State University
Lines: 38
Nntp-Posting-Host: plains.nodak.edu
There appears to be a small buffer leak in kern__physio.c. The function
physio() allocates a buf only for the lifetime of that function. If the
function exits on access error, the buf is not released.
This error was found while looking for M_TEMP allocation (ie. may not be the
direct cause of a known problem). This is fix visible fix. physio() is
not called that often to cause a major memory loss.
*** kern__physio.c.orig Mon Nov 9 15:49:10 1992
--- kern__physio.c Mon Nov 9 15:53:02 1992
***************
*** 117,126 ****
bp->b_bcount = min (256*1024, amttodo);
/* first, check if accessible */
! if (rw == B_READ && !useracc(base, bp->b_bcount, B_WRITE))
return (EFAULT);
! if (rw == B_WRITE && !useracc(base, bp->b_bcount, B_READ))
return (EFAULT);
/* update referenced and dirty bits, handle copy objects */
if (rw == B_READ)
--- 117,130 ----
bp->b_bcount = min (256*1024, amttodo);
/* first, check if accessible */
! if (rw == B_READ && !useracc(base, bp->b_bcount, B_WRITE)) {
! free(bp, M_TEMP);
return (EFAULT);
! }
! if (rw == B_WRITE && !useracc(base, bp->b_bcount, B_READ)) {
! free(bp, M_TEMP);
return (EFAULT);
+ }
/* update referenced and dirty bits, handle copy objects */
if (rw == B_READ)