From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56751) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WsNp0-0005oM-Or for qemu-devel@nongnu.org; Wed, 04 Jun 2014 22:54:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WsNou-0000W3-Jp for qemu-devel@nongnu.org; Wed, 04 Jun 2014 22:54:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:19202) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WsNou-0000Vo-B3 for qemu-devel@nongnu.org; Wed, 04 Jun 2014 22:54:24 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s552sNh8022340 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 4 Jun 2014 22:54:23 -0400 Message-ID: <538FDBDB.6060704@redhat.com> Date: Thu, 05 Jun 2014 04:54:19 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1401933526-22436-1-git-send-email-famz@redhat.com> <1401933526-22436-8-git-send-email-famz@redhat.com> In-Reply-To: <1401933526-22436-8-git-send-email-famz@redhat.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 7/8] virtio-blk: Convert VirtIOBlockReq.out to structrue List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng , qemu-devel@nongnu.org Cc: Kevin Wolf , Stefan Hajnoczi Il 05/06/2014 03:58, Fam Zheng ha scritto: > > - if (req->elem->out_sg[0].iov_len < sizeof(*req->out) || > + if (req->elem->out_sg[0].iov_len < sizeof(req->out) || This is not needed anymore. > req->elem->in_sg[req->elem->in_num - 1].iov_len < sizeof(*req->in)) { > error_report("virtio-blk header not in correct element"); > exit(1); > } > > - req->out = (void *)req->elem->out_sg[0].iov_base; > + if (unlikely(iov_to_buf(iov, out_num, 0, &req->out, > + sizeof(req->out)) != sizeof(req->out))) { > + error_report("virtio-blk request outhdr too short"); > + exit(1); > + } > + iov_discard_front(&iov, &out_num, sizeof(req->out)); > req->in = (void *)req->elem->in_sg[req->elem->in_num - 1].iov_base; Here, in a separate patch, you can add iov_len-1 as suggested in the previous review, and then use iov_discard_back on in_num. You can then drop the other part of the "virtio-blk header not in correct element" check. Paolo