2023-09-20 18:07:46

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH v3 2/2] mcb: use short version for function pointer for mcb_free_bus

On Wed, Sep 06, 2023 at 11:49:28AM +0000, Rodr?guez Barbarin, Jos? Javier wrote:
> From: Jorge Sanjuan Garcia <[email protected]>
>
> Just a style change so that the device release callbacks are defined
> in the same way for devices in mcb_bus and mcb_device.
>
> Signed-off-by: Jorge Sanjuan Garcia <[email protected]>
> Co-developed-by: Jose Javier Rodriguez Barbarin <[email protected]>
> Signed-off-by: Jose Javier Rodriguez Barbarin <[email protected]>
> ---
> drivers/mcb/mcb-core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
> index 0cac5bead84f..5c6157b0db75 100644
> --- a/drivers/mcb/mcb-core.c
> +++ b/drivers/mcb/mcb-core.c
> @@ -288,7 +288,7 @@ struct mcb_bus *mcb_alloc_bus(struct device *carrier)
> bus->dev.parent = carrier;
> bus->dev.bus = &mcb_bus_type;
> bus->dev.type = &mcb_carrier_device_type;
> - bus->dev.release = &mcb_free_bus;
> + bus->dev.release = mcb_free_bus;

But you aren't fixing the root cause here of an incorrect pointer being
passed to this function, right?

Yes, removing the single variable is nicer, so the crash doesn't happen,
but you are still passing the wrong pointer around, so why not fix that?

thanks,

greg k-h


Subject: Re: [PATCH v3 2/2] mcb: use short version for function pointer for mcb_free_bus

On Wed, 2023-09-20 at 15:18 +0200, [email protected] wrote:
> On Wed, Sep 06, 2023 at 11:49:28AM +0000, Rodríguez Barbarin, José
> Javier wrote:
> > From: Jorge Sanjuan Garcia <[email protected]>
> >
> > Just a style change so that the device release callbacks are
> > defined
> > in the same way for devices in mcb_bus and mcb_device.
> >
> > Signed-off-by: Jorge Sanjuan Garcia
> > <[email protected]>
> > Co-developed-by: Jose Javier Rodriguez Barbarin
> > <[email protected]>
> > Signed-off-by: Jose Javier Rodriguez Barbarin
> > <[email protected]>
> > ---
> >  drivers/mcb/mcb-core.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
> > index 0cac5bead84f..5c6157b0db75 100644
> > --- a/drivers/mcb/mcb-core.c
> > +++ b/drivers/mcb/mcb-core.c
> > @@ -288,7 +288,7 @@ struct mcb_bus *mcb_alloc_bus(struct device
> > *carrier)
> >         bus->dev.parent = carrier;
> >         bus->dev.bus = &mcb_bus_type;
> >         bus->dev.type = &mcb_carrier_device_type;
> > -       bus->dev.release = &mcb_free_bus;
> > +       bus->dev.release = mcb_free_bus;
>
> But you aren't fixing the root cause here of an incorrect pointer
> being
> passed to this function, right?
>
> Yes, removing the single variable is nicer, so the crash doesn't
> happen,
> but you are still passing the wrong pointer around, so why not fix
> that?
>

> thanks,
>
> greg k-h

The pointer to struct device in function __mcb_bus_add_devices() always
was the correct one. The problem came when calling to function
to_mcb_device() which was hapenning even for the case of struct device
pointer being a member of struct mcb_bus.

Removing the need for this conversion makes the function generic so
that it will work for both mcb_device and mcb_bus structs. This already
fixes the crash as no member overlapping will occur (is_added in
mcb_device struct and bus_nr in mcb_bus struct).

We belive the pointer is the correct one and this patch series was
actually fixing the root cause of the crash. What do you mean by
"passing the wrong pointer around"? are we missing something?

thanks,

2023-10-05 15:39:06

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH v3 2/2] mcb: use short version for function pointer for mcb_free_bus

On Fri, Sep 22, 2023 at 12:28:14PM +0000, Rodr?guez Barbarin, Jos? Javier wrote:
> On Wed, 2023-09-20 at 15:18 +0200, [email protected] wrote:
> > On Wed, Sep 06, 2023 at 11:49:28AM +0000, Rodr?guez Barbarin, Jos?
> > Javier wrote:
> > > From: Jorge Sanjuan Garcia <[email protected]>
> > >
> > > Just a style change so that the device release callbacks are
> > > defined
> > > in the same way for devices in mcb_bus and mcb_device.
> > >
> > > Signed-off-by: Jorge Sanjuan Garcia
> > > <[email protected]>
> > > Co-developed-by: Jose Javier Rodriguez Barbarin
> > > <[email protected]>
> > > Signed-off-by: Jose Javier Rodriguez Barbarin
> > > <[email protected]>
> > > ---
> > > ?drivers/mcb/mcb-core.c | 2 +-
> > > ?1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
> > > index 0cac5bead84f..5c6157b0db75 100644
> > > --- a/drivers/mcb/mcb-core.c
> > > +++ b/drivers/mcb/mcb-core.c
> > > @@ -288,7 +288,7 @@ struct mcb_bus *mcb_alloc_bus(struct device
> > > *carrier)
> > > ????????bus->dev.parent = carrier;
> > > ????????bus->dev.bus = &mcb_bus_type;
> > > ????????bus->dev.type = &mcb_carrier_device_type;
> > > -???????bus->dev.release = &mcb_free_bus;
> > > +???????bus->dev.release = mcb_free_bus;
> >
> > But you aren't fixing the root cause here of an incorrect pointer
> > being
> > passed to this function, right?
> >
> > Yes, removing the single variable is nicer, so the crash doesn't
> > happen,
> > but you are still passing the wrong pointer around, so why not fix
> > that?
> >
>
> > thanks,
> >
> > greg k-h
>
> The pointer to struct device in function __mcb_bus_add_devices() always
> was the correct one. The problem came when calling to function
> to_mcb_device() which was hapenning even for the case of struct device
> pointer being a member of struct mcb_bus.
>
> Removing the need for this conversion makes the function generic so
> that it will work for both mcb_device and mcb_bus structs. This already
> fixes the crash as no member overlapping will occur (is_added in
> mcb_device struct and bus_nr in mcb_bus struct).
>
> We belive the pointer is the correct one and this patch series was
> actually fixing the root cause of the crash. What do you mean by
> "passing the wrong pointer around"? are we missing something?

Ok, I understand now, yes, this looks correct.

But, the function mcb_bus_add_devices() seems odd to me. You are
passing in a parameter that you are never using, so why have it at all?
You are implying that you only have one bus, yet you are ignoring the
bus sent to you?

This still seems wrong.

I'll queue up this series as it obviously fixes a bug, but more needs to
be done here.

thanks,

greg k-h

Subject: Re: [PATCH v3 2/2] mcb: use short version for function pointer for mcb_free_bus

On Thu, 2023-10-05 at 09:46 +0200, [email protected] wrote:
> On Fri, Sep 22, 2023 at 12:28:14PM +0000, Rodríguez Barbarin, José
> Javier wrote:
> > On Wed, 2023-09-20 at 15:18 +0200,
> > [email protected] wrote:
> > > On Wed, Sep 06, 2023 at 11:49:28AM +0000, Rodríguez Barbarin,
> > > José
> > > Javier wrote:
> > > > From: Jorge Sanjuan Garcia <[email protected]>
> > > >
> > > > Just a style change so that the device release callbacks are
> > > > defined
> > > > in the same way for devices in mcb_bus and mcb_device.
> > > >
> > > > Signed-off-by: Jorge Sanjuan Garcia
> > > > <[email protected]>
> > > > Co-developed-by: Jose Javier Rodriguez Barbarin
> > > > <[email protected]>
> > > > Signed-off-by: Jose Javier Rodriguez Barbarin
> > > > <[email protected]>
> > > > ---
> > > >  drivers/mcb/mcb-core.c | 2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
> > > > index 0cac5bead84f..5c6157b0db75 100644
> > > > --- a/drivers/mcb/mcb-core.c
> > > > +++ b/drivers/mcb/mcb-core.c
> > > > @@ -288,7 +288,7 @@ struct mcb_bus *mcb_alloc_bus(struct device
> > > > *carrier)
> > > >         bus->dev.parent = carrier;
> > > >         bus->dev.bus = &mcb_bus_type;
> > > >         bus->dev.type = &mcb_carrier_device_type;
> > > > -       bus->dev.release = &mcb_free_bus;
> > > > +       bus->dev.release = mcb_free_bus;
> > >
> > > But you aren't fixing the root cause here of an incorrect pointer
> > > being
> > > passed to this function, right?
> > >
> > > Yes, removing the single variable is nicer, so the crash doesn't
> > > happen,
> > > but you are still passing the wrong pointer around, so why not
> > > fix
> > > that?
> > >
> >
> > > thanks,
> > >
> > > greg k-h
> >
> > The pointer to struct device in function __mcb_bus_add_devices()
> > always
> > was the correct one. The problem came when calling to function
> > to_mcb_device() which was hapenning even for the case of struct
> > device
> > pointer being a member of struct mcb_bus.
> >
> > Removing the need for this conversion makes the function generic so
> > that it will work for both mcb_device and mcb_bus structs. This
> > already
> > fixes the crash as no member overlapping will occur (is_added in
> > mcb_device struct and bus_nr in mcb_bus struct).
> >
> > We belive the pointer is the correct one and this patch series was
> > actually fixing the root cause of the crash. What do you mean by
> > "passing the wrong pointer around"? are we missing something?
>
> Ok, I understand now, yes, this looks correct.
>
> But, the function mcb_bus_add_devices() seems odd to me.  You are
> passing in a parameter that you are never using, so why have it at
> all?
> You are implying that you only have one bus, yet you are ignoring the
> bus sent to you?
>
> This still seems wrong.
>
> I'll queue up this series as it obviously fixes a bug, but more needs
> to
> be done here.
>
> thanks,
>
> greg k-h

Thank you Greg, I will think about your suggestions and as soon as I
have a new patch that fixes it, I will send it to you.

Regards