diff options
author | Richard Guy Briggs <rgb@redhat.com> | 2014-04-22 21:31:54 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-04-22 21:42:26 -0400 |
commit | 4f520900522fd596e336c07e9aafd5b7a9564235 (patch) | |
tree | 324137d33d9fe83adba3b0a96026f645fe7b12f1 /include/linux/netlink.h | |
parent | bfe4bc71c64a34813a7bde0ad4d28486679ac3fe (diff) |
netlink: have netlink per-protocol bind function return an error code.
Have the netlink per-protocol optional bind function return an int error code
rather than void to signal a failure.
This will enable netlink protocols to perform extra checks including
capabilities and permissions verifications when updating memberships in
multicast groups.
In netlink_bind() and netlink_setsockopt() the call to the per-protocol bind
function was moved above the multicast group update to prevent any access to
the multicast socket groups before checking with the per-protocol bind
function. This will enable the per-protocol bind function to be used to check
permissions which could be denied before making them available, and to avoid
the messy job of undoing the addition should the per-protocol bind function
fail.
The netfilter subsystem seems to be the only one currently using the
per-protocol bind function.
Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/netlink.h')
-rw-r--r-- | include/linux/netlink.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index aad8eeaf416d..5146ce066498 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
@@ -45,7 +45,8 @@ struct netlink_kernel_cfg { | |||
45 | unsigned int flags; | 45 | unsigned int flags; |
46 | void (*input)(struct sk_buff *skb); | 46 | void (*input)(struct sk_buff *skb); |
47 | struct mutex *cb_mutex; | 47 | struct mutex *cb_mutex; |
48 | void (*bind)(int group); | 48 | int (*bind)(int group); |
49 | void (*unbind)(int group); | ||
49 | bool (*compare)(struct net *net, struct sock *sk); | 50 | bool (*compare)(struct net *net, struct sock *sk); |
50 | }; | 51 | }; |
51 | 52 | ||