TITLE: possible deadlock in do_ipv6_setsockopt
TYPE: LOCKDEP

[   53.842308] ======================================================
[   53.848617] WARNING: possible circular locking dependency detected
[   53.854929] 4.15.0+ #221 Not tainted
[   53.858633] ------------------------------------------------------
[   53.864938] syz-executor3/5627 is trying to acquire lock:
[   53.870468]  (sk_lock-AF_INET6){+.+.}, at: [<000000005bcb19be>] do_ipv6_setsockopt.isra.8+0x3c5/0x39d0
[   53.879944] 
[   53.879944] but task is already holding lock:
[   53.885893]  (rtnl_mutex){+.+.}, at: [<000000001f0e7db0>] rtnl_lock+0x17/0x20
[   53.893173] 
[   53.893173] which lock already depends on the new lock.
[   53.893173] 
[   53.901483] 
[   53.901483] the existing dependency chain (in reverse order) is:
[   53.909081] 
[   53.909081] -> #2 (rtnl_mutex){+.+.}:
[   53.914395]        __mutex_lock+0x16f/0x1a80
[   53.918789]        mutex_lock_nested+0x16/0x20
[   53.923353]        rtnl_lock+0x17/0x20
[   53.927224]        unregister_netdevice_notifier+0x91/0x4e0
[   53.932921]        clusterip_tg_destroy+0x389/0x6e0
[   53.937916]        cleanup_entry+0x218/0x350
[   53.942305]        __do_replace+0x79d/0xa50
[   53.946603]        do_ipt_set_ctl+0x40f/0x5f0
[   53.951071]        nf_setsockopt+0x67/0xc0
[   53.955277]        ip_setsockopt+0x97/0xa0
[   53.959482]        tcp_setsockopt+0x82/0xd0
[   53.963786]        sock_common_setsockopt+0x95/0xd0
[   53.968783]        SyS_setsockopt+0x189/0x360
[   53.973254]        entry_SYSCALL_64_fastpath+0x29/0xa0
[   53.978498] 
[   53.978498] -> #1 (&xt[i].mutex){+.+.}:
[   53.983939]        __mutex_lock+0x16f/0x1a80
[   53.988318]        mutex_lock_nested+0x16/0x20
[   53.992872]        xt_find_table_lock+0x3e/0x3e0
[   53.997596]        xt_request_find_table_lock+0x28/0xc0
[   54.002948]        get_info+0x154/0x690
[   54.006899]        do_ip6t_get_ctl+0x159/0xaf0
[   54.011454]        nf_getsockopt+0x6a/0xc0
[   54.015661]        ipv6_getsockopt+0x1df/0x2e0
[   54.020215]        tcp_getsockopt+0x82/0xd0
[   54.024511]        sock_common_getsockopt+0x95/0xd0
[   54.029521]        SyS_getsockopt+0x178/0x340
[   54.034019]        entry_SYSCALL_64_fastpath+0x29/0xa0
[   54.039289] 
[   54.039289] -> #0 (sk_lock-AF_INET6){+.+.}:
[   54.045095]        lock_acquire+0x1d5/0x580
[   54.049404]        lock_sock_nested+0xc2/0x110
[   54.053975]        do_ipv6_setsockopt.isra.8+0x3c5/0x39d0
[   54.059482]        ipv6_setsockopt+0xd7/0x130
[   54.063949]        rawv6_setsockopt+0x4a/0xf0
[   54.068425]        sock_common_setsockopt+0x95/0xd0
[   54.073415]        SyS_setsockopt+0x189/0x360
[   54.077879]        entry_SYSCALL_64_fastpath+0x29/0xa0
[   54.083122] 
[   54.083122] other info that might help us debug this:
[   54.083122] 
[   54.091320] Chain exists of:
[   54.091320]   sk_lock-AF_INET6 --> &xt[i].mutex --> rtnl_mutex
[   54.091320] 
[   54.101614]  Possible unsafe locking scenario:
[   54.101614] 
[   54.107654]        CPU0                    CPU1
[   54.112299]        ----                    ----
[   54.116940]   lock(rtnl_mutex);
[   54.120195]                                lock(&xt[i].mutex);
[   54.126138]                                lock(rtnl_mutex);
[   54.131908]   lock(sk_lock-AF_INET6);
[   54.135683] 
[   54.135683]  *** DEADLOCK ***
[   54.135683] 
[   54.141717] 1 lock held by syz-executor3/5627:
[   54.146270]  #0:  (rtnl_mutex){+.+.}, at: [<000000001f0e7db0>] rtnl_lock+0x17/0x20
[   54.153968] 
[   54.153968] stack backtrace:
[   54.158438] CPU: 0 PID: 5627 Comm: syz-executor3 Not tainted 4.15.0+ #221
[   54.165346] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
[   54.174686] Call Trace:
[   54.177254]  dump_stack+0x194/0x257
[   54.180856]  ? arch_local_irq_restore+0x53/0x53
[   54.185512]  print_circular_bug.isra.38+0x2cd/0x2dc
[   54.190524]  ? save_trace+0xe0/0x2b0
[   54.194214]  __lock_acquire+0x30a8/0x3e00
[   54.198353]  ? debug_check_no_locks_freed+0x3c0/0x3c0
[   54.203528]  ? rtnl_lock+0x17/0x20
[   54.207054]  ? __mutex_lock+0x16f/0x1a80
[   54.211090]  ? rtnl_lock+0x17/0x20
[   54.214607]  ? rtnl_lock+0x17/0x20
[   54.218122]  ? print_irqtrace_events+0x270/0x270
[   54.222857]  ? __lock_acquire+0x664/0x3e00
[   54.227069]  ? print_irqtrace_events+0x270/0x270
[   54.231804]  ? check_noncircular+0x20/0x20
[   54.236020]  ? print_irqtrace_events+0x270/0x270
[   54.240759]  ? debug_check_no_locks_freed+0x3c0/0x3c0
[   54.245923]  ? check_noncircular+0x20/0x20
[   54.250131]  ? __lock_acquire+0x664/0x3e00
[   54.254341]  ? find_held_lock+0x35/0x1d0
[   54.258377]  lock_acquire+0x1d5/0x580
[   54.262160]  ? lock_sock_nested+0xa3/0x110
[   54.266373]  ? lock_acquire+0x1d5/0x580
[   54.270321]  ? do_ipv6_setsockopt.isra.8+0x3c5/0x39d0
[   54.275490]  ? lock_release+0xa40/0xa40
[   54.279442]  ? trace_event_raw_event_sched_switch+0x800/0x800
[   54.285297]  ? trace_event_raw_event_sched_switch+0x800/0x800
[   54.291156]  ? do_raw_spin_trylock+0x190/0x190
[   54.295716]  ? __enqueue_entity+0x109/0x1e0
[   54.300019]  ? lock_sock_nested+0x44/0x110
[   54.304241]  lock_sock_nested+0xc2/0x110
[   54.308291]  ? do_ipv6_setsockopt.isra.8+0x3c5/0x39d0
[   54.313455]  do_ipv6_setsockopt.isra.8+0x3c5/0x39d0
[   54.318444]  ? ipv6_update_options+0x330/0x330
[   54.323000]  ? lock_downgrade+0x980/0x980
[   54.327128]  ? check_noncircular+0x20/0x20
[   54.331333]  ? load_balance+0x34c0/0x34c0
[   54.335452]  ? check_noncircular+0x20/0x20
[   54.339657]  ? compat_start_thread+0x80/0x80
[   54.344041]  ? do_raw_spin_trylock+0x190/0x190
[   54.348615]  ? find_held_lock+0x35/0x1d0
[   54.352657]  ? avc_has_perm+0x35e/0x680
[   54.356601]  ? lock_downgrade+0x980/0x980
[   54.360719]  ? lock_release+0xa40/0xa40
[   54.364665]  ? lock_downgrade+0x980/0x980
[   54.368783]  ? lock_release+0xa40/0xa40
[   54.372728]  ? __lock_is_held+0xb6/0x140
[   54.376764]  ? avc_has_perm+0x43e/0x680
[   54.380723]  ? avc_has_perm_noaudit+0x520/0x520
[   54.385371]  ? iterate_fd+0x3f0/0x3f0
[   54.389152]  ? lock_downgrade+0x980/0x980
[   54.393272]  ? __lock_is_held+0xb6/0x140
[   54.397304]  ? schedule+0xf5/0x430
[   54.400818]  ? sock_has_perm+0x2a4/0x420
[   54.404847]  ? selinux_secmark_relabel_packet+0xc0/0xc0
[   54.410180]  ? selinux_netlbl_socket_setsockopt+0x10c/0x460
[   54.415859]  ? selinux_netlbl_sock_rcv_skb+0x730/0x730
[   54.421103]  ? alloc_file+0x27e/0x390
[   54.424874]  ipv6_setsockopt+0xd7/0x130
[   54.428817]  ? ipv6_setsockopt+0xd7/0x130
[   54.432936]  rawv6_setsockopt+0x4a/0xf0
[   54.436883]  sock_common_setsockopt+0x95/0xd0
[   54.441349]  SyS_setsockopt+0x189/0x360
[   54.445294]  ? SyS_recv+0x40/0x40
[   54.448720]  ? entry_SYSCALL_64_fastpath+0x5/0xa0
[   54.453538]  ? trace_hardirqs_on_caller+0x421/0x5c0
[   54.458530]  ? trace_hardirqs_on_thunk+0x1a/0x1c
[   54.463255]  entry_SYSCALL_64_fastpath+0x29/0xa0
[   54.467980] RIP: 0033:0x453299
[   54.471138] RSP: 002b:00007f426abc9c58 EFLAGS: 00000212 ORIG_RAX: 0000000000000036
[   54.478825] RAX: ffffffffffffffda RBX: 000000000071bea0 RCX: 0000000000453299
[   54.486067] RDX: 0000000000000001 RSI: 0000000000000029 RDI: 0000000000000013
[   54.493317] RBP: 00000000000005cd R08: 0000000000000004 R09: 0000000000000000
[   54.500565] R10: 000000002095affc R11: 0000000000000212 R12: 00000000006f7bd8
[   54.507812] R13: 00000000ffffffff R14: 00007f426abca6d4 R15: 0000000000000000
