RE: [PATCH] [pci][v2] Fix pointer dereference before call to pcie_bus_configure_settings

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: linux-pci-owner@xxxxxxxxxxxxxxx [mailto:linux-pci-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Iyer, Shyam
> Sent: Friday, September 09, 2011 6:48 PM
> To: mason@xxxxxxxx; shyam.iyer.t@xxxxxxxxx
> Cc: linux-pci@xxxxxxxxxxxxxxx; sgruszka@xxxxxxxxxx;
> jbarnes@xxxxxxxxxxxxxxxx
> Subject: RE: [PATCH] [pci][v2] Fix pointer dereference before call to
> pcie_bus_configure_settings
> 
> 
> 
> > -----Original Message-----
> > From: Jon Mason [mailto:mason@xxxxxxxx]
> > Sent: Thursday, September 08, 2011 1:37 PM
> > To: Shyam Iyer
> > Cc: linux-pci@xxxxxxxxxxxxxxx; sgruszka@xxxxxxxxxx;
> > jbarnes@xxxxxxxxxxxxxxxx; Iyer, Shyam
> > Subject: Re: [PATCH] [pci][v2] Fix pointer dereference before call to
> > pcie_bus_configure_settings
> >
> > On Wed, Aug 31, 2011 at 9:21 AM, Shyam Iyer <shyam.iyer.t@xxxxxxxxx>
> > wrote:
> > > Commit b03e7495a862b028294f59fc87286d6d78ee7fa1 introduces a few
> > issues by dereferencing bus->self in the call to
> > pcie_bus_configure_settings.
> > >
> > > This fixes it by checking existence of bus->self before
> dereferencing
> > it.
> > >
> > > Reported-by: Stanislaw Gruszka <sgruszka@xxxxxxxxxx>
> > > Signed-off-by: Shyam Iyer <shyam_iyer@xxxxxxxx>
> > > ---
> > >  arch/x86/pci/acpi.c              |    9 +++++++--
> > >  drivers/pci/hotplug/pcihp_slot.c |    4 +++-
> > >  drivers/pci/probe.c              |    3 ---
> > >  3 files changed, 10 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
> > > index c953302..86bf435 100644
> > > --- a/arch/x86/pci/acpi.c
> > > +++ b/arch/x86/pci/acpi.c
> > > @@ -365,8 +365,13 @@ struct pci_bus * __devinit
> > pci_acpi_scan_root(struct acpi_pci_root *root)
> > >         */
> > >        if (bus) {
> > >                struct pci_bus *child;
> > > -               list_for_each_entry(child, &bus->children, node)
> > > -                       pcie_bus_configure_settings(child, child-
> > >self->pcie_mpss);
> > > +               list_for_each_entry(child, &bus->children, node) {
> > > +                       struct pci_bus *self = child->self;
> >
> > This doesn't compile.  I believe you want pci_dev not pci_bus.
> >
> > I'll roll in that change and push it with my MRRS fix to Linus
> > shortly, as I believe this bug fix should make it into 3.1.
> >
> > Thanks,
> > Jon
> 
> Did this resolve ? I saw you submit the same patch to linus..
> 
> I guess I am confused right now..

Never mind ignore this email. I see the issue you were talking about..

> >
> > > +                       if (!self)
> > > +                               continue;
> > > +
> > > +                       pcie_bus_configure_settings(child, self-
> > >pcie_mpss);
> > > +               }
> > >        }
> > >
> > >        if (!bus)
> > > diff --git a/drivers/pci/hotplug/pcihp_slot.c
> > b/drivers/pci/hotplug/pcihp_slot.c
> > > index 753b21a..3ffd9c1 100644
> > > --- a/drivers/pci/hotplug/pcihp_slot.c
> > > +++ b/drivers/pci/hotplug/pcihp_slot.c
> > > @@ -169,7 +169,9 @@ void pci_configure_slot(struct pci_dev *dev)
> > >                        (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI)))
> > >                return;
> > >
> > > -       pcie_bus_configure_settings(dev->bus, dev->bus->self-
> > >pcie_mpss);
> > > +       if (dev->bus && dev->bus->self)
> > > +               pcie_bus_configure_settings(dev->bus,
> > > +                                           dev->bus->self-
> > >pcie_mpss);
> > >
> > >        memset(&hpp, 0, sizeof(hpp));
> > >        ret = pci_get_hp_params(dev, &hpp);
> > > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> > > index 8473727..0820fc1 100644
> > > --- a/drivers/pci/probe.c
> > > +++ b/drivers/pci/probe.c
> > > @@ -1456,9 +1456,6 @@ void pcie_bus_configure_settings(struct
> pci_bus
> > *bus, u8 mpss)
> > >  {
> > >        u8 smpss = mpss;
> > >
> > > -       if (!bus->self)
> > > -               return;
> > > -
> > >        if (!pci_is_pcie(bus->self))
> > >                return;
> > >
> > > --
> > > 1.7.2.3
> > >
> > > --
> > > To unsubscribe from this list: send the line "unsubscribe linux-
> pci"
> > in
> > > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > >
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux