summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>2001-12-19 19:04:57 +0000
committerdillon <dillon@FreeBSD.org>2001-12-19 19:04:57 +0000
commitde48df525fc8f2ca18d19cecaafcac3161fa5bf8 (patch)
tree9c73db933b8245a96832230b61946f6d86484c00 /sys
parent3e097bafbac340e920002af83f4f0969e98af967 (diff)
downloadFreeBSD-src-de48df525fc8f2ca18d19cecaafcac3161fa5bf8.zip
FreeBSD-src-de48df525fc8f2ca18d19cecaafcac3161fa5bf8.tar.gz
Calculate whether the sbuf is dynamic *before* bzero()ing the
structure. This fixes a serious memory leak in the sbuf code. MFC after: 3 days
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/subr_sbuf.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/kern/subr_sbuf.c b/sys/kern/subr_sbuf.c
index ed04ad5..72e6522 100644
--- a/sys/kern/subr_sbuf.c
+++ b/sys/kern/subr_sbuf.c
@@ -461,12 +461,15 @@ sbuf_len(struct sbuf *s)
void
sbuf_delete(struct sbuf *s)
{
+ int isdyn;
+
assert_sbuf_integrity(s);
/* don't care if it's finished or not */
if (SBUF_ISDYNAMIC(s))
SBFREE(s->s_buf);
+ isdyn = SBUF_ISDYNSTRUCT(s);
bzero(s, sizeof *s);
- if (SBUF_ISDYNSTRUCT(s))
+ if (isdyn)
SBFREE(s);
}
OpenPOWER on IntegriCloud