Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e9cb622 authored by Guillaume Nault's avatar Guillaume Nault Committed by David S. Miller
Browse files

l2tp: fix userspace reception on plain L2TP sockets



As pppol2tp_recv() never queues up packets to plain L2TP sockets,
pppol2tp_recvmsg() never returns data to userspace, thus making
the recv*() system calls unusable.

Instead of dropping packets when the L2TP socket isn't bound to a PPP
channel, this patch adds them to its reception queue.

Signed-off-by: default avatarGuillaume Nault <g.nault@alphalink.fr>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bb5016ea
Loading
Loading
Loading
Loading
+7 −5
Original line number Original line Diff line number Diff line
@@ -254,13 +254,15 @@ static void pppol2tp_recv(struct l2tp_session *session, struct sk_buff *skb, int
		po = pppox_sk(sk);
		po = pppox_sk(sk);
		ppp_input(&po->chan, skb);
		ppp_input(&po->chan, skb);
	} else {
	} else {
		l2tp_info(session, PPPOL2TP_MSG_DATA, "%s: socket not bound\n",
		l2tp_dbg(session, PPPOL2TP_MSG_DATA,
			  session->name);
			 "%s: recv %d byte data frame, passing to L2TP socket\n",
			 session->name, data_len);


		/* Not bound. Nothing we can do, so discard. */
		if (sock_queue_rcv_skb(sk, skb) < 0) {
			atomic_long_inc(&session->stats.rx_errors);
			atomic_long_inc(&session->stats.rx_errors);
			kfree_skb(skb);
			kfree_skb(skb);
		}
		}
	}


	return;
	return;