Fix a problem with some rtl8168 chips (rhbz 1650984)

This commit is contained in:
Jeremy Cline 2018-11-29 17:05:58 -05:00
commit 56e41c8ead
No known key found for this signature in database
GPG key ID: 9223308FA9B246DB
2 changed files with 59 additions and 0 deletions

View file

@ -633,6 +633,9 @@ Patch512: mm-cleancache-fix-corruption-on-missed-inode-invalidation.patch
# CVE-2018-19407 (rhbz 1652656 1652658)
Patch513: CVE-2018-19407.patch
# rhbz 1650984, in linux-next and Cc'd for stable
Patch514: net-phy-add-workaround-for-issue-where-PHY-driver-do.patch
# END OF PATCH DEFINITIONS
%endif
@ -1884,6 +1887,9 @@ fi
#
#
%changelog
* Thu Nov 29 2018 Jeremy Cline <jeremy@jcline.org>
- Fix a problem with some rtl8168 chips (rhbz 1650984)
* Tue Nov 27 2018 Jeremy Cline <jcline@redhat.com> - 4.19.5-300
- Linux v4.19.5
- Fix CVE-2018-16862 (rhbz 1649017 1653122)

View file

@ -0,0 +1,53 @@
From c85ddecae6e5e82ca3ae6f20c63f1d865e2ff5ea Mon Sep 17 00:00:00 2001
From: Heiner Kallweit <hkallweit1@gmail.com>
Date: Fri, 23 Nov 2018 19:41:29 +0100
Subject: [PATCH] net: phy: add workaround for issue where PHY driver doesn't
bind to the device
After switching the r8169 driver to use phylib some user reported that
their network is broken. This was caused by the genphy PHY driver being
used instead of the dedicated PHY driver for the RTL8211B. Users
reported that loading the Realtek PHY driver module upfront fixes the
issue. See also this mail thread:
https://marc.info/?t=154279781800003&r=1&w=2
The issue is quite weird and the root cause seems to be somewhere in
the base driver core. The patch works around the issue and may be
removed once the actual issue is fixed.
The Fixes tag refers to the first reported occurrence of the issue.
The issue itself may have been existing much longer and it may affect
users of other network chips as well. Users typically will recognize
this issue only if their PHY stops working when being used with the
genphy driver.
Fixes: f1e911d5d0df ("r8169: add basic phylib support")
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jeremy Cline <jcline@redhat.com>
---
drivers/net/phy/phy_device.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index ab33d1777132..23ee3967c166 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -2197,6 +2197,14 @@ int phy_driver_register(struct phy_driver *new_driver, struct module *owner)
new_driver->mdiodrv.driver.remove = phy_remove;
new_driver->mdiodrv.driver.owner = owner;
+ /* The following works around an issue where the PHY driver doesn't bind
+ * to the device, resulting in the genphy driver being used instead of
+ * the dedicated driver. The root cause of the issue isn't known yet
+ * and seems to be in the base driver core. Once this is fixed we may
+ * remove this workaround.
+ */
+ new_driver->mdiodrv.driver.probe_type = PROBE_FORCE_SYNCHRONOUS;
+
retval = driver_register(&new_driver->mdiodrv.driver);
if (retval) {
pr_err("%s: Error %d in registering driver\n",
--
2.19.2