All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: brking@us.ibm.com
Cc: Matthew Wilcox <matthew@wil.cx>, Greg KH <greg@kroah.com>,
	Christoph Hellwig <hch@infradead.org>,
	linux-kernel@vger.kernel.org, linuxppc64-dev@ozlabs.org,
	linux-pci@vger.kernel.org, linux-arch@vger.kernel.org,
	paulus@samba.org
Subject: Re: pci: Arch hook to determine config space size
Date: Mon, 31 Jan 2005 22:56:44 +0100	[thread overview]
Message-ID: <200501312256.44692.arnd@arndb.de> (raw)
In-Reply-To: <41FEA4AA.1080407@us.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 2199 bytes --]

On Maandag 31 Januar 2005 22:35, Brian King wrote:
> Matthew Wilcox wrote:
> > Basically, ppc64's config ops are broken and need to check the offset
> > being read.  Here's i386:
> > 
> > static int pci_conf1_write (int seg, int bus, int devfn, int reg, int len, u32 v
> > alue)
> > {
> >         unsigned long flags;
> > 
> >         if ((bus > 255) || (devfn > 255) || (reg > 255)) 
> >                 return -EINVAL;
> 
> Here is a pure ppc64 implementation that does this.

Actually, it doesn't:

> +static int config_access_valid(struct device_node *dn, int where)
> +{
> +       struct device_node *hose_dn = dn->phb->arch_data;
> +
> +       if (where < 256 || hose_dn->pci_ext_config_space)
> +               return 1;

This needs a check for (where < 4096) in case of PCIe or PCI-X.

> @@ -62,6 +72,8 @@ static int rtas_read_config(struct devic
>                 return PCIBIOS_DEVICE_NOT_FOUND;
>         if (where & (size - 1))
>                 return PCIBIOS_BAD_REGISTER_NUMBER;
> +       if (!config_access_valid(dn, where))
> +               return PCIBIOS_BAD_REGISTER_NUMBER;
>  
>         addr = (dn->busno << 16) | (dn->devfn << 8) | where;

addr is still wrong, see my previous mail.

> @@ -110,6 +122,8 @@ static int rtas_write_config(struct devi
>                 return PCIBIOS_DEVICE_NOT_FOUND;
>         if (where & (size - 1))
>                 return PCIBIOS_BAD_REGISTER_NUMBER;
> +       if (!config_access_valid(dn, where))
> +               return PCIBIOS_BAD_REGISTER_NUMBER;
>  
>         addr = (dn->busno << 16) | (dn->devfn << 8) | where;

same here

> @@ -285,6 +309,7 @@ static int __devinit setup_phb(struct de
>         phb->arch_data = dev;
>         phb->ops = &rtas_pci_ops;
>         phb->buid = get_phb_buid(dev);
> +       get_phb_config_space_type(dev);
>  
>         return 0;
>  }

Isn't the config space size a property of the PCI device instead of the
host bridge? For a PCI device behind a PCIe host bridge, this could
still lead to an incorrect config space accesses.

	Arnd <><

PS: I got a permanent fatal error from <linux-pci@vger.kernel.org>, does
that list actually exist?

[-- Attachment #2: signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2005-01-31 21:56 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-01-28 14:56 [PATCH 1/2] pci: Arch hook to determine config space size brking
2005-01-28 18:52 ` Christoph Hellwig
2005-01-29  4:06   ` Greg KH
2005-01-31 19:10     ` Brian King
2005-01-31 19:15       ` Greg KH
2005-01-31 19:29       ` Matthew Wilcox
2005-01-31 20:51         ` Arnd Bergmann
2005-01-31 21:35         ` Brian King
2005-01-31 21:56           ` Arnd Bergmann [this message]
2005-01-31 22:13             ` Greg KH
2005-01-31 22:43             ` Brian King
2005-02-01  3:15               ` Benjamin Herrenschmidt
2005-02-01  4:52                 ` Brian King
2005-02-01  4:57                   ` Benjamin Herrenschmidt
2005-02-02 10:05                     ` Arnd Bergmann
2005-02-03  0:23                       ` Benjamin Herrenschmidt
2005-02-01 12:32                   ` Matthew Wilcox
2005-02-01 20:16                     ` Brian King
2005-01-31 19:40       ` Brian King
2005-02-01  7:46         ` Grant Grundler
2005-02-01 15:23           ` Brian King
  -- strict thread matches above, loose matches on Subject: below --
2005-01-31 23:22 arndb
2005-01-31 23:22 ` arndb

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=200501312256.44692.arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=brking@us.ibm.com \
    --cc=greg@kroah.com \
    --cc=hch@infradead.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linuxppc64-dev@ozlabs.org \
    --cc=matthew@wil.cx \
    --cc=paulus@samba.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.