On Fri, 2006-03-02 at 16:34 -0800, David S. Miller wrote:
> Can someone look into the holes found in the genetlink code
> Andrew mentions below?
> "how come the return value from genlmsg_multicast() gets ignored"
Sometimes the users dont care about the return code; i.e if the message
doesnt make it fine. You should look at if you care about reliability of
delivery and perhaps retransmit when it makes sense.
> "how come i takes the address of an inline function"
Didnt quiet follow
> "how come genl_register_family() leaves genl_sem held if kmalloc
>failed" and "how come there's a return statement after panic() which
>is marked NORET_TYPE".
certainly bugs. patch attached.
PS:- I have a doc i started working on - will look it up and post
cheers,
jamal
Fix genetlink bugs found by Sir Andrew Morton
Signed-off-by: Jamal Hadi Salim <[EMAIL PROTECTED]>
---
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
index 4ae1538..8cbad1d 100644
--- a/net/netlink/genetlink.c
+++ b/net/netlink/genetlink.c
@@ -238,7 +238,7 @@ int genl_register_family(struct genl_fam
sizeof(struct nlattr *), GFP_KERNEL);
if (family->attrbuf == NULL) {
err = -ENOMEM;
- goto errout;
+ goto errout_locked;
}
} else
family->attrbuf = NULL;
@@ -549,10 +549,8 @@ static int __init genl_init(void)
netlink_set_nonroot(NETLINK_GENERIC, NL_NONROOT_RECV);
genl_sock = netlink_kernel_create(NETLINK_GENERIC, GENL_MAX_ID,
genl_rcv, THIS_MODULE);
- if (genl_sock == NULL) {
+ if (genl_sock == NULL)
panic("GENL: Cannot initialize generic netlink\n");
- return -ENOMEM;
- }
return 0;
@@ -560,7 +558,6 @@ errout_register:
genl_unregister_family(&genl_ctrl);
errout:
panic("GENL: Cannot register controller: %d\n", err);
- return err;
}
subsys_initcall(genl_init);