From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: xen-devel@lists.xenproject.org, qemu-devel@nongnu.org, JBeulich@suse.com
Subject: Re: [Qemu-devel] [PATCH v1 03/10] xen/pt: Check if reg->init function sets the 'data' past the reg->size
Date: Fri, 14 Aug 2015 16:42:38 -0400 [thread overview]
Message-ID: <20150814204238.GA21854@l.oracle.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1507171700570.17378@kaball.uk.xensource.com>
On Fri, Jul 17, 2015 at 05:03:44PM +0100, Stefano Stabellini wrote:
> On Thu, 2 Jul 2015, Konrad Rzeszutek Wilk wrote:
> > It should never happen, but in case it does (an developer adds
> > a new register and the 'init_val' expands past the register
> > size) we want to report. The code will only write up to
> > reg->size so there is no runtime danger of the register spilling
> > across other ones - however to catch this sort of thing
> > we still return an error.
> >
> > Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> > ---
> > hw/xen/xen_pt_config_init.c | 10 ++++++++--
> > 1 file changed, 8 insertions(+), 2 deletions(-)
> >
> > diff --git a/hw/xen/xen_pt_config_init.c b/hw/xen/xen_pt_config_init.c
> > index 3938afd..09309ba 100644
> > --- a/hw/xen/xen_pt_config_init.c
> > +++ b/hw/xen/xen_pt_config_init.c
> > @@ -1904,9 +1904,15 @@ static int xen_pt_config_reg_init(XenPCIPassthroughState *s,
> > } else
> > val = data;
> >
> > + if (val & ~size_mask) {
> > + XEN_PT_ERR(&s->dev,"Offset 0x%04x:0x%04x expands past register size(%d)!\n",
> > + offset, val, reg->size);
> > + g_free(reg_entry);
> > + return -ENXIO;
> > + }
>
> If we worry about changes to init_val, wouldn't it be better to add
> QEMU_BUILD_BUG_ON(data & ~size_mask)?
I couldnt' figure out how to make that work nicely.
The QEMU_BUILD_BUG_ON look to be build time - not run-time.
Which means that doing:
for (i = 0; i < grp_entries; i++)
{
entries = grp_entries[i]...
for (j = 0; j < entries; j++)
QEMU_BUILD_BUG_ON(entries[j].init_val & ~size_mask)
}
is not something I can image the compiler working with?
>
>
> > /* This could be just pci_set_long as we don't modify the bits
> > - * past reg->size, but in case this routine is run in parallel
> > - * we do not want to over-write other registers. */
> > + * past reg->size, but in case this routine is run in parallel or the
> > + * init value is larger, we do not want to over-write registers. */
> > switch (reg->size) {
> > case 1: pci_set_byte(s->dev.config + offset, (uint8_t)val); break;
> > case 2: pci_set_word(s->dev.config + offset, (uint16_t)val); break;
> > --
> > 2.1.0
> >
next prev parent reply other threads:[~2015-08-14 20:42 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-02 19:51 [Qemu-devel] [PATCH v1] Remove XenPTReg->data and use dev.config for guest configuration values Konrad Rzeszutek Wilk
2015-07-02 19:51 ` [Qemu-devel] [PATCH v1 01/10] xen/pt: Use xen_host_pci_get_[byte|word] instead of dev.config Konrad Rzeszutek Wilk
2015-07-17 15:43 ` Stefano Stabellini
2015-07-17 15:43 ` [Qemu-devel] " Stefano Stabellini
2015-07-02 19:51 ` Konrad Rzeszutek Wilk
2015-07-02 19:51 ` [Qemu-devel] [PATCH v1 02/10] xen/pt: Sync up the dev.config and data values Konrad Rzeszutek Wilk
2015-07-02 19:51 ` Konrad Rzeszutek Wilk
2015-07-17 15:54 ` [Qemu-devel] " Stefano Stabellini
2015-07-17 15:54 ` Stefano Stabellini
2015-07-02 19:51 ` [Qemu-devel] [PATCH v1 03/10] xen/pt: Check if reg->init function sets the 'data' past the reg->size Konrad Rzeszutek Wilk
2015-07-02 19:51 ` Konrad Rzeszutek Wilk
2015-07-17 16:03 ` Stefano Stabellini
2015-07-17 16:03 ` [Qemu-devel] " Stefano Stabellini
2015-07-17 16:47 ` Konrad Rzeszutek Wilk
2015-07-17 16:47 ` Konrad Rzeszutek Wilk
2015-08-14 20:42 ` Konrad Rzeszutek Wilk
2015-08-14 20:42 ` Konrad Rzeszutek Wilk [this message]
2015-07-02 19:51 ` [Qemu-devel] [PATCH v1 04/10] xen/pt: Use xen_host_pci_get_[byte, word, long] instead of xen_host_pci_get_long Konrad Rzeszutek Wilk
2015-07-02 19:51 ` Konrad Rzeszutek Wilk
2015-07-17 15:59 ` [Qemu-devel] " Stefano Stabellini
2015-07-17 15:59 ` Stefano Stabellini
2015-07-02 19:51 ` [Qemu-devel] [PATCH v1 05/10] xen/pt: Remove XenPTReg->data field Konrad Rzeszutek Wilk
2015-07-02 19:51 ` Konrad Rzeszutek Wilk
2015-07-17 16:30 ` Stefano Stabellini
2015-07-17 16:30 ` [Qemu-devel] " Stefano Stabellini
2015-07-17 16:48 ` Konrad Rzeszutek Wilk
2015-07-17 16:48 ` [Qemu-devel] " Konrad Rzeszutek Wilk
2015-07-02 19:51 ` [Qemu-devel] [PATCH v1 06/10] xen/pt: Log xen_host_pci_get in two init functions Konrad Rzeszutek Wilk
2015-07-02 19:51 ` Konrad Rzeszutek Wilk
2015-07-02 19:51 ` [Qemu-devel] [PATCH v1 07/10] xen/pt: Log xen_host_pci_get/set errors in MSI code Konrad Rzeszutek Wilk
2015-07-02 19:51 ` Konrad Rzeszutek Wilk
2015-07-02 19:51 ` [Qemu-devel] [PATCH v1 08/10] xen/pt: Make xen_pt_unregister_device idempotent Konrad Rzeszutek Wilk
2015-07-17 16:14 ` Stefano Stabellini
2015-07-17 16:14 ` [Qemu-devel] " Stefano Stabellini
2015-08-14 20:20 ` Konrad Rzeszutek Wilk
2015-08-14 20:20 ` Konrad Rzeszutek Wilk
2015-07-02 19:51 ` Konrad Rzeszutek Wilk
2015-07-02 19:51 ` [Qemu-devel] [PATCH v1 09/10] xen/pt: Move bulk of xen_pt_unregister_device in its own routine Konrad Rzeszutek Wilk
2015-07-02 19:51 ` Konrad Rzeszutek Wilk
2015-07-02 19:51 ` [PATCH v1 10/10] xen/pt: Check for return values for xen_host_pci_[get|set] in init Konrad Rzeszutek Wilk
2015-07-02 19:51 ` [Qemu-devel] " Konrad Rzeszutek Wilk
2015-07-08 19:19 ` [Qemu-devel] [PATCH] Follow-on to Remove XenPTReg->data and use dev.config for guest configuration values Konrad Rzeszutek Wilk
2015-07-08 19:19 ` [PATCH] xen/pt: Don't slurp wholesale the PCI configuration registers Konrad Rzeszutek Wilk
2015-07-08 19:19 ` [Qemu-devel] " Konrad Rzeszutek Wilk
2015-07-17 16:34 ` Stefano Stabellini
2015-07-17 16:34 ` Stefano Stabellini
2015-07-08 19:19 ` [PATCH] Follow-on to Remove XenPTReg->data and use dev.config for guest configuration values Konrad Rzeszutek Wilk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150814204238.GA21854@l.oracle.com \
--to=konrad.wilk@oracle.com \
--cc=JBeulich@suse.com \
--cc=qemu-devel@nongnu.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.