diff options
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.patch | 83 |
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 + |