diff mbox

block/raw-posix: Use raw_normalize_devicepath()

Message ID 1439393611-17984-1-git-send-email-mreitz@redhat.com
State New
Headers show

Commit Message

Max Reitz Aug. 12, 2015, 3:33 p.m. UTC
The filename given to qemu_open() in block/raw-posix.c should generally
have been processed by raw_normalize_devicepath(); unless we are only
probing (in which case the caller often checks whether the file is a
block device or not, and this property will be changed by
raw_normalize_devicepath() on NetBSD) or it is about a deprecated device
(i.e. floppy).

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 block/raw-posix.c | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

Comments

Kevin Wolf Aug. 13, 2015, 1:50 p.m. UTC | #1
Am 12.08.2015 um 17:33 hat Max Reitz geschrieben:
> The filename given to qemu_open() in block/raw-posix.c should generally
> have been processed by raw_normalize_devicepath(); unless we are only
> probing (in which case the caller often checks whether the file is a
> block device or not, and this property will be changed by
> raw_normalize_devicepath() on NetBSD) or it is about a deprecated device
> (i.e. floppy).
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>

The patch isn't actually doing as much as the commit message suggests:
Some calls of qemu_open() where we know that normalising wouldn't change
anything (because we're not on NetBSD or not using a block device) still
don't have the raw_normalize_devicepath() call (e.g. raw_create() and
cdrom_reopen()).

I'm applying the patch anyway because the result is the same.

Kevin
diff mbox

Patch

diff --git a/block/raw-posix.c b/block/raw-posix.c
index 855febe..30df8ad 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -670,11 +670,17 @@  static int raw_reopen_prepare(BDRVReopenState *state,
 
     /* If we cannot use fcntl, or fcntl failed, fall back to qemu_open() */
     if (raw_s->fd == -1) {
-        assert(!(raw_s->open_flags & O_CREAT));
-        raw_s->fd = qemu_open(state->bs->filename, raw_s->open_flags);
-        if (raw_s->fd == -1) {
-            error_setg_errno(errp, errno, "Could not reopen file");
-            ret = -1;
+        const char *normalized_filename = state->bs->filename;
+        ret = raw_normalize_devicepath(&normalized_filename);
+        if (ret < 0) {
+            error_setg_errno(errp, -ret, "Could not normalize device path");
+        } else {
+            assert(!(raw_s->open_flags & O_CREAT));
+            raw_s->fd = qemu_open(normalized_filename, raw_s->open_flags);
+            if (raw_s->fd == -1) {
+                error_setg_errno(errp, errno, "Could not reopen file");
+                ret = -1;
+            }
         }
     }
 
@@ -2314,6 +2320,12 @@  static int hdev_create(const char *filename, QemuOpts *opts,
 
     (void)has_prefix;
 
+    ret = raw_normalize_devicepath(&filename);
+    if (ret < 0) {
+        error_setg_errno(errp, -ret, "Could not normalize device path");
+        return ret;
+    }
+
     /* Read out options */
     total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
                           BDRV_SECTOR_SIZE);