diff -druNp --no-dereference linux-libre-3.18.83-gnu/drivers/char/ipmi/ipmi_msghandler.c linux-libre-3.18.84-gnu/drivers/char/ipmi/ipmi_msghandler.c
--- linux-libre-3.18.83-gnu/drivers/char/ipmi/ipmi_msghandler.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/drivers/char/ipmi/ipmi_msghandler.c	2017-11-24 02:30:05.000000000 -0500
@@ -4010,7 +4010,8 @@ smi_from_recv_msg(ipmi_smi_t intf, struc
 }
 
 static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
-			      struct list_head *timeouts, long timeout_period,
+			      struct list_head *timeouts,
+			      unsigned long timeout_period,
 			      int slot, unsigned long *flags,
 			      unsigned int *waiting_msgs)
 {
@@ -4023,8 +4024,8 @@ static void check_msg_timeout(ipmi_smi_t
 	if (!ent->inuse)
 		return;
 
-	ent->timeout -= timeout_period;
-	if (ent->timeout > 0) {
+	if (timeout_period < ent->timeout) {
+		ent->timeout -= timeout_period;
 		(*waiting_msgs)++;
 		return;
 	}
@@ -4091,7 +4092,8 @@ static void check_msg_timeout(ipmi_smi_t
 	}
 }
 
-static unsigned int ipmi_timeout_handler(ipmi_smi_t intf, long timeout_period)
+static unsigned int ipmi_timeout_handler(ipmi_smi_t intf,
+					 unsigned long timeout_period)
 {
 	struct list_head     timeouts;
 	struct ipmi_recv_msg *msg, *msg2;
diff -druNp --no-dereference linux-libre-3.18.83-gnu/drivers/net/ethernet/fealnx.c linux-libre-3.18.84-gnu/drivers/net/ethernet/fealnx.c
--- linux-libre-3.18.83-gnu/drivers/net/ethernet/fealnx.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/drivers/net/ethernet/fealnx.c	2017-11-24 02:30:05.000000000 -0500
@@ -257,8 +257,8 @@ enum rx_desc_status_bits {
 	RXFSD = 0x00000800,	/* first descriptor */
 	RXLSD = 0x00000400,	/* last descriptor */
 	ErrorSummary = 0x80,	/* error summary */
-	RUNT = 0x40,		/* runt packet received */
-	LONG = 0x20,		/* long packet received */
+	RUNTPKT = 0x40,		/* runt packet received */
+	LONGPKT = 0x20,		/* long packet received */
 	FAE = 0x10,		/* frame align error */
 	CRC = 0x08,		/* crc error */
 	RXER = 0x04,		/* receive error */
@@ -1633,7 +1633,7 @@ static int netdev_rx(struct net_device *
 					       dev->name, rx_status);
 
 				dev->stats.rx_errors++;	/* end of a packet. */
-				if (rx_status & (LONG | RUNT))
+				if (rx_status & (LONGPKT | RUNTPKT))
 					dev->stats.rx_length_errors++;
 				if (rx_status & RXER)
 					dev->stats.rx_frame_errors++;
diff -druNp --no-dereference linux-libre-3.18.83-gnu/fs/coda/upcall.c linux-libre-3.18.84-gnu/fs/coda/upcall.c
--- linux-libre-3.18.83-gnu/fs/coda/upcall.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/fs/coda/upcall.c	2017-11-24 02:30:05.000000000 -0500
@@ -446,8 +446,7 @@ int venus_fsync(struct super_block *sb,
 	UPARG(CODA_FSYNC);
 
 	inp->coda_fsync.VFid = *fid;
-	error = coda_upcall(coda_vcp(sb), sizeof(union inputArgs),
-			    &outsize, inp);
+	error = coda_upcall(coda_vcp(sb), insize, &outsize, inp);
 
 	CODA_FREE(inp, insize);
 	return error;
diff -druNp --no-dereference linux-libre-3.18.83-gnu/fs/ocfs2/file.c linux-libre-3.18.84-gnu/fs/ocfs2/file.c
--- linux-libre-3.18.83-gnu/fs/ocfs2/file.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/fs/ocfs2/file.c	2017-11-24 02:30:05.000000000 -0500
@@ -1151,6 +1151,13 @@ int ocfs2_setattr(struct dentry *dentry,
 		dquot_initialize(inode);
 	size_change = S_ISREG(inode->i_mode) && attr->ia_valid & ATTR_SIZE;
 	if (size_change) {
+		/*
+		 * Here we should wait dio to finish before inode lock
+		 * to avoid a deadlock between ocfs2_setattr() and
+		 * ocfs2_dio_end_io_write()
+		 */
+		inode_dio_wait(inode);
+
 		status = ocfs2_rw_lock(inode, 1);
 		if (status < 0) {
 			mlog_errno(status);
@@ -1170,8 +1177,6 @@ int ocfs2_setattr(struct dentry *dentry,
 		if (status)
 			goto bail_unlock;
 
-		inode_dio_wait(inode);
-
 		if (i_size_read(inode) >= attr->ia_size) {
 			if (ocfs2_should_order_data(inode)) {
 				status = ocfs2_begin_ordered_truncate(inode,
diff -druNp --no-dereference linux-libre-3.18.83-gnu/include/linux/skbuff.h linux-libre-3.18.84-gnu/include/linux/skbuff.h
--- linux-libre-3.18.83-gnu/include/linux/skbuff.h	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/include/linux/skbuff.h	2017-11-24 02:30:05.000000000 -0500
@@ -3117,6 +3117,13 @@ static inline void nf_reset_trace(struct
 #endif
 }
 
+static inline void ipvs_reset(struct sk_buff *skb)
+{
+#if IS_ENABLED(CONFIG_IP_VS)
+	skb->ipvs_property = 0;
+#endif
+}
+
 /* Note: This doesn't put any conntrack and bridge info in dst. */
 static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src,
 			     bool copy)
diff -druNp --no-dereference linux-libre-3.18.83-gnu/Makefile linux-libre-3.18.84-gnu/Makefile
--- linux-libre-3.18.83-gnu/Makefile	2017-11-21 09:21:05.000000000 -0500
+++ linux-libre-3.18.84-gnu/Makefile	2017-11-24 05:54:57.000000000 -0500
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 18
-SUBLEVEL = 83
+SUBLEVEL = 84
 EXTRAVERSION =-gnu
 NAME = Diseased Newt
 
diff -druNp --no-dereference linux-libre-3.18.83-gnu/net/8021q/vlan.c linux-libre-3.18.84-gnu/net/8021q/vlan.c
--- linux-libre-3.18.83-gnu/net/8021q/vlan.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/net/8021q/vlan.c	2017-11-24 02:30:05.000000000 -0500
@@ -376,6 +376,9 @@ static int vlan_device_event(struct noti
 			dev->name);
 		vlan_vid_add(dev, htons(ETH_P_8021Q), 0);
 	}
+	if (event == NETDEV_DOWN &&
+	    (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER))
+		vlan_vid_del(dev, htons(ETH_P_8021Q), 0);
 
 	vlan_info = rtnl_dereference(dev->vlan_info);
 	if (!vlan_info)
@@ -420,9 +423,6 @@ static int vlan_device_event(struct noti
 		break;
 
 	case NETDEV_DOWN:
-		if (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)
-			vlan_vid_del(dev, htons(ETH_P_8021Q), 0);
-
 		/* Put all VLANs for this dev in the down state too.  */
 		vlan_group_for_each_dev(grp, i, vlandev) {
 			flgs = vlandev->flags;
diff -druNp --no-dereference linux-libre-3.18.83-gnu/net/core/skbuff.c linux-libre-3.18.84-gnu/net/core/skbuff.c
--- linux-libre-3.18.83-gnu/net/core/skbuff.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/net/core/skbuff.c	2017-11-24 02:30:05.000000000 -0500
@@ -4069,6 +4069,7 @@ void skb_scrub_packet(struct sk_buff *sk
 	if (!xnet)
 		return;
 
+	ipvs_reset(skb);
 	skb_orphan(skb);
 	skb->mark = 0;
 }
diff -druNp --no-dereference linux-libre-3.18.83-gnu/net/dccp/ipv6.c linux-libre-3.18.84-gnu/net/dccp/ipv6.c
--- linux-libre-3.18.83-gnu/net/dccp/ipv6.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/net/dccp/ipv6.c	2017-11-24 02:30:05.000000000 -0500
@@ -487,6 +487,9 @@ static struct sock *dccp_v6_request_recv
 		newsk->sk_backlog_rcv = dccp_v4_do_rcv;
 		newnp->pktoptions  = NULL;
 		newnp->opt	   = NULL;
+		newnp->ipv6_mc_list = NULL;
+		newnp->ipv6_ac_list = NULL;
+		newnp->ipv6_fl_list = NULL;
 		newnp->mcast_oif   = inet6_iif(skb);
 		newnp->mcast_hops  = ipv6_hdr(skb)->hop_limit;
 
@@ -562,6 +565,10 @@ static struct sock *dccp_v6_request_recv
 	/* Clone RX bits */
 	newnp->rxopt.all = np->rxopt.all;
 
+	newnp->ipv6_mc_list = NULL;
+	newnp->ipv6_ac_list = NULL;
+	newnp->ipv6_fl_list = NULL;
+
 	/* Clone pktoptions received with SYN */
 	newnp->pktoptions = NULL;
 	if (ireq->pktopts != NULL) {
diff -druNp --no-dereference linux-libre-3.18.83-gnu/net/ipv4/tcp_output.c linux-libre-3.18.84-gnu/net/ipv4/tcp_output.c
--- linux-libre-3.18.83-gnu/net/ipv4/tcp_output.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/net/ipv4/tcp_output.c	2017-11-24 02:30:05.000000000 -0500
@@ -2911,13 +2911,8 @@ struct sk_buff *tcp_make_synack(struct s
 	tcp_ecn_make_synack(req, th, sk);
 	th->source = htons(ireq->ir_num);
 	th->dest = ireq->ir_rmt_port;
-	/* Setting of flags are superfluous here for callers (and ECE is
-	 * not even correctly set)
-	 */
-	tcp_init_nondata_skb(skb, tcp_rsk(req)->snt_isn,
-			     TCPHDR_SYN | TCPHDR_ACK);
-
-	th->seq = htonl(TCP_SKB_CB(skb)->seq);
+	skb->ip_summed = CHECKSUM_PARTIAL;
+	th->seq = htonl(tcp_rsk(req)->snt_isn);
 	/* XXX data is queued and acked as is. No buffer/window check */
 	th->ack_seq = htonl(tcp_rsk(req)->rcv_nxt);
 
diff -druNp --no-dereference linux-libre-3.18.83-gnu/net/ipv6/tcp_ipv6.c linux-libre-3.18.84-gnu/net/ipv6/tcp_ipv6.c
--- linux-libre-3.18.83-gnu/net/ipv6/tcp_ipv6.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/net/ipv6/tcp_ipv6.c	2017-11-24 02:30:05.000000000 -0500
@@ -1113,6 +1113,7 @@ static struct sock *tcp_v6_syn_recv_sock
 		newtp->af_specific = &tcp_sock_ipv6_mapped_specific;
 #endif
 
+		newnp->ipv6_mc_list = NULL;
 		newnp->ipv6_ac_list = NULL;
 		newnp->ipv6_fl_list = NULL;
 		newnp->pktoptions  = NULL;
@@ -1184,6 +1185,7 @@ static struct sock *tcp_v6_syn_recv_sock
 	   First: no IPv4 options.
 	 */
 	newinet->inet_opt = NULL;
+	newnp->ipv6_mc_list = NULL;
 	newnp->ipv6_ac_list = NULL;
 	newnp->ipv6_fl_list = NULL;
 
diff -druNp --no-dereference linux-libre-3.18.83-gnu/net/netlink/af_netlink.c linux-libre-3.18.84-gnu/net/netlink/af_netlink.c
--- linux-libre-3.18.83-gnu/net/netlink/af_netlink.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/net/netlink/af_netlink.c	2017-11-24 02:30:05.000000000 -0500
@@ -1927,7 +1927,7 @@ static int netlink_dump(struct sock *sk)
 	struct sk_buff *skb = NULL;
 	struct nlmsghdr *nlh;
 	struct module *module;
-	int len, err = -ENOBUFS;
+	int err = -ENOBUFS;
 	int alloc_size;
 
 	mutex_lock(nlk->cb_mutex);
@@ -1965,9 +1965,11 @@ static int netlink_dump(struct sock *sk)
 		goto errout_skb;
 	netlink_skb_set_owner_r(skb, sk);
 
-	len = cb->dump(skb, cb);
+	if (nlk->dump_done_errno > 0)
+		nlk->dump_done_errno = cb->dump(skb, cb);
 
-	if (len > 0) {
+	if (nlk->dump_done_errno > 0 ||
+	    skb_tailroom(skb) < nlmsg_total_size(sizeof(nlk->dump_done_errno))) {
 		mutex_unlock(nlk->cb_mutex);
 
 		if (sk_filter(sk, skb))
@@ -1977,13 +1979,15 @@ static int netlink_dump(struct sock *sk)
 		return 0;
 	}
 
-	nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE, sizeof(len), NLM_F_MULTI);
-	if (!nlh)
+	nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE,
+			       sizeof(nlk->dump_done_errno), NLM_F_MULTI);
+	if (WARN_ON(!nlh))
 		goto errout_skb;
 
 	nl_dump_check_consistent(cb, nlh);
 
-	memcpy(nlmsg_data(nlh), &len, sizeof(len));
+	memcpy(nlmsg_data(nlh), &nlk->dump_done_errno,
+	       sizeof(nlk->dump_done_errno));
 
 	if (sk_filter(sk, skb))
 		kfree_skb(skb);
@@ -2048,6 +2052,7 @@ int __netlink_dump_start(struct sock *ss
 	cb->skb = skb;
 
 	nlk->cb_running = true;
+	nlk->dump_done_errno = INT_MAX;
 
 	mutex_unlock(nlk->cb_mutex);
 
diff -druNp --no-dereference linux-libre-3.18.83-gnu/net/netlink/af_netlink.h linux-libre-3.18.84-gnu/net/netlink/af_netlink.h
--- linux-libre-3.18.83-gnu/net/netlink/af_netlink.h	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/net/netlink/af_netlink.h	2017-11-24 02:30:05.000000000 -0500
@@ -35,6 +35,7 @@ struct netlink_sock {
 	size_t			max_recvmsg_len;
 	wait_queue_head_t	wait;
 	bool			cb_running;
+	int			dump_done_errno;
 	struct netlink_callback	cb;
 	struct mutex		*cb_mutex;
 	struct mutex		cb_def_mutex;
diff -druNp --no-dereference linux-libre-3.18.83-gnu/net/sctp/ipv6.c linux-libre-3.18.84-gnu/net/sctp/ipv6.c
--- linux-libre-3.18.83-gnu/net/sctp/ipv6.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/net/sctp/ipv6.c	2017-11-24 02:30:05.000000000 -0500
@@ -805,6 +805,8 @@ static void sctp_inet6_skb_msgname(struc
 		if (ipv6_addr_type(&addr->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL) {
 			struct sctp_ulpevent *ev = sctp_skb2event(skb);
 			addr->v6.sin6_scope_id = ev->iif;
+		} else {
+			addr->v6.sin6_scope_id = 0;
 		}
 	}
 
diff -druNp --no-dereference linux-libre-3.18.83-gnu/net/sctp/socket.c linux-libre-3.18.84-gnu/net/sctp/socket.c
--- linux-libre-3.18.83-gnu/net/sctp/socket.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/net/sctp/socket.c	2017-11-24 02:30:05.000000000 -0500
@@ -4466,6 +4466,10 @@ int sctp_do_peeloff(struct sock *sk, sct
 	struct socket *sock;
 	int err = 0;
 
+	/* Do not peel off from one netns to another one. */
+	if (!net_eq(current->nsproxy->net_ns, sock_net(sk)))
+		return -EINVAL;
+
 	if (!asoc)
 		return -EINVAL;
 
diff -druNp --no-dereference linux-libre-3.18.83-gnu/security/integrity/ima/ima_appraise.c linux-libre-3.18.84-gnu/security/integrity/ima/ima_appraise.c
--- linux-libre-3.18.83-gnu/security/integrity/ima/ima_appraise.c	2017-11-21 03:01:08.000000000 -0500
+++ linux-libre-3.18.84-gnu/security/integrity/ima/ima_appraise.c	2017-11-24 02:30:05.000000000 -0500
@@ -297,6 +297,9 @@ void ima_update_xattr(struct integrity_i
 	if (iint->flags & IMA_DIGSIG)
 		return;
 
+	if (iint->ima_file_status != INTEGRITY_PASS)
+		return;
+
 	rc = ima_collect_measurement(iint, file, NULL, NULL);
 	if (rc < 0)
 		return;
