All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xenbus: fix possible crash in xenbus_uevent_backend
@ 2011-07-18 12:40 Olaf Hering
  2011-07-18 13:11 ` Ian Campbell
  2011-07-18 13:18 ` Jan Beulich
  0 siblings, 2 replies; 6+ messages in thread
From: Olaf Hering @ 2011-07-18 12:40 UTC (permalink / raw)
  To: xen-devel


Fix possible NULL pointer crash in xenbus_uevent_backend().
The variable to check for should probably be bus.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

Index: linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
===================================================================
--- linux-3.0-rc7-xen-kexec.orig/drivers/xen/xenbus/xenbus_probe_backend.c
+++ linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
@@ -104,7 +104,7 @@ static int xenbus_uevent_backend(struct
 
 	xdev = to_xenbus_device(dev);
 	bus = container_of(xdev->dev.bus, struct xen_bus_type, bus);
-	if (xdev == NULL)
+	if (bus == NULL)
 		return -ENODEV;
 
 	/* stuff we want to pass to /sbin/hotplug */
Index: linux-3.0-rc7-xen-kexec/include/linux/compiler.h

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] xenbus: fix possible crash in xenbus_uevent_backend
  2011-07-18 12:40 [PATCH] xenbus: fix possible crash in xenbus_uevent_backend Olaf Hering
@ 2011-07-18 13:11 ` Ian Campbell
  2011-07-18 13:21   ` Jan Beulich
  2011-07-18 15:02   ` Olaf Hering
  2011-07-18 13:18 ` Jan Beulich
  1 sibling, 2 replies; 6+ messages in thread
From: Ian Campbell @ 2011-07-18 13:11 UTC (permalink / raw)
  To: Olaf Hering; +Cc: xen-devel@lists.xensource.com

On Mon, 2011-07-18 at 13:40 +0100, Olaf Hering wrote:
> Fix possible NULL pointer crash in xenbus_uevent_backend().
> The variable to check for should probably be bus.
> 
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> 
> Index: linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
> ===================================================================
> --- linux-3.0-rc7-xen-kexec.orig/drivers/xen/xenbus/xenbus_probe_backend.c
> +++ linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
> @@ -104,7 +104,7 @@ static int xenbus_uevent_backend(struct
>  
>  	xdev = to_xenbus_device(dev);
>  	bus = container_of(xdev->dev.bus, struct xen_bus_type, bus);
> -	if (xdev == NULL)
> +	if (bus == NULL)
>  		return -ENODEV;

Is this fixing an actual crash which you observed of just something you
noticed looking at the code?

container_of is pure pointer arithmetic without dereferencing so to get
bus == NULL you'd need xdev == offsetof(struct xen_bus_type, bus) or
some such.

I think the check of xdev is correct, although it might be clearer if it
preceded the "bus = ... " it's not actively harmful where it is since
container_of doesn't dereference the pointer.

Ian.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] xenbus: fix possible crash in xenbus_uevent_backend
  2011-07-18 12:40 [PATCH] xenbus: fix possible crash in xenbus_uevent_backend Olaf Hering
  2011-07-18 13:11 ` Ian Campbell
@ 2011-07-18 13:18 ` Jan Beulich
  1 sibling, 0 replies; 6+ messages in thread
From: Jan Beulich @ 2011-07-18 13:18 UTC (permalink / raw)
  To: Olaf Hering; +Cc: xen-devel

>>> On 18.07.11 at 14:40, Olaf Hering <olaf@aepfle.de> wrote:
> Fix possible NULL pointer crash in xenbus_uevent_backend().
> The variable to check for should probably be bus.
> 
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> 
> Index: linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
> ===================================================================
> --- linux-3.0-rc7-xen-kexec.orig/drivers/xen/xenbus/xenbus_probe_backend.c
> +++ linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
> @@ -104,7 +104,7 @@ static int xenbus_uevent_backend(struct
>  
>  	xdev = to_xenbus_device(dev);
>  	bus = container_of(xdev->dev.bus, struct xen_bus_type, bus);
> -	if (xdev == NULL)
> +	if (bus == NULL)

How can the result of a container_of() be NULL if the passed in
value is in any way meaningful (i.e. valid or NULL)? If any such
check is really necessary, wouldn't you rather want to check
xdev->dev.bus here?

Looking at the code (and its 2.6.18 tree's counterpart
xenbus_uevent_frontend()), I would rather suspect that this
wasn't meant to check bus in the first place, but instead needlessly
tries to check the to_xenbus_device() result, which likewise can't
reasonably be NULL (as that's again the result of a container_of()).

Jan

>  		return -ENODEV;
>  
>  	/* stuff we want to pass to /sbin/hotplug */

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] xenbus: fix possible crash in xenbus_uevent_backend
  2011-07-18 13:11 ` Ian Campbell
@ 2011-07-18 13:21   ` Jan Beulich
  2011-07-18 13:26     ` Ian Campbell
  2011-07-18 15:02   ` Olaf Hering
  1 sibling, 1 reply; 6+ messages in thread
From: Jan Beulich @ 2011-07-18 13:21 UTC (permalink / raw)
  To: Olaf Hering, Ian Campbell; +Cc: xen-devel@lists.xensource.com

>>> On 18.07.11 at 15:11, Ian Campbell <Ian.Campbell@citrix.com> wrote:
> On Mon, 2011-07-18 at 13:40 +0100, Olaf Hering wrote:
>> Fix possible NULL pointer crash in xenbus_uevent_backend().
>> The variable to check for should probably be bus.
>> 
>> Signed-off-by: Olaf Hering <olaf@aepfle.de>
>> 
>> Index: linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
>> ===================================================================
>> --- linux-3.0-rc7-xen-kexec.orig/drivers/xen/xenbus/xenbus_probe_backend.c
>> +++ linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
>> @@ -104,7 +104,7 @@ static int xenbus_uevent_backend(struct
>>  
>>  	xdev = to_xenbus_device(dev);
>>  	bus = container_of(xdev->dev.bus, struct xen_bus_type, bus);
>> -	if (xdev == NULL)
>> +	if (bus == NULL)
>>  		return -ENODEV;
> 
> Is this fixing an actual crash which you observed of just something you
> noticed looking at the code?
> 
> container_of is pure pointer arithmetic without dereferencing so to get
> bus == NULL you'd need xdev == offsetof(struct xen_bus_type, bus) or
> some such.

-offsetof(struct xen_bus_type, bus)

> I think the check of xdev is correct, although it might be clearer if it

Not really, as it similarly is the result of a container_of().

> preceded the "bus = ... " it's not actively harmful where it is since
> container_of doesn't dereference the pointer.

Doesn't? "xdev->dev.bus" very much looks like a de-reference to me.

Jan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] xenbus: fix possible crash in xenbus_uevent_backend
  2011-07-18 13:21   ` Jan Beulich
@ 2011-07-18 13:26     ` Ian Campbell
  0 siblings, 0 replies; 6+ messages in thread
From: Ian Campbell @ 2011-07-18 13:26 UTC (permalink / raw)
  To: Jan Beulich; +Cc: Olaf Hering, xen-devel@lists.xensource.com

On Mon, 2011-07-18 at 14:21 +0100, Jan Beulich wrote:
> >>> On 18.07.11 at 15:11, Ian Campbell <Ian.Campbell@citrix.com> wrote:
> > On Mon, 2011-07-18 at 13:40 +0100, Olaf Hering wrote:
> >> Fix possible NULL pointer crash in xenbus_uevent_backend().
> >> The variable to check for should probably be bus.
> >> 
> >> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> >> 
> >> Index: linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
> >> ===================================================================
> >> --- linux-3.0-rc7-xen-kexec.orig/drivers/xen/xenbus/xenbus_probe_backend.c
> >> +++ linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
> >> @@ -104,7 +104,7 @@ static int xenbus_uevent_backend(struct
> >>  
> >>  	xdev = to_xenbus_device(dev);
> >>  	bus = container_of(xdev->dev.bus, struct xen_bus_type, bus);
> >> -	if (xdev == NULL)
> >> +	if (bus == NULL)
> >>  		return -ENODEV;
> > 
> > Is this fixing an actual crash which you observed of just something you
> > noticed looking at the code?
> > 
> > container_of is pure pointer arithmetic without dereferencing so to get
> > bus == NULL you'd need xdev == offsetof(struct xen_bus_type, bus) or
> > some such.
> 
> -offsetof(struct xen_bus_type, bus)
> 
> > I think the check of xdev is correct, although it might be clearer if it
> 
> Not really, as it similarly is the result of a container_of().

So it is, didn't spot that.

> > preceded the "bus = ... " it's not actively harmful where it is since
> > container_of doesn't dereference the pointer.
> 
> Doesn't? "xdev->dev.bus" very much looks like a de-reference to me.

Oh, right. I'll argue that that's the parameter to container_of
de-referencing, not the macro itself, to make myself look less dumb ;-P

Ian.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] xenbus: fix possible crash in xenbus_uevent_backend
  2011-07-18 13:11 ` Ian Campbell
  2011-07-18 13:21   ` Jan Beulich
@ 2011-07-18 15:02   ` Olaf Hering
  1 sibling, 0 replies; 6+ messages in thread
From: Olaf Hering @ 2011-07-18 15:02 UTC (permalink / raw)
  To: Ian Campbell; +Cc: xen-devel@lists.xensource.com

On Mon, Jul 18, Ian Campbell wrote:

> On Mon, 2011-07-18 at 13:40 +0100, Olaf Hering wrote:
> > Fix possible NULL pointer crash in xenbus_uevent_backend().
> > The variable to check for should probably be bus.
> > 
> > Signed-off-by: Olaf Hering <olaf@aepfle.de>
> > 
> > Index: linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
> > ===================================================================
> > --- linux-3.0-rc7-xen-kexec.orig/drivers/xen/xenbus/xenbus_probe_backend.c
> > +++ linux-3.0-rc7-xen-kexec/drivers/xen/xenbus/xenbus_probe_backend.c
> > @@ -104,7 +104,7 @@ static int xenbus_uevent_backend(struct
> >  
> >  	xdev = to_xenbus_device(dev);
> >  	bus = container_of(xdev->dev.bus, struct xen_bus_type, bus);
> > -	if (xdev == NULL)
> > +	if (bus == NULL)
> >  		return -ENODEV;
> 
> Is this fixing an actual crash which you observed of just something you
> noticed looking at the code?

I was browsing the code.

Thanks to you and Jan for reviewing my attempt to fix something thats
not broken. I will prepare a better patch.

Olaf

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-07-18 15:02 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-18 12:40 [PATCH] xenbus: fix possible crash in xenbus_uevent_backend Olaf Hering
2011-07-18 13:11 ` Ian Campbell
2011-07-18 13:21   ` Jan Beulich
2011-07-18 13:26     ` Ian Campbell
2011-07-18 15:02   ` Olaf Hering
2011-07-18 13:18 ` Jan Beulich

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.