From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44046) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bXNdp-0007o1-8i for qemu-devel@nongnu.org; Wed, 10 Aug 2016 03:09:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bXNdk-0003WI-Vd for qemu-devel@nongnu.org; Wed, 10 Aug 2016 03:09:28 -0400 Received: from mx1.redhat.com ([209.132.183.28]:35482) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bXNdk-0003WD-Mh for qemu-devel@nongnu.org; Wed, 10 Aug 2016 03:09:24 -0400 Date: Wed, 10 Aug 2016 15:09:04 +0800 From: Peter Xu Message-ID: <20160810070904.GJ4201@pxdev.xzpeter.org> References: <1470753137-18354-1-git-send-email-davidkiarie4@gmail.com> <1470753137-18354-3-git-send-email-davidkiarie4@gmail.com> <20160810054915.GI4201@pxdev.xzpeter.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: Subject: Re: [Qemu-devel] [RFC 2/2] hw/i386: enforce SID verification List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Kiarie Cc: QEMU Developers , Peter Maydell , Eduardo Habkost , "Michael S. Tsirkin" , "J. Kiszka" , Valentine Sinitsyn , Paolo Bonzini On Wed, Aug 10, 2016 at 09:30:52AM +0300, David Kiarie wrote: > On Wed, Aug 10, 2016 at 8:49 AM, Peter Xu wrote: > > > On Tue, Aug 09, 2016 at 05:32:17PM +0300, David Kiarie wrote: > > > > [...] > > > > > @@ -2252,14 +2250,17 @@ static MemTxResult vtd_mem_ir_write(void > > *opaque, hwaddr addr, > > > { > > > int ret = 0; > > > MSIMessage from = {}, to = {}; > > > - uint16_t sid = X86_IOMMU_SID_INVALID; > > > + VTDAddressSpace *as = opaque; > > > + uint16_t sid = pci_bus_num(as->bus) << 8 | as->devfn; > > > > SID can be something not equals to BDF. E.g., when there are PCI > > bridges. See pci_requester_id(). However... > > > > > > > > from.address = (uint64_t) addr + VTD_INTERRUPT_ADDR_FIRST; > > > from.data = (uint32_t) value; > > > > > > - if (!attrs.unspecified) { > > > - /* We have explicit Source ID */ > > > - sid = attrs.requester_id; > > > + if (attrs.requester_id != sid) { > > > + VTD_DPRINTF(GENERAL, "int remap request for sid 0x%04x" > > > + " requester_id 0x%04x couldn't be verified", > > > + sid, attrs.requester_id); > > > + return MEMTX_ERROR; > > > > ...I am not sure whether we need extra check here. In what case will > > attrs.requester_id != sid ? > > > > Meaning I should remove this check ? No, that's a question I asked. I thought this if() would never trigger. -- peterx