diff options
| -rw-r--r-- | net/netfilter/nfnetlink_cthelper.c | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c index 41628b393673..d33ce6d5ebce 100644 --- a/net/netfilter/nfnetlink_cthelper.c +++ b/net/netfilter/nfnetlink_cthelper.c @@ -17,6 +17,7 @@  #include <linux/types.h>  #include <linux/list.h>  #include <linux/errno.h> +#include <linux/capability.h>  #include <net/netlink.h>  #include <net/sock.h> @@ -407,6 +408,9 @@ static int nfnl_cthelper_new(struct net *net, struct sock *nfnl,  	struct nfnl_cthelper *nlcth;  	int ret = 0; +	if (!capable(CAP_NET_ADMIN)) +		return -EPERM; +  	if (!tb[NFCTH_NAME] || !tb[NFCTH_TUPLE])  		return -EINVAL; @@ -611,6 +615,9 @@ static int nfnl_cthelper_get(struct net *net, struct sock *nfnl,  	struct nfnl_cthelper *nlcth;  	bool tuple_set = false; +	if (!capable(CAP_NET_ADMIN)) +		return -EPERM; +  	if (nlh->nlmsg_flags & NLM_F_DUMP) {  		struct netlink_dump_control c = {  			.dump = nfnl_cthelper_dump_table, @@ -678,6 +685,9 @@ static int nfnl_cthelper_del(struct net *net, struct sock *nfnl,  	struct nfnl_cthelper *nlcth, *n;  	int j = 0, ret; +	if (!capable(CAP_NET_ADMIN)) +		return -EPERM; +  	if (tb[NFCTH_NAME])  		helper_name = nla_data(tb[NFCTH_NAME]);  | 
