Author: tsoome
Date: Tue Sep 12 14:18:45 2017
New Revision: 323497
URL: https://svnweb.freebsd.org/changeset/base/323497

Log:
  libefi: efipart_open should check the status from disk_open
  
  In case of error from disk_open(), we should clean up properly.
  
  Reviewed by:  allanjude, imp
  Differential Revision:        https://reviews.freebsd.org/D12340

Modified:
  head/sys/boot/efi/libefi/efipart.c

Modified: head/sys/boot/efi/libefi/efipart.c
==============================================================================
--- head/sys/boot/efi/libefi/efipart.c  Tue Sep 12 13:51:18 2017        
(r323496)
+++ head/sys/boot/efi/libefi/efipart.c  Tue Sep 12 14:18:45 2017        
(r323497)
@@ -723,9 +723,20 @@ efipart_open(struct open_file *f, ...)
                pd->pd_bcache = bcache_allocate();
 
        if (dev->d_dev->dv_type == DEVT_DISK) {
-               return (disk_open(dev,
+               int rc;
+
+               rc = disk_open(dev,
                    blkio->Media->BlockSize * (blkio->Media->LastBlock + 1),
-                   blkio->Media->BlockSize));
+                   blkio->Media->BlockSize);
+               if (rc != 0) {
+                       pd->pd_open--;
+                       if (pd->pd_open == 0) {
+                               pd->pd_blkio = NULL;
+                               bcache_free(pd->pd_bcache);
+                               pd->pd_bcache = NULL;
+                       }
+               }
+               return (rc);
        }
        return (0);
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to