Skip to content

Commit

Permalink
[NETLINK] genetlink: Fix bugs spotted by Andrew Morton.
Browse files Browse the repository at this point in the history
- panic() doesn't return.

- Don't forget to unlock on genl_register_family() error path

- genl_rcv_msg() is called via pointer so there's no point in declaring it
  `inline'.

Notes:

genl_ctrl_event() ignores the genlmsg_multicast() return value.

lots of things ignore the genl_ctrl_event() return value.

Signed-off-by: Jamal Hadi Salim <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Jamal Hadi Salim authored and davem330 committed Feb 13, 2006
1 parent 178a325 commit e200bd8
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions net/netlink/genetlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ int genl_register_family(struct genl_family *family)
sizeof(struct nlattr *), GFP_KERNEL);
if (family->attrbuf == NULL) {
err = -ENOMEM;
goto errout;
goto errout_locked;
}
} else
family->attrbuf = NULL;
Expand Down Expand Up @@ -288,7 +288,7 @@ int genl_unregister_family(struct genl_family *family)
return -ENOENT;
}

static inline int genl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
static int genl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
int *errp)
{
struct genl_ops *ops;
Expand Down Expand Up @@ -375,7 +375,7 @@ static void genl_rcv(struct sock *sk, int len)
do {
if (genl_trylock())
return;
netlink_run_queue(sk, &qlen, &genl_rcv_msg);
netlink_run_queue(sk, &qlen, genl_rcv_msg);
genl_unlock();
} while (qlen && genl_sock && genl_sock->sk_receive_queue.qlen);
}
Expand Down Expand Up @@ -549,18 +549,15 @@ 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;

errout_register:
genl_unregister_family(&genl_ctrl);
errout:
panic("GENL: Cannot register controller: %d\n", err);
return err;
}

subsys_initcall(genl_init);
Expand Down

0 comments on commit e200bd8

Please sign in to comment.