From: Akinobu Mita <akinobu.mita@gmail.com>
To: Alexey Dobriyan <adobriyan@gmail.com>
Cc: linux-kernel@vger.kernel.org, akpm@osdl.org,
Arnaldo Carvalho de Melo <acme@conectiva.com.br>,
David Rientjes <rientjes@cs.washington.edu>
Subject: [PATCH] appletalk: handle errors during module_init
Date: Wed, 25 Oct 2006 11:39:14 +0900 [thread overview]
Message-ID: <20061025023914.GA12488@localhost> (raw)
In-Reply-To: <20061024102711.GA27382@martell.zuzino.mipt.ru>
On Tue, Oct 24, 2006 at 02:27:11PM +0400, Alexey Dobriyan wrote:
> Make sure that module won't load if sysctl table can't be registered,
> instead.
I fixed the patch to do so and handle another errors, too.
Subject: [PATCH] appletalk: handle errors during module_init
This patch makes aarp_proto_init() and atalk_register_sysctl()
return error value to catch ENOMEM errors from module init call.
Then it handles several errors in module_init and makes happen fail.
Also unnessesary SYSCTL ifdef in module_cleanup was removed.
Cc: Arnaldo Carvalho de Melo <acme@conectiva.com.br>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
include/linux/atalk.h | 6 ++---
net/appletalk/aarp.c | 12 ++++++----
net/appletalk/ddp.c | 45 ++++++++++++++++++++++++++++++++-------
net/appletalk/sysctl_net_atalk.c | 3 +-
4 files changed, 49 insertions(+), 17 deletions(-)
Index: work-fault-inject/net/appletalk/sysctl_net_atalk.c
===================================================================
--- work-fault-inject.orig/net/appletalk/sysctl_net_atalk.c
+++ work-fault-inject/net/appletalk/sysctl_net_atalk.c
@@ -71,9 +71,10 @@ static struct ctl_table atalk_root_table
static struct ctl_table_header *atalk_table_header;
-void atalk_register_sysctl(void)
+int atalk_register_sysctl(void)
{
atalk_table_header = register_sysctl_table(atalk_root_table, 1);
+ return (atalk_table_header == NULL) ? -ENOMEM : 0;
}
void atalk_unregister_sysctl(void)
Index: work-fault-inject/net/appletalk/ddp.c
===================================================================
--- work-fault-inject.orig/net/appletalk/ddp.c
+++ work-fault-inject/net/appletalk/ddp.c
@@ -1871,21 +1871,52 @@ static int __init atalk_init(void)
{
int rc = proto_register(&ddp_proto, 0);
- if (rc != 0)
+ if (rc)
goto out;
- (void)sock_register(&atalk_family_ops);
+ rc = sock_register(&atalk_family_ops);
+ if (rc)
+ goto out1;
+
ddp_dl = register_snap_client(ddp_snap_id, atalk_rcv);
- if (!ddp_dl)
+ if (!ddp_dl) {
printk(atalk_err_snap);
+ rc = -ENOMEM;
+ goto out2;
+ }
dev_add_pack(<alk_packet_type);
dev_add_pack(&ppptalk_packet_type);
register_netdevice_notifier(&ddp_notifier);
- aarp_proto_init();
- atalk_proc_init();
- atalk_register_sysctl();
+
+ rc = aarp_proto_init();
+ if (rc)
+ goto out3;
+
+ rc = atalk_proc_init();
+ if (rc)
+ goto out4;
+
+ rc = atalk_register_sysctl();
+ if (rc)
+ goto out5;
+
+ return 0;
+
+out5:
+ atalk_proc_exit();
+out4:
+ aarp_cleanup_module(); /* General aarp clean-up. */
+out3:
+ unregister_netdevice_notifier(&ddp_notifier);
+ dev_remove_pack(<alk_packet_type);
+ dev_remove_pack(&ppptalk_packet_type);
+ unregister_snap_client(ddp_dl);
+out2:
+ sock_unregister(PF_APPLETALK);
+out1:
+ proto_unregister(&ddp_proto);
out:
return rc;
}
@@ -1902,9 +1933,7 @@ module_init(atalk_init);
*/
static void __exit atalk_exit(void)
{
-#ifdef CONFIG_SYSCTL
atalk_unregister_sysctl();
-#endif /* CONFIG_SYSCTL */
atalk_proc_exit();
aarp_cleanup_module(); /* General aarp clean-up. */
unregister_netdevice_notifier(&ddp_notifier);
Index: work-fault-inject/include/linux/atalk.h
===================================================================
--- work-fault-inject.orig/include/linux/atalk.h
+++ work-fault-inject/include/linux/atalk.h
@@ -147,7 +147,7 @@ static __inline__ struct elapaarp *aarp_
#define AARP_RESOLVE_TIME (10 * HZ)
extern struct datalink_proto *ddp_dl, *aarp_dl;
-extern void aarp_proto_init(void);
+extern int aarp_proto_init(void);
/* Inter module exports */
@@ -190,10 +190,10 @@ extern int sysctl_aarp_retransmit_limit;
extern int sysctl_aarp_resolve_time;
#ifdef CONFIG_SYSCTL
-extern void atalk_register_sysctl(void);
+extern int atalk_register_sysctl(void);
extern void atalk_unregister_sysctl(void);
#else
-#define atalk_register_sysctl() do { } while(0)
+#define atalk_register_sysctl() ({ 0; })
#define atalk_unregister_sysctl() do { } while(0)
#endif
Index: work-fault-inject/net/appletalk/aarp.c
===================================================================
--- work-fault-inject.orig/net/appletalk/aarp.c
+++ work-fault-inject/net/appletalk/aarp.c
@@ -858,17 +858,19 @@ static struct notifier_block aarp_notifi
static unsigned char aarp_snap_id[] = { 0x00, 0x00, 0x00, 0x80, 0xF3 };
-void __init aarp_proto_init(void)
+int __init aarp_proto_init(void)
{
aarp_dl = register_snap_client(aarp_snap_id, aarp_rcv);
- if (!aarp_dl)
+ if (!aarp_dl) {
printk(KERN_CRIT "Unable to register AARP with SNAP.\n");
- init_timer(&aarp_timer);
- aarp_timer.function = aarp_expire_timeout;
- aarp_timer.data = 0;
+ return -ENOMEM;
+ }
+ setup_timer(&aarp_timer, aarp_expire_timeout, 0);
aarp_timer.expires = jiffies + sysctl_aarp_expiry_time;
add_timer(&aarp_timer);
register_netdevice_notifier(&aarp_notifier);
+
+ return 0;
}
/* Remove the AARP entries associated with a device. */
prev parent reply other threads:[~2006-10-25 2:39 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-24 8:53 [PATCH] appletalk: prevent unregister_sysctl_table() with a NULL argument Akinobu Mita
2006-10-24 9:38 ` David Rientjes
2006-10-24 10:19 ` Akinobu Mita
2006-10-24 20:18 ` David Rientjes
2006-10-24 10:27 ` Alexey Dobriyan
2006-10-25 2:39 ` Akinobu Mita [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061025023914.GA12488@localhost \
--to=akinobu.mita@gmail.com \
--cc=acme@conectiva.com.br \
--cc=adobriyan@gmail.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rientjes@cs.washington.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.