2009-11-25 01:15:38

by Andrew Hendry

[permalink] [raw]
Subject: [PATCH 2/3] X25: Check for errors in x25_init

Adds error checking to x25_init.

Signed-off-by: Andrew Hendry <[email protected]>

diff -uprN -X a/Documentation/dontdiff a/net/x25/af_x25.c b/net/x25/af_x25.c
--- a/net/x25/af_x25.c 2009-11-25 10:21:17.000000000 +1100
+++ b/net/x25/af_x25.c 2009-11-25 10:22:06.000000000 +1100
@@ -1659,18 +1659,31 @@ static int __init x25_init(void)
if (rc != 0)
goto out;

- sock_register(&x25_family_ops);
+ rc = sock_register(&x25_family_ops);
+ if (rc != 0)
+ goto out_proto;

dev_add_pack(&x25_packet_type);

- register_netdevice_notifier(&x25_dev_notifier);
+ rc = register_netdevice_notifier(&x25_dev_notifier);
+ if (rc != 0)
+ goto out_sock;

printk(KERN_INFO "X.25 for Linux Version 0.2\n");

x25_register_sysctl();
- x25_proc_init();
+ rc = x25_proc_init();
+ if (rc != 0)
+ goto out_dev;
out:
return rc;
+out_dev:
+ unregister_netdevice_notifier(&x25_dev_notifier);
+out_sock:
+ sock_unregister(AF_X25);
+out_proto:
+ proto_unregister(&x25_proto);
+ goto out;
}
module_init(x25_init);


2009-11-30 08:01:59

by Simon Horman

[permalink] [raw]
Subject: Re: [PATCH 2/3] X25: Check for errors in x25_init

On Wed, Nov 25, 2009 at 12:15:42PM +1100, andrew hendry wrote:
> Adds error checking to x25_init.
>
> Signed-off-by: Andrew Hendry <[email protected]>
>
> diff -uprN -X a/Documentation/dontdiff a/net/x25/af_x25.c b/net/x25/af_x25.c
> --- a/net/x25/af_x25.c 2009-11-25 10:21:17.000000000 +1100
> +++ b/net/x25/af_x25.c 2009-11-25 10:22:06.000000000 +1100
> @@ -1659,18 +1659,31 @@ static int __init x25_init(void)
> if (rc != 0)
> goto out;
>
> - sock_register(&x25_family_ops);
> + rc = sock_register(&x25_family_ops);
> + if (rc != 0)
> + goto out_proto;
>
> dev_add_pack(&x25_packet_type);
>
> - register_netdevice_notifier(&x25_dev_notifier);
> + rc = register_netdevice_notifier(&x25_dev_notifier);
> + if (rc != 0)
> + goto out_sock;
>
> printk(KERN_INFO "X.25 for Linux Version 0.2\n");
>
> x25_register_sysctl();
> - x25_proc_init();
> + rc = x25_proc_init();
> + if (rc != 0)
> + goto out_dev;
> out:
> return rc;
> +out_dev:
> + unregister_netdevice_notifier(&x25_dev_notifier);
> +out_sock:
> + sock_unregister(AF_X25);
> +out_proto:
> + proto_unregister(&x25_proto);
> + goto out;
> }
> module_init(x25_init);

The following seems slightly cleaner to me:

...
rc = x25_proc_init();
if (rc != 0)
goto out_dev;

return 0; <-- or goto out;
out_dev:
unregister_netdevice_notifier(&x25_dev_notifier);
out_sock:
sock_unregister(AF_X25);
out_proto:
proto_unregister(&x25_proto);
out:
return rc;
}