linux-hardened/drivers/net/phy
Mao Wenan cafe8df8b9 net: phy: Fix lack of reference count on PHY driver
There is currently no reference count being held on the PHY driver,
which makes it possible to remove the PHY driver module while the PHY
state machine is running and polling the PHY. This could cause crashes
similar to this one to show up:

[   43.361162] BUG: unable to handle kernel NULL pointer dereference at 0000000000000140
[   43.361162] IP: phy_state_machine+0x32/0x490
[   43.361162] PGD 59dc067
[   43.361162] PUD 0
[   43.361162]
[   43.361162] Oops: 0000 [#1] SMP
[   43.361162] Modules linked in: dsa_loop [last unloaded: broadcom]
[   43.361162] CPU: 0 PID: 1299 Comm: kworker/0:3 Not tainted 4.10.0-rc5+ #415
[   43.361162] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
BIOS Ubuntu-1.8.2-1ubuntu2 04/01/2014
[   43.361162] Workqueue: events_power_efficient phy_state_machine
[   43.361162] task: ffff880006782b80 task.stack: ffffc90000184000
[   43.361162] RIP: 0010:phy_state_machine+0x32/0x490
[   43.361162] RSP: 0018:ffffc90000187e18 EFLAGS: 00000246
[   43.361162] RAX: 0000000000000000 RBX: ffff8800059e53c0 RCX:
ffff880006a15c60
[   43.361162] RDX: ffff880006782b80 RSI: 0000000000000000 RDI:
ffff8800059e5428
[   43.361162] RBP: ffffc90000187e48 R08: ffff880006a15c40 R09:
0000000000000000
[   43.361162] R10: 0000000000000000 R11: 0000000000000000 R12:
ffff8800059e5428
[   43.361162] R13: ffff8800059e5000 R14: 0000000000000000 R15:
ffff880006a15c40
[   43.361162] FS:  0000000000000000(0000) GS:ffff880006a00000(0000)
knlGS:0000000000000000
[   43.361162] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   43.361162] CR2: 0000000000000140 CR3: 0000000005979000 CR4:
00000000000006f0
[   43.361162] Call Trace:
[   43.361162]  process_one_work+0x1b4/0x3e0
[   43.361162]  worker_thread+0x43/0x4d0
[   43.361162]  ? __schedule+0x17f/0x4e0
[   43.361162]  kthread+0xf7/0x130
[   43.361162]  ? process_one_work+0x3e0/0x3e0
[   43.361162]  ? kthread_create_on_node+0x40/0x40
[   43.361162]  ret_from_fork+0x29/0x40
[   43.361162] Code: 56 41 55 41 54 4c 8d 67 68 53 4c 8d af 40 fc ff ff
48 89 fb 4c 89 e7 48 83 ec 08 e8 c9 9d 27 00 48 8b 83 60 ff ff ff 44 8b
73 98 <48> 8b 90 40 01 00 00 44 89 f0 48 85 d2 74 08 4c 89 ef ff d2 8b

Keep references on the PHY driver module right before we are going to
utilize it in phy_attach_direct(), and conversely when we don't use it
anymore in phy_detach().

Signed-off-by: Mao Wenan <maowenan@huawei.com>
[florian: rebase, rework commit message]
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-02-02 22:59:43 -05:00
..
amd.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
aquantia.c net: phy: aquantia: add PHY ID of AQR106 and AQR107 2016-10-20 14:25:23 -04:00
at803x.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-10-30 12:42:58 -04:00
bcm-cygnus.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
bcm-phy-lib.c net: phy: broadcom: Add support code for reading PHY counters 2016-11-30 10:22:27 -05:00
bcm-phy-lib.h net: phy: broadcom: Add support code for reading PHY counters 2016-11-30 10:22:27 -05:00
bcm7xxx.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
bcm63xx.c net: phy: bcm63xx: Utilize correct config_intr function 2017-01-18 16:56:10 -05:00
bcm87xx.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
broadcom.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
cicada.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
davicom.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
dp83640.c ptp: dp83640: Use the high resolution frequency method. 2016-11-09 21:19:53 -05:00
dp83640_reg.h
dp83848.c net: phy: dp83848: add DP83620 PHY support 2017-01-17 15:47:25 -05:00
dp83867.c net: phy: dp83867: allow RGMII_TXID/RGMII_RXID interface types 2017-01-16 13:29:51 -05:00
et1011c.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
fixed_phy.c net: phy: fixed_phy: fix of_node leak in fixed_phy_unregister 2016-11-17 12:05:05 -05:00
icplus.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
intel-xway.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
Kconfig net: phy: Add Meson GXL PHY hardware dependency 2017-01-09 16:34:39 -05:00
lxt.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
Makefile net: phy: Add Meson GXL Internal PHY driver 2016-11-09 12:50:55 -05:00
marvell.c net: phy: marvell: Add Wake from LAN support for 88E1510 PHY 2017-01-24 12:43:17 -05:00
mdio-bcm-iproc.c net: phy: Broadcom iProc MDIO bus driver 2015-10-08 04:44:46 -07:00
mdio-bcm-unimac.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-bitbang.c
mdio-cavium.c phy: mdio-cavium: Add missing MODULE_* annotations. 2016-03-16 19:55:37 -04:00
mdio-cavium.h phy: mdio-octeon: Refactor into two files/modules 2016-03-14 15:27:22 -04:00
mdio-gpio.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-hisi-femac.c net: Add MDIO bus driver for the Hisilicon FEMAC 2016-07-16 21:32:58 -07:00
mdio-moxart.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-mux-bcm-iproc.c net: mdio-mux: Add MDIO mux driver for iProc SoCs 2016-06-10 23:24:54 -07:00
mdio-mux-gpio.c mdio: mux: Enhanced MDIO mux framework for integrated multiplexers 2016-06-10 23:24:53 -07:00
mdio-mux-mmioreg.c net: mdio-mux-mmioreg: Add support for 16bit and 32bit register sizes 2016-11-09 12:50:55 -05:00
mdio-mux.c mdio: mux: avoid 'maybe-uninitialized' warning 2016-06-15 20:48:52 -07:00
mdio-octeon.c phy: mdio-octeon: Refactor into two files/modules 2016-03-14 15:27:22 -04:00
mdio-sun4i.c mdio-sun4i: oops in error handling in probe 2016-03-21 11:30:01 -04:00
mdio-thunder.c phy: mdio-thunder: Add driver for Cavium Thunder SoC MDIO buses. 2016-03-14 15:27:22 -04:00
mdio-xgene.c drivers: net: phy: xgene: Fix 'remove' function 2016-09-13 12:04:11 -04:00
mdio-xgene.h drivers: net: phy: xgene: Add MDIO driver 2016-07-25 21:51:43 -07:00
mdio_bus.c net/phy: add trace events for mdio accesses 2016-11-24 11:55:43 -05:00
mdio_device.c mdio: Demote print from info to debug in mdio_driver_register 2016-11-14 16:40:16 -05:00
meson-gxl.c net: phy: Add Meson GXL Internal PHY driver 2016-11-09 12:50:55 -05:00
micrel.c net: phy: micrel: KSZ8795 do not set SUPPORTED_[Asym_]Pause 2017-01-29 18:45:15 -05:00
microchip.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
mscc.c net: phy: Add mdi(x) support in Microsemi PHYs driver 2016-12-01 11:26:47 -05:00
national.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
phy.c net: phy: leds: Break dependency of phy.h on phy_led_triggers.h 2017-01-25 14:40:19 -05:00
phy_device.c net: phy: Fix lack of reference count on PHY driver 2017-02-02 22:59:43 -05:00
phy_led_triggers.c net: phy: leds: Break dependency of phy.h on phy_led_triggers.h 2017-01-25 14:40:19 -05:00
qsemi.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
realtek.c net: phy: realtek: fix enabling of the TX-delay for RTL8211F 2016-11-28 12:06:54 -05:00
smsc.c net: phy: phy drivers should not set SUPPORTED_[Asym_]Pause 2016-12-10 23:31:19 -05:00
spi_ks8995.c net: phy: spi_ks8895: Don't leak references to SPI devices 2016-04-21 15:00:27 -04:00
ste10Xp.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
swphy.c phy: generate swphy registers on the fly 2016-06-27 10:40:57 -04:00
swphy.h phy: generate swphy registers on the fly 2016-06-27 10:40:57 -04:00
teranetics.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
vitesse.c net: phy: vitesse: add support for VSC8572 2016-12-02 10:36:47 -05:00
xilinx_gmii2rgmii.c net: phy: xgmiitorgmii: Fix non static symbol warning 2016-08-23 17:17:48 -07:00