greybus: protocol: fix oops when no protocol is assigned
authorGreg Kroah-Hartman <greg@kroah.com>
Wed, 24 Dec 2014 21:12:10 +0000 (13:12 -0800)
committerGreg Kroah-Hartman <greg@kroah.com>
Fri, 2 Jan 2015 21:06:48 +0000 (13:06 -0800)
When removing a connection with no protocol assigned to it, the kernel
oopses as we always thought protocols were always there.

Fix that problem, oopses are bad.

Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
Reviewed-by: Alex Elder <elder@linaro.org>
drivers/staging/greybus/protocol.c

index 4d6ffdd..562401d 100644 (file)
@@ -165,10 +165,16 @@ struct gb_protocol *gb_protocol_get(u8 id, u8 major, u8 minor)
 
 void gb_protocol_put(struct gb_protocol *protocol)
 {
-       u8 major = protocol->major;
-       u8 minor = protocol->minor;
+       u8 major;
+       u8 minor;
        u8 protocol_count;
 
+       if (!protocol)
+               return;
+
+       major = protocol->major;
+       minor = protocol->minor;
+
        spin_lock_irq(&gb_protocols_lock);
        protocol = _gb_protocol_find(protocol->id, protocol->major,
                                                protocol->minor);