]> sourceware.org Git - lvm2.git/commitdiff
Add missing test for failed pool allocation
authorZdenek Kabelac <zkabelac@redhat.com>
Tue, 30 Nov 2010 22:23:35 +0000 (22:23 +0000)
committerZdenek Kabelac <zkabelac@redhat.com>
Tue, 30 Nov 2010 22:23:35 +0000 (22:23 +0000)
Add test for NULL from dm_poll_create.
Reorder dm_pool_destroy() before file close and add label out:.
Avoid leaking file descriptor if the allocation fails.

WHATS_NEW
lib/config/config.c

index b7d4d870feef58043d27dbb989970e81c04421cf..b4006848c2274ba3c6149a258a67f3e1158d0739 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.78 - 
 ====================================
+  Add missing test for failed pool allocation in write_config_node().
   Replace snprintf with dm_snprintf in clvmd-command.c.
   Check reallocated buffer for NULL before use in clvmd do_command().
   Fix memory leak when VG allocation policy in metadata is invalid.
index c10c78ec697c82ebb2498b290426eb6ff1413496..07c1f1cd14753e3922bafe650d6081cfa3b08889 100644 (file)
@@ -511,7 +511,8 @@ int write_config_node(const struct config_node *cn, putline_fn putline, void *ba
 {
        struct output_line outline;
        outline.fp = NULL;
-       outline.mem = dm_pool_create("config_line", 1024);
+       if (!(outline.mem = dm_pool_create("config_line", 1024)))
+               return_0;
        outline.putline = putline;
        outline.putline_baton = baton;
        if (!_write_config(cn, 0, &outline, 0)) {
@@ -538,7 +539,10 @@ int write_config_file(struct config_tree *cft, const char *file,
                return 0;
        }
 
-       outline.mem = dm_pool_create("config_line", 1024);
+       if (!(outline.mem = dm_pool_create("config_line", 1024))) {
+               r = 0;
+               goto_out;
+       }
 
        log_verbose("Dumping configuration to %s", file);
        if (!argc) {
@@ -559,12 +563,14 @@ int write_config_file(struct config_tree *cft, const char *file,
                argv++;
        }
 
+       dm_pool_destroy(outline.mem);
+
+out:
        if (outline.fp && lvm_fclose(outline.fp, file)) {
                stack;
                r = 0;
        }
 
-       dm_pool_destroy(outline.mem);
        return r;
 }
 
This page took 0.04617 seconds and 5 git commands to generate.