--- zzzz-none-000/linux-5.4.213/lib/kobject_uevent.c 2022-09-15 10:04:56.000000000 +0000 +++ miami-7690-761/linux-5.4.213/lib/kobject_uevent.c 2024-05-29 11:20:02.000000000 +0000 @@ -179,6 +179,18 @@ return r; } +u64 uevent_next_seqnum(void) +{ + u64 seq; + + mutex_lock(&uevent_sock_mutex); + seq = ++uevent_seqnum; + mutex_unlock(&uevent_sock_mutex); + + return seq; +} +EXPORT_SYMBOL_GPL(uevent_next_seqnum); + /** * kobject_synth_uevent - send synthetic uevent with arguments * @@ -679,6 +691,43 @@ EXPORT_SYMBOL_GPL(add_uevent_var); #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_broadcast(struct sock *usk, struct sk_buff *skb, struct netlink_ext_ack *extack) {