diff --git linux-libre-4.19.308-gnu1/Makefile linux-libre-4.19.309-gnu1/Makefile
index b278ac53603c..02c56f347e2d 100644
--- linux-libre-4.19.308-gnu1/Makefile
+++ linux-libre-4.19.309-gnu1/Makefile
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 4
 PATCHLEVEL = 19
-SUBLEVEL = 308
+SUBLEVEL = 309
 EXTRAVERSION = -gnu1
 NAME = "People's Front"
 
diff --git linux-libre-4.19.308-gnu1/drivers/firmware/efi/capsule-loader.c linux-libre-4.19.309-gnu1/drivers/firmware/efi/capsule-loader.c
index 94aae1e67c99..43fefab75524 100644
--- linux-libre-4.19.308-gnu1/drivers/firmware/efi/capsule-loader.c
+++ linux-libre-4.19.309-gnu1/drivers/firmware/efi/capsule-loader.c
@@ -293,7 +293,7 @@ static int efi_capsule_open(struct inode *inode, struct file *file)
 		return -ENOMEM;
 	}
 
-	cap_info->phys = kzalloc(sizeof(void *), GFP_KERNEL);
+	cap_info->phys = kzalloc(sizeof(phys_addr_t), GFP_KERNEL);
 	if (!cap_info->phys) {
 		kfree(cap_info->pages);
 		kfree(cap_info);
diff --git linux-libre-4.19.308-gnu1/drivers/gpio/gpio-74x164.c linux-libre-4.19.309-gnu1/drivers/gpio/gpio-74x164.c
index fb7b620763a2..a47897f2a83d 100644
--- linux-libre-4.19.308-gnu1/drivers/gpio/gpio-74x164.c
+++ linux-libre-4.19.309-gnu1/drivers/gpio/gpio-74x164.c
@@ -132,8 +132,6 @@ static int gen_74x164_probe(struct spi_device *spi)
 	if (IS_ERR(chip->gpiod_oe))
 		return PTR_ERR(chip->gpiod_oe);
 
-	gpiod_set_value_cansleep(chip->gpiod_oe, 1);
-
 	spi_set_drvdata(spi, chip);
 
 	chip->gpio_chip.label = spi->modalias;
@@ -158,6 +156,8 @@ static int gen_74x164_probe(struct spi_device *spi)
 		goto exit_destroy;
 	}
 
+	gpiod_set_value_cansleep(chip->gpiod_oe, 1);
+
 	ret = gpiochip_add_data(&chip->gpio_chip, chip);
 	if (!ret)
 		return 0;
diff --git linux-libre-4.19.308-gnu1/drivers/mmc/core/mmc.c linux-libre-4.19.309-gnu1/drivers/mmc/core/mmc.c
index 745a4b07faff..2f1d615eb83a 100644
--- linux-libre-4.19.308-gnu1/drivers/mmc/core/mmc.c
+++ linux-libre-4.19.309-gnu1/drivers/mmc/core/mmc.c
@@ -994,10 +994,12 @@ static int mmc_select_bus_width(struct mmc_card *card)
 	static unsigned ext_csd_bits[] = {
 		EXT_CSD_BUS_WIDTH_8,
 		EXT_CSD_BUS_WIDTH_4,
+		EXT_CSD_BUS_WIDTH_1,
 	};
 	static unsigned bus_widths[] = {
 		MMC_BUS_WIDTH_8,
 		MMC_BUS_WIDTH_4,
+		MMC_BUS_WIDTH_1,
 	};
 	struct mmc_host *host = card->host;
 	unsigned idx, bus_width = 0;
diff --git linux-libre-4.19.308-gnu1/drivers/net/gtp.c linux-libre-4.19.309-gnu1/drivers/net/gtp.c
index a8664d181aa0..3f4e20a9ce9a 100644
--- linux-libre-4.19.308-gnu1/drivers/net/gtp.c
+++ linux-libre-4.19.309-gnu1/drivers/net/gtp.c
@@ -1381,26 +1381,26 @@ static int __init gtp_init(void)
 
 	get_random_bytes(&gtp_h_initval, sizeof(gtp_h_initval));
 
-	err = rtnl_link_register(&gtp_link_ops);
+	err = register_pernet_subsys(&gtp_net_ops);
 	if (err < 0)
 		goto error_out;
 
-	err = register_pernet_subsys(&gtp_net_ops);
+	err = rtnl_link_register(&gtp_link_ops);
 	if (err < 0)
-		goto unreg_rtnl_link;
+		goto unreg_pernet_subsys;
 
 	err = genl_register_family(&gtp_genl_family);
 	if (err < 0)
-		goto unreg_pernet_subsys;
+		goto unreg_rtnl_link;
 
 	pr_info("GTP module loaded (pdp ctx size %zd bytes)\n",
 		sizeof(struct pdp_ctx));
 	return 0;
 
-unreg_pernet_subsys:
-	unregister_pernet_subsys(&gtp_net_ops);
 unreg_rtnl_link:
 	rtnl_link_unregister(&gtp_link_ops);
+unreg_pernet_subsys:
+	unregister_pernet_subsys(&gtp_net_ops);
 error_out:
 	pr_err("error loading GTP module loaded\n");
 	return err;
diff --git linux-libre-4.19.308-gnu1/drivers/net/tun.c linux-libre-4.19.309-gnu1/drivers/net/tun.c
index 055664a26f7a..625525275539 100644
--- linux-libre-4.19.308-gnu1/drivers/net/tun.c
+++ linux-libre-4.19.309-gnu1/drivers/net/tun.c
@@ -729,6 +729,7 @@ static void __tun_detach(struct tun_file *tfile, bool clean)
 				   tun->tfiles[tun->numqueues - 1]);
 		ntfile = rtnl_dereference(tun->tfiles[index]);
 		ntfile->queue_index = index;
+		ntfile->xdp_rxq.queue_index = index;
 		rcu_assign_pointer(tun->tfiles[tun->numqueues - 1],
 				   NULL);
 
diff --git linux-libre-4.19.308-gnu1/drivers/net/usb/dm9601.c linux-libre-4.19.309-gnu1/drivers/net/usb/dm9601.c
index 5aad26600b03..9b7db5fd9e08 100644
--- linux-libre-4.19.308-gnu1/drivers/net/usb/dm9601.c
+++ linux-libre-4.19.309-gnu1/drivers/net/usb/dm9601.c
@@ -231,7 +231,7 @@ static int dm9601_mdio_read(struct net_device *netdev, int phy_id, int loc)
 	err = dm_read_shared_word(dev, 1, loc, &res);
 	if (err < 0) {
 		netdev_err(dev->net, "MDIO read error: %d\n", err);
-		return err;
+		return 0;
 	}
 
 	netdev_dbg(dev->net,
diff --git linux-libre-4.19.308-gnu1/drivers/net/usb/lan78xx.c linux-libre-4.19.309-gnu1/drivers/net/usb/lan78xx.c
index a44968d5cac4..c0fff40a98bb 100644
--- linux-libre-4.19.308-gnu1/drivers/net/usb/lan78xx.c
+++ linux-libre-4.19.309-gnu1/drivers/net/usb/lan78xx.c
@@ -2581,7 +2581,8 @@ static int lan78xx_reset(struct lan78xx_net *dev)
 	if (dev->chipid == ID_REV_CHIP_ID_7801_)
 		buf &= ~MAC_CR_GMII_EN_;
 
-	if (dev->chipid == ID_REV_CHIP_ID_7800_) {
+	if (dev->chipid == ID_REV_CHIP_ID_7800_ ||
+	    dev->chipid == ID_REV_CHIP_ID_7850_) {
 		ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig);
 		if (!ret && sig != EEPROM_INDICATOR) {
 			/* Implies there is no external eeprom. Set mac speed */
diff --git linux-libre-4.19.308-gnu1/drivers/power/supply/bq27xxx_battery_i2c.c linux-libre-4.19.309-gnu1/drivers/power/supply/bq27xxx_battery_i2c.c
index 0fbc221ee50e..f5870b349309 100644
--- linux-libre-4.19.308-gnu1/drivers/power/supply/bq27xxx_battery_i2c.c
+++ linux-libre-4.19.309-gnu1/drivers/power/supply/bq27xxx_battery_i2c.c
@@ -217,7 +217,9 @@ static int bq27xxx_battery_i2c_remove(struct i2c_client *client)
 {
 	struct bq27xxx_device_info *di = i2c_get_clientdata(client);
 
-	free_irq(client->irq, di);
+	if (client->irq)
+		free_irq(client->irq, di);
+
 	bq27xxx_battery_teardown(di);
 
 	mutex_lock(&battery_mutex);
diff --git linux-libre-4.19.308-gnu1/fs/btrfs/dev-replace.c linux-libre-4.19.309-gnu1/fs/btrfs/dev-replace.c
index 4d1d2657d70c..7cf4d5aaa4e8 100644
--- linux-libre-4.19.308-gnu1/fs/btrfs/dev-replace.c
+++ linux-libre-4.19.309-gnu1/fs/btrfs/dev-replace.c
@@ -535,6 +535,23 @@ leave:
 	return ret;
 }
 
+static int btrfs_check_replace_dev_names(struct btrfs_ioctl_dev_replace_args *args)
+{
+	if (args->start.srcdevid == 0) {
+		if (memchr(args->start.srcdev_name, 0,
+			   sizeof(args->start.srcdev_name)) == NULL)
+			return -ENAMETOOLONG;
+	} else {
+		args->start.srcdev_name[0] = 0;
+	}
+
+	if (memchr(args->start.tgtdev_name, 0,
+		   sizeof(args->start.tgtdev_name)) == NULL)
+	    return -ENAMETOOLONG;
+
+	return 0;
+}
+
 int btrfs_dev_replace_by_ioctl(struct btrfs_fs_info *fs_info,
 			    struct btrfs_ioctl_dev_replace_args *args)
 {
@@ -547,10 +564,9 @@ int btrfs_dev_replace_by_ioctl(struct btrfs_fs_info *fs_info,
 	default:
 		return -EINVAL;
 	}
-
-	if ((args->start.srcdevid == 0 && args->start.srcdev_name[0] == '\0') ||
-	    args->start.tgtdev_name[0] == '\0')
-		return -EINVAL;
+	ret = btrfs_check_replace_dev_names(args);
+	if (ret < 0)
+		return ret;
 
 	ret = btrfs_dev_replace_start(fs_info, args->start.tgtdev_name,
 					args->start.srcdevid,
diff --git linux-libre-4.19.308-gnu1/fs/cachefiles/bind.c linux-libre-4.19.309-gnu1/fs/cachefiles/bind.c
index 4a717d400807..9b34d46bf8ee 100644
--- linux-libre-4.19.308-gnu1/fs/cachefiles/bind.c
+++ linux-libre-4.19.309-gnu1/fs/cachefiles/bind.c
@@ -249,6 +249,8 @@ error_open_root:
 	kmem_cache_free(cachefiles_object_jar, fsdef);
 error_root_object:
 	cachefiles_end_secure(cache, saved_cred);
+	put_cred(cache->cache_cred);
+	cache->cache_cred = NULL;
 	pr_err("Failed to register: %d\n", ret);
 	return ret;
 }
@@ -269,6 +271,7 @@ void cachefiles_daemon_unbind(struct cachefiles_cache *cache)
 
 	dput(cache->graveyard);
 	mntput(cache->mnt);
+	put_cred(cache->cache_cred);
 
 	kfree(cache->rootdirname);
 	kfree(cache->secctx);
diff --git linux-libre-4.19.308-gnu1/net/bluetooth/hci_core.c linux-libre-4.19.309-gnu1/net/bluetooth/hci_core.c
index 4d89e38dceec..f455a503f5b0 100644
--- linux-libre-4.19.308-gnu1/net/bluetooth/hci_core.c
+++ linux-libre-4.19.309-gnu1/net/bluetooth/hci_core.c
@@ -2217,6 +2217,7 @@ static void hci_error_reset(struct work_struct *work)
 {
 	struct hci_dev *hdev = container_of(work, struct hci_dev, error_reset);
 
+	hci_dev_hold(hdev);
 	BT_DBG("%s", hdev->name);
 
 	if (hdev->hw_error)
@@ -2224,10 +2225,10 @@ static void hci_error_reset(struct work_struct *work)
 	else
 		bt_dev_err(hdev, "hardware error 0x%2.2x", hdev->hw_error_code);
 
-	if (hci_dev_do_close(hdev))
-		return;
+	if (!hci_dev_do_close(hdev))
+		hci_dev_do_open(hdev);
 
-	hci_dev_do_open(hdev);
+	hci_dev_put(hdev);
 }
 
 void hci_uuids_clear(struct hci_dev *hdev)
diff --git linux-libre-4.19.308-gnu1/net/bluetooth/hci_event.c linux-libre-4.19.309-gnu1/net/bluetooth/hci_event.c
index 9d01874e6b93..481185525926 100644
--- linux-libre-4.19.308-gnu1/net/bluetooth/hci_event.c
+++ linux-libre-4.19.309-gnu1/net/bluetooth/hci_event.c
@@ -4337,9 +4337,12 @@ static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
 	hci_dev_lock(hdev);
 
 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
-	if (!conn || !hci_conn_ssp_enabled(conn))
+	if (!conn || !hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
 		goto unlock;
 
+	/* Assume remote supports SSP since it has triggered this event */
+	set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
+
 	hci_conn_hold(conn);
 
 	if (!hci_dev_test_flag(hdev, HCI_MGMT))
@@ -5638,6 +5641,10 @@ static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev,
 		return send_conn_param_neg_reply(hdev, handle,
 						 HCI_ERROR_UNKNOWN_CONN_ID);
 
+	if (max > hcon->le_conn_max_interval)
+		return send_conn_param_neg_reply(hdev, handle,
+						 HCI_ERROR_INVALID_LL_PARAMS);
+
 	if (hci_check_conn_params(min, max, latency, timeout))
 		return send_conn_param_neg_reply(hdev, handle,
 						 HCI_ERROR_INVALID_LL_PARAMS);
diff --git linux-libre-4.19.308-gnu1/net/bluetooth/l2cap_core.c linux-libre-4.19.309-gnu1/net/bluetooth/l2cap_core.c
index 9346fae5d664..b6c726976d1b 100644
--- linux-libre-4.19.308-gnu1/net/bluetooth/l2cap_core.c
+++ linux-libre-4.19.309-gnu1/net/bluetooth/l2cap_core.c
@@ -5313,7 +5313,13 @@ static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
 
 	memset(&rsp, 0, sizeof(rsp));
 
-	err = hci_check_conn_params(min, max, latency, to_multiplier);
+	if (max > hcon->le_conn_max_interval) {
+		BT_DBG("requested connection interval exceeds current bounds.");
+		err = -EINVAL;
+	} else {
+		err = hci_check_conn_params(min, max, latency, to_multiplier);
+	}
+
 	if (err)
 		rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
 	else
diff --git linux-libre-4.19.308-gnu1/net/netlink/af_netlink.c linux-libre-4.19.309-gnu1/net/netlink/af_netlink.c
index 72936d154c96..1fe9b4a04b22 100644
--- linux-libre-4.19.308-gnu1/net/netlink/af_netlink.c
+++ linux-libre-4.19.309-gnu1/net/netlink/af_netlink.c
@@ -160,7 +160,7 @@ static inline u32 netlink_group_mask(u32 group)
 static struct sk_buff *netlink_to_full_skb(const struct sk_buff *skb,
 					   gfp_t gfp_mask)
 {
-	unsigned int len = skb_end_offset(skb);
+	unsigned int len = skb->len;
 	struct sk_buff *new;
 
 	new = alloc_skb(len, gfp_mask);
diff --git linux-libre-4.19.308-gnu1/net/wireless/nl80211.c linux-libre-4.19.309-gnu1/net/wireless/nl80211.c
index f79700e5d801..df2989c35fd8 100644
--- linux-libre-4.19.308-gnu1/net/wireless/nl80211.c
+++ linux-libre-4.19.309-gnu1/net/wireless/nl80211.c
@@ -3174,6 +3174,8 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
 
 		if (ntype != NL80211_IFTYPE_MESH_POINT)
 			return -EINVAL;
+		if (otype != NL80211_IFTYPE_MESH_POINT)
+			return -EINVAL;
 		if (netif_running(dev))
 			return -EBUSY;
 
diff --git linux-libre-4.19.308-gnu1/sound/core/Makefile linux-libre-4.19.309-gnu1/sound/core/Makefile
index d123587c0fd8..bc04acf4a45c 100644
--- linux-libre-4.19.308-gnu1/sound/core/Makefile
+++ linux-libre-4.19.309-gnu1/sound/core/Makefile
@@ -32,7 +32,6 @@ snd-pcm-dmaengine-objs := pcm_dmaengine.o
 snd-rawmidi-objs  := rawmidi.o
 snd-timer-objs    := timer.o
 snd-hrtimer-objs  := hrtimer.o
-snd-rtctimer-objs := rtctimer.o
 snd-hwdep-objs    := hwdep.o
 snd-seq-device-objs := seq_device.o
 
