diff options
Diffstat (limited to 'net/netlink/genetlink.c')
-rw-r--r-- | net/netlink/genetlink.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c index 512718adb0d5..f85f8a2ad6cf 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c | |||
@@ -789,6 +789,10 @@ static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb) | |||
789 | struct net *net = sock_net(skb->sk); | 789 | struct net *net = sock_net(skb->sk); |
790 | int chains_to_skip = cb->args[0]; | 790 | int chains_to_skip = cb->args[0]; |
791 | int fams_to_skip = cb->args[1]; | 791 | int fams_to_skip = cb->args[1]; |
792 | bool need_locking = chains_to_skip || fams_to_skip; | ||
793 | |||
794 | if (need_locking) | ||
795 | genl_lock(); | ||
792 | 796 | ||
793 | for (i = chains_to_skip; i < GENL_FAM_TAB_SIZE; i++) { | 797 | for (i = chains_to_skip; i < GENL_FAM_TAB_SIZE; i++) { |
794 | n = 0; | 798 | n = 0; |
@@ -810,6 +814,9 @@ errout: | |||
810 | cb->args[0] = i; | 814 | cb->args[0] = i; |
811 | cb->args[1] = n; | 815 | cb->args[1] = n; |
812 | 816 | ||
817 | if (need_locking) | ||
818 | genl_unlock(); | ||
819 | |||
813 | return skb->len; | 820 | return skb->len; |
814 | } | 821 | } |
815 | 822 | ||