|
@@ -96,6 +96,44 @@ EXPORT_SYMBOL_GPL(nl_table);
|
|
|
|
|
|
static DECLARE_WAIT_QUEUE_HEAD(nl_table_wait);
|
|
|
|
|
|
+static struct lock_class_key nlk_cb_mutex_keys[MAX_LINKS];
|
|
|
+
|
|
|
+static const char *const nlk_cb_mutex_key_strings[MAX_LINKS + 1] = {
|
|
|
+ "nlk_cb_mutex-ROUTE",
|
|
|
+ "nlk_cb_mutex-1",
|
|
|
+ "nlk_cb_mutex-USERSOCK",
|
|
|
+ "nlk_cb_mutex-FIREWALL",
|
|
|
+ "nlk_cb_mutex-SOCK_DIAG",
|
|
|
+ "nlk_cb_mutex-NFLOG",
|
|
|
+ "nlk_cb_mutex-XFRM",
|
|
|
+ "nlk_cb_mutex-SELINUX",
|
|
|
+ "nlk_cb_mutex-ISCSI",
|
|
|
+ "nlk_cb_mutex-AUDIT",
|
|
|
+ "nlk_cb_mutex-FIB_LOOKUP",
|
|
|
+ "nlk_cb_mutex-CONNECTOR",
|
|
|
+ "nlk_cb_mutex-NETFILTER",
|
|
|
+ "nlk_cb_mutex-IP6_FW",
|
|
|
+ "nlk_cb_mutex-DNRTMSG",
|
|
|
+ "nlk_cb_mutex-KOBJECT_UEVENT",
|
|
|
+ "nlk_cb_mutex-GENERIC",
|
|
|
+ "nlk_cb_mutex-17",
|
|
|
+ "nlk_cb_mutex-SCSITRANSPORT",
|
|
|
+ "nlk_cb_mutex-ECRYPTFS",
|
|
|
+ "nlk_cb_mutex-RDMA",
|
|
|
+ "nlk_cb_mutex-CRYPTO",
|
|
|
+ "nlk_cb_mutex-SMC",
|
|
|
+ "nlk_cb_mutex-23",
|
|
|
+ "nlk_cb_mutex-24",
|
|
|
+ "nlk_cb_mutex-25",
|
|
|
+ "nlk_cb_mutex-26",
|
|
|
+ "nlk_cb_mutex-27",
|
|
|
+ "nlk_cb_mutex-28",
|
|
|
+ "nlk_cb_mutex-29",
|
|
|
+ "nlk_cb_mutex-30",
|
|
|
+ "nlk_cb_mutex-31",
|
|
|
+ "nlk_cb_mutex-MAX_LINKS"
|
|
|
+};
|
|
|
+
|
|
|
static int netlink_dump(struct sock *sk);
|
|
|
static void netlink_skb_destructor(struct sk_buff *skb);
|
|
|
|
|
@@ -585,6 +623,9 @@ static int __netlink_create(struct net *net, struct socket *sock,
|
|
|
} else {
|
|
|
nlk->cb_mutex = &nlk->cb_def_mutex;
|
|
|
mutex_init(nlk->cb_mutex);
|
|
|
+ lockdep_set_class_and_name(nlk->cb_mutex,
|
|
|
+ nlk_cb_mutex_keys + protocol,
|
|
|
+ nlk_cb_mutex_key_strings[protocol]);
|
|
|
}
|
|
|
init_waitqueue_head(&nlk->wait);
|
|
|
|