aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/hack-4.9/911-kobject_add_broadcast_uevent.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/hack-4.9/911-kobject_add_broadcast_uevent.patch')
-rw-r--r--target/linux/generic/hack-4.9/911-kobject_add_broadcast_uevent.patch83
1 files changed, 83 insertions, 0 deletions
diff --git a/target/linux/generic/hack-4.9/911-kobject_add_broadcast_uevent.patch b/target/linux/generic/hack-4.9/911-kobject_add_broadcast_uevent.patch
new file mode 100644
index 0000000000..e794be52bc
--- /dev/null
+++ b/target/linux/generic/hack-4.9/911-kobject_add_broadcast_uevent.patch
@@ -0,0 +1,83 @@
+From 0d37e6edc09c99e683dd91ca0e83bbc0df8477b3 Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@nbd.name>
+Date: Sun, 16 Jul 2017 16:56:10 +0200
+Subject: lib: add uevent_next_seqnum()
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+ include/linux/kobject.h | 5 +++++
+ lib/kobject_uevent.c | 37 +++++++++++++++++++++++++++++++++++++
+ 2 files changed, 42 insertions(+)
+
+diff --git a/include/linux/kobject.h b/include/linux/kobject.h
+index a7dc9e61f433..3d6950c957cd 100644
+--- a/include/linux/kobject.h
++++ b/include/linux/kobject.h
+@@ -34,6 +34,8 @@
+
+ struct sk_buff;
+
++struct sk_buff;
++
+ #ifdef CONFIG_UEVENT_HELPER
+ /* path to the userspace helper executed on an event */
+ extern char uevent_helper[];
+@@ -227,4 +229,7 @@ int kobject_action_type(const char *buf, size_t count,
+ int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
+ gfp_t allocation);
+
++int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
++ gfp_t allocation);
++
+ #endif /* _KOBJECT_H_ */
+diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c
+index ac0c7cfa7292..bd13381a410f 100644
+--- a/lib/kobject_uevent.c
++++ b/lib/kobject_uevent.c
+@@ -460,6 +460,43 @@ int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
+ EXPORT_SYMBOL_GPL(broadcast_uevent);
+
+ #if defined(CONFIG_NET)
++int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
++ gfp_t allocation)
++{
++ struct uevent_sock *ue_sk;
++ int err = 0;
++
++ /* send netlink message */
++ mutex_lock(&uevent_sock_mutex);
++ list_for_each_entry(ue_sk, &uevent_sock_list, list) {
++ struct sock *uevent_sock = ue_sk->sk;
++ struct sk_buff *skb2;
++
++ skb2 = skb_clone(skb, allocation);
++ if (!skb2)
++ break;
++
++ err = netlink_broadcast(uevent_sock, skb2, pid, group,
++ allocation);
++ if (err)
++ break;
++ }
++ mutex_unlock(&uevent_sock_mutex);
++
++ kfree_skb(skb);
++ return err;
++}
++#else
++int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group,
++ gfp_t allocation)
++{
++ kfree_skb(skb);
++ return 0;
++}
++#endif
++EXPORT_SYMBOL_GPL(broadcast_uevent);
++
++#if defined(CONFIG_NET)
+ static int uevent_net_init(struct net *net)
+ {
+ struct uevent_sock *ue_sk;
+--
+2.11.0
+