diff -druNp --no-dereference linux-libre-3.2.87-gnu1/Makefile linux-libre-3.2.88-gnu1/Makefile
--- linux-libre-3.2.87-gnu1/Makefile	2017-03-16 11:55:11.000000000 -0400
+++ linux-libre-3.2.88-gnu1/Makefile	2017-04-05 09:18:29.000000000 -0400
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 2
-SUBLEVEL = 87
+SUBLEVEL = 88
 EXTRAVERSION =-gnu1
 NAME = Saber-toothed Squirrel
 
diff -druNp --no-dereference linux-libre-3.2.87-gnu1/mm/huge_memory.c linux-libre-3.2.88-gnu1/mm/huge_memory.c
--- linux-libre-3.2.87-gnu1/mm/huge_memory.c	2017-03-15 22:19:00.000000000 -0400
+++ linux-libre-3.2.88-gnu1/mm/huge_memory.c	2017-04-04 17:18:33.000000000 -0400
@@ -989,7 +989,7 @@ struct page *follow_trans_huge_pmd(struc
 	VM_BUG_ON(!PageHead(page));
 
 	if (flags & FOLL_WRITE && !can_follow_write_pmd(*pmd, page, flags))
-		goto out;
+		return NULL;
 
 	if (flags & FOLL_TOUCH) {
 		pmd_t _pmd;
diff -druNp --no-dereference linux-libre-3.2.87-gnu1/net/ipv4/ip_sockglue.c linux-libre-3.2.88-gnu1/net/ipv4/ip_sockglue.c
--- linux-libre-3.2.87-gnu1/net/ipv4/ip_sockglue.c	2017-03-15 22:19:00.000000000 -0400
+++ linux-libre-3.2.88-gnu1/net/ipv4/ip_sockglue.c	2017-04-04 17:18:33.000000000 -0400
@@ -1009,7 +1009,8 @@ e_inval:
  */
 int ip_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 {
-	if (!(inet_sk(sk)->cmsg_flags & IP_CMSG_PKTINFO))
+	if (!(inet_sk(sk)->cmsg_flags & IP_CMSG_PKTINFO) &&
+	    !IPCB(skb)->opt.optlen)
 		skb_dst_drop(skb);
 	return sock_queue_rcv_skb(sk, skb);
 }
diff -druNp --no-dereference linux-libre-3.2.87-gnu1/net/l2tp/l2tp_ip.c linux-libre-3.2.88-gnu1/net/l2tp/l2tp_ip.c
--- linux-libre-3.2.87-gnu1/net/l2tp/l2tp_ip.c	2017-03-15 22:19:00.000000000 -0400
+++ linux-libre-3.2.88-gnu1/net/l2tp/l2tp_ip.c	2017-04-04 17:18:33.000000000 -0400
@@ -257,8 +257,6 @@ static int l2tp_ip_bind(struct sock *sk,
 	int ret;
 	int chk_addr_ret;
 
-	if (!sock_flag(sk, SOCK_ZAPPED))
-		return -EINVAL;
 	if (addr_len < sizeof(struct sockaddr_l2tpip))
 		return -EINVAL;
 	if (addr->l2tp_family != AF_INET)
@@ -272,6 +270,9 @@ static int l2tp_ip_bind(struct sock *sk,
 	read_unlock_bh(&l2tp_ip_lock);
 
 	lock_sock(sk);
+	if (!sock_flag(sk, SOCK_ZAPPED))
+		goto out;
+
 	if (sk->sk_state != TCP_CLOSE || addr_len < sizeof(struct sockaddr_l2tpip))
 		goto out;
 
diff -druNp --no-dereference linux-libre-3.2.87-gnu1/security/keys/keyring.c linux-libre-3.2.88-gnu1/security/keys/keyring.c
--- linux-libre-3.2.87-gnu1/security/keys/keyring.c	2017-03-15 22:19:00.000000000 -0400
+++ linux-libre-3.2.88-gnu1/security/keys/keyring.c	2017-04-04 17:18:33.000000000 -0400
@@ -336,6 +336,9 @@ key_ref_t keyring_search_aux(key_ref_t k
 	if (keyring->type != &key_type_keyring)
 		goto error;
 
+	if (!match)
+		return ERR_PTR(-ENOKEY);
+
 	rcu_read_lock();
 
 	now = current_kernel_time();
@@ -484,9 +487,6 @@ key_ref_t keyring_search(key_ref_t keyri
 			 struct key_type *type,
 			 const char *description)
 {
-	if (!type->match)
-		return ERR_PTR(-ENOKEY);
-
 	return keyring_search_aux(keyring, current->cred,
 				  type, description, type->match, false);
 }
