QEMU-Devel Archive on lore.kernel.org
 help / color / Atom feed
* [PULL 0/5] 9p patches 2020-01-14
@ 2020-01-14 16:02 Greg Kurz
  2020-01-14 16:02 ` [PULL 1/5] 9pfs: local: Fix possible memory leak in local_link() Greg Kurz
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Greg Kurz @ 2020-01-14 16:02 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Greg Kurz

The following changes since commit 3c8a6575985b1652b45bfa670b5e1907d642cfa0:

  Merge remote-tracking branch 'remotes/kraxel/tags/usb-20200113-pull-request' into staging (2020-01-13 14:19:57 +0000)

are available in the Git repository at:

  https://github.com/gkurz/qemu.git tags/9p-next-2020-01-14

for you to fetch changes up to fa0f22026747fe0ea6ef4b86c4e73e2e0965f05b:

  9pfs/9p.c: remove unneeded labels (2020-01-14 07:59:47 +0100)

----------------------------------------------------------------
Assorted fixes and cleanups.

----------------------------------------------------------------
Daniel Henrique Barboza (3):
      9p: local: always return -1 on error in local_unlinkat_common
      virtfs-proxy-helper.c: remove 'err_out' label in setugid()
      9pfs/9p.c: remove unneeded labels

Jiajun Chen (1):
      9pfs: local: Fix possible memory leak in local_link()

Stefano Stabellini (1):
      9p: init_in_iov_from_pdu can truncate the size

 fsdev/virtfs-proxy-helper.c |  4 +---
 hw/9pfs/9p-local.c          | 16 +++++++---------
 hw/9pfs/9p.c                | 35 ++++++++++++++++++++++-------------
 hw/9pfs/9p.h                |  2 +-
 hw/9pfs/virtio-9p-device.c  | 11 +++++++----
 hw/9pfs/xen-9p-backend.c    | 13 ++++++++-----
 6 files changed, 46 insertions(+), 35 deletions(-)
-- 
2.21.1



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PULL 1/5] 9pfs: local: Fix possible memory leak in local_link()
  2020-01-14 16:02 [PULL 0/5] 9p patches 2020-01-14 Greg Kurz
@ 2020-01-14 16:02 ` Greg Kurz
  2020-01-14 16:02 ` [PULL 2/5] 9p: local: always return -1 on error in local_unlinkat_common Greg Kurz
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Greg Kurz @ 2020-01-14 16:02 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Jiajun Chen, Christian Schoenebeck, Greg Kurz, Xiang Zheng,
	Euler Robot, Philippe Mathieu-Daudé

From: Jiajun Chen <chenjiajun8@huawei.com>

There is a possible memory leak while local_link return -1 without free
odirpath and oname.

Reported-by: Euler Robot <euler.robot@huawei.com>
Signed-off-by: Jaijun Chen <chenjiajun8@huawei.com>
Signed-off-by: Xiang Zheng <zhengxiang9@huawei.com>
Reviewed-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Greg Kurz <groug@kaod.org>
---
 hw/9pfs/9p-local.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
index ca641390fbca..d0592c3b4504 100644
--- a/hw/9pfs/9p-local.c
+++ b/hw/9pfs/9p-local.c
@@ -947,7 +947,7 @@ static int local_link(FsContext *ctx, V9fsPath *oldpath,
     if (ctx->export_flags & V9FS_SM_MAPPED_FILE &&
         local_is_mapped_file_metadata(ctx, name)) {
         errno = EINVAL;
-        return -1;
+        goto out;
     }
 
     odirfd = local_opendir_nofollow(ctx, odirpath);
-- 
2.21.1



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PULL 2/5] 9p: local: always return -1 on error in local_unlinkat_common
  2020-01-14 16:02 [PULL 0/5] 9p patches 2020-01-14 Greg Kurz
  2020-01-14 16:02 ` [PULL 1/5] 9pfs: local: Fix possible memory leak in local_link() Greg Kurz
@ 2020-01-14 16:02 ` Greg Kurz
  2020-01-14 16:02 ` [PULL 3/5] 9p: init_in_iov_from_pdu can truncate the size Greg Kurz
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Greg Kurz @ 2020-01-14 16:02 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Daniel Henrique Barboza, Greg Kurz

From: Daniel Henrique Barboza <danielhb413@gmail.com>

local_unlinkat_common() is supposed to always return -1 on error.
This is being done by jumps to the 'err_out' label, which is
a 'return ret' call, and 'ret' is initialized with -1.

Unfortunately there is a condition in which the function will
return 0 on error: in a case where flags == AT_REMOVEDIR, 'ret'
will be 0 when reaching

map_dirfd = openat_dir(...)

And, if map_dirfd == -1 and errno != ENOENT, the existing 'err_out'
jump will execute 'return ret', when ret is still set to zero
at that point.

This patch fixes it by changing all 'err_out' labels by
'return -1' calls, ensuring that the function will always
return -1 on error conditions. 'ret' can be left unintialized
since it's now being used just to store the result of 'unlinkat'
calls.

CC: Greg Kurz <groug@kaod.org>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
[groug: changed prefix in title to be "9p: local:"]
Signed-off-by: Greg Kurz <groug@kaod.org>
---
 hw/9pfs/9p-local.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
index d0592c3b4504..54e012e5b442 100644
--- a/hw/9pfs/9p-local.c
+++ b/hw/9pfs/9p-local.c
@@ -1076,7 +1076,7 @@ out:
 static int local_unlinkat_common(FsContext *ctx, int dirfd, const char *name,
                                  int flags)
 {
-    int ret = -1;
+    int ret;
 
     if (ctx->export_flags & V9FS_SM_MAPPED_FILE) {
         int map_dirfd;
@@ -1094,12 +1094,12 @@ static int local_unlinkat_common(FsContext *ctx, int dirfd, const char *name,
 
             fd = openat_dir(dirfd, name);
             if (fd == -1) {
-                goto err_out;
+                return -1;
             }
             ret = unlinkat(fd, VIRTFS_META_DIR, AT_REMOVEDIR);
             close_preserve_errno(fd);
             if (ret < 0 && errno != ENOENT) {
-                goto err_out;
+                return -1;
             }
         }
         map_dirfd = openat_dir(dirfd, VIRTFS_META_DIR);
@@ -1107,16 +1107,14 @@ static int local_unlinkat_common(FsContext *ctx, int dirfd, const char *name,
             ret = unlinkat(map_dirfd, name, 0);
             close_preserve_errno(map_dirfd);
             if (ret < 0 && errno != ENOENT) {
-                goto err_out;
+                return -1;
             }
         } else if (errno != ENOENT) {
-            goto err_out;
+            return -1;
         }
     }
 
-    ret = unlinkat(dirfd, name, flags);
-err_out:
-    return ret;
+    return unlinkat(dirfd, name, flags);
 }
 
 static int local_remove(FsContext *ctx, const char *path)
-- 
2.21.1



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PULL 3/5] 9p: init_in_iov_from_pdu can truncate the size
  2020-01-14 16:02 [PULL 0/5] 9p patches 2020-01-14 Greg Kurz
  2020-01-14 16:02 ` [PULL 1/5] 9pfs: local: Fix possible memory leak in local_link() Greg Kurz
  2020-01-14 16:02 ` [PULL 2/5] 9p: local: always return -1 on error in local_unlinkat_common Greg Kurz
@ 2020-01-14 16:02 ` Greg Kurz
  2020-01-14 16:02 ` [PULL 4/5] virtfs-proxy-helper.c: remove 'err_out' label in setugid() Greg Kurz
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Greg Kurz @ 2020-01-14 16:02 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: anthony.perard, roman, Stefano Stabellini, qemu_oss, Greg Kurz

From: Stefano Stabellini <stefano.stabellini@xilinx.com>

init_in_iov_from_pdu might not be able to allocate the full buffer size
requested, which comes from the client and could be larger than the
transport has available at the time of the request. Specifically, this
can happen with read operations, with the client requesting a read up to
the max allowed, which might be more than the transport has available at
the time.

Today the implementation of init_in_iov_from_pdu throws an error, both
Xen and Virtio.

Instead, change the V9fsTransport interface so that the size becomes a
pointer and can be limited by the implementation of
init_in_iov_from_pdu.

Change both the Xen and Virtio implementations to set the size to the
size of the buffer they managed to allocate, instead of throwing an
error. However, if the allocated buffer size is less than P9_IOHDRSZ
(the size of the header) still throw an error as the case is unhandable.

Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
CC: groug@kaod.org
CC: anthony.perard@citrix.com
CC: roman@zededa.com
CC: qemu_oss@crudebyte.com
Signed-off-by: Greg Kurz <groug@kaod.org>
---
 hw/9pfs/9p.c               | 26 +++++++++++++++++++-------
 hw/9pfs/9p.h               |  2 +-
 hw/9pfs/virtio-9p-device.c | 11 +++++++----
 hw/9pfs/xen-9p-backend.c   | 13 ++++++++-----
 4 files changed, 35 insertions(+), 17 deletions(-)

diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index 520177f40c17..2efed37753ed 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -2090,22 +2090,29 @@ out_nofid:
  * with qemu_iovec_destroy().
  */
 static void v9fs_init_qiov_from_pdu(QEMUIOVector *qiov, V9fsPDU *pdu,
-                                    size_t skip, size_t size,
+                                    size_t skip, size_t *size,
                                     bool is_write)
 {
     QEMUIOVector elem;
     struct iovec *iov;
     unsigned int niov;
+    size_t alloc_size = *size + skip;
 
     if (is_write) {
-        pdu->s->transport->init_out_iov_from_pdu(pdu, &iov, &niov, size + skip);
+        pdu->s->transport->init_out_iov_from_pdu(pdu, &iov, &niov, alloc_size);
     } else {
-        pdu->s->transport->init_in_iov_from_pdu(pdu, &iov, &niov, size + skip);
+        pdu->s->transport->init_in_iov_from_pdu(pdu, &iov, &niov, &alloc_size);
+    }
+
+    if (alloc_size < skip) {
+        *size = 0;
+    } else {
+        *size = alloc_size - skip;
     }
 
     qemu_iovec_init_external(&elem, iov, niov);
     qemu_iovec_init(qiov, niov);
-    qemu_iovec_concat(qiov, &elem, skip, size);
+    qemu_iovec_concat(qiov, &elem, skip, *size);
 }
 
 static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
@@ -2130,7 +2137,7 @@ static int v9fs_xattr_read(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
     }
     offset += err;
 
-    v9fs_init_qiov_from_pdu(&qiov_full, pdu, offset, read_count, false);
+    v9fs_init_qiov_from_pdu(&qiov_full, pdu, offset, &read_count, false);
     err = v9fs_pack(qiov_full.iov, qiov_full.niov, 0,
                     ((char *)fidp->fs.xattr.value) + off,
                     read_count);
@@ -2259,9 +2266,11 @@ static void coroutine_fn v9fs_read(void *opaque)
         QEMUIOVector qiov_full;
         QEMUIOVector qiov;
         int32_t len;
+        size_t size = max_count;
 
-        v9fs_init_qiov_from_pdu(&qiov_full, pdu, offset + 4, max_count, false);
+        v9fs_init_qiov_from_pdu(&qiov_full, pdu, offset + 4, &size, false);
         qemu_iovec_init(&qiov, qiov_full.niov);
+        max_count = size;
         do {
             qemu_iovec_reset(&qiov);
             qemu_iovec_concat(&qiov, &qiov_full, count, qiov_full.size - count);
@@ -2504,6 +2513,7 @@ static void coroutine_fn v9fs_write(void *opaque)
     int32_t len = 0;
     int32_t total = 0;
     size_t offset = 7;
+    size_t size;
     V9fsFidState *fidp;
     V9fsPDU *pdu = opaque;
     V9fsState *s = pdu->s;
@@ -2516,7 +2526,9 @@ static void coroutine_fn v9fs_write(void *opaque)
         return;
     }
     offset += err;
-    v9fs_init_qiov_from_pdu(&qiov_full, pdu, offset, count, true);
+    size = count;
+    v9fs_init_qiov_from_pdu(&qiov_full, pdu, offset, &size, true);
+    count = size;
     trace_v9fs_write(pdu->tag, pdu->id, fid, off, count, qiov_full.niov);
 
     fidp = get_fid(pdu, fid);
diff --git a/hw/9pfs/9p.h b/hw/9pfs/9p.h
index 3904f8290131..8d07a0b301e2 100644
--- a/hw/9pfs/9p.h
+++ b/hw/9pfs/9p.h
@@ -425,7 +425,7 @@ struct V9fsTransport {
     ssize_t     (*pdu_vunmarshal)(V9fsPDU *pdu, size_t offset, const char *fmt,
                                   va_list ap);
     void        (*init_in_iov_from_pdu)(V9fsPDU *pdu, struct iovec **piov,
-                                        unsigned int *pniov, size_t size);
+                                        unsigned int *pniov, size_t *size);
     void        (*init_out_iov_from_pdu)(V9fsPDU *pdu, struct iovec **piov,
                                          unsigned int *pniov, size_t size);
     void        (*push_and_notify)(V9fsPDU *pdu);
diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c
index b5a7c03f26d5..991e175c826f 100644
--- a/hw/9pfs/virtio-9p-device.c
+++ b/hw/9pfs/virtio-9p-device.c
@@ -147,19 +147,22 @@ static ssize_t virtio_pdu_vunmarshal(V9fsPDU *pdu, size_t offset,
 }
 
 static void virtio_init_in_iov_from_pdu(V9fsPDU *pdu, struct iovec **piov,
-                                        unsigned int *pniov, size_t size)
+                                        unsigned int *pniov, size_t *size)
 {
     V9fsState *s = pdu->s;
     V9fsVirtioState *v = container_of(s, V9fsVirtioState, state);
     VirtQueueElement *elem = v->elems[pdu->idx];
     size_t buf_size = iov_size(elem->in_sg, elem->in_num);
 
-    if (buf_size < size) {
+    if (buf_size < P9_IOHDRSZ) {
         VirtIODevice *vdev = VIRTIO_DEVICE(v);
 
         virtio_error(vdev,
-                     "VirtFS reply type %d needs %zu bytes, buffer has %zu",
-                     pdu->id + 1, size, buf_size);
+                     "VirtFS reply type %d needs %zu bytes, buffer has %zu, less than minimum",
+                     pdu->id + 1, *size, buf_size);
+    }
+    if (buf_size < *size) {
+        *size = buf_size;
     }
 
     *piov = elem->in_sg;
diff --git a/hw/9pfs/xen-9p-backend.c b/hw/9pfs/xen-9p-backend.c
index 71eebe12dd41..18fe5b7c92fa 100644
--- a/hw/9pfs/xen-9p-backend.c
+++ b/hw/9pfs/xen-9p-backend.c
@@ -187,7 +187,7 @@ static void xen_9pfs_init_out_iov_from_pdu(V9fsPDU *pdu,
 static void xen_9pfs_init_in_iov_from_pdu(V9fsPDU *pdu,
                                           struct iovec **piov,
                                           unsigned int *pniov,
-                                          size_t size)
+                                          size_t *size)
 {
     Xen9pfsDev *xen_9pfs = container_of(pdu->s, Xen9pfsDev, state);
     Xen9pfsRing *ring = &xen_9pfs->rings[pdu->tag % xen_9pfs->num_rings];
@@ -197,16 +197,19 @@ static void xen_9pfs_init_in_iov_from_pdu(V9fsPDU *pdu,
     g_free(ring->sg);
 
     ring->sg = g_new0(struct iovec, 2);
-    xen_9pfs_in_sg(ring, ring->sg, &num, pdu->idx, size);
+    xen_9pfs_in_sg(ring, ring->sg, &num, pdu->idx, *size);
 
     buf_size = iov_size(ring->sg, num);
-    if (buf_size  < size) {
+    if (buf_size  < P9_IOHDRSZ) {
         xen_pv_printf(&xen_9pfs->xendev, 0, "Xen 9pfs request type %d"
-                "needs %zu bytes, buffer has %zu\n", pdu->id, size,
-                buf_size);
+                "needs %zu bytes, buffer has %zu, less than minimum\n",
+                pdu->id, *size, buf_size);
         xen_be_set_state(&xen_9pfs->xendev, XenbusStateClosing);
         xen_9pfs_disconnect(&xen_9pfs->xendev);
     }
+    if (buf_size  < *size) {
+        *size = buf_size;
+    }
 
     *piov = ring->sg;
     *pniov = num;
-- 
2.21.1



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PULL 4/5] virtfs-proxy-helper.c: remove 'err_out' label in setugid()
  2020-01-14 16:02 [PULL 0/5] 9p patches 2020-01-14 Greg Kurz
                   ` (2 preceding siblings ...)
  2020-01-14 16:02 ` [PULL 3/5] 9p: init_in_iov_from_pdu can truncate the size Greg Kurz
@ 2020-01-14 16:02 ` Greg Kurz
  2020-01-14 16:02 ` [PULL 5/5] 9pfs/9p.c: remove unneeded labels Greg Kurz
  2020-01-17 12:12 ` [PULL 0/5] 9p patches 2020-01-14 Peter Maydell
  5 siblings, 0 replies; 8+ messages in thread
From: Greg Kurz @ 2020-01-14 16:02 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Daniel Henrique Barboza, Greg Kurz

From: Daniel Henrique Barboza <danielhb413@gmail.com>

'err_out' can be removed and be replaced by 'return -errno'
in its only instance in the function.

CC: Greg Kurz <groug@kaod.org>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Acked-by: Greg Kurz <groug@kaod.org>
Signed-off-by: Greg Kurz <groug@kaod.org>
---
 fsdev/virtfs-proxy-helper.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/fsdev/virtfs-proxy-helper.c b/fsdev/virtfs-proxy-helper.c
index 0d4de49dcf75..aa1ab2590d42 100644
--- a/fsdev/virtfs-proxy-helper.c
+++ b/fsdev/virtfs-proxy-helper.c
@@ -287,8 +287,7 @@ static int setugid(int uid, int gid, int *suid, int *sgid)
     *sgid = getegid();
 
     if (setresgid(-1, gid, *sgid) == -1) {
-        retval = -errno;
-        goto err_out;
+        return -errno;
     }
 
     if (setresuid(-1, uid, *suid) == -1) {
@@ -322,7 +321,6 @@ err_sgid:
     if (setresgid(-1, *sgid, *sgid) == -1) {
         abort();
     }
-err_out:
     return retval;
 }
 
-- 
2.21.1



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PULL 5/5] 9pfs/9p.c: remove unneeded labels
  2020-01-14 16:02 [PULL 0/5] 9p patches 2020-01-14 Greg Kurz
                   ` (3 preceding siblings ...)
  2020-01-14 16:02 ` [PULL 4/5] virtfs-proxy-helper.c: remove 'err_out' label in setugid() Greg Kurz
@ 2020-01-14 16:02 ` Greg Kurz
  2020-01-17 12:12 ` [PULL 0/5] 9p patches 2020-01-14 Peter Maydell
  5 siblings, 0 replies; 8+ messages in thread
From: Greg Kurz @ 2020-01-14 16:02 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Daniel Henrique Barboza, Greg Kurz

From: Daniel Henrique Barboza <danielhb413@gmail.com>

'out' label in v9fs_xattr_write() and 'out_nofid' label in
v9fs_complete_rename() can be replaced by appropriate return
calls.

CC: Greg Kurz <groug@kaod.org>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Acked-by: Greg Kurz <groug@kaod.org>
Signed-off-by: Greg Kurz <groug@kaod.org>
---
 hw/9pfs/9p.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index 2efed37753ed..869379ddd87c 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -2473,8 +2473,7 @@ static int v9fs_xattr_write(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
 
 
     if (fidp->fs.xattr.len < off) {
-        err = -ENOSPC;
-        goto out;
+        return -ENOSPC;
     }
     write_count = fidp->fs.xattr.len - off;
     if (write_count > count) {
@@ -2500,7 +2499,7 @@ static int v9fs_xattr_write(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
         off += to_copy;
         write_count -= to_copy;
     }
-out:
+
     return err;
 }
 
@@ -3068,8 +3067,7 @@ static int coroutine_fn v9fs_complete_rename(V9fsPDU *pdu, V9fsFidState *fidp,
     if (newdirfid != -1) {
         dirfidp = get_fid(pdu, newdirfid);
         if (dirfidp == NULL) {
-            err = -ENOENT;
-            goto out_nofid;
+            return -ENOENT;
         }
         if (fidp->fid_type != P9_FID_NONE) {
             err = -EINVAL;
@@ -3112,7 +3110,6 @@ out:
         put_fid(pdu, dirfidp);
     }
     v9fs_path_free(&new_path);
-out_nofid:
     return err;
 }
 
-- 
2.21.1



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PULL 0/5] 9p patches 2020-01-14
  2020-01-14 16:02 [PULL 0/5] 9p patches 2020-01-14 Greg Kurz
                   ` (4 preceding siblings ...)
  2020-01-14 16:02 ` [PULL 5/5] 9pfs/9p.c: remove unneeded labels Greg Kurz
@ 2020-01-17 12:12 ` Peter Maydell
  5 siblings, 0 replies; 8+ messages in thread
From: Peter Maydell @ 2020-01-17 12:12 UTC (permalink / raw)
  To: Greg Kurz; +Cc: QEMU Developers

On Tue, 14 Jan 2020 at 16:02, Greg Kurz <groug@kaod.org> wrote:
>
> The following changes since commit 3c8a6575985b1652b45bfa670b5e1907d642cfa0:
>
>   Merge remote-tracking branch 'remotes/kraxel/tags/usb-20200113-pull-request' into staging (2020-01-13 14:19:57 +0000)
>
> are available in the Git repository at:
>
>   https://github.com/gkurz/qemu.git tags/9p-next-2020-01-14
>
> for you to fetch changes up to fa0f22026747fe0ea6ef4b86c4e73e2e0965f05b:
>
>   9pfs/9p.c: remove unneeded labels (2020-01-14 07:59:47 +0100)
>
> ----------------------------------------------------------------
> Assorted fixes and cleanups.
>
> ----------------------------------------------------------------

Compile failure on 32-bit:

/home/peter.maydell/qemu/hw/9pfs/9p.c: In function 'v9fs_xattr_read':
/home/peter.maydell/qemu/hw/9pfs/9p.c:2140:54: error: passing argument
4 of 'v9fs_init_qiov_from_pdu' from incompatible pointer type
[-Werror=incompatible-pointer-types]
     v9fs_init_qiov_from_pdu(&qiov_full, pdu, offset, &read_count, false);
                                                      ^
/home/peter.maydell/qemu/hw/9pfs/9p.c:2092:13: note: expected 'size_t
* {aka unsigned int *}' but argument is of type 'uint64_t * {aka long
long unsigned int *}'
 static void v9fs_init_qiov_from_pdu(QEMUIOVector *qiov, V9fsPDU *pdu,
             ^~~~~~~~~~~~~~~~~~~~~~~

thanks
-- PMM


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PULL 5/5] 9pfs/9p.c: remove unneeded labels
  2020-01-20 17:06 [PULL 0/5] 9p patches 2020-01-20 Greg Kurz
@ 2020-01-20 17:06 ` Greg Kurz
  0 siblings, 0 replies; 8+ messages in thread
From: Greg Kurz @ 2020-01-20 17:06 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell; +Cc: Daniel Henrique Barboza, Greg Kurz

From: Daniel Henrique Barboza <danielhb413@gmail.com>

'out' label in v9fs_xattr_write() and 'out_nofid' label in
v9fs_complete_rename() can be replaced by appropriate return
calls.

CC: Greg Kurz <groug@kaod.org>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Acked-by: Greg Kurz <groug@kaod.org>
Signed-off-by: Greg Kurz <groug@kaod.org>
---
 hw/9pfs/9p.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index 8b247b904ec7..b0e445d6bd5a 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -2472,8 +2472,7 @@ static int v9fs_xattr_write(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
 
 
     if (fidp->fs.xattr.len < off) {
-        err = -ENOSPC;
-        goto out;
+        return -ENOSPC;
     }
     write_count = fidp->fs.xattr.len - off;
     if (write_count > count) {
@@ -2499,7 +2498,7 @@ static int v9fs_xattr_write(V9fsState *s, V9fsPDU *pdu, V9fsFidState *fidp,
         off += to_copy;
         write_count -= to_copy;
     }
-out:
+
     return err;
 }
 
@@ -3067,8 +3066,7 @@ static int coroutine_fn v9fs_complete_rename(V9fsPDU *pdu, V9fsFidState *fidp,
     if (newdirfid != -1) {
         dirfidp = get_fid(pdu, newdirfid);
         if (dirfidp == NULL) {
-            err = -ENOENT;
-            goto out_nofid;
+            return -ENOENT;
         }
         if (fidp->fid_type != P9_FID_NONE) {
             err = -EINVAL;
@@ -3111,7 +3109,6 @@ out:
         put_fid(pdu, dirfidp);
     }
     v9fs_path_free(&new_path);
-out_nofid:
     return err;
 }
 
-- 
2.21.1



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, back to index

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-14 16:02 [PULL 0/5] 9p patches 2020-01-14 Greg Kurz
2020-01-14 16:02 ` [PULL 1/5] 9pfs: local: Fix possible memory leak in local_link() Greg Kurz
2020-01-14 16:02 ` [PULL 2/5] 9p: local: always return -1 on error in local_unlinkat_common Greg Kurz
2020-01-14 16:02 ` [PULL 3/5] 9p: init_in_iov_from_pdu can truncate the size Greg Kurz
2020-01-14 16:02 ` [PULL 4/5] virtfs-proxy-helper.c: remove 'err_out' label in setugid() Greg Kurz
2020-01-14 16:02 ` [PULL 5/5] 9pfs/9p.c: remove unneeded labels Greg Kurz
2020-01-17 12:12 ` [PULL 0/5] 9p patches 2020-01-14 Peter Maydell
2020-01-20 17:06 [PULL 0/5] 9p patches 2020-01-20 Greg Kurz
2020-01-20 17:06 ` [PULL 5/5] 9pfs/9p.c: remove unneeded labels Greg Kurz

QEMU-Devel Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/qemu-devel/0 qemu-devel/git/0.git
	git clone --mirror https://lore.kernel.org/qemu-devel/1 qemu-devel/git/1.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 qemu-devel qemu-devel/ https://lore.kernel.org/qemu-devel \
		qemu-devel@nongnu.org
	public-inbox-index qemu-devel

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.nongnu.qemu-devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git