]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/net/net.c (grub_net_fs_open): Free resources on failed open.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 22 Jun 2012 20:02:47 +0000 (22:02 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 22 Jun 2012 20:02:47 +0000 (22:02 +0200)
ChangeLog
grub-core/net/net.c

index 58bb6bdd42b135ed3ac0939e7ea55cb080411d60..e90b6b1ecd43c304ee0734db6fcccacba16e5ae6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2012-06-22  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/net/net.c (grub_net_fs_open): Free resources on failed open.
+
 2012-06-22  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * tests/util/grub-shell.in: Fix a typo.
index ae7340cb2c0cf21d6eedebb6ac0d2620ddadeb68..01c5d32ceb8c249ab8f35e05850321315dbd9c78 100644 (file)
@@ -1280,10 +1280,24 @@ grub_net_fs_open (struct grub_file *file_out, const char *name)
 
   err = file->device->net->protocol->open (file, name);
   if (err)
-    return err;
+    {
+      while (file->device->net->packs.first)
+       {
+         grub_netbuff_free (file->device->net->packs.first->nb);
+         grub_net_remove_packet (file->device->net->packs.first);
+       }
+      grub_free (file->device->net->name);
+      grub_free (file);
+      return err;
+    }
   bufio = grub_bufio_open (file, 32768);
   if (! bufio)
     {
+      while (file->device->net->packs.first)
+       {
+         grub_netbuff_free (file->device->net->packs.first->nb);
+         grub_net_remove_packet (file->device->net->packs.first);
+       }
       file->device->net->protocol->close (file);
       grub_free (file->device->net->name);
       grub_free (file);