All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] overflow of int ret: use ssize_t for ret
@ 2012-11-22  9:07 ` Stefan Priebe
  0 siblings, 0 replies; 18+ messages in thread
From: Stefan Priebe @ 2012-11-22  9:07 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, Stefan Priebe, stefanha, sw, josh.durgin,
	ceph-devel

When acb->cmd is WRITE or DISCARD block/rbd stores rcb->size into acb->ret

Look here:
   if (acb->cmd == RBD_AIO_WRITE ||
        acb->cmd == RBD_AIO_DISCARD) {
        if (r < 0) {
            acb->ret = r;
            acb->error = 1;
        } else if (!acb->error) {
            acb->ret = rcb->size;
        }

right now acb->ret is just an int and we might get an overflow if size is too big.
For discards rcb->size holds the size of the discard - this might be some TB if you
discard a whole device.

The steps to reproduce are:
mkfs.xfs -f a whole device bigger than int in bytes. mkfs.xfs sends a discard. Important is that you use scsi-hd and set discard_granularity=512. Otherwise rbd disabled discard support.
---
 block/rbd.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/block/rbd.c b/block/rbd.c
index 5a0f79f..0384c6c 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -69,7 +69,7 @@ typedef enum {
 typedef struct RBDAIOCB {
     BlockDriverAIOCB common;
     QEMUBH *bh;
-    int ret;
+    ssize_t ret;
     QEMUIOVector *qiov;
     char *bounce;
     RBDAIOCmd cmd;
@@ -86,7 +86,7 @@ typedef struct RADOSCB {
     int done;
     int64_t size;
     char *buf;
-    int ret;
+    ssize_t ret;
 } RADOSCB;
 
 #define RBD_FD_READ 0
-- 
1.7.10.4

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

end of thread, other threads:[~2012-11-23 15:56 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-22  9:07 [PATCH] overflow of int ret: use ssize_t for ret Stefan Priebe
2012-11-22  9:07 ` [Qemu-devel] " Stefan Priebe
2012-11-22 16:40 ` Andreas Färber
2012-11-22 16:40   ` [Qemu-devel] " Andreas Färber
2012-11-22 19:09   ` Stefan Priebe - Profihost AG
2012-11-22 19:09     ` [Qemu-devel] " Stefan Priebe - Profihost AG
2012-11-22 19:37     ` Stefan Weil
2012-11-22 19:37       ` Stefan Weil
2012-11-22 20:49 ` Stefan Priebe - Profihost AG
2012-11-22 20:49   ` [Qemu-devel] " Stefan Priebe - Profihost AG
2012-11-23 14:11 ` Stefan Hajnoczi
2012-11-23 14:11   ` [Qemu-devel] " Stefan Hajnoczi
2012-11-23 14:15   ` Peter Maydell
2012-11-23 14:15     ` [Qemu-devel] " Peter Maydell
2012-11-23 14:38     ` Stefan Priebe - Profihost AG
2012-11-23 14:38       ` [Qemu-devel] " Stefan Priebe - Profihost AG
2012-11-23 15:56     ` Stefan Hajnoczi
2012-11-23 15:56       ` [Qemu-devel] " Stefan Hajnoczi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.