|
@@ -47,6 +47,8 @@ static const int nfnl_group2type[NFNLGRP_MAX+1] = {
|
|
|
[NFNLGRP_CONNTRACK_EXP_NEW] = NFNL_SUBSYS_CTNETLINK_EXP,
|
|
|
[NFNLGRP_CONNTRACK_EXP_UPDATE] = NFNL_SUBSYS_CTNETLINK_EXP,
|
|
|
[NFNLGRP_CONNTRACK_EXP_DESTROY] = NFNL_SUBSYS_CTNETLINK_EXP,
|
|
|
+ [NFNLGRP_NFTABLES] = NFNL_SUBSYS_NFTABLES,
|
|
|
+ [NFNLGRP_ACCT_QUOTA] = NFNL_SUBSYS_ACCT,
|
|
|
};
|
|
|
|
|
|
void nfnl_lock(__u8 subsys_id)
|
|
@@ -464,7 +466,12 @@ static void nfnetlink_rcv(struct sk_buff *skb)
|
|
|
static int nfnetlink_bind(int group)
|
|
|
{
|
|
|
const struct nfnetlink_subsystem *ss;
|
|
|
- int type = nfnl_group2type[group];
|
|
|
+ int type;
|
|
|
+
|
|
|
+ if (group <= NFNLGRP_NONE || group > NFNLGRP_MAX)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ type = nfnl_group2type[group];
|
|
|
|
|
|
rcu_read_lock();
|
|
|
ss = nfnetlink_get_subsys(type);
|
|
@@ -514,6 +521,9 @@ static int __init nfnetlink_init(void)
|
|
|
{
|
|
|
int i;
|
|
|
|
|
|
+ for (i = NFNLGRP_NONE + 1; i <= NFNLGRP_MAX; i++)
|
|
|
+ BUG_ON(nfnl_group2type[i] == NFNL_SUBSYS_NONE);
|
|
|
+
|
|
|
for (i=0; i<NFNL_SUBSYS_COUNT; i++)
|
|
|
mutex_init(&table[i].mutex);
|
|
|
|