From 8a5d927a5337b1c9a0c8478c4e522ce0ded09b85 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Wed, 27 Nov 2013 18:21:17 -0800 Subject: [PATCH] Check if the target loopback is a block device --- graphdriver/devmapper/attachLoopback.go | 5 +++-- graphdriver/devmapper/sys.go | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/graphdriver/devmapper/attachLoopback.go b/graphdriver/devmapper/attachLoopback.go index 98d0bf5f5b..0d556d81c2 100644 --- a/graphdriver/devmapper/attachLoopback.go +++ b/graphdriver/devmapper/attachLoopback.go @@ -39,8 +39,9 @@ func openNextAvailableLoopback(index int, sparseFile *osFile) (loopFile *osFile, return nil, ErrAttachLoopbackDevice } - // FIXME: Check here if target is a block device (in C: S_ISBLK(mode)) - if fi.IsDir() { + if fi.Mode()&osModeDevice != osModeDevice { + utils.Errorf("Loopback device %s is not a block device.", target) + continue } // Open the targeted loopback (use OpenFile because Open sets O_CLOEXEC) diff --git a/graphdriver/devmapper/sys.go b/graphdriver/devmapper/sys.go index 152e68285b..9cf124a9a5 100644 --- a/graphdriver/devmapper/sys.go +++ b/graphdriver/devmapper/sys.go @@ -46,9 +46,10 @@ const ( sysSysIoctl = syscall.SYS_IOCTL sysEBusy = syscall.EBUSY - osORdOnly = os.O_RDONLY - osORdWr = os.O_RDWR - osOCreate = os.O_CREATE + osORdOnly = os.O_RDONLY + osORdWr = os.O_RDWR + osOCreate = os.O_CREATE + osModeDevice = os.ModeDevice ) func toSysStatT(i interface{}) *sysStatT {