Bluetooth: RFCOMM: fix ODEBUG bug in rfcomm_dev_ioctl
authorQiujun Huang <hqjagain@gmail.com>
Sun, 8 Mar 2020 09:45:27 +0000 (17:45 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 13 Apr 2020 08:48:13 +0000 (10:48 +0200)
commit 71811cac8532b2387b3414f7cd8fe9e497482864 upstream.

Needn't call 'rfcomm_dlc_put' here, because 'rfcomm_dlc_exists' didn't
increase dlc->refcnt.

Reported-by: syzbot+4496e82090657320efc6@syzkaller.appspotmail.com
Signed-off-by: Qiujun Huang <hqjagain@gmail.com>
Suggested-by: Hillf Danton <hdanton@sina.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/bluetooth/rfcomm/tty.c

index 0c7d31c..a585849 100644 (file)
@@ -413,10 +413,8 @@ static int __rfcomm_create_dev(struct sock *sk, void __user *arg)
                dlc = rfcomm_dlc_exists(&req.src, &req.dst, req.channel);
                if (IS_ERR(dlc))
                        return PTR_ERR(dlc);
-               else if (dlc) {
-                       rfcomm_dlc_put(dlc);
+               if (dlc)
                        return -EBUSY;
-               }
                dlc = rfcomm_dlc_alloc(GFP_KERNEL);
                if (!dlc)
                        return -ENOMEM;