From 09fac3824db462368f24d3dd4deccafedf5b3c8c Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Wed, 23 Jan 2013 12:18:32 -0800 Subject: btrfs-progs: don't leak in set_extent_bits It looks possible to hit the search_again label without using the prealloc. A new prealloc is allocated, leaking the current one. Every use of prealloc sets it to null so let's just allocate a new prealloc when we don't already have one. Signed-off-by: Zach Brown --- extent_io.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/extent_io.c b/extent_io.c index ebb35b28..d59f2070 100644 --- a/extent_io.c +++ b/extent_io.c @@ -300,9 +300,11 @@ int set_extent_bits(struct extent_io_tree *tree, u64 start, u64 last_start; u64 last_end; again: - prealloc = alloc_extent_state(); - if (!prealloc) - return -ENOMEM; + if (!prealloc) { + prealloc = alloc_extent_state(); + if (!prealloc) + return -ENOMEM; + } /* * this search will find the extents that end after -- cgit v1.2.3