kernel: update 4.4 to 4.4.83

Refresh patches.
Minor update 704-phy-no-genphy-soft-reset.patch which was partially
accepted upstream.
Compile-tested on ar71xx.
Runtime-tested on ar71xx.

Fixes the following vulnerabilities:
- CVE-2017-7533 (4.4.80)
- CVE-2017-1000111 (4.4.82)
- CVE-2017-1000112 (4.4.82)

Signed-off-by: Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
[cleanup commit message, add compile/runtime tested]
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
This commit is contained in:
Kevin Darbyshire-Bryant 2017-08-17 13:21:21 +01:00 committed by Stijn Tintel
parent 2d02a4f5bd
commit 364befeccf
11 changed files with 31 additions and 49 deletions

View file

@ -3,11 +3,11 @@
LINUX_RELEASE?=1 LINUX_RELEASE?=1
LINUX_VERSION-3.18 = .43 LINUX_VERSION-3.18 = .43
LINUX_VERSION-4.4 = .79 LINUX_VERSION-4.4 = .83
LINUX_VERSION-4.9 = .44 LINUX_VERSION-4.9 = .44
LINUX_KERNEL_HASH-3.18.43 = 1236e8123a6ce537d5029232560966feed054ae31776fe8481dd7d18cdd5492c LINUX_KERNEL_HASH-3.18.43 = 1236e8123a6ce537d5029232560966feed054ae31776fe8481dd7d18cdd5492c
LINUX_KERNEL_HASH-4.4.79 = 0dbda3b51e11957fdb96c46844a823a212d46d6db680d77422ddea1a65bebca8 LINUX_KERNEL_HASH-4.4.83 = 5b5f0a0a6cdadcbe5e1c1c057470bb42880590fc97edee299fb1833d646856b4
LINUX_KERNEL_HASH-4.9.44 = 44a6386150d843da8fe13363377972ab040cc710268033ac99f599d5ba8ce3a3 LINUX_KERNEL_HASH-4.9.44 = 44a6386150d843da8fe13363377972ab040cc710268033ac99f599d5ba8ce3a3
ifdef KERNEL_PATCHVER ifdef KERNEL_PATCHVER

View file

@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (sock->type == SOCK_PACKET) if (sock->type == SOCK_PACKET)
po->prot_hook.func = packet_rcv_spkt; po->prot_hook.func = packet_rcv_spkt;
@@ -3739,6 +3742,16 @@ packet_setsockopt(struct socket *sock, i @@ -3744,6 +3747,16 @@ packet_setsockopt(struct socket *sock, i
po->xmit = val ? packet_direct_xmit : dev_queue_xmit; po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
return 0; return 0;
} }
@ -108,7 +108,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
default: default:
return -ENOPROTOOPT; return -ENOPROTOOPT;
} }
@@ -3791,6 +3804,13 @@ static int packet_getsockopt(struct sock @@ -3796,6 +3809,13 @@ static int packet_getsockopt(struct sock
case PACKET_VNET_HDR: case PACKET_VNET_HDR:
val = po->has_vnet_hdr; val = po->has_vnet_hdr;
break; break;

View file

@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/core/dev.c --- a/net/core/dev.c
+++ b/net/core/dev.c +++ b/net/core/dev.c
@@ -4249,6 +4249,9 @@ static enum gro_result dev_gro_receive(s @@ -4256,6 +4256,9 @@ static enum gro_result dev_gro_receive(s
enum gro_result ret; enum gro_result ret;
int grow; int grow;
@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (!(skb->dev->features & NETIF_F_GRO)) if (!(skb->dev->features & NETIF_F_GRO))
goto normal; goto normal;
@@ -5415,6 +5418,48 @@ static void __netdev_adjacent_dev_unlink @@ -5422,6 +5425,48 @@ static void __netdev_adjacent_dev_unlink
&upper_dev->adj_list.lower); &upper_dev->adj_list.lower);
} }
@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static int __netdev_upper_dev_link(struct net_device *dev, static int __netdev_upper_dev_link(struct net_device *dev,
struct net_device *upper_dev, bool master, struct net_device *upper_dev, bool master,
void *private) void *private)
@@ -5486,6 +5531,7 @@ static int __netdev_upper_dev_link(struc @@ -5493,6 +5538,7 @@ static int __netdev_upper_dev_link(struc
goto rollback_lower_mesh; goto rollback_lower_mesh;
} }
@ -84,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev, call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
&changeupper_info.info); &changeupper_info.info);
return 0; return 0;
@@ -5612,6 +5658,7 @@ void netdev_upper_dev_unlink(struct net_ @@ -5619,6 +5665,7 @@ void netdev_upper_dev_unlink(struct net_
list_for_each_entry(i, &upper_dev->all_adj_list.upper, list) list_for_each_entry(i, &upper_dev->all_adj_list.upper, list)
__netdev_adjacent_dev_unlink(dev, i->dev, i->ref_nr); __netdev_adjacent_dev_unlink(dev, i->dev, i->ref_nr);
@ -92,7 +92,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev, call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
&changeupper_info.info); &changeupper_info.info);
} }
@@ -6152,6 +6199,7 @@ int dev_set_mac_address(struct net_devic @@ -6159,6 +6206,7 @@ int dev_set_mac_address(struct net_devic
if (err) if (err)
return err; return err;
dev->addr_assign_type = NET_ADDR_SET; dev->addr_assign_type = NET_ADDR_SET;

View file

@ -53,7 +53,7 @@
* @phydev: the phy_device struct * @phydev: the phy_device struct
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -796,6 +796,7 @@ void phy_start_machine(struct phy_device @@ -800,6 +800,7 @@ void phy_start_machine(struct phy_device
void phy_stop_machine(struct phy_device *phydev); void phy_stop_machine(struct phy_device *phydev);
int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd); int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd); int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);

View file

@ -1,29 +1,11 @@
--- a/drivers/net/phy/phy_device.c --- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c
@@ -1213,7 +1213,7 @@ int genphy_config_init(struct phy_device @@ -1465,7 +1465,7 @@ static struct phy_driver genphy_driver[]
return 0;
}
-static int gen10g_soft_reset(struct phy_device *phydev)
+static int no_soft_reset(struct phy_device *phydev)
{
/* Do nothing for now */
return 0;
@@ -1448,7 +1448,7 @@ static struct phy_driver genphy_driver[]
.phy_id = 0xffffffff,
.phy_id_mask = 0xffffffff,
.name = "Generic PHY",
- .soft_reset = genphy_soft_reset,
+ .soft_reset = no_soft_reset,
.config_init = genphy_config_init,
.features = PHY_GBIT_FEATURES | SUPPORTED_MII |
SUPPORTED_AUI | SUPPORTED_FIBRE |
@@ -1463,7 +1463,7 @@ static struct phy_driver genphy_driver[]
.phy_id = 0xffffffff, .phy_id = 0xffffffff,
.phy_id_mask = 0xffffffff, .phy_id_mask = 0xffffffff,
.name = "Generic 10G PHY", .name = "Generic 10G PHY",
- .soft_reset = gen10g_soft_reset, - .soft_reset = gen10g_soft_reset,
+ .soft_reset = no_soft_reset, + .soft_reset = genphy_no_soft_reset,
.config_init = gen10g_config_init, .config_init = gen10g_config_init,
.features = 0, .features = 0,
.config_aneg = gen10g_config_aneg, .config_aneg = gen10g_config_aneg,

View file

@ -46,7 +46,7 @@
phy_device_free(phydev); phy_device_free(phydev);
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -835,6 +835,23 @@ void mdio_bus_exit(void); @@ -839,6 +839,23 @@ void mdio_bus_exit(void);
extern struct bus_type mdio_bus_type; extern struct bus_type mdio_bus_type;

View file

@ -86,7 +86,7 @@
help help
--- a/net/core/dev.c --- a/net/core/dev.c
+++ b/net/core/dev.c +++ b/net/core/dev.c
@@ -2736,10 +2736,20 @@ static int xmit_one(struct sk_buff *skb, @@ -2743,10 +2743,20 @@ static int xmit_one(struct sk_buff *skb,
if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all)) if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
dev_queue_xmit_nit(skb, dev); dev_queue_xmit_nit(skb, dev);

View file

@ -1,7 +1,7 @@
--- a/drivers/usb/host/pci-quirks.c --- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c +++ b/drivers/usb/host/pci-quirks.c
@@ -97,6 +97,8 @@ struct amd_chipset_type { @@ -98,6 +98,8 @@ struct amd_chipset_type {
u8 rev; u8 rev;
}; };
@ -10,7 +10,7 @@
static struct amd_chipset_info { static struct amd_chipset_info {
struct pci_dev *nb_dev; struct pci_dev *nb_dev;
struct pci_dev *smbus_dev; struct pci_dev *smbus_dev;
@@ -450,6 +452,10 @@ void usb_amd_dev_put(void) @@ -457,6 +459,10 @@ void usb_amd_dev_put(void)
} }
EXPORT_SYMBOL_GPL(usb_amd_dev_put); EXPORT_SYMBOL_GPL(usb_amd_dev_put);
@ -21,7 +21,7 @@
/* /*
* Make sure the controller is completely inactive, unable to * Make sure the controller is completely inactive, unable to
* generate interrupts or do DMA. * generate interrupts or do DMA.
@@ -529,8 +535,17 @@ reset_needed: @@ -536,8 +542,17 @@ reset_needed:
uhci_reset_hc(pdev, base); uhci_reset_hc(pdev, base);
return 1; return 1;
} }
@ -39,7 +39,7 @@
static inline int io_type_enabled(struct pci_dev *pdev, unsigned int mask) static inline int io_type_enabled(struct pci_dev *pdev, unsigned int mask)
{ {
u16 cmd; u16 cmd;
@@ -1095,3 +1110,4 @@ static void quirk_usb_early_handoff(stru @@ -1102,3 +1117,4 @@ static void quirk_usb_early_handoff(stru
} }
DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID, DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
PCI_CLASS_SERIAL_USB, 8, quirk_usb_early_handoff); PCI_CLASS_SERIAL_USB, 8, quirk_usb_early_handoff);

View file

@ -11,7 +11,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
--- a/drivers/net/phy/phy.c --- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c
@@ -890,7 +890,8 @@ void phy_state_machine(struct work_struc @@ -893,7 +893,8 @@ void phy_state_machine(struct work_struc
/* If the link is down, give up on negotiation for now */ /* If the link is down, give up on negotiation for now */
if (!phydev->link) { if (!phydev->link) {
phydev->state = PHY_NOLINK; phydev->state = PHY_NOLINK;
@ -21,7 +21,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
phydev->adjust_link(phydev->attached_dev); phydev->adjust_link(phydev->attached_dev);
break; break;
} }
@@ -973,7 +974,8 @@ void phy_state_machine(struct work_struc @@ -985,7 +986,8 @@ void phy_state_machine(struct work_struc
netif_carrier_on(phydev->attached_dev); netif_carrier_on(phydev->attached_dev);
} else { } else {
phydev->state = PHY_NOLINK; phydev->state = PHY_NOLINK;
@ -31,7 +31,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
} }
phydev->adjust_link(phydev->attached_dev); phydev->adjust_link(phydev->attached_dev);
@@ -985,7 +987,8 @@ void phy_state_machine(struct work_struc @@ -997,7 +999,8 @@ void phy_state_machine(struct work_struc
case PHY_HALTED: case PHY_HALTED:
if (phydev->link) { if (phydev->link) {
phydev->link = 0; phydev->link = 0;

View file

@ -22,7 +22,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
--- a/drivers/net/phy/phy.c --- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c
@@ -849,6 +849,16 @@ void phy_start(struct phy_device *phydev @@ -852,6 +852,16 @@ void phy_start(struct phy_device *phydev
} }
EXPORT_SYMBOL(phy_start); EXPORT_SYMBOL(phy_start);
@ -39,7 +39,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
/** /**
* phy_state_machine - Handle the state machine * phy_state_machine - Handle the state machine
* @work: work_struct that describes the work to be done * @work: work_struct that describes the work to be done
@@ -890,8 +900,7 @@ void phy_state_machine(struct work_struc @@ -893,8 +903,7 @@ void phy_state_machine(struct work_struc
/* If the link is down, give up on negotiation for now */ /* If the link is down, give up on negotiation for now */
if (!phydev->link) { if (!phydev->link) {
phydev->state = PHY_NOLINK; phydev->state = PHY_NOLINK;
@ -49,7 +49,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
break; break;
} }
@@ -903,9 +912,7 @@ void phy_state_machine(struct work_struc @@ -906,9 +915,7 @@ void phy_state_machine(struct work_struc
/* If AN is done, we're running */ /* If AN is done, we're running */
if (err > 0) { if (err > 0) {
phydev->state = PHY_RUNNING; phydev->state = PHY_RUNNING;
@ -60,7 +60,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
} else if (0 == phydev->link_timeout--) } else if (0 == phydev->link_timeout--)
needs_aneg = true; needs_aneg = true;
break; break;
@@ -930,8 +937,7 @@ void phy_state_machine(struct work_struc @@ -933,8 +940,7 @@ void phy_state_machine(struct work_struc
} }
} }
phydev->state = PHY_RUNNING; phydev->state = PHY_RUNNING;
@ -70,7 +70,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
} }
break; break;
case PHY_FORCING: case PHY_FORCING:
@@ -941,13 +947,12 @@ void phy_state_machine(struct work_struc @@ -944,13 +950,12 @@ void phy_state_machine(struct work_struc
if (phydev->link) { if (phydev->link) {
phydev->state = PHY_RUNNING; phydev->state = PHY_RUNNING;
@ -86,7 +86,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
break; break;
case PHY_RUNNING: case PHY_RUNNING:
/* Only register a CHANGE if we are polling or ignoring /* Only register a CHANGE if we are polling or ignoring
@@ -970,14 +975,12 @@ void phy_state_machine(struct work_struc @@ -982,14 +987,12 @@ void phy_state_machine(struct work_struc
if (phydev->link) { if (phydev->link) {
phydev->state = PHY_RUNNING; phydev->state = PHY_RUNNING;
@ -103,7 +103,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
if (phy_interrupt_is_valid(phydev)) if (phy_interrupt_is_valid(phydev))
err = phy_config_interrupt(phydev, err = phy_config_interrupt(phydev,
PHY_INTERRUPT_ENABLED); PHY_INTERRUPT_ENABLED);
@@ -985,8 +988,7 @@ void phy_state_machine(struct work_struc @@ -997,8 +1000,7 @@ void phy_state_machine(struct work_struc
case PHY_HALTED: case PHY_HALTED:
if (phydev->link) { if (phydev->link) {
phydev->link = 0; phydev->link = 0;
@ -113,7 +113,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
do_suspend = true; do_suspend = true;
} }
break; break;
@@ -1006,11 +1008,11 @@ void phy_state_machine(struct work_struc @@ -1018,11 +1020,11 @@ void phy_state_machine(struct work_struc
if (phydev->link) { if (phydev->link) {
phydev->state = PHY_RUNNING; phydev->state = PHY_RUNNING;
@ -127,7 +127,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
} else { } else {
phydev->state = PHY_AN; phydev->state = PHY_AN;
phydev->link_timeout = PHY_AN_TIMEOUT; phydev->link_timeout = PHY_AN_TIMEOUT;
@@ -1022,11 +1024,11 @@ void phy_state_machine(struct work_struc @@ -1034,11 +1036,11 @@ void phy_state_machine(struct work_struc
if (phydev->link) { if (phydev->link) {
phydev->state = PHY_RUNNING; phydev->state = PHY_RUNNING;

View file

@ -34,7 +34,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
case PHY_##_state: \ case PHY_##_state: \
--- a/include/linux/phy.h --- a/include/linux/phy.h
+++ b/include/linux/phy.h +++ b/include/linux/phy.h
@@ -812,6 +812,7 @@ int phy_ethtool_gset(struct phy_device * @@ -816,6 +816,7 @@ int phy_ethtool_gset(struct phy_device *
int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr); int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr);
int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd); int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
int phy_start_interrupts(struct phy_device *phydev); int phy_start_interrupts(struct phy_device *phydev);