From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:57087) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tbu2p-0007rr-5o for qemu-devel@nongnu.org; Fri, 23 Nov 2012 09:15:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Tbu2j-0004Gu-4h for qemu-devel@nongnu.org; Fri, 23 Nov 2012 09:15:51 -0500 Received: from mail-ia0-f173.google.com ([209.85.210.173]:48236) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tbu2i-0004Gj-Ti for qemu-devel@nongnu.org; Fri, 23 Nov 2012 09:15:45 -0500 Received: by mail-ia0-f173.google.com with SMTP id w21so5007007iac.4 for ; Fri, 23 Nov 2012 06:15:44 -0800 (PST) MIME-Version: 1.0 In-Reply-To: References: <1353575275-1343-1-git-send-email-s.priebe@profihost.ag> Date: Fri, 23 Nov 2012 14:15:43 +0000 Message-ID: From: Peter Maydell Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [PATCH] overflow of int ret: use ssize_t for ret List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: Josh Durgin , ceph-devel@vger.kernel.org, Stefan Weil , qemu-devel , Stefan Priebe On 23 November 2012 14:11, Stefan Hajnoczi wrote: > On Thu, Nov 22, 2012 at 10:07 AM, Stefan Priebe wrote: >> 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 > > I preferred your previous patch: > > ssize_t on 32-bit hosts has sizeof(ssize_t) == 4. In > qemu_rbd_complete_aio() we may assign acb->ret = rcb->size. Here the > size field is int64_t, so ssize_t ret would truncate the value. The rcb size field should be a size_t: it is used for calling rbd_aio_write and rbd_aio_read so if we've overflowed 32 bits then we've already got a problem there. -- PMM