From: Andrew Lunn <andrew@lunn.ch>
To: Jakub Kicinski <kuba@kernel.org>
Cc: syzbot <syzbot+6a916267d9bc5fa2d9a6@syzkaller.appspotmail.com>,
davem@davemloft.net, hkallweit1@gmail.com,
linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org,
linux@armlinux.org.uk, netdev@vger.kernel.org,
syzkaller-bugs@googlegroups.com,
Oleksij Rempel <linux@rempel-privat.de>
Subject: Re: [syzbot] KASAN: null-ptr-deref Read in phy_disconnect
Date: Tue, 31 Aug 2021 16:20:49 +0200 [thread overview]
Message-ID: <YS46wWr6WegVF4Er@lunn.ch> (raw)
In-Reply-To: <20210831064845.1a8f5c14@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com>
On Tue, Aug 31, 2021 at 06:48:45AM -0700, Jakub Kicinski wrote:
> On Tue, 31 Aug 2021 03:36:23 -0700 syzbot wrote:
> > Hello,
> >
> > syzbot found the following issue on:
> >
> > HEAD commit: 9c1587d99f93 usb: isp1760: otg control register access
> > git tree: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
> > console output: https://syzkaller.appspot.com/x/log.txt?x=16907291300000
> > kernel config: https://syzkaller.appspot.com/x/.config?x=24756feea212a6b0
> > dashboard link: https://syzkaller.appspot.com/bug?extid=6a916267d9bc5fa2d9a6
> > compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.1
> > syz repro: https://syzkaller.appspot.com/x/repro.syz?x=166de449300000
> > C reproducer: https://syzkaller.appspot.com/x/repro.c?x=12c5ddce300000
> >
> > IMPORTANT: if you fix the issue, please add the following tag to the commit:
> > Reported-by: syzbot+6a916267d9bc5fa2d9a6@syzkaller.appspotmail.com
> >
> > asix 1-1:0.0 eth1: register 'asix' at usb-dummy_hcd.0-1, ASIX AX88178 USB 2.0 Ethernet, 8a:c0:d1:1e:27:4c
> > usb 1-1: USB disconnect, device number 2
> > asix 1-1:0.0 eth1: unregister 'asix' usb-dummy_hcd.0-1, ASIX AX88178 USB 2.0 Ethernet
> > general protection fault, probably for non-canonical address 0xdffffc00000000c3: 0000 [#1] SMP KASAN
> > KASAN: null-ptr-deref in range [0x0000000000000618-0x000000000000061f]
> > CPU: 1 PID: 32 Comm: kworker/1:1 Not tainted 5.14.0-rc7-syzkaller #0
> > Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
> > Workqueue: usb_hub_wq hub_event
> > RIP: 0010:phy_is_started include/linux/phy.h:947 [inline]
> > RIP: 0010:phy_disconnect+0x22/0x110 drivers/net/phy/phy_device.c:1097
> > Code: 0f 1f 84 00 00 00 00 00 55 48 89 fd 53 e8 46 33 68 fe 48 8d bd 18 06 00 00 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <0f> b6 04 02 84 c0 74 08 3c 03 0f 8e c5 00 00 00 8b 9d 18 06 00 00
> > RSP: 0018:ffffc900001a7780 EFLAGS: 00010206
> > RAX: dffffc0000000000 RBX: ffff88811a410bc0 RCX: 0000000000000000
> > RDX: 00000000000000c3 RSI: ffffffff82d9305a RDI: 0000000000000618
> > RBP: 0000000000000000 R08: 0000000000000055 R09: 0000000000000000
> > R10: ffffffff814c05fb R11: 0000000000000000 R12: ffff8881063cc300
> > R13: ffffffff83870d90 R14: ffffffff86805a20 R15: ffffffff868059e0
> > FS: 0000000000000000(0000) GS:ffff8881f6900000(0000) knlGS:0000000000000000
> > CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > CR2: 00007fb4c30b3008 CR3: 00000001021e1000 CR4: 00000000001506e0
> > DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> > DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> > Call Trace:
> > ax88772_unbind+0x51/0x90 drivers/net/usb/asix_devices.c:816
Looking at the console messages:
[ 36.456221][ T32] usb 1-1: new high-speed USB device number 2 using dummy_hcd
[ 36.976035][ T32] usb 1-1: New USB device found, idVendor=0df6, idProduct=0056, bcdDevice=42.6c
[ 36.985338][ T32] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 36.993579][ T32] usb 1-1: Product: syz
[ 36.997817][ T32] usb 1-1: Manufacturer: syz
[ 37.002423][ T32] usb 1-1: SerialNumber: syz
[ 37.013578][ T32] usb 1-1: config 0 descriptor??
[ 37.276018][ T32] asix 1-1:0.0 (unnamed net_device) (uninitialized): invalid hw address, using random
executing program
[ 37.715517][ T32] asix 1-1:0.0 (unnamed net_device) (uninitialized): Failed to write reg index 0x0000: -71
[ 37.725693][ T32] asix 1-1:0.0 (unnamed net_device) (uninitialized): Failed to send software reset: ffffffb9
[ 37.925418][ T32] asix 1-1:0.0 (unnamed net_device) (uninitialized): Failed to write reg index 0x0000: -71
[ 37.936461][ T32] asix 1-1:0.0 (unnamed net_device) (uninitialized): Failed to send software reset: ffffffb9
[ 38.119561][ T32] asix 1-1:0.0 eth1: register 'asix' at usb-dummy_hcd.0-1, ASIX AX88178 USB 2.0 Ethernet, 8a:c0:d1:1e:27:4c
[ 38.138828][ T32] usb 1-1: USB disconnect, device number 2
[ 38.150689][ T32] asix 1-1:0.0 eth1: unregister 'asix' usb-dummy_hcd.0-1, ASIX AX88178 USB 2.0 Ethernet
So this is a AX88178, and you would expect it to use
ax88178_bind(). That function never calls ax88772_init_phy() which is
what connects the PHY to the MAC, and sets priv->phydev.
static void ax88772_unbind(struct usbnet *dev, struct usb_interface *intf)
{
struct asix_common_private *priv = dev->driver_priv;
phy_disconnect(priv->phydev);
So this passes a NULL pointer.
static const struct driver_info ax88178_info = {
.description = "ASIX AX88178 USB 2.0 Ethernet",
.bind = ax88178_bind,
.unbind = ax88772_unbind,
.status = asix_status,
You cannot pair ax88178_bind with ax88772_unbind. Either a
ax88178_unbind is needed, or ax88772_unbind needs to check for a NULL
pointer.
Andrew
next prev parent reply other threads:[~2021-08-31 14:21 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-31 10:36 [syzbot] KASAN: null-ptr-deref Read in phy_disconnect syzbot
2021-08-31 13:48 ` Jakub Kicinski
2021-08-31 14:20 ` Andrew Lunn [this message]
2021-08-31 15:30 ` Oleksij Rempel
2021-08-31 15:34 ` Jakub Kicinski
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=YS46wWr6WegVF4Er@lunn.ch \
--to=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=hkallweit1@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linux@rempel-privat.de \
--cc=netdev@vger.kernel.org \
--cc=syzbot+6a916267d9bc5fa2d9a6@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.