On Thu, Sep 28, 2017 at 12:41:44AM +0200, Jason A. Donenfeld wrote: > diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c > index 327807731b44..94c11cf0459d 100644 > --- a/net/netlink/af_netlink.c > +++ b/net/netlink/af_netlink.c > @@ -2270,10 +2270,13 @@ int __netlink_dump_start(struct sock *ssk, struct > sk_buff *skb, > > mutex_unlock(nlk->cb_mutex); > > + ret = 0; > if (cb->start) > - cb->start(cb); > + ret = cb->start(cb); > + > + if (!ret) > + ret = netlink_dump(sk); > > - ret = netlink_dump(sk); > sock_put(sk); > > if (ret)
FYI, using this horrific hack to currently work around bug: #define KERNEL_VERSION_THAT_HAS_NETLINK_START_FIX KERNEL_VERSION(4, 14, 0) /* Hopefully! */ static int get(struct sk_buff *skb, struct netlink_callback *cb) { #if LINUX_VERSION_CODE < KERNEL_VERSION_THAT_HAS_NETLINK_START_FIX /* https://marc.info/?l=linux-netdev&m=150655213004221&w=2 */ if (!cb->args[0]) { ret = get_start(cb); if (ret) return ret; } #endif ... } static const struct genl_ops genl_ops[] = { { .cmd = CMD_GET, #if LINUX_VERSION_CODE >= KERNEL_VERSION_THAT_HAS_NETLINK_START_FIX /* https://marc.info/?l=linux-netdev&m=150655213004221&w=2 */ .start = get_start, #endif .dumpit = get, ... } } Gross.