diff options
author | Zach Brown <zab@redhat.com> | 2013-01-23 12:18:32 -0800 |
---|---|---|
committer | Zach Brown <zab@redhat.com> | 2013-02-05 16:09:40 -0800 |
commit | 09fac3824db462368f24d3dd4deccafedf5b3c8c (patch) | |
tree | ea5b2c3fa9c97b70d36911385d011eb4bb516107 | |
parent | de763395fb05bcd5c1ae32f9cd88d55cb396231c (diff) |
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 <zab@redhat.com>
-rw-r--r-- | extent_io.c | 8 |
1 files 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 |