qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] overflow of int ret: use ssize_t for ret
@ 2012-11-22  9:07 Stefan Priebe
  2012-11-22 16:40 ` Andreas Färber
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ 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] 9+ messages in thread

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

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).