diff -druNp --no-dereference linux-libre-4.9.109-gnu/Documentation/devicetree/bindings/net/dsa/b53.txt linux-libre-4.9.110-gnu/Documentation/devicetree/bindings/net/dsa/b53.txt
--- linux-libre-4.9.109-gnu/Documentation/devicetree/bindings/net/dsa/b53.txt	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/Documentation/devicetree/bindings/net/dsa/b53.txt	2018-06-25 20:08:09.000000000 -0400
@@ -10,6 +10,7 @@ Required properties:
       "brcm,bcm53128"
       "brcm,bcm5365"
       "brcm,bcm5395"
+      "brcm,bcm5389"
       "brcm,bcm5397"
       "brcm,bcm5398"
 
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/ata/libata-core.c linux-libre-4.9.110-gnu/drivers/ata/libata-core.c
--- linux-libre-4.9.109-gnu/drivers/ata/libata-core.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/ata/libata-core.c	2018-06-25 20:08:09.000000000 -0400
@@ -4426,9 +4426,6 @@ static const struct ata_blacklist_entry
 						ATA_HORKAGE_ZERO_AFTER_TRIM |
 						ATA_HORKAGE_NOLPM, },
 
-	/* Sandisk devices which are known to not handle LPM well */
-	{ "SanDisk SD7UB3Q*G1001",	NULL,	ATA_HORKAGE_NOLPM, },
-
 	/* devices that don't properly handle queued TRIM commands */
 	{ "Micron_M500IT_*",		"MU01",	ATA_HORKAGE_NO_NCQ_TRIM |
 						ATA_HORKAGE_ZERO_AFTER_TRIM, },
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/ata/libata-zpodd.c linux-libre-4.9.110-gnu/drivers/ata/libata-zpodd.c
--- linux-libre-4.9.109-gnu/drivers/ata/libata-zpodd.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/ata/libata-zpodd.c	2018-06-25 20:08:09.000000000 -0400
@@ -34,7 +34,7 @@ struct zpodd {
 static int eject_tray(struct ata_device *dev)
 {
 	struct ata_taskfile tf;
-	const char cdb[] = {  GPCMD_START_STOP_UNIT,
+	static const char cdb[ATAPI_CDB_LEN] = {  GPCMD_START_STOP_UNIT,
 		0, 0, 0,
 		0x02,     /* LoEj */
 		0, 0, 0, 0, 0, 0, 0,
@@ -55,7 +55,7 @@ static enum odd_mech_type zpodd_get_mech
 	unsigned int ret;
 	struct rm_feature_desc *desc = (void *)(buf + 8);
 	struct ata_taskfile tf;
-	char cdb[] = {  GPCMD_GET_CONFIGURATION,
+	static const char cdb[] = {  GPCMD_GET_CONFIGURATION,
 			2,      /* only 1 feature descriptor requested */
 			0, 3,   /* 3, removable medium feature */
 			0, 0, 0,/* reserved */
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/atm/zatm.c linux-libre-4.9.110-gnu/drivers/atm/zatm.c
--- linux-libre-4.9.109-gnu/drivers/atm/zatm.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/atm/zatm.c	2018-06-25 20:08:09.000000000 -0400
@@ -1151,8 +1151,8 @@ static void eprom_get_byte(struct zatm_d
 }
 
 
-static unsigned char eprom_try_esi(struct atm_dev *dev, unsigned short cmd,
-				   int offset, int swap)
+static int eprom_try_esi(struct atm_dev *dev, unsigned short cmd, int offset,
+			 int swap)
 {
 	unsigned char buf[ZEPROM_SIZE];
 	struct zatm_dev *zatm_dev;
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/base/core.c linux-libre-4.9.110-gnu/drivers/base/core.c
--- linux-libre-4.9.109-gnu/drivers/base/core.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/base/core.c	2018-06-25 20:08:09.000000000 -0400
@@ -759,7 +759,7 @@ class_dir_create_and_add(struct class *c
 
 	dir = kzalloc(sizeof(*dir), GFP_KERNEL);
 	if (!dir)
-		return NULL;
+		return ERR_PTR(-ENOMEM);
 
 	dir->class = class;
 	kobject_init(&dir->kobj, &class_dir_ktype);
@@ -769,7 +769,7 @@ class_dir_create_and_add(struct class *c
 	retval = kobject_add(&dir->kobj, parent_kobj, "%s", class->name);
 	if (retval < 0) {
 		kobject_put(&dir->kobj);
-		return NULL;
+		return ERR_PTR(retval);
 	}
 	return &dir->kobj;
 }
@@ -1076,6 +1076,10 @@ int device_add(struct device *dev)
 
 	parent = get_device(dev->parent);
 	kobj = get_device_parent(dev, parent);
+	if (IS_ERR(kobj)) {
+		error = PTR_ERR(kobj);
+		goto parent_error;
+	}
 	if (kobj)
 		dev->kobj.parent = kobj;
 
@@ -1174,6 +1178,7 @@ done:
 	kobject_del(&dev->kobj);
  Error:
 	cleanup_glue_dir(dev, glue_dir);
+parent_error:
 	put_device(parent);
 name_error:
 	kfree(dev->p);
@@ -1991,6 +1996,11 @@ int device_move(struct device *dev, stru
 	device_pm_lock();
 	new_parent = get_device(new_parent);
 	new_parent_kobj = get_device_parent(dev, new_parent);
+	if (IS_ERR(new_parent_kobj)) {
+		error = PTR_ERR(new_parent_kobj);
+		put_device(new_parent);
+		goto out;
+	}
 
 	pr_debug("device: '%s': %s: moving to '%s'\n", dev_name(dev),
 		 __func__, new_parent ? dev_name(new_parent) : "<NULL>");
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/cpufreq/cpufreq.c linux-libre-4.9.110-gnu/drivers/cpufreq/cpufreq.c
--- linux-libre-4.9.109-gnu/drivers/cpufreq/cpufreq.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/cpufreq/cpufreq.c	2018-06-25 20:08:09.000000000 -0400
@@ -657,6 +657,8 @@ static ssize_t store_##file_name					\
 	struct cpufreq_policy new_policy;				\
 									\
 	memcpy(&new_policy, policy, sizeof(*policy));			\
+	new_policy.min = policy->user_policy.min;			\
+	new_policy.max = policy->user_policy.max;			\
 									\
 	ret = sscanf(buf, "%u", &new_policy.object);			\
 	if (ret != 1)							\
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/hid/intel-ish-hid/ipc/pci-ish.c linux-libre-4.9.110-gnu/drivers/hid/intel-ish-hid/ipc/pci-ish.c
--- linux-libre-4.9.109-gnu/drivers/hid/intel-ish-hid/ipc/pci-ish.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/hid/intel-ish-hid/ipc/pci-ish.c	2018-06-25 20:08:09.000000000 -0400
@@ -202,8 +202,7 @@ static void ish_remove(struct pci_dev *p
 	kfree(ishtp_dev);
 }
 
-#ifdef CONFIG_PM
-static struct device *ish_resume_device;
+static struct device __maybe_unused *ish_resume_device;
 
 /**
  * ish_resume_handler() - Work function to complete resume
@@ -214,7 +213,7 @@ static struct device *ish_resume_device;
  * in that case a simple resume message is enough, others we need
  * a reset sequence.
  */
-static void ish_resume_handler(struct work_struct *work)
+static void __maybe_unused ish_resume_handler(struct work_struct *work)
 {
 	struct pci_dev *pdev = to_pci_dev(ish_resume_device);
 	struct ishtp_device *dev = pci_get_drvdata(pdev);
@@ -245,7 +244,7 @@ static void ish_resume_handler(struct wo
  *
  * Return: 0 to the pm core
  */
-static int ish_suspend(struct device *device)
+static int __maybe_unused ish_suspend(struct device *device)
 {
 	struct pci_dev *pdev = to_pci_dev(device);
 	struct ishtp_device *dev = pci_get_drvdata(pdev);
@@ -271,7 +270,7 @@ static int ish_suspend(struct device *de
 	return 0;
 }
 
-static DECLARE_WORK(resume_work, ish_resume_handler);
+static __maybe_unused DECLARE_WORK(resume_work, ish_resume_handler);
 /**
  * ish_resume() - ISH resume callback
  * @device:	device pointer
@@ -280,7 +279,7 @@ static DECLARE_WORK(resume_work, ish_res
  *
  * Return: 0 to the pm core
  */
-static int ish_resume(struct device *device)
+static int __maybe_unused ish_resume(struct device *device)
 {
 	struct pci_dev *pdev = to_pci_dev(device);
 	struct ishtp_device *dev = pci_get_drvdata(pdev);
@@ -294,21 +293,14 @@ static int ish_resume(struct device *dev
 	return 0;
 }
 
-static const struct dev_pm_ops ish_pm_ops = {
-	.suspend = ish_suspend,
-	.resume = ish_resume,
-};
-#define ISHTP_ISH_PM_OPS	(&ish_pm_ops)
-#else
-#define ISHTP_ISH_PM_OPS	NULL
-#endif /* CONFIG_PM */
+static SIMPLE_DEV_PM_OPS(ish_pm_ops, ish_suspend, ish_resume);
 
 static struct pci_driver ish_driver = {
 	.name = KBUILD_MODNAME,
 	.id_table = ish_pci_tbl,
 	.probe = ish_probe,
 	.remove = ish_remove,
-	.driver.pm = ISHTP_ISH_PM_OPS,
+	.driver.pm = &ish_pm_ops,
 };
 
 module_pci_driver(ish_driver);
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/net/bonding/bond_options.c linux-libre-4.9.110-gnu/drivers/net/bonding/bond_options.c
--- linux-libre-4.9.109-gnu/drivers/net/bonding/bond_options.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/net/bonding/bond_options.c	2018-06-25 20:08:09.000000000 -0400
@@ -1114,6 +1114,7 @@ static int bond_option_primary_set(struc
 				    slave->dev->name);
 			rcu_assign_pointer(bond->primary_slave, slave);
 			strcpy(bond->params.primary, slave->dev->name);
+			bond->force_primary = true;
 			bond_select_active_slave(bond);
 			goto out;
 		}
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/net/dsa/b53/b53_common.c linux-libre-4.9.110-gnu/drivers/net/dsa/b53/b53_common.c
--- linux-libre-4.9.109-gnu/drivers/net/dsa/b53/b53_common.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/net/dsa/b53/b53_common.c	2018-06-25 20:08:09.000000000 -0400
@@ -1516,6 +1516,18 @@ static const struct b53_chip_data b53_sw
 		.duplex_reg = B53_DUPLEX_STAT_FE,
 	},
 	{
+		.chip_id = BCM5389_DEVICE_ID,
+		.dev_name = "BCM5389",
+		.vlans = 4096,
+		.enabled_ports = 0x1f,
+		.arl_entries = 4,
+		.cpu_port = B53_CPU_PORT,
+		.vta_regs = B53_VTA_REGS,
+		.duplex_reg = B53_DUPLEX_STAT_GE,
+		.jumbo_pm_reg = B53_JUMBO_PORT_MASK,
+		.jumbo_size_reg = B53_JUMBO_MAX_SIZE,
+	},
+	{
 		.chip_id = BCM5395_DEVICE_ID,
 		.dev_name = "BCM5395",
 		.vlans = 4096,
@@ -1825,6 +1837,7 @@ int b53_switch_detect(struct b53_device
 		else
 			dev->chip_id = BCM5365_DEVICE_ID;
 		break;
+	case BCM5389_DEVICE_ID:
 	case BCM5395_DEVICE_ID:
 	case BCM5397_DEVICE_ID:
 	case BCM5398_DEVICE_ID:
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/net/dsa/b53/b53_mdio.c linux-libre-4.9.110-gnu/drivers/net/dsa/b53/b53_mdio.c
--- linux-libre-4.9.109-gnu/drivers/net/dsa/b53/b53_mdio.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/net/dsa/b53/b53_mdio.c	2018-06-25 20:08:09.000000000 -0400
@@ -285,6 +285,7 @@ static const struct b53_io_ops b53_mdio_
 #define B53_BRCM_OUI_1	0x0143bc00
 #define B53_BRCM_OUI_2	0x03625c00
 #define B53_BRCM_OUI_3	0x00406000
+#define B53_BRCM_OUI_4	0x01410c00
 
 static int b53_mdio_probe(struct mdio_device *mdiodev)
 {
@@ -311,7 +312,8 @@ static int b53_mdio_probe(struct mdio_de
 	 */
 	if ((phy_id & 0xfffffc00) != B53_BRCM_OUI_1 &&
 	    (phy_id & 0xfffffc00) != B53_BRCM_OUI_2 &&
-	    (phy_id & 0xfffffc00) != B53_BRCM_OUI_3) {
+	    (phy_id & 0xfffffc00) != B53_BRCM_OUI_3 &&
+	    (phy_id & 0xfffffc00) != B53_BRCM_OUI_4) {
 		dev_err(&mdiodev->dev, "Unsupported device: 0x%08x\n", phy_id);
 		return -ENODEV;
 	}
@@ -360,6 +362,7 @@ static const struct of_device_id b53_of_
 	{ .compatible = "brcm,bcm53125" },
 	{ .compatible = "brcm,bcm53128" },
 	{ .compatible = "brcm,bcm5365" },
+	{ .compatible = "brcm,bcm5389" },
 	{ .compatible = "brcm,bcm5395" },
 	{ .compatible = "brcm,bcm5397" },
 	{ .compatible = "brcm,bcm5398" },
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/net/dsa/b53/b53_priv.h linux-libre-4.9.110-gnu/drivers/net/dsa/b53/b53_priv.h
--- linux-libre-4.9.109-gnu/drivers/net/dsa/b53/b53_priv.h	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/net/dsa/b53/b53_priv.h	2018-06-25 20:08:09.000000000 -0400
@@ -47,6 +47,7 @@ struct b53_io_ops {
 enum {
 	BCM5325_DEVICE_ID = 0x25,
 	BCM5365_DEVICE_ID = 0x65,
+	BCM5389_DEVICE_ID = 0x89,
 	BCM5395_DEVICE_ID = 0x95,
 	BCM5397_DEVICE_ID = 0x97,
 	BCM5398_DEVICE_ID = 0x98,
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/net/ethernet/natsemi/sonic.c linux-libre-4.9.110-gnu/drivers/net/ethernet/natsemi/sonic.c
--- linux-libre-4.9.109-gnu/drivers/net/ethernet/natsemi/sonic.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/net/ethernet/natsemi/sonic.c	2018-06-25 20:08:09.000000000 -0400
@@ -71,7 +71,7 @@ static int sonic_open(struct net_device
 	for (i = 0; i < SONIC_NUM_RRS; i++) {
 		dma_addr_t laddr = dma_map_single(lp->device, skb_put(lp->rx_skb[i], SONIC_RBSIZE),
 		                                  SONIC_RBSIZE, DMA_FROM_DEVICE);
-		if (!laddr) {
+		if (dma_mapping_error(lp->device, laddr)) {
 			while(i > 0) { /* free any that were mapped successfully */
 				i--;
 				dma_unmap_single(lp->device, lp->rx_laddr[i], SONIC_RBSIZE, DMA_FROM_DEVICE);
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/net/usb/qmi_wwan.c linux-libre-4.9.110-gnu/drivers/net/usb/qmi_wwan.c
--- linux-libre-4.9.109-gnu/drivers/net/usb/qmi_wwan.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/net/usb/qmi_wwan.c	2018-06-25 20:08:09.000000000 -0400
@@ -808,6 +808,7 @@ static const struct usb_device_id produc
 	{QMI_FIXED_INTF(0x05c6, 0x920d, 5)},
 	{QMI_QUIRK_SET_DTR(0x05c6, 0x9625, 4)},	/* YUGA CLM920-NC5 */
 	{QMI_FIXED_INTF(0x0846, 0x68a2, 8)},
+	{QMI_FIXED_INTF(0x0846, 0x68d3, 8)},	/* Netgear Aircard 779S */
 	{QMI_FIXED_INTF(0x12d1, 0x140c, 1)},	/* Huawei E173 */
 	{QMI_FIXED_INTF(0x12d1, 0x14ac, 1)},	/* Huawei E1820 */
 	{QMI_FIXED_INTF(0x1435, 0xd181, 3)},	/* Wistron NeWeb D18Q1 */
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/net/wireless/intel/iwlwifi/pcie/trans.c linux-libre-4.9.110-gnu/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
--- linux-libre-4.9.109-gnu/drivers/net/wireless/intel/iwlwifi/pcie/trans.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/net/wireless/intel/iwlwifi/pcie/trans.c	2018-06-25 20:08:09.000000000 -0400
@@ -1509,14 +1509,13 @@ static void iwl_pcie_set_interrupt_capa(
 					struct iwl_trans *trans)
 {
 	struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
-	int max_irqs, num_irqs, i, ret, nr_online_cpus;
+	int max_irqs, num_irqs, i, ret;
 	u16 pci_cmd;
 
 	if (!trans->cfg->mq_rx_supported)
 		goto enable_msi;
 
-	nr_online_cpus = num_online_cpus();
-	max_irqs = min_t(u32, nr_online_cpus + 2, IWL_MAX_RX_HW_QUEUES);
+	max_irqs = min_t(u32, num_online_cpus() + 2, IWL_MAX_RX_HW_QUEUES);
 	for (i = 0; i < max_irqs; i++)
 		trans_pcie->msix_entries[i].entry = i;
 
@@ -1542,16 +1541,17 @@ static void iwl_pcie_set_interrupt_capa(
 	 * Two interrupts less: non rx causes shared with FBQ and RSS.
 	 * More than two interrupts: we will use fewer RSS queues.
 	 */
-	if (num_irqs <= nr_online_cpus) {
+	if (num_irqs <= max_irqs - 2) {
 		trans_pcie->trans->num_rx_queues = num_irqs + 1;
 		trans_pcie->shared_vec_mask = IWL_SHARED_IRQ_NON_RX |
 			IWL_SHARED_IRQ_FIRST_RSS;
-	} else if (num_irqs == nr_online_cpus + 1) {
+	} else if (num_irqs == max_irqs - 1) {
 		trans_pcie->trans->num_rx_queues = num_irqs;
 		trans_pcie->shared_vec_mask = IWL_SHARED_IRQ_NON_RX;
 	} else {
 		trans_pcie->trans->num_rx_queues = num_irqs - 1;
 	}
+	WARN_ON(trans_pcie->trans->num_rx_queues > IWL_MAX_RX_HW_QUEUES);
 
 	trans_pcie->alloc_vecs = num_irqs;
 	trans_pcie->msix_enabled = true;
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/platform/x86/asus-wmi.c linux-libre-4.9.110-gnu/drivers/platform/x86/asus-wmi.c
--- linux-libre-4.9.109-gnu/drivers/platform/x86/asus-wmi.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/platform/x86/asus-wmi.c	2018-06-25 20:08:09.000000000 -0400
@@ -161,6 +161,16 @@ MODULE_LICENSE("GPL");
 
 static const char * const ashs_ids[] = { "ATK4001", "ATK4002", NULL };
 
+static bool ashs_present(void)
+{
+	int i = 0;
+	while (ashs_ids[i]) {
+		if (acpi_dev_found(ashs_ids[i++]))
+			return true;
+	}
+	return false;
+}
+
 struct bios_args {
 	u32 arg0;
 	u32 arg1;
@@ -966,6 +976,9 @@ static int asus_new_rfkill(struct asus_w
 
 static void asus_wmi_rfkill_exit(struct asus_wmi *asus)
 {
+	if (asus->driver->wlan_ctrl_by_user && ashs_present())
+		return;
+
 	asus_unregister_rfkill_notifier(asus, "\\_SB.PCI0.P0P5");
 	asus_unregister_rfkill_notifier(asus, "\\_SB.PCI0.P0P6");
 	asus_unregister_rfkill_notifier(asus, "\\_SB.PCI0.P0P7");
@@ -2062,16 +2075,6 @@ static int asus_wmi_fan_init(struct asus
 	return 0;
 }
 
-static bool ashs_present(void)
-{
-	int i = 0;
-	while (ashs_ids[i]) {
-		if (acpi_dev_found(ashs_ids[i++]))
-			return true;
-	}
-	return false;
-}
-
 /*
  * WMI Driver
  */
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/usb/musb/musb_host.c linux-libre-4.9.110-gnu/drivers/usb/musb/musb_host.c
--- linux-libre-4.9.109-gnu/drivers/usb/musb/musb_host.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/usb/musb/musb_host.c	2018-06-25 20:08:09.000000000 -0400
@@ -2554,8 +2554,11 @@ static int musb_bus_suspend(struct usb_h
 {
 	struct musb	*musb = hcd_to_musb(hcd);
 	u8		devctl;
+	int		ret;
 
-	musb_port_suspend(musb, true);
+	ret = musb_port_suspend(musb, true);
+	if (ret)
+		return ret;
 
 	if (!is_host_active(musb))
 		return 0;
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/usb/musb/musb_host.h linux-libre-4.9.110-gnu/drivers/usb/musb/musb_host.h
--- linux-libre-4.9.109-gnu/drivers/usb/musb/musb_host.h	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/usb/musb/musb_host.h	2018-06-25 20:08:09.000000000 -0400
@@ -92,7 +92,7 @@ extern void musb_host_rx(struct musb *,
 extern void musb_root_disconnect(struct musb *musb);
 extern void musb_host_resume_root_hub(struct musb *musb);
 extern void musb_host_poke_root_hub(struct musb *musb);
-extern void musb_port_suspend(struct musb *musb, bool do_suspend);
+extern int musb_port_suspend(struct musb *musb, bool do_suspend);
 extern void musb_port_reset(struct musb *musb, bool do_reset);
 extern void musb_host_finish_resume(struct work_struct *work);
 #else
@@ -124,7 +124,10 @@ static inline void musb_root_disconnect(
 static inline void musb_host_resume_root_hub(struct musb *musb)	{}
 static inline void musb_host_poll_rh_status(struct musb *musb)	{}
 static inline void musb_host_poke_root_hub(struct musb *musb)	{}
-static inline void musb_port_suspend(struct musb *musb, bool do_suspend) {}
+static inline int musb_port_suspend(struct musb *musb, bool do_suspend)
+{
+	return 0;
+}
 static inline void musb_port_reset(struct musb *musb, bool do_reset) {}
 static inline void musb_host_finish_resume(struct work_struct *work) {}
 #endif
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/usb/musb/musb_virthub.c linux-libre-4.9.110-gnu/drivers/usb/musb/musb_virthub.c
--- linux-libre-4.9.109-gnu/drivers/usb/musb/musb_virthub.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/usb/musb/musb_virthub.c	2018-06-25 20:08:09.000000000 -0400
@@ -73,14 +73,14 @@ void musb_host_finish_resume(struct work
 	spin_unlock_irqrestore(&musb->lock, flags);
 }
 
-void musb_port_suspend(struct musb *musb, bool do_suspend)
+int musb_port_suspend(struct musb *musb, bool do_suspend)
 {
 	struct usb_otg	*otg = musb->xceiv->otg;
 	u8		power;
 	void __iomem	*mbase = musb->mregs;
 
 	if (!is_host_active(musb))
-		return;
+		return 0;
 
 	/* NOTE:  this doesn't necessarily put PHY into low power mode,
 	 * turning off its clock; that's a function of PHY integration and
@@ -91,16 +91,20 @@ void musb_port_suspend(struct musb *musb
 	if (do_suspend) {
 		int retries = 10000;
 
-		power &= ~MUSB_POWER_RESUME;
-		power |= MUSB_POWER_SUSPENDM;
-		musb_writeb(mbase, MUSB_POWER, power);
+		if (power & MUSB_POWER_RESUME)
+			return -EBUSY;
 
-		/* Needed for OPT A tests */
-		power = musb_readb(mbase, MUSB_POWER);
-		while (power & MUSB_POWER_SUSPENDM) {
+		if (!(power & MUSB_POWER_SUSPENDM)) {
+			power |= MUSB_POWER_SUSPENDM;
+			musb_writeb(mbase, MUSB_POWER, power);
+
+			/* Needed for OPT A tests */
 			power = musb_readb(mbase, MUSB_POWER);
-			if (retries-- < 1)
-				break;
+			while (power & MUSB_POWER_SUSPENDM) {
+				power = musb_readb(mbase, MUSB_POWER);
+				if (retries-- < 1)
+					break;
+			}
 		}
 
 		musb_dbg(musb, "Root port suspended, power %02x", power);
@@ -137,6 +141,7 @@ void musb_port_suspend(struct musb *musb
 		schedule_delayed_work(&musb->finish_resume_work,
 				      msecs_to_jiffies(USB_RESUME_TIMEOUT));
 	}
+	return 0;
 }
 
 void musb_port_reset(struct musb *musb, bool do_reset)
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/vhost/vhost.c linux-libre-4.9.110-gnu/drivers/vhost/vhost.c
--- linux-libre-4.9.109-gnu/drivers/vhost/vhost.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/vhost/vhost.c	2018-06-25 20:08:09.000000000 -0400
@@ -2295,6 +2295,9 @@ struct vhost_msg_node *vhost_new_msg(str
 	struct vhost_msg_node *node = kmalloc(sizeof *node, GFP_KERNEL);
 	if (!node)
 		return NULL;
+
+	/* Make sure all padding within the structure is initialized. */
+	memset(&node->msg, 0, sizeof node->msg);
 	node->vq = vq;
 	node->msg.type = type;
 	return node;
diff -druNp --no-dereference linux-libre-4.9.109-gnu/drivers/w1/masters/mxc_w1.c linux-libre-4.9.110-gnu/drivers/w1/masters/mxc_w1.c
--- linux-libre-4.9.109-gnu/drivers/w1/masters/mxc_w1.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/drivers/w1/masters/mxc_w1.c	2018-06-25 20:08:09.000000000 -0400
@@ -113,6 +113,10 @@ static int mxc_w1_probe(struct platform_
 	if (IS_ERR(mdev->clk))
 		return PTR_ERR(mdev->clk);
 
+	err = clk_prepare_enable(mdev->clk);
+	if (err)
+		return err;
+
 	clkrate = clk_get_rate(mdev->clk);
 	if (clkrate < 10000000)
 		dev_warn(&pdev->dev,
@@ -126,12 +130,10 @@ static int mxc_w1_probe(struct platform_
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	mdev->regs = devm_ioremap_resource(&pdev->dev, res);
-	if (IS_ERR(mdev->regs))
-		return PTR_ERR(mdev->regs);
-
-	err = clk_prepare_enable(mdev->clk);
-	if (err)
-		return err;
+	if (IS_ERR(mdev->regs)) {
+		err = PTR_ERR(mdev->regs);
+		goto out_disable_clk;
+	}
 
 	/* Software reset 1-Wire module */
 	writeb(MXC_W1_RESET_RST, mdev->regs + MXC_W1_RESET);
@@ -147,8 +149,12 @@ static int mxc_w1_probe(struct platform_
 
 	err = w1_add_master_device(&mdev->bus_master);
 	if (err)
-		clk_disable_unprepare(mdev->clk);
+		goto out_disable_clk;
+
+	return 0;
 
+out_disable_clk:
+	clk_disable_unprepare(mdev->clk);
 	return err;
 }
 
diff -druNp --no-dereference linux-libre-4.9.109-gnu/fs/binfmt_misc.c linux-libre-4.9.110-gnu/fs/binfmt_misc.c
--- linux-libre-4.9.109-gnu/fs/binfmt_misc.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/fs/binfmt_misc.c	2018-06-25 20:08:09.000000000 -0400
@@ -384,8 +384,13 @@ static Node *create_entry(const char __u
 		s = strchr(p, del);
 		if (!s)
 			goto einval;
-		*s++ = '\0';
-		e->offset = simple_strtoul(p, &p, 10);
+		*s = '\0';
+		if (p != s) {
+			int r = kstrtoint(p, 10, &e->offset);
+			if (r != 0 || e->offset < 0)
+				goto einval;
+		}
+		p = s;
 		if (*p++)
 			goto einval;
 		pr_debug("register: offset: %#x\n", e->offset);
@@ -425,7 +430,8 @@ static Node *create_entry(const char __u
 		if (e->mask &&
 		    string_unescape_inplace(e->mask, UNESCAPE_HEX) != e->size)
 			goto einval;
-		if (e->size + e->offset > BINPRM_BUF_SIZE)
+		if (e->size > BINPRM_BUF_SIZE ||
+		    BINPRM_BUF_SIZE - e->size < e->offset)
 			goto einval;
 		pr_debug("register: magic/mask length: %i\n", e->size);
 		if (USE_DEBUG) {
diff -druNp --no-dereference linux-libre-4.9.109-gnu/fs/btrfs/ioctl.c linux-libre-4.9.110-gnu/fs/btrfs/ioctl.c
--- linux-libre-4.9.109-gnu/fs/btrfs/ioctl.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/fs/btrfs/ioctl.c	2018-06-25 20:08:09.000000000 -0400
@@ -2708,8 +2708,10 @@ static long btrfs_ioctl_rm_dev_v2(struct
 	}
 
 	/* Check for compatibility reject unknown flags */
-	if (vol_args->flags & ~BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED)
-		return -EOPNOTSUPP;
+	if (vol_args->flags & ~BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED) {
+		ret = -EOPNOTSUPP;
+		goto out;
+	}
 
 	if (atomic_xchg(&root->fs_info->mutually_exclusive_operation_running,
 			1)) {
@@ -3887,11 +3889,6 @@ static noinline int btrfs_clone_files(st
 	    src->i_sb != inode->i_sb)
 		return -EXDEV;
 
-	/* don't make the dst file partly checksummed */
-	if ((BTRFS_I(src)->flags & BTRFS_INODE_NODATASUM) !=
-	    (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM))
-		return -EINVAL;
-
 	if (S_ISDIR(src->i_mode) || S_ISDIR(inode->i_mode))
 		return -EISDIR;
 
@@ -3901,6 +3898,13 @@ static noinline int btrfs_clone_files(st
 		inode_lock(src);
 	}
 
+	/* don't make the dst file partly checksummed */
+	if ((BTRFS_I(src)->flags & BTRFS_INODE_NODATASUM) !=
+	    (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) {
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+
 	/* determine range to clone */
 	ret = -EINVAL;
 	if (off + len > src->i_size || off + len < off)
diff -druNp --no-dereference linux-libre-4.9.109-gnu/fs/btrfs/scrub.c linux-libre-4.9.110-gnu/fs/btrfs/scrub.c
--- linux-libre-4.9.109-gnu/fs/btrfs/scrub.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/fs/btrfs/scrub.c	2018-06-25 20:08:09.000000000 -0400
@@ -2519,7 +2519,7 @@ static int scrub_extent(struct scrub_ctx
 			have_csum = scrub_find_csum(sctx, logical, csum);
 			if (have_csum == 0)
 				++sctx->stat.no_csum;
-			if (sctx->is_dev_replace && !have_csum) {
+			if (0 && sctx->is_dev_replace && !have_csum) {
 				ret = copy_nocow_pages(sctx, logical, l,
 						       mirror_num,
 						      physical_for_dev_replace);
diff -druNp --no-dereference linux-libre-4.9.109-gnu/fs/cifs/smb2pdu.c linux-libre-4.9.110-gnu/fs/cifs/smb2pdu.c
--- linux-libre-4.9.109-gnu/fs/cifs/smb2pdu.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/fs/cifs/smb2pdu.c	2018-06-25 20:08:09.000000000 -0400
@@ -1004,6 +1004,7 @@ SMB2_sess_setup(const unsigned int xid,
 	sess_data->ses = ses;
 	sess_data->buf0_type = CIFS_NO_BUFFER;
 	sess_data->nls_cp = (struct nls_table *) nls_cp;
+	sess_data->previous_session = ses->Suid;
 
 	while (sess_data->func)
 		sess_data->func(sess_data);
diff -druNp --no-dereference linux-libre-4.9.109-gnu/fs/ext4/indirect.c linux-libre-4.9.110-gnu/fs/ext4/indirect.c
--- linux-libre-4.9.109-gnu/fs/ext4/indirect.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/fs/ext4/indirect.c	2018-06-25 20:08:09.000000000 -0400
@@ -560,10 +560,16 @@ int ext4_ind_map_blocks(handle_t *handle
 		unsigned epb = inode->i_sb->s_blocksize / sizeof(u32);
 		int i;
 
-		/* Count number blocks in a subtree under 'partial' */
-		count = 1;
-		for (i = 0; partial + i != chain + depth - 1; i++)
-			count *= epb;
+		/*
+		 * Count number blocks in a subtree under 'partial'. At each
+		 * level we count number of complete empty subtrees beyond
+		 * current offset and then descend into the subtree only
+		 * partially beyond current offset.
+		 */
+		count = 0;
+		for (i = partial - chain + 1; i < depth; i++)
+			count = count * epb + (epb - offsets[i] - 1);
+		count++;
 		/* Fill in size of a hole we found */
 		map->m_pblk = 0;
 		map->m_len = min_t(unsigned int, map->m_len, count);
diff -druNp --no-dereference linux-libre-4.9.109-gnu/fs/ext4/inode.c linux-libre-4.9.110-gnu/fs/ext4/inode.c
--- linux-libre-4.9.109-gnu/fs/ext4/inode.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/fs/ext4/inode.c	2018-06-25 20:08:09.000000000 -0400
@@ -4038,28 +4038,28 @@ int ext4_punch_hole(struct inode *inode,
 		EXT4_BLOCK_SIZE_BITS(sb);
 	stop_block = (offset + length) >> EXT4_BLOCK_SIZE_BITS(sb);
 
-	/* If there are no blocks to remove, return now */
-	if (first_block >= stop_block)
-		goto out_stop;
+	/* If there are blocks to remove, do it */
+	if (stop_block > first_block) {
 
-	down_write(&EXT4_I(inode)->i_data_sem);
-	ext4_discard_preallocations(inode);
+		down_write(&EXT4_I(inode)->i_data_sem);
+		ext4_discard_preallocations(inode);
 
-	ret = ext4_es_remove_extent(inode, first_block,
-				    stop_block - first_block);
-	if (ret) {
-		up_write(&EXT4_I(inode)->i_data_sem);
-		goto out_stop;
-	}
+		ret = ext4_es_remove_extent(inode, first_block,
+					    stop_block - first_block);
+		if (ret) {
+			up_write(&EXT4_I(inode)->i_data_sem);
+			goto out_stop;
+		}
 
-	if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
-		ret = ext4_ext_remove_space(inode, first_block,
-					    stop_block - 1);
-	else
-		ret = ext4_ind_remove_space(handle, inode, first_block,
-					    stop_block);
+		if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
+			ret = ext4_ext_remove_space(inode, first_block,
+						    stop_block - 1);
+		else
+			ret = ext4_ind_remove_space(handle, inode, first_block,
+						    stop_block);
 
-	up_write(&EXT4_I(inode)->i_data_sem);
+		up_write(&EXT4_I(inode)->i_data_sem);
+	}
 	if (IS_SYNC(inode))
 		ext4_handle_sync(handle);
 
diff -druNp --no-dereference linux-libre-4.9.109-gnu/fs/ext4/resize.c linux-libre-4.9.110-gnu/fs/ext4/resize.c
--- linux-libre-4.9.109-gnu/fs/ext4/resize.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/fs/ext4/resize.c	2018-06-25 20:08:09.000000000 -0400
@@ -1903,7 +1903,7 @@ retry:
 		return 0;
 
 	n_group = ext4_get_group_number(sb, n_blocks_count - 1);
-	if (n_group > (0xFFFFFFFFUL / EXT4_INODES_PER_GROUP(sb))) {
+	if (n_group >= (0xFFFFFFFFUL / EXT4_INODES_PER_GROUP(sb))) {
 		ext4_warning(sb, "resize would cause inodes_count overflow");
 		return -EINVAL;
 	}
diff -druNp --no-dereference linux-libre-4.9.109-gnu/fs/orangefs/namei.c linux-libre-4.9.110-gnu/fs/orangefs/namei.c
--- linux-libre-4.9.109-gnu/fs/orangefs/namei.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/fs/orangefs/namei.c	2018-06-25 20:08:09.000000000 -0400
@@ -312,6 +312,13 @@ static int orangefs_symlink(struct inode
 		ret = PTR_ERR(inode);
 		goto out;
 	}
+	/*
+	 * This is necessary because orangefs_inode_getattr will not
+	 * re-read symlink size as it is impossible for it to change.
+	 * Invalidating the cache does not help.  orangefs_new_inode
+	 * does not set the correct size (it does not know symname).
+	 */
+	inode->i_size = strlen(symname);
 
 	gossip_debug(GOSSIP_NAME_DEBUG,
 		     "Assigned symlink inode new number of %pU\n",
diff -druNp --no-dereference linux-libre-4.9.109-gnu/Makefile linux-libre-4.9.110-gnu/Makefile
--- linux-libre-4.9.109-gnu/Makefile	2018-06-16 11:57:44.000000000 -0400
+++ linux-libre-4.9.110-gnu/Makefile	2018-06-26 01:45:49.000000000 -0400
@@ -1,6 +1,6 @@
 VERSION = 4
 PATCHLEVEL = 9
-SUBLEVEL = 109
+SUBLEVEL = 110
 EXTRAVERSION = -gnu
 NAME = Roaring Lionus
 
diff -druNp --no-dereference linux-libre-4.9.109-gnu/net/bridge/netfilter/ebtables.c linux-libre-4.9.110-gnu/net/bridge/netfilter/ebtables.c
--- linux-libre-4.9.109-gnu/net/bridge/netfilter/ebtables.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/net/bridge/netfilter/ebtables.c	2018-06-25 20:08:09.000000000 -0400
@@ -1923,7 +1923,8 @@ static int compat_mtw_from_user(struct c
 	int off, pad = 0;
 	unsigned int size_kern, match_size = mwt->match_size;
 
-	strlcpy(name, mwt->u.name, sizeof(name));
+	if (strscpy(name, mwt->u.name, sizeof(name)) < 0)
+		return -EINVAL;
 
 	if (state->buf_kern_start)
 		dst = state->buf_kern_start + state->buf_kern_offset;
diff -druNp --no-dereference linux-libre-4.9.109-gnu/net/ipv4/tcp_input.c linux-libre-4.9.110-gnu/net/ipv4/tcp_input.c
--- linux-libre-4.9.109-gnu/net/ipv4/tcp_input.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/net/ipv4/tcp_input.c	2018-06-25 20:08:09.000000000 -0400
@@ -636,7 +636,7 @@ void tcp_rcv_space_adjust(struct sock *s
 			sk->sk_rcvbuf = rcvbuf;
 
 			/* Make the window clamp follow along.  */
-			tp->window_clamp = rcvwin;
+			tp->window_clamp = tcp_win_from_space(rcvbuf);
 		}
 	}
 	tp->rcvq_space.space = copied;
diff -druNp --no-dereference linux-libre-4.9.109-gnu/net/ipv4/tcp_ipv4.c linux-libre-4.9.110-gnu/net/ipv4/tcp_ipv4.c
--- linux-libre-4.9.109-gnu/net/ipv4/tcp_ipv4.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/net/ipv4/tcp_ipv4.c	2018-06-25 20:08:09.000000000 -0400
@@ -1661,6 +1661,10 @@ process:
 			reqsk_put(req);
 			goto discard_it;
 		}
+		if (tcp_checksum_complete(skb)) {
+			reqsk_put(req);
+			goto csum_error;
+		}
 		if (unlikely(sk->sk_state != TCP_LISTEN)) {
 			inet_csk_reqsk_queue_drop_and_put(sk, req);
 			goto lookup;
diff -druNp --no-dereference linux-libre-4.9.109-gnu/net/ipv6/route.c linux-libre-4.9.110-gnu/net/ipv6/route.c
--- linux-libre-4.9.109-gnu/net/ipv6/route.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/net/ipv6/route.c	2018-06-25 20:08:09.000000000 -0400
@@ -1373,9 +1373,6 @@ static void __ip6_rt_update_pmtu(struct
 {
 	struct rt6_info *rt6 = (struct rt6_info *)dst;
 
-	if (rt6->rt6i_flags & RTF_LOCAL)
-		return;
-
 	if (dst_metric_locked(dst, RTAX_MTU))
 		return;
 
diff -druNp --no-dereference linux-libre-4.9.109-gnu/net/ipv6/tcp_ipv6.c linux-libre-4.9.110-gnu/net/ipv6/tcp_ipv6.c
--- linux-libre-4.9.109-gnu/net/ipv6/tcp_ipv6.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/net/ipv6/tcp_ipv6.c	2018-06-25 20:08:09.000000000 -0400
@@ -1433,6 +1433,10 @@ process:
 			reqsk_put(req);
 			goto discard_it;
 		}
+		if (tcp_checksum_complete(skb)) {
+			reqsk_put(req);
+			goto csum_error;
+		}
 		if (unlikely(sk->sk_state != TCP_LISTEN)) {
 			inet_csk_reqsk_queue_drop_and_put(sk, req);
 			goto lookup;
diff -druNp --no-dereference linux-libre-4.9.109-gnu/net/ipv6/xfrm6_policy.c linux-libre-4.9.110-gnu/net/ipv6/xfrm6_policy.c
--- linux-libre-4.9.109-gnu/net/ipv6/xfrm6_policy.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/net/ipv6/xfrm6_policy.c	2018-06-25 20:08:09.000000000 -0400
@@ -121,7 +121,7 @@ _decode_session6(struct sk_buff *skb, st
 	struct flowi6 *fl6 = &fl->u.ip6;
 	int onlyproto = 0;
 	const struct ipv6hdr *hdr = ipv6_hdr(skb);
-	u16 offset = sizeof(*hdr);
+	u32 offset = sizeof(*hdr);
 	struct ipv6_opt_hdr *exthdr;
 	const unsigned char *nh = skb_network_header(skb);
 	u16 nhoff = IP6CB(skb)->nhoff;
diff -druNp --no-dereference linux-libre-4.9.109-gnu/net/netfilter/ipvs/ip_vs_ctl.c linux-libre-4.9.110-gnu/net/netfilter/ipvs/ip_vs_ctl.c
--- linux-libre-4.9.109-gnu/net/netfilter/ipvs/ip_vs_ctl.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/net/netfilter/ipvs/ip_vs_ctl.c	2018-06-25 20:08:09.000000000 -0400
@@ -2390,8 +2390,10 @@ do_ip_vs_set_ctl(struct sock *sk, int cm
 			struct ipvs_sync_daemon_cfg cfg;
 
 			memset(&cfg, 0, sizeof(cfg));
-			strlcpy(cfg.mcast_ifn, dm->mcast_ifn,
-				sizeof(cfg.mcast_ifn));
+			ret = -EINVAL;
+			if (strscpy(cfg.mcast_ifn, dm->mcast_ifn,
+				    sizeof(cfg.mcast_ifn)) <= 0)
+				goto out_dec;
 			cfg.syncid = dm->syncid;
 			ret = start_sync_thread(ipvs, &cfg, dm->state);
 		} else {
@@ -2429,12 +2431,19 @@ do_ip_vs_set_ctl(struct sock *sk, int cm
 		}
 	}
 
+	if ((cmd == IP_VS_SO_SET_ADD || cmd == IP_VS_SO_SET_EDIT) &&
+	    strnlen(usvc.sched_name, IP_VS_SCHEDNAME_MAXLEN) ==
+	    IP_VS_SCHEDNAME_MAXLEN) {
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+
 	/* Check for valid protocol: TCP or UDP or SCTP, even for fwmark!=0 */
 	if (usvc.protocol != IPPROTO_TCP && usvc.protocol != IPPROTO_UDP &&
 	    usvc.protocol != IPPROTO_SCTP) {
-		pr_err("set_ctl: invalid protocol: %d %pI4:%d %s\n",
+		pr_err("set_ctl: invalid protocol: %d %pI4:%d\n",
 		       usvc.protocol, &usvc.addr.ip,
-		       ntohs(usvc.port), usvc.sched_name);
+		       ntohs(usvc.port));
 		ret = -EFAULT;
 		goto out_unlock;
 	}
@@ -2863,7 +2872,7 @@ static const struct nla_policy ip_vs_cmd
 static const struct nla_policy ip_vs_daemon_policy[IPVS_DAEMON_ATTR_MAX + 1] = {
 	[IPVS_DAEMON_ATTR_STATE]	= { .type = NLA_U32 },
 	[IPVS_DAEMON_ATTR_MCAST_IFN]	= { .type = NLA_NUL_STRING,
-					    .len = IP_VS_IFNAME_MAXLEN },
+					    .len = IP_VS_IFNAME_MAXLEN - 1 },
 	[IPVS_DAEMON_ATTR_SYNC_ID]	= { .type = NLA_U32 },
 	[IPVS_DAEMON_ATTR_SYNC_MAXLEN]	= { .type = NLA_U16 },
 	[IPVS_DAEMON_ATTR_MCAST_GROUP]	= { .type = NLA_U32 },
@@ -2881,7 +2890,7 @@ static const struct nla_policy ip_vs_svc
 	[IPVS_SVC_ATTR_PORT]		= { .type = NLA_U16 },
 	[IPVS_SVC_ATTR_FWMARK]		= { .type = NLA_U32 },
 	[IPVS_SVC_ATTR_SCHED_NAME]	= { .type = NLA_NUL_STRING,
-					    .len = IP_VS_SCHEDNAME_MAXLEN },
+					    .len = IP_VS_SCHEDNAME_MAXLEN - 1 },
 	[IPVS_SVC_ATTR_PE_NAME]		= { .type = NLA_NUL_STRING,
 					    .len = IP_VS_PENAME_MAXLEN },
 	[IPVS_SVC_ATTR_FLAGS]		= { .type = NLA_BINARY,
diff -druNp --no-dereference linux-libre-4.9.109-gnu/net/sched/act_simple.c linux-libre-4.9.110-gnu/net/sched/act_simple.c
--- linux-libre-4.9.109-gnu/net/sched/act_simple.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/net/sched/act_simple.c	2018-06-25 20:08:09.000000000 -0400
@@ -55,22 +55,22 @@ static void tcf_simp_release(struct tc_a
 	kfree(d->tcfd_defdata);
 }
 
-static int alloc_defdata(struct tcf_defact *d, char *defdata)
+static int alloc_defdata(struct tcf_defact *d, const struct nlattr *defdata)
 {
 	d->tcfd_defdata = kzalloc(SIMP_MAX_DATA, GFP_KERNEL);
 	if (unlikely(!d->tcfd_defdata))
 		return -ENOMEM;
-	strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
+	nla_strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
 	return 0;
 }
 
-static void reset_policy(struct tcf_defact *d, char *defdata,
+static void reset_policy(struct tcf_defact *d, const struct nlattr *defdata,
 			 struct tc_defact *p)
 {
 	spin_lock_bh(&d->tcf_lock);
 	d->tcf_action = p->action;
 	memset(d->tcfd_defdata, 0, SIMP_MAX_DATA);
-	strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
+	nla_strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
 	spin_unlock_bh(&d->tcf_lock);
 }
 
@@ -89,7 +89,6 @@ static int tcf_simp_init(struct net *net
 	struct tcf_defact *d;
 	bool exists = false;
 	int ret = 0, err;
-	char *defdata;
 
 	if (nla == NULL)
 		return -EINVAL;
@@ -112,8 +111,6 @@ static int tcf_simp_init(struct net *net
 		return -EINVAL;
 	}
 
-	defdata = nla_data(tb[TCA_DEF_DATA]);
-
 	if (!exists) {
 		ret = tcf_hash_create(tn, parm->index, est, a,
 				      &act_simp_ops, bind, false);
@@ -121,7 +118,7 @@ static int tcf_simp_init(struct net *net
 			return ret;
 
 		d = to_defact(*a);
-		ret = alloc_defdata(d, defdata);
+		ret = alloc_defdata(d, tb[TCA_DEF_DATA]);
 		if (ret < 0) {
 			tcf_hash_cleanup(*a, est);
 			return ret;
@@ -135,7 +132,7 @@ static int tcf_simp_init(struct net *net
 		if (!ovr)
 			return -EEXIST;
 
-		reset_policy(d, defdata, parm);
+		reset_policy(d, tb[TCA_DEF_DATA], parm);
 	}
 
 	if (ret == ACT_P_CREATED)
diff -druNp --no-dereference linux-libre-4.9.109-gnu/sound/pci/hda/hda_controller.c linux-libre-4.9.110-gnu/sound/pci/hda/hda_controller.c
--- linux-libre-4.9.109-gnu/sound/pci/hda/hda_controller.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/sound/pci/hda/hda_controller.c	2018-06-25 20:08:09.000000000 -0400
@@ -748,8 +748,10 @@ int snd_hda_attach_pcm_stream(struct hda
 		return err;
 	strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
 	apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
-	if (apcm == NULL)
+	if (apcm == NULL) {
+		snd_device_free(chip->card, pcm);
 		return -ENOMEM;
+	}
 	apcm->chip = chip;
 	apcm->pcm = pcm;
 	apcm->codec = codec;
diff -druNp --no-dereference linux-libre-4.9.109-gnu/sound/pci/hda/patch_conexant.c linux-libre-4.9.110-gnu/sound/pci/hda/patch_conexant.c
--- linux-libre-4.9.109-gnu/sound/pci/hda/patch_conexant.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/sound/pci/hda/patch_conexant.c	2018-06-25 20:08:09.000000000 -0400
@@ -851,6 +851,8 @@ static const struct snd_pci_quirk cxt506
 	SND_PCI_QUIRK(0x103c, 0x8079, "HP EliteBook 840 G3", CXT_FIXUP_HP_DOCK),
 	SND_PCI_QUIRK(0x103c, 0x807C, "HP EliteBook 820 G3", CXT_FIXUP_HP_DOCK),
 	SND_PCI_QUIRK(0x103c, 0x80FD, "HP ProBook 640 G2", CXT_FIXUP_HP_DOCK),
+	SND_PCI_QUIRK(0x103c, 0x83b3, "HP EliteBook 830 G5", CXT_FIXUP_HP_DOCK),
+	SND_PCI_QUIRK(0x103c, 0x83d3, "HP ProBook 640 G4", CXT_FIXUP_HP_DOCK),
 	SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE),
 	SND_PCI_QUIRK(0x103c, 0x8115, "HP Z1 Gen3", CXT_FIXUP_HP_GATE_MIC),
 	SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN),
diff -druNp --no-dereference linux-libre-4.9.109-gnu/sound/pci/hda/patch_realtek.c linux-libre-4.9.110-gnu/sound/pci/hda/patch_realtek.c
--- linux-libre-4.9.109-gnu/sound/pci/hda/patch_realtek.c	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/sound/pci/hda/patch_realtek.c	2018-06-25 20:08:09.000000000 -0400
@@ -333,6 +333,7 @@ static void alc_fill_eapd_coef(struct hd
 	case 0x10ec0236:
 	case 0x10ec0255:
 	case 0x10ec0256:
+	case 0x10ec0257:
 	case 0x10ec0282:
 	case 0x10ec0283:
 	case 0x10ec0286:
@@ -2663,6 +2664,7 @@ enum {
 	ALC269_TYPE_ALC298,
 	ALC269_TYPE_ALC255,
 	ALC269_TYPE_ALC256,
+	ALC269_TYPE_ALC257,
 	ALC269_TYPE_ALC225,
 	ALC269_TYPE_ALC294,
 	ALC269_TYPE_ALC700,
@@ -2695,6 +2697,7 @@ static int alc269_parse_auto_config(stru
 	case ALC269_TYPE_ALC298:
 	case ALC269_TYPE_ALC255:
 	case ALC269_TYPE_ALC256:
+	case ALC269_TYPE_ALC257:
 	case ALC269_TYPE_ALC225:
 	case ALC269_TYPE_ALC294:
 	case ALC269_TYPE_ALC700:
@@ -6375,6 +6378,10 @@ static int patch_alc269(struct hda_codec
 		spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */
 		alc_update_coef_idx(codec, 0x36, 1 << 13, 1 << 5); /* Switch pcbeep path to Line in path*/
 		break;
+	case 0x10ec0257:
+		spec->codec_variant = ALC269_TYPE_ALC257;
+		spec->gen.mixer_nid = 0;
+		break;
 	case 0x10ec0225:
 	case 0x10ec0295:
 	case 0x10ec0299:
@@ -7361,6 +7368,7 @@ static const struct hda_device_id snd_hd
 	HDA_CODEC_ENTRY(0x10ec0236, "ALC236", patch_alc269),
 	HDA_CODEC_ENTRY(0x10ec0255, "ALC255", patch_alc269),
 	HDA_CODEC_ENTRY(0x10ec0256, "ALC256", patch_alc269),
+	HDA_CODEC_ENTRY(0x10ec0257, "ALC257", patch_alc269),
 	HDA_CODEC_ENTRY(0x10ec0260, "ALC260", patch_alc260),
 	HDA_CODEC_ENTRY(0x10ec0262, "ALC262", patch_alc262),
 	HDA_CODEC_ENTRY(0x10ec0267, "ALC267", patch_alc268),
diff -druNp --no-dereference linux-libre-4.9.109-gnu/tools/objtool/.gitignore linux-libre-4.9.110-gnu/tools/objtool/.gitignore
--- linux-libre-4.9.109-gnu/tools/objtool/.gitignore	2018-06-16 03:52:35.000000000 -0400
+++ linux-libre-4.9.110-gnu/tools/objtool/.gitignore	2018-06-25 20:08:09.000000000 -0400
@@ -1,3 +1,3 @@
-arch/x86/insn/inat-tables.c
+arch/x86/lib/inat-tables.c
 objtool
 fixdep
