]> rtime.felk.cvut.cz Git - socketcan-devel.git/commitdiff
Check for valid return value in the case of NETDEV_UNREGISTER.
authorhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Tue, 19 Sep 2006 15:16:55 +0000 (15:16 +0000)
committerhartkopp <hartkopp@030b6a49-0b11-0410-94ab-b0dab22257f2>
Tue, 19 Sep 2006 15:16:55 +0000 (15:16 +0000)
git-svn-id: svn://svn.berlios.de//socketcan/trunk@82 030b6a49-0b11-0410-94ab-b0dab22257f2

kernel/2.6/net/can/af_can.c

index c55da9f77acf8d08039c93c232f57d06ee97d70a..b0ef04495852b8a921fff0d9d5e8edbcb17c6849 100644 (file)
@@ -450,7 +450,12 @@ static int can_notifier(struct notifier_block *nb,
        case NETDEV_UNREGISTER:
                spin_lock(&rcv_lists_lock);
 
-               d = find_dev_rcv_lists(dev);
+               if (!(d = find_dev_rcv_lists(dev))) {
+                       printk(KERN_ERR "CAN: notifier: receive list not "
+                              "found for dev %s\n", dev->name);
+                       goto unreg_out;
+               }
+
                hlist_del_rcu(&d->list);
 
                /* remove all receivers hooked at this netdevice */
@@ -462,9 +467,11 @@ static int can_notifier(struct notifier_block *nb,
                for (i = 0; i < 2048; i++)
                        can_rx_delete_all(&d->rx_sff[i]);
 
+unreg_out:
                spin_unlock(&rcv_lists_lock);
 
-               call_rcu(&d->rcu, can_rcv_lists_delete);
+               if (d)
+                       call_rcu(&d->rcu, can_rcv_lists_delete);
 
                break;
        }