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>
This commit is contained in:

committed by
David S. Miller

parent
bfe4bc71c6
commit
4f52090052
@@ -38,7 +38,8 @@ struct netlink_sock {
|
||||
struct mutex *cb_mutex;
|
||||
struct mutex cb_def_mutex;
|
||||
void (*netlink_rcv)(struct sk_buff *skb);
|
||||
void (*netlink_bind)(int group);
|
||||
int (*netlink_bind)(int group);
|
||||
void (*netlink_unbind)(int group);
|
||||
struct module *module;
|
||||
#ifdef CONFIG_NETLINK_MMAP
|
||||
struct mutex pg_vec_lock;
|
||||
@@ -74,7 +75,8 @@ struct netlink_table {
|
||||
unsigned int groups;
|
||||
struct mutex *cb_mutex;
|
||||
struct module *module;
|
||||
void (*bind)(int group);
|
||||
int (*bind)(int group);
|
||||
void (*unbind)(int group);
|
||||
bool (*compare)(struct net *net, struct sock *sock);
|
||||
int registered;
|
||||
};
|
||||
|
Reference in New Issue
Block a user