From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56411) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vnx4w-0008S4-O0 for qemu-devel@nongnu.org; Tue, 03 Dec 2013 16:00:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vnx4q-000875-9S for qemu-devel@nongnu.org; Tue, 03 Dec 2013 16:00:22 -0500 Received: from mail-pb0-f49.google.com ([209.85.160.49]:63341) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vnx4q-00086t-3q for qemu-devel@nongnu.org; Tue, 03 Dec 2013 16:00:16 -0500 Received: by mail-pb0-f49.google.com with SMTP id jt11so21583957pbb.8 for ; Tue, 03 Dec 2013 13:00:15 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <20131203204139.GA5670@redhat.com> References: <1386087086-3691-1-git-send-email-mst@redhat.com> <1386087086-3691-8-git-send-email-mst@redhat.com> <20131203204139.GA5670@redhat.com> From: Peter Maydell Date: Tue, 3 Dec 2013 20:59:52 +0000 Message-ID: Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [PATCH 07/23] hw/pci/pcie_aer.c: fix buffer overruns on invalid state load List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: QEMU Developers , Anthony Liguori , qemu-stable On 3 December 2013 20:41, Michael S. Tsirkin wrote: > On Tue, Dec 03, 2013 at 06:30:46PM +0000, Peter Maydell wrote: >> On 3 December 2013 16:28, Michael S. Tsirkin wrote: >> > const VMStateDescription vmstate_pcie_aer_log = { >> > .name = "PCIE_AER_ERROR_LOG", >> > .version_id = 1, >> > .minimum_version_id = 1, >> > .minimum_version_id_old = 1, >> > + .post_load = pcie_aer_state_post_load, >> > .fields = (VMStateField[]) { >> > VMSTATE_UINT16(log_num, PCIEAERLog), >> > - VMSTATE_UINT16(log_max, PCIEAERLog), >> > - VMSTATE_STRUCT_VARRAY_POINTER_UINT16(log, PCIEAERLog, log_num, >> > + VMSTATE_UINT16_EQUAL(log_max, PCIEAERLog), >> > + VMSTATE_STRUCT_VARRAY_POINTER_UINT16(log, PCIEAERLog, log_max, >> > vmstate_pcie_aer_err, PCIEAERErr), >> > VMSTATE_END_OF_LIST() >> > } >> >> Isn't this a migration compability break? > > How is it a break? If a QEMU with this patch sends data to a QEMU without it, then the receiving end will think it should expect log_num array entries but the sending end is going to send log_max of them. Conversely, an old->new migration is going to send fewer array entries than the destination expects. Or have I misinterpreted how the VARRAY entries work? thanks -- PMM