From: Wang Chen <wangchen@cn.fujitsu.com>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org, chas3@users.sourceforge.net
Subject: take#4: [PATCH] [ATM]: Add error handling for proc_create fail
Date: Tue, 04 Mar 2008 15:27:41 +0800 [thread overview]
Message-ID: <47CCF9ED.1050006@cn.fujitsu.com> (raw)
In-Reply-To: <47CBBAD8.2010802@cn.fujitsu.com>
Wang Chen said the following on 2008-3-3 16:46:
> David Miller said the following on 2008-3-3 13:09:
>> Sigh....
>>
>> I know you want to avoid all of the error handling unwind code, but
>> you can't do that in this situation. It's not valid to register the
>> ATM clip procfs file without first initializing the ATM clip neighbour
>> table, so moving it up like this isn't going to work.
>>
>> They way you've done it, a user can open the procfs file and access
>> the datastructure before it's initialized properly.
>>
>> Please, simply add the necessary unregister code and leave the procfs
>> initialization where it currently is.
>>
>> I get the sense you really aren't reading this code carefully and
>> you're tossing these patches together as quickly as you can to just
>> get it done. Please don't do that, it wastes both my time and
>> your's.
>>
>
> No, I didn't read the code very carefully. Sorry for that.
> However, I don't think it's necessary to put procfs init after ioctl,
> although it's necessary to do clip procfs init after neighbour tbl init.
> If i am wrong, please correct me.
>
> But I still put clip profs init where it was, because all the unregister
> can be done easily when I pick the code up to a static function called
> atm_clip_exit_noproc().
>
> Here is the new patch.
>
Hi, David, please ignore the previous patch. It's ugly and difficult to
understand.
Here is a new one.
---
When proc_create() fails, do some error handling work and return -ENOMEM.
Signed-off-by: Wang Chen <wangchen@cn.fujitsu.com>
---
net/atm/clip.c | 19 ++++++++++++++++---
net/atm/lec.c | 4 ++++
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/net/atm/clip.c b/net/atm/clip.c
index d30167c..2ab1e36 100644
--- a/net/atm/clip.c
+++ b/net/atm/clip.c
@@ -947,6 +947,8 @@ static const struct file_operations arp_seq_fops = {
};
#endif
+static void atm_clip_exit_noproc(void);
+
static int __init atm_clip_init(void)
{
neigh_table_init_no_netlink(&clip_tbl);
@@ -963,18 +965,22 @@ static int __init atm_clip_init(void)
struct proc_dir_entry *p;
p = proc_create("arp", S_IRUGO, atm_proc_root, &arp_seq_fops);
+ if (!p) {
+ printk(KERN_ERR "Unable to initialize "
+ "/proc/net/atm/arp\n");
+ atm_clip_exit_noproc();
+ return -ENOMEM;
+ }
}
#endif
return 0;
}
-static void __exit atm_clip_exit(void)
+static void atm_clip_exit_noproc(void)
{
struct net_device *dev, *next;
- remove_proc_entry("arp", atm_proc_root);
-
unregister_inetaddr_notifier(&clip_inet_notifier);
unregister_netdevice_notifier(&clip_dev_notifier);
@@ -1005,6 +1011,13 @@ static void __exit atm_clip_exit(void)
clip_tbl_hook = NULL;
}
+static void __exit atm_clip_exit(void)
+{
+ remove_proc_entry("arp", atm_proc_root);
+
+ atm_clip_exit_noproc();
+}
+
module_init(atm_clip_init);
module_exit(atm_clip_exit);
MODULE_AUTHOR("Werner Almesberger");
diff --git a/net/atm/lec.c b/net/atm/lec.c
index 0e450d1..a2efa7f 100644
--- a/net/atm/lec.c
+++ b/net/atm/lec.c
@@ -1250,6 +1250,10 @@ static int __init lane_module_init(void)
struct proc_dir_entry *p;
p = proc_create("lec", S_IRUGO, atm_proc_root, &lec_seq_fops);
+ if (!p) {
+ printk(KERN_ERR "Unable to initialize /proc/net/atm/lec\n");
+ return -ENOMEM;
+ }
#endif
register_atm_ioctl(&lane_ioctl_ops);
--
WCN
next prev parent reply other threads:[~2008-03-04 7:30 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-29 7:43 [PATCH] [ATM]: Add error handling for proc_create fail Wang Chen
2008-02-29 12:42 ` chas williams - CONTRACTOR
2008-02-29 18:38 ` David Miller
2008-03-03 2:44 ` take#2: " Wang Chen
2008-03-03 5:09 ` David Miller
2008-03-03 8:46 ` take#3: " Wang Chen
2008-03-04 7:27 ` Wang Chen [this message]
2008-03-24 4:47 ` take#4: " David Miller
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=47CCF9ED.1050006@cn.fujitsu.com \
--to=wangchen@cn.fujitsu.com \
--cc=chas3@users.sourceforge.net \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
/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.