diff --git linux-libre-4.4.265-gnu/Makefile linux-libre-4.4.266-gnu/Makefile
index 734a3aa27dc4..5fb9dd4250e0 100644
--- linux-libre-4.4.265-gnu/Makefile
+++ linux-libre-4.4.266-gnu/Makefile
@@ -1,6 +1,6 @@
 VERSION = 4
 PATCHLEVEL = 4
-SUBLEVEL = 265
+SUBLEVEL = 266
 EXTRAVERSION = -gnu
 NAME = Blurry Fish Butt
 
diff --git linux-libre-4.4.265-gnu/arch/ia64/kernel/mca.c linux-libre-4.4.266-gnu/arch/ia64/kernel/mca.c
index 2889412e03eb..0d5b64ddcdd1 100644
--- linux-libre-4.4.265-gnu/arch/ia64/kernel/mca.c
+++ linux-libre-4.4.266-gnu/arch/ia64/kernel/mca.c
@@ -1858,7 +1858,7 @@ ia64_mca_cpu_init(void *cpu_data)
 			data = mca_bootmem();
 			first_time = 0;
 		} else
-			data = (void *)__get_free_pages(GFP_KERNEL,
+			data = (void *)__get_free_pages(GFP_ATOMIC,
 							get_order(sz));
 		if (!data)
 			panic("Could not allocate MCA memory for cpu %d\n",
diff --git linux-libre-4.4.265-gnu/arch/x86/Makefile linux-libre-4.4.266-gnu/arch/x86/Makefile
index 5fece9334f12..2b3adb3008c3 100644
--- linux-libre-4.4.265-gnu/arch/x86/Makefile
+++ linux-libre-4.4.266-gnu/arch/x86/Makefile
@@ -34,7 +34,7 @@ REALMODE_CFLAGS	:= $(M16_CFLAGS) -g -Os -D__KERNEL__ \
 		   -DDISABLE_BRANCH_PROFILING \
 		   -Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
 		   -fno-strict-aliasing -fomit-frame-pointer -fno-pic \
-		   -mno-mmx -mno-sse
+		   -mno-mmx -mno-sse $(call cc-option,-fcf-protection=none)
 
 REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -ffreestanding)
 REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -fno-stack-protector)
diff --git linux-libre-4.4.265-gnu/arch/x86/net/bpf_jit_comp.c linux-libre-4.4.266-gnu/arch/x86/net/bpf_jit_comp.c
index bea13c35979e..82f8cd0a3af9 100644
--- linux-libre-4.4.265-gnu/arch/x86/net/bpf_jit_comp.c
+++ linux-libre-4.4.266-gnu/arch/x86/net/bpf_jit_comp.c
@@ -1038,7 +1038,16 @@ common_load:
 		}
 
 		if (image) {
-			if (unlikely(proglen + ilen > oldproglen)) {
+			/*
+			 * When populating the image, assert that:
+			 *
+			 *  i) We do not write beyond the allocated space, and
+			 * ii) addrs[i] did not change from the prior run, in order
+			 *     to validate assumptions made for computing branch
+			 *     displacements.
+			 */
+			if (unlikely(proglen + ilen > oldproglen ||
+				     proglen + ilen != addrs[i])) {
 				pr_err("bpf_jit_compile fatal error\n");
 				return -EFAULT;
 			}
diff --git linux-libre-4.4.265-gnu/drivers/isdn/hardware/mISDN/mISDNipac.c linux-libre-4.4.266-gnu/drivers/isdn/hardware/mISDN/mISDNipac.c
index cb428b9ee441..b4639b0aab3c 100644
--- linux-libre-4.4.265-gnu/drivers/isdn/hardware/mISDN/mISDNipac.c
+++ linux-libre-4.4.266-gnu/drivers/isdn/hardware/mISDN/mISDNipac.c
@@ -709,7 +709,7 @@ isac_release(struct isac_hw *isac)
 {
 	if (isac->type & IPAC_TYPE_ISACX)
 		WriteISAC(isac, ISACX_MASK, 0xff);
-	else
+	else if (isac->type != 0)
 		WriteISAC(isac, ISAC_MASK, 0xff);
 	if (isac->dch.timer.function != NULL) {
 		del_timer(&isac->dch.timer);
diff --git linux-libre-4.4.265-gnu/drivers/mtd/nand/diskonchip.c linux-libre-4.4.266-gnu/drivers/mtd/nand/diskonchip.c
index 0802158a3f75..557fcf1c21fe 100644
--- linux-libre-4.4.265-gnu/drivers/mtd/nand/diskonchip.c
+++ linux-libre-4.4.266-gnu/drivers/mtd/nand/diskonchip.c
@@ -1608,13 +1608,10 @@ static int __init doc_probe(unsigned long physadr)
 		numchips = doc2001_init(mtd);
 
 	if ((ret = nand_scan(mtd, numchips)) || (ret = doc->late_init(mtd))) {
-		/* DBB note: i believe nand_release is necessary here, as
+		/* DBB note: i believe nand_cleanup is necessary here, as
 		   buffers may have been allocated in nand_base.  Check with
 		   Thomas. FIX ME! */
-		/* nand_release will call mtd_device_unregister, but we
-		   haven't yet added it.  This is handled without incident by
-		   mtd_device_unregister, as far as I can tell. */
-		nand_release(mtd);
+		nand_cleanup(nand);
 		kfree(mtd);
 		goto fail;
 	}
diff --git linux-libre-4.4.265-gnu/drivers/mtd/nand/orion_nand.c linux-libre-4.4.266-gnu/drivers/mtd/nand/orion_nand.c
index ee83749fb1d3..7b4278d50b45 100644
--- linux-libre-4.4.265-gnu/drivers/mtd/nand/orion_nand.c
+++ linux-libre-4.4.266-gnu/drivers/mtd/nand/orion_nand.c
@@ -165,7 +165,7 @@ static int __init orion_nand_probe(struct platform_device *pdev)
 	ret = mtd_device_parse_register(mtd, NULL, &ppdata,
 			board->parts, board->nr_parts);
 	if (ret) {
-		nand_release(mtd);
+		nand_cleanup(nc);
 		goto no_dev;
 	}
 
diff --git linux-libre-4.4.265-gnu/drivers/mtd/nand/pasemi_nand.c linux-libre-4.4.266-gnu/drivers/mtd/nand/pasemi_nand.c
index 83cf021b9651..8d289a882ca7 100644
--- linux-libre-4.4.265-gnu/drivers/mtd/nand/pasemi_nand.c
+++ linux-libre-4.4.266-gnu/drivers/mtd/nand/pasemi_nand.c
@@ -167,7 +167,7 @@ static int pasemi_nand_probe(struct platform_device *ofdev)
 	if (mtd_device_register(pasemi_nand_mtd, NULL, 0)) {
 		printk(KERN_ERR "pasemi_nand: Unable to register MTD device\n");
 		err = -ENODEV;
-		goto out_lpc;
+		goto out_cleanup_nand;
 	}
 
 	printk(KERN_INFO "PA Semi NAND flash at %08llx, control at I/O %x\n",
@@ -175,6 +175,8 @@ static int pasemi_nand_probe(struct platform_device *ofdev)
 
 	return 0;
 
+ out_cleanup_nand:
+	nand_cleanup(chip);
  out_lpc:
 	release_region(lpcctl, 4);
  out_ior:
diff --git linux-libre-4.4.265-gnu/drivers/mtd/nand/plat_nand.c linux-libre-4.4.266-gnu/drivers/mtd/nand/plat_nand.c
index 65b9dbbe6d6a..89c4a19b1740 100644
--- linux-libre-4.4.265-gnu/drivers/mtd/nand/plat_nand.c
+++ linux-libre-4.4.266-gnu/drivers/mtd/nand/plat_nand.c
@@ -102,7 +102,7 @@ static int plat_nand_probe(struct platform_device *pdev)
 	if (!err)
 		return err;
 
-	nand_release(&data->mtd);
+	nand_cleanup(&data->chip);
 out:
 	if (pdata->ctrl.remove)
 		pdata->ctrl.remove(pdev);
diff --git linux-libre-4.4.265-gnu/drivers/mtd/nand/sharpsl.c linux-libre-4.4.266-gnu/drivers/mtd/nand/sharpsl.c
index 082b6009736d..42b2a8d90d33 100644
--- linux-libre-4.4.265-gnu/drivers/mtd/nand/sharpsl.c
+++ linux-libre-4.4.266-gnu/drivers/mtd/nand/sharpsl.c
@@ -189,7 +189,7 @@ static int sharpsl_nand_probe(struct platform_device *pdev)
 	return 0;
 
 err_add:
-	nand_release(&sharpsl->mtd);
+	nand_cleanup(this);
 
 err_scan:
 	iounmap(sharpsl->io);
diff --git linux-libre-4.4.265-gnu/drivers/mtd/nand/socrates_nand.c linux-libre-4.4.266-gnu/drivers/mtd/nand/socrates_nand.c
index b94f53427f0f..8775111837f4 100644
--- linux-libre-4.4.265-gnu/drivers/mtd/nand/socrates_nand.c
+++ linux-libre-4.4.266-gnu/drivers/mtd/nand/socrates_nand.c
@@ -204,7 +204,7 @@ static int socrates_nand_probe(struct platform_device *ofdev)
 	if (!res)
 		return res;
 
-	nand_release(mtd);
+	nand_cleanup(nand_chip);
 
 out:
 	iounmap(host->io_base);
diff --git linux-libre-4.4.265-gnu/drivers/mtd/nand/tmio_nand.c linux-libre-4.4.266-gnu/drivers/mtd/nand/tmio_nand.c
index befddf0776e4..d8c6c09917ad 100644
--- linux-libre-4.4.265-gnu/drivers/mtd/nand/tmio_nand.c
+++ linux-libre-4.4.266-gnu/drivers/mtd/nand/tmio_nand.c
@@ -445,7 +445,7 @@ static int tmio_probe(struct platform_device *dev)
 	if (!retval)
 		return retval;
 
-	nand_release(mtd);
+	nand_cleanup(nand_chip);
 
 err_irq:
 	tmio_hw_stop(dev, tmio);
diff --git linux-libre-4.4.265-gnu/drivers/net/can/flexcan.c linux-libre-4.4.266-gnu/drivers/net/can/flexcan.c
index b18bb0334ded..dcad5213eb34 100644
--- linux-libre-4.4.265-gnu/drivers/net/can/flexcan.c
+++ linux-libre-4.4.266-gnu/drivers/net/can/flexcan.c
@@ -379,9 +379,15 @@ static int flexcan_chip_disable(struct flexcan_priv *priv)
 static int flexcan_chip_freeze(struct flexcan_priv *priv)
 {
 	struct flexcan_regs __iomem *regs = priv->regs;
-	unsigned int timeout = 1000 * 1000 * 10 / priv->can.bittiming.bitrate;
+	unsigned int timeout;
+	u32 bitrate = priv->can.bittiming.bitrate;
 	u32 reg;
 
+	if (bitrate)
+		timeout = 1000 * 1000 * 10 / bitrate;
+	else
+		timeout = FLEXCAN_TIMEOUT_US / 10;
+
 	reg = flexcan_read(&regs->mcr);
 	reg |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_HALT;
 	flexcan_write(reg, &regs->mcr);
diff --git linux-libre-4.4.265-gnu/drivers/net/ethernet/marvell/pxa168_eth.c linux-libre-4.4.266-gnu/drivers/net/ethernet/marvell/pxa168_eth.c
index 7ace07dad6a3..9986f88618bd 100644
--- linux-libre-4.4.265-gnu/drivers/net/ethernet/marvell/pxa168_eth.c
+++ linux-libre-4.4.266-gnu/drivers/net/ethernet/marvell/pxa168_eth.c
@@ -1577,8 +1577,8 @@ static int pxa168_eth_remove(struct platform_device *pdev)
 
 	mdiobus_unregister(pep->smi_bus);
 	mdiobus_free(pep->smi_bus);
-	unregister_netdev(dev);
 	cancel_work_sync(&pep->tx_timeout_task);
+	unregister_netdev(dev);
 	free_netdev(dev);
 	return 0;
 }
diff --git linux-libre-4.4.265-gnu/fs/cifs/file.c linux-libre-4.4.266-gnu/fs/cifs/file.c
index b5a05092f862..5bc617cb7721 100644
--- linux-libre-4.4.265-gnu/fs/cifs/file.c
+++ linux-libre-4.4.266-gnu/fs/cifs/file.c
@@ -163,6 +163,7 @@ int cifs_posix_open(char *full_path, struct inode **pinode,
 			goto posix_open_ret;
 		}
 	} else {
+		cifs_revalidate_mapping(*pinode);
 		cifs_fattr_to_inode(*pinode, &fattr);
 	}
 
diff --git linux-libre-4.4.265-gnu/fs/cifs/smb2misc.c linux-libre-4.4.266-gnu/fs/cifs/smb2misc.c
index 44198b9a5315..19baeb4ca511 100644
--- linux-libre-4.4.265-gnu/fs/cifs/smb2misc.c
+++ linux-libre-4.4.266-gnu/fs/cifs/smb2misc.c
@@ -633,8 +633,8 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
 		}
 	}
 	spin_unlock(&cifs_tcp_ses_lock);
-	cifs_dbg(FYI, "Can not process oplock break for non-existent connection\n");
-	return false;
+	cifs_dbg(FYI, "No file id matched, oplock break ignored\n");
+	return true;
 }
 
 void
diff --git linux-libre-4.4.265-gnu/init/Kconfig linux-libre-4.4.266-gnu/init/Kconfig
index 5d8ada360ca3..9200c0ef2f1f 100644
--- linux-libre-4.4.265-gnu/init/Kconfig
+++ linux-libre-4.4.266-gnu/init/Kconfig
@@ -65,7 +65,7 @@ config CROSS_COMPILE
 
 config COMPILE_TEST
 	bool "Compile also drivers which will not load"
-	default n
+	depends on HAS_IOMEM
 	help
 	  Some drivers can be compiled on a different platform than they are
 	  intended to be run on. Despite they cannot be loaded there (or even
diff --git linux-libre-4.4.265-gnu/kernel/trace/trace.c linux-libre-4.4.266-gnu/kernel/trace/trace.c
index ca8c8bdc1143..8822ae65a506 100644
--- linux-libre-4.4.265-gnu/kernel/trace/trace.c
+++ linux-libre-4.4.266-gnu/kernel/trace/trace.c
@@ -26,6 +26,7 @@
 #include <linux/linkage.h>
 #include <linux/uaccess.h>
 #include <linux/kprobes.h>
+#include <linux/vmalloc.h>
 #include <linux/ftrace.h>
 #include <linux/module.h>
 #include <linux/percpu.h>
@@ -6626,6 +6627,19 @@ static int allocate_trace_buffers(struct trace_array *tr, int size)
 	 */
 	allocate_snapshot = false;
 #endif
+
+	/*
+	 * Because of some magic with the way alloc_percpu() works on
+	 * x86_64, we need to synchronize the pgd of all the tables,
+	 * otherwise the trace events that happen in x86_64 page fault
+	 * handlers can't cope with accessing the chance that a
+	 * alloc_percpu()'d memory might be touched in the page fault trace
+	 * event. Oh, and we need to audit all other alloc_percpu() and vmalloc()
+	 * calls in tracing, because something might get triggered within a
+	 * page fault trace event!
+	 */
+	vmalloc_sync_mappings();
+
 	return 0;
 }
 
diff --git linux-libre-4.4.265-gnu/net/mac80211/main.c linux-libre-4.4.266-gnu/net/mac80211/main.c
index 15d23aeea634..2357b17254e7 100644
--- linux-libre-4.4.265-gnu/net/mac80211/main.c
+++ linux-libre-4.4.266-gnu/net/mac80211/main.c
@@ -889,8 +889,19 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
 			continue;
 
 		if (!dflt_chandef.chan) {
+			/*
+			 * Assign the first enabled channel to dflt_chandef
+			 * from the list of channels
+			 */
+			for (i = 0; i < sband->n_channels; i++)
+				if (!(sband->channels[i].flags &
+						IEEE80211_CHAN_DISABLED))
+					break;
+			/* if none found then use the first anyway */
+			if (i == sband->n_channels)
+				i = 0;
 			cfg80211_chandef_create(&dflt_chandef,
-						&sband->channels[0],
+						&sband->channels[i],
 						NL80211_CHAN_NO_HT);
 			/* init channel we're on */
 			if (!local->use_chanctx && !local->_oper_chandef.chan) {
diff --git linux-libre-4.4.265-gnu/sound/pci/hda/patch_realtek.c linux-libre-4.4.266-gnu/sound/pci/hda/patch_realtek.c
index 4bfe06650277..51163309c875 100644
--- linux-libre-4.4.265-gnu/sound/pci/hda/patch_realtek.c
+++ linux-libre-4.4.266-gnu/sound/pci/hda/patch_realtek.c
@@ -6212,7 +6212,6 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
 	SND_HDA_PIN_QUIRK(0x10ec0299, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
 		ALC225_STANDARD_PINS,
 		{0x12, 0xb7a60130},
-		{0x13, 0xb8a61140},
 		{0x17, 0x90170110}),
 	{}
 };
