From 2ec1e4ae67db54ff0ceabbe2a0e08f01c1781828 Mon Sep 17 00:00:00 2001 From: Chris Lew Date: Mon, 3 Oct 2022 09:57:50 -0700 Subject: [PATCH] net: qrtr: Prevent stale ports from sending In order to prevent messages from stale sockets being sent, check if ENETRESET has been set on the socket and drop the packet. Change-Id: Ie9abc6c51139e82d3c9ebd4d546d1acd7269875e Signed-off-by: Chris Lew --- net/qrtr/af_qrtr.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/net/qrtr/af_qrtr.c b/net/qrtr/af_qrtr.c index 05030c63df77..8bc4e635e10b 100644 --- a/net/qrtr/af_qrtr.c +++ b/net/qrtr/af_qrtr.c @@ -919,6 +919,7 @@ static int qrtr_local_enqueue(struct qrtr_node *node, struct sk_buff *skb, { struct qrtr_sock *ipc; struct qrtr_cb *cb; + struct sock *sk = skb->sk; ipc = qrtr_port_lookup(to->sq_port); if (!ipc || &ipc->sk == skb->sk) { /* do not send to self */ @@ -928,6 +929,15 @@ static int qrtr_local_enqueue(struct qrtr_node *node, struct sk_buff *skb, return -ENODEV; } + /* Keep resetting NETRESET until socket is closed */ + if (sk && sk->sk_err == ENETRESET) { + sk->sk_err = ENETRESET; + sk_error_report(sk); + qrtr_port_put(ipc); + kfree_skb(skb); + return 0; + } + cb = (struct qrtr_cb *)skb->cb; cb->src_node = from->sq_node; cb->src_port = from->sq_port;