All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@ziepe.ca>
To: Leon Romanovsky <leon@kernel.org>
Cc: syzbot <syzbot+3fd8326d9a0812d19218@syzkaller.appspotmail.com>,
	linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org,
	markzhang@nvidia.com, ohartoov@nvidia.com,
	syzkaller-bugs@googlegroups.com
Subject: Re: [syzbot] WARNING: refcount bug in nldev_newlink
Date: Fri, 9 Dec 2022 09:01:14 -0400	[thread overview]
Message-ID: <Y5MxmrLlXPMZ+WS2@ziepe.ca> (raw)
In-Reply-To: <Y5Gq/zVi/fR85OJK@unreal>

On Thu, Dec 08, 2022 at 11:14:39AM +0200, Leon Romanovsky wrote:

> >  __refcount_dec include/linux/refcount.h:344 [inline]
> >  refcount_dec include/linux/refcount.h:359 [inline]
> >  ref_tracker_free+0x539/0x6b0 lib/ref_tracker.c:118
> >  netdev_tracker_free include/linux/netdevice.h:4039 [inline]
> >  netdev_put include/linux/netdevice.h:4056 [inline]
> >  dev_put include/linux/netdevice.h:4082 [inline]
> >  nldev_newlink+0x360/0x5d0 drivers/infiniband/core/nldev.c:1733
> >  rdma_nl_rcv_msg+0x371/0x6a0 drivers/infiniband/core/netlink.c:195
> >  rdma_nl_rcv_skb.constprop.0.isra.0+0x2fc/0x440 drivers/infiniband/core/netlink.c:239
> >  netlink_unicast_kernel net/netlink/af_netlink.c:1330 [inline]
> >  netlink_unicast+0x547/0x7f0 net/netlink/af_netlink.c:1356
> >  netlink_sendmsg+0x91b/0xe10 net/netlink/af_netlink.c:1932
> >  sock_sendmsg_nosec net/socket.c:714 [inline]
> >  sock_sendmsg+0xd3/0x120 net/socket.c:734
> >  ____sys_sendmsg+0x712/0x8c0 net/socket.c:2476
> >  ___sys_sendmsg+0x110/0x1b0 net/socket.c:2530
> >  __sys_sendmsg+0xf7/0x1c0 net/socket.c:2559
> >  do_syscall_x64 arch/x86/entry/common.c:50 [inline]
> >  do_syscall_64+0x39/0xb0 arch/x86/entry/common.c:80
> >  entry_SYSCALL_64_after_hwframe+0x63/0xcd
> > RIP: 0033:0x7fd5bc473699
> > Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 41 15 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 c0 ff ff ff f7 d8 64 89 01 48
> > RSP: 002b:00007ffed185aff8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
> > RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007fd5bc473699
> > RDX: 0000000000000000 RSI: 0000000020000340 RDI: 0000000000000003
> > RBP: 0000000000000000 R08: 000000000000000d R09: 000000000000000d
> > R10: 00007ffed185aa70 R11: 0000000000000246 R12: 00007ffed185b010
> > R13: 00000000000f4240 R14: 0000000000011fc1 R15: 00007ffed185b004
> >  </TASK>
> > 
> > 
> > ---
> > This report is generated by a bot. It may contain errors.
> > See https://goo.gl/tpsmEJ for more information about syzbot.
> > syzbot engineers can be reached at syzkaller@googlegroups.com.
> > 
> > syzbot will keep track of this issue. See:
> > https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
> > syzbot can test patches for this issue, for details see:
> > https://goo.gl/tpsmEJ#testing-patches
> 
> Jason, what do you think?

No, the key to this report is that the refcount dec is inside the tracker:

> >  __refcount_dec include/linux/refcount.h:344 [inline]
> >  refcount_dec include/linux/refcount.h:359 [inline]
> >  ref_tracker_free+0x539/0x6b0 lib/ref_tracker.c:118
> >  netdev_tracker_free include/linux/netdevice.h:4039 [inline]

Which is not underflowing the refcount on the dev, it is actually
trying to say the tracker has become unbalanced.

Eg this put is not matched with a hold that specified the tracker.

Probably this:

diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index ff35cebb25e265..115b77c5e9a146 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -2192,6 +2192,7 @@ static void free_netdevs(struct ib_device *ib_dev)
                if (ndev) {
                        spin_lock(&ndev_hash_lock);
                        hash_del_rcu(&pdata->ndev_hash_link);
+                       netdev_tracker_free(ndev, &pdata->netdev_tracker);
                        spin_unlock(&ndev_hash_lock);
 
                        /*
@@ -2201,7 +2202,7 @@ static void free_netdevs(struct ib_device *ib_dev)
                         * comparisons after the put
                         */
                        rcu_assign_pointer(pdata->netdev, NULL);
-                       dev_put(ndev);
+                       __dev_put(ndev);
                }
                spin_unlock_irqrestore(&pdata->netdev_lock, flags);
        }


  parent reply	other threads:[~2022-12-09 13:01 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-07 20:51 [syzbot] WARNING: refcount bug in nldev_newlink syzbot
2022-12-08  9:14 ` Leon Romanovsky
2022-12-08 11:42   ` Guoqing Jiang
2022-12-08 11:54     ` Leon Romanovsky
2022-12-09  0:48       ` Guoqing Jiang
2022-12-09 13:01   ` Jason Gunthorpe [this message]
     [not found]   ` <20221209134229.1987-1-hdanton@sina.com>
2022-12-09 14:06     ` Jason Gunthorpe
     [not found] <20221211014342.2302-1-hdanton@sina.com>
2022-12-11 10:42 ` syzbot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y5MxmrLlXPMZ+WS2@ziepe.ca \
    --to=jgg@ziepe.ca \
    --cc=leon@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=markzhang@nvidia.com \
    --cc=ohartoov@nvidia.com \
    --cc=syzbot+3fd8326d9a0812d19218@syzkaller.appspotmail.com \
    --cc=syzkaller-bugs@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.