[IRLAN]: handle out of memory errors
authorAkinobu Mita <akinobu.mita@gmail.com>
Wed, 7 Feb 2007 08:12:13 +0000 (00:12 -0800)
committerDavid S. Miller <davem@sunset.davemloft.net>
Thu, 8 Feb 2007 20:39:08 +0000 (12:39 -0800)
This patch checks return values:

- irlmp_register_client()
- irlmp_register_service()
- irlan_open()

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/irda/irlan/irlan_common.c

index 2bb04ac0932922dd8e5042787fdacea795b5ec13..310776dd61094225ad9020d093b227bde66c5dfc 100644 (file)
@@ -144,12 +144,18 @@ static int __init irlan_init(void)
        /* Register with IrLMP as a client */
        ckey = irlmp_register_client(hints, &irlan_client_discovery_indication,
                                     NULL, NULL);
-       
+       if (!ckey)
+               goto err_ckey;
+
        /* Register with IrLMP as a service */
-       skey = irlmp_register_service(hints);
+       skey = irlmp_register_service(hints);
+       if (!skey)
+               goto err_skey;
 
        /* Start the master IrLAN instance (the only one for now) */
-       new = irlan_open(DEV_ADDR_ANY, DEV_ADDR_ANY);
+       new = irlan_open(DEV_ADDR_ANY, DEV_ADDR_ANY);
+       if (!new)
+               goto err_open;
 
        /* The master will only open its (listen) control TSAP */
        irlan_provider_open_ctrl_tsap(new);
@@ -158,6 +164,17 @@ static int __init irlan_init(void)
        irlmp_discovery_request(DISCOVERY_DEFAULT_SLOTS);
 
        return 0;
+
+err_open:
+       irlmp_unregister_service(skey);
+err_skey:
+       irlmp_unregister_client(ckey);
+err_ckey:
+#ifdef CONFIG_PROC_FS
+       remove_proc_entry("irlan", proc_irda);
+#endif /* CONFIG_PROC_FS */
+
+       return -ENOMEM;
 }
 
 static void __exit irlan_cleanup(void)