From nobody Sun Jun 14 16:05:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8A7838B121; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775756055; cv=none; b=I/Kb0LLy6OYPvcF2JDsK7D67XRfWtDjZKNTvsnoHpwWt2XGOUFkqpxDhQqHGdX+53rZjCrvYOg4tHELIw9JBtWg1eGJmmQhwMbmilPnG1E3zBVMuvUEAD4gvIT8TWNvf2owtpzzRFkzSz/aNl/yoNGUOS4OGG7GKK9CkywuRSyM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775756055; c=relaxed/simple; bh=Ia3tPnC56tz9K91w3AqY0ZvMpakxHnNBSGZqH3L/LfI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mKZvxoR9IUrALarMU/Ae793oVFBYvUWf3qZdRjmL6r+MY6zNoGy4+m1C/KyDA+7CppZeiYpAB/sTASBtB7HBgaJLeiy/2Vx60xYpaIhkXBAID9mngqzuhDgDctSBTAl/P/xGRWItA+4QY82u6xITfrCGDzomtTT7Zg/uH8UQk1Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eExgDLIf; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eExgDLIf" Received: by smtp.kernel.org (Postfix) with ESMTPS id 876CDC19424; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775756055; bh=Ia3tPnC56tz9K91w3AqY0ZvMpakxHnNBSGZqH3L/LfI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=eExgDLIfd+wK52tVCt5LiJvOafwVIQGLoqEwAMpcSxDyIirRhgyamjpb8AepoxF6c 4oIQmHBJbT26hvrw+d8YDQ+8/fXRd24Kq9xyFQMwGszxjm+ulzqu07BEtbKJc1FVyi DT3QAvkOjR7pppcdVyuEgopryhplfzSQIKNvZnnekfdzk7sMt4m/nrmiNLIvNZt4uc JFAecc1sNNEBcayE+uanTOQ46XSKC08y+3/EDu/8Lu6HImfQjwgU6V7xQNa1e259rQ AWpNYEV8VKo7iamOK1r2kGkY6Pnd/U+2GCIce0EuH5e0VAk4wEQARkKwwgbHK65DIW hRIYdz8vlPGyA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 73F45F364A8; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 09 Apr 2026 23:04:12 +0530 Subject: [PATCH v3 1/5] net: qrtr: ns: Limit the maximum server registration per node Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260409-qrtr-fix-v3-1-00a8a5ff2b51@oss.qualcomm.com> References: <20260409-qrtr-fix-v3-0-00a8a5ff2b51@oss.qualcomm.com> In-Reply-To: <20260409-qrtr-fix-v3-0-00a8a5ff2b51@oss.qualcomm.com> To: Manivannan Sadhasivam , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: linux-arm-msm@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Yiming Qian , Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3040; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=d3riliJXlMknVS54Ov71SzRRhSiv88e/lnkbjutnErI=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp1+MVcXh+sRzaqvD63YwBp28P4ftfPfsLheiHb LUTZbvABhOJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCadfjFQAKCRBVnxHm/pHO 9e50CACDAAC/duutxEw5WR7Rgnxv7rlmz6FkTIkBMA5bPOvogpnk56+qjp6ucuuxfwq3qaw3Hbg EO8dNGfLd4uASOWqTKROS4SPbQMLQTo86ySM/lITXO5Xad/CbB0SrIolF/O/Ov05HAqQyjovg13 PGuCfntmx8mTguW5a0HoOkvC5Mx9FJdkbmlCpMAn6Xa9NI38i+AgsJ1r80tbfxh7P1RB2I3YyFM otYELlbc0Im99x/maHYWK8hU1tr4DyouBaAZbuEDzqFPSJIt2RGGUti5dgdon/4dJJB+Y2N//X4 8n/2ojGnAIfkJkTOGjJpOkoZST+ovOmAy4wG9Q8uC0RStmu5 X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam Current code does no bound checking on the number of servers added per node. A malicious client can flood NEW_SERVER messages and exhaust memory. Fix this issue by limiting the maximum number of server registrations to 256 per node. If the NEW_SERVER message is received for an old port, then don't restrict it as it will get replaced. While at it, also rate limit the error messages in the failure path of qrtr_ns_worker(). Note that the limit of 256 is chosen based on the current platform requirements. If requirement changes in the future, this limit can be increased. Cc: stable@vger.kernel.org Fixes: 0c2204a4ad71 ("net: qrtr: Migrate nameservice to kernel from userspa= ce") Reported-by: Yiming Qian Reviewed-by: Simon Horman Signed-off-by: Manivannan Sadhasivam --- net/qrtr/ns.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/net/qrtr/ns.c b/net/qrtr/ns.c index 3203b2220860..63cb5861d87a 100644 --- a/net/qrtr/ns.c +++ b/net/qrtr/ns.c @@ -67,8 +67,14 @@ struct qrtr_server { struct qrtr_node { unsigned int id; struct xarray servers; + u32 server_count; }; =20 +/* Max server limit is chosen based on the current platform requirements. = If the + * requirement changes in the future, this value can be increased. + */ +#define QRTR_NS_MAX_SERVERS 256 + static struct qrtr_node *node_get(unsigned int node_id) { struct qrtr_node *node; @@ -229,6 +235,17 @@ static struct qrtr_server *server_add(unsigned int ser= vice, if (!service || !port) return NULL; =20 + node =3D node_get(node_id); + if (!node) + return NULL; + + /* Make sure the new servers per port are capped at the maximum value */ + old =3D xa_load(&node->servers, port); + if (!old && node->server_count >=3D QRTR_NS_MAX_SERVERS) { + pr_err_ratelimited("QRTR client node %u exceeds max server limit!\n", no= de_id); + return NULL; + } + srv =3D kzalloc_obj(*srv); if (!srv) return NULL; @@ -238,10 +255,6 @@ static struct qrtr_server *server_add(unsigned int ser= vice, srv->node =3D node_id; srv->port =3D port; =20 - node =3D node_get(node_id); - if (!node) - goto err; - /* Delete the old server on the same port */ old =3D xa_store(&node->servers, port, srv, GFP_KERNEL); if (old) { @@ -252,6 +265,8 @@ static struct qrtr_server *server_add(unsigned int serv= ice, } else { kfree(old); } + } else { + node->server_count++; } =20 trace_qrtr_ns_server_add(srv->service, srv->instance, @@ -292,6 +307,7 @@ static int server_del(struct qrtr_node *node, unsigned = int port, bool bcast) } =20 kfree(srv); + node->server_count--; =20 return 0; } @@ -670,7 +686,7 @@ static void qrtr_ns_worker(struct work_struct *work) } =20 if (ret < 0) - pr_err("failed while handling packet from %d:%d", + pr_err_ratelimited("failed while handling packet from %d:%d", sq.sq_node, sq.sq_port); } =20 --=20 2.51.0 From nobody Sun Jun 14 16:05:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2BB83CBE8B; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775756056; cv=none; b=HhQpCp6izO5Gp3flHmxYhq/AaTGeSvV/EkE061sdADdHi+qF+eMRJNxwAHB7oyLFLUpZZwzmLUq5KQxRXd/OcEX8H5Wnv1T9GXH962lg6OFLAWECB2lHV3YVjAvFO/UUgtmLzDsMxtu/JqTH0r8JcL0dddWOSniwxa48jLY0lf4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775756056; c=relaxed/simple; bh=FkZrOYd4SIthvtaubjUizQIoOvRP4US5d2YU8l/XfTc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QDjhbamqQudJuVtEHD+obV4c7KrtiKmJuHtVuCkujO/fTDoNpt9yMiLG/0njw4snZqHi31Uj/EzjfUsVhgdsamMjjq9SQ3nlSQHckXcWhutHB5kdqgWMJATBNhHbbBtWW3K9r5jtqAkuGkLOmTZtNYO+SEy5aT91QVuNdfbNCJ8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=c8C39kya; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="c8C39kya" Received: by smtp.kernel.org (Postfix) with ESMTPS id 94FDCC2BCAF; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775756055; bh=FkZrOYd4SIthvtaubjUizQIoOvRP4US5d2YU8l/XfTc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=c8C39kyaN7AObs4Mvha5j6Y13B8byb5Zta8I1oGL9Oz+Vl3JoLx0h8hOnqwl6T3rj Z1ueQKP1wV2QrDTcXlFwq7P2aaM7gV3+cO6nDPEtu4p9Jy1EBKYAd7IxFo1tn6GFrq 9lbQAKPOulqQY45AuuU6+cG9CKDlnyE0/Pq6m+njgSPUJgEfPXP0O9+WC87/GwVCfd RrR79vaZSd3eLjMRbcgirA6BLIIdYSoF0AdFh1kOJQoWfJIW2hQd9oYnPZDrKN+eYI BgkzSn2N/61MrClGzRD2OmkBAN+NNxWk8twBLslfberRP3JRAzcQropmTR9TIJDOOB WRDK3AqD6HJow== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8425CF364AB; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 09 Apr 2026 23:04:13 +0530 Subject: [PATCH v3 2/5] net: qrtr: ns: Limit the maximum number of lookups Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260409-qrtr-fix-v3-2-00a8a5ff2b51@oss.qualcomm.com> References: <20260409-qrtr-fix-v3-0-00a8a5ff2b51@oss.qualcomm.com> In-Reply-To: <20260409-qrtr-fix-v3-0-00a8a5ff2b51@oss.qualcomm.com> To: Manivannan Sadhasivam , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: linux-arm-msm@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2866; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=IhZvm8cwMMv2YMLHez1GlQYA3ZymEM0NuV9RTHrTenE=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp1+MV6OOS+sE0Q6zOPdpJZF2nE6VonDdOb+TxP hrY1Ji3OLWJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCadfjFQAKCRBVnxHm/pHO 9WXLB/9S7FKGRYTtolf8iR5ePF1KEB2WQk1Qpp5SGBNW/iXpRv9hyvuz3I62myAwFIa3S0sLKB/ OYTpOcNZUA45tWNTYDmK53WCvPzdzW9K9AAMdGY4uO3ie/n/BI+5jV1DSB92aio+96tyCwPrhqk LGc5CP1E/4PQP3XyDDMky2+B046uh2RG8PWddHTJZPrxnZj2O3xV+njwNhHBeIKGKWENWSGTZbf LvAYfaRTqrWeHlhsCUybfJhjDRpxzsTMbrryTAqL6mbZU1acXjnViczU/1l3Y7rs1S4PdDhOFAm 4QdcXmZ6Ug6MSqfAzjv8EcT0SxWnAKIYDGV60JHvKTYxlkEm X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam Current code does no bound checking on the number of lookups a client can perform. Though the code restricts the lookups to local clients, there is still a possibility of a malicious local client sending a flood of NEW_LOOKUP messages over the same socket. Fix this issue by limiting the maximum number of lookups to 64 globally. Since the nameserver allows only atmost one local observer, this global lookup count will ensure that the lookups stay within the limit. Note that, limit of 64 is chosen based on the current platform requirements. If requirement changes in the future, this limit can be increased. Cc: stable@vger.kernel.org Fixes: 0c2204a4ad71 ("net: qrtr: Migrate nameservice to kernel from userspa= ce") Signed-off-by: Manivannan Sadhasivam --- net/qrtr/ns.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/net/qrtr/ns.c b/net/qrtr/ns.c index 63cb5861d87a..5b08d4d4840a 100644 --- a/net/qrtr/ns.c +++ b/net/qrtr/ns.c @@ -22,6 +22,7 @@ static struct { struct socket *sock; struct sockaddr_qrtr bcast_sq; struct list_head lookups; + u32 lookup_count; struct workqueue_struct *workqueue; struct work_struct work; int local_node; @@ -70,10 +71,11 @@ struct qrtr_node { u32 server_count; }; =20 -/* Max server limit is chosen based on the current platform requirements. = If the - * requirement changes in the future, this value can be increased. +/* Max server, lookup limits are chosen based on the current platform requ= irements. + * If the requirement changes in the future, these values can be increased. */ #define QRTR_NS_MAX_SERVERS 256 +#define QRTR_NS_MAX_LOOKUPS 64 =20 static struct qrtr_node *node_get(unsigned int node_id) { @@ -433,6 +435,7 @@ static int ctrl_cmd_del_client(struct sockaddr_qrtr *fr= om, =20 list_del(&lookup->li); kfree(lookup); + qrtr_ns.lookup_count--; } =20 /* Remove the server belonging to this port but don't broadcast @@ -550,6 +553,11 @@ static int ctrl_cmd_new_lookup(struct sockaddr_qrtr *f= rom, if (from->sq_node !=3D qrtr_ns.local_node) return -EINVAL; =20 + if (qrtr_ns.lookup_count >=3D QRTR_NS_MAX_LOOKUPS) { + pr_err_ratelimited("QRTR client node exceeds max lookup limit!\n"); + return -ENOSPC; + } + lookup =3D kzalloc_obj(*lookup); if (!lookup) return -ENOMEM; @@ -558,6 +566,7 @@ static int ctrl_cmd_new_lookup(struct sockaddr_qrtr *fr= om, lookup->service =3D service; lookup->instance =3D instance; list_add_tail(&lookup->li, &qrtr_ns.lookups); + qrtr_ns.lookup_count++; =20 memset(&filter, 0, sizeof(filter)); filter.service =3D service; @@ -598,6 +607,7 @@ static void ctrl_cmd_del_lookup(struct sockaddr_qrtr *f= rom, =20 list_del(&lookup->li); kfree(lookup); + qrtr_ns.lookup_count--; } } =20 --=20 2.51.0 From nobody Sun Jun 14 16:05:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E13463CB2E6; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775756056; cv=none; b=QmKZhu9RbsMx2AGYGBONtsSdYSwiCflvjRUL9C2y2FKOOnl2sU19J7ww5wPSh7py+8kSU5/k5zueMu28SJsVVKWct7EssC6co3qe/nb8rhRAJV7lwW8SQYuDISzW37Tx67nH0CbF+paDfgdeczKNZXWJP9q1dkYbJOohIncVPlQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775756056; c=relaxed/simple; bh=BHh+d7/Sb5UOlzv7Cvr4u0mLHw6JKjDkoYi8T5hayBk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UAsd5aooLiF/FJi9GW2Y+J9JwDzfLnu0foeJAaCqFMTFyvX5h0BDt5w72tLx2ABbnutSY9/YV8wCNZhMMOiuBhC9tMqfWeeOQzNI6RX+tpbS5JIx0y+UX1lHiv4YueMS4ewjwZu+FCWeTVhKa6PKpNsckM0vuN84gzNsTMiLZsY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QGAkYqJq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QGAkYqJq" Received: by smtp.kernel.org (Postfix) with ESMTPS id 9F4BBC2BCB2; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775756055; bh=BHh+d7/Sb5UOlzv7Cvr4u0mLHw6JKjDkoYi8T5hayBk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=QGAkYqJq4a724iYzgqfkkLJr2JvL43bRUs0fk4+g/eLwUgKwMPITjJROJx7Nh6Kz0 6n/QclVjv64OyBadDFWgZ8IfNqi3SEgBxFfMZq53EvExFPWHu1n3IMb5eyfM4T8q7G yZ/37rtYs9FPkJpp//53GiAzVA+eC5xVC4nr6ZfgbDz2m1Q4m42RrfbZc2OsWGXoEz o1Va3+6cES25khjcDIs4WnQQJwWKfAjSSmY3rwcDKHr30KmHcUjy0xiiI1eiNprH+r 14UNZjH+Y9XNoyjyFyvqleflwG+liQNKqb5pLmPJFM6dN4H9WlBeg2BikigaQNpiqJ uhxYC6BTNLQRQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94060F364A6; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 09 Apr 2026 23:04:14 +0530 Subject: [PATCH v3 3/5] net: qrtr: ns: Free the node during ctrl_cmd_bye() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260409-qrtr-fix-v3-3-00a8a5ff2b51@oss.qualcomm.com> References: <20260409-qrtr-fix-v3-0-00a8a5ff2b51@oss.qualcomm.com> In-Reply-To: <20260409-qrtr-fix-v3-0-00a8a5ff2b51@oss.qualcomm.com> To: Manivannan Sadhasivam , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: linux-arm-msm@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1941; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=Hpdkeym1qdOfTUQpvcFhEQaJ9E/0TNA+gVCrKHkmuGc=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp1+MV1Scrz7Ru2f3Zgr16UT/xdCYro5A7okqoa SKNH13jIp6JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCadfjFQAKCRBVnxHm/pHO 9fwTB/4pCyuDCwNyuUrR8VcPom9D2zdQ/CtJIadItu625PSyjcL4WhMbCSugzcdXRhaGH407x8o wN4kXNfUS2QyRgyDn3Qqdx+TPiaLOezWSkWOUZKZGwrIJzoNx3QysRH+e5jwWZAwyyA1+DXRm6s 6lNa7EEfBhO+Zj9jqAlzIHUhWobkVkbWsK9L/GePhVxq1QduJgLLQwH+qtiIRXUSwfdj+j0ad4z u//jo8qEPlKRvUbteSwwVw+Efvtq2CcFiXHDruPUqg2bueQVRaLLpar4mmNOuDGnzmVlRz6QrN6 +rww7B7ImX3XPDJj3aOpLRV7u0UMYd9OpVU5QqZpzjY7qXPb X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam A node sends the BYE packet when it is about to go down. So the nameserver should advertise the removal of the node to all remote and local observers and free the node finally. But currently, the nameserver doesn't free the node memory even after processing the BYE packet. This causes the node memory to leak. Hence, remove the node from Xarray list and free the node memory during both success and failure case of ctrl_cmd_bye(). Cc: stable@vger.kernel.org Fixes: 0c2204a4ad71 ("net: qrtr: Migrate nameservice to kernel from userspa= ce") Signed-off-by: Manivannan Sadhasivam --- net/qrtr/ns.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/net/qrtr/ns.c b/net/qrtr/ns.c index 5b08d4d4840a..1b9a90240a68 100644 --- a/net/qrtr/ns.c +++ b/net/qrtr/ns.c @@ -359,7 +359,7 @@ static int ctrl_cmd_bye(struct sockaddr_qrtr *from) struct qrtr_node *node; unsigned long index; struct kvec iv; - int ret; + int ret =3D 0; =20 iv.iov_base =3D &pkt; iv.iov_len =3D sizeof(pkt); @@ -374,8 +374,10 @@ static int ctrl_cmd_bye(struct sockaddr_qrtr *from) =20 /* Advertise the removal of this client to all local servers */ local_node =3D node_get(qrtr_ns.local_node); - if (!local_node) - return 0; + if (!local_node) { + ret =3D 0; + goto delete_node; + } =20 memset(&pkt, 0, sizeof(pkt)); pkt.cmd =3D cpu_to_le32(QRTR_TYPE_BYE); @@ -392,10 +394,18 @@ static int ctrl_cmd_bye(struct sockaddr_qrtr *from) ret =3D kernel_sendmsg(qrtr_ns.sock, &msg, &iv, 1, sizeof(pkt)); if (ret < 0 && ret !=3D -ENODEV) { pr_err("failed to send bye cmd\n"); - return ret; + goto delete_node; } } - return 0; + + /* Ignore -ENODEV */ + ret =3D 0; + +delete_node: + xa_erase(&nodes, from->sq_node); + kfree(node); + + return ret; } =20 static int ctrl_cmd_del_client(struct sockaddr_qrtr *from, --=20 2.51.0 From nobody Sun Jun 14 16:05:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EED733CFF4D; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775756056; cv=none; b=HJn2GZp7jcdcXllGy1TKB3LFR0omHc2BY8vywsLQIq82xjI+tpeGVAdT60/s6IER/YontU8gkUhIqyBYZ+fDK9uF+68PZQMqjBG0mxRuPMpUiRiRbmI1Iwn8LTCHftkFxn37YAe73bL+4HJ3TPGlS6z+3MH8psm+eYwmgXEBHw8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775756056; c=relaxed/simple; bh=jAsDVJQ8oQe6T+jEbjyp6AmnCBcgc0szzgwGRqjH3gw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iF/7Ppfhg4ImiL7gXiJrO8v7iZHNpA/BHctXliBEQkpQPH6Wsm4e+Vt7nFYg9QQqN9B0iMmp7FGj1ZwlWXOXo8RzDKhy2ymKYDfj7GSBVrY7RBRJzohreX7NTz75BLBh28uh6L/81MJMQdjzHqxGZf2zpJRnA6bN1c8qXK0V+Ng= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=A3wbfSa2; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="A3wbfSa2" Received: by smtp.kernel.org (Postfix) with ESMTPS id ACED1C116C6; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775756055; bh=jAsDVJQ8oQe6T+jEbjyp6AmnCBcgc0szzgwGRqjH3gw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=A3wbfSa2bhg26atLrWC6YMom5uCnH1XBSRiwqkXXJiluM2a8XwobrjEe7n+lM4EjG B54FMYcGZe7/BUDi6k8LoQtYlVm7geRq40tFa7ySZ1vpoPm7Jjv3iR/X8rUsBQJRzI IxnP1vH87afSlojXO3q0fCUKu6Oqp7EakJPgAxmiaC8q2ndlkVZ/j/jqo+b7Ansi7S YKIvTzpgauHHltz7LmuSOs9uoJT6IrKmRjO5M1LqJLheHKfAd5gmGrF6FOUYdzjZTk QPKaIqiecEDqtmPzF/C6cRvm6uWNzV1jcD0mc+7W4tzPYfrSq+iJIxbwDTgb+bK2u6 iAXPXTXAi3cYg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A3B5EF364A8; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 09 Apr 2026 23:04:15 +0530 Subject: [PATCH v3 4/5] net: qrtr: ns: Limit the total number of nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260409-qrtr-fix-v3-4-00a8a5ff2b51@oss.qualcomm.com> References: <20260409-qrtr-fix-v3-0-00a8a5ff2b51@oss.qualcomm.com> In-Reply-To: <20260409-qrtr-fix-v3-0-00a8a5ff2b51@oss.qualcomm.com> To: Manivannan Sadhasivam , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: linux-arm-msm@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2122; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=8Z7zm8D//7k5Avg5HWQBlF08Jj61fVMYPl3P8cP1MWk=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp1+MV1XPr83Nla9ublSdPz04N4bvw4OBEX49ZU D74mOz5HwSJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCadfjFQAKCRBVnxHm/pHO 9dUWB/9k0KOKftyg7XvdSKNaFZ9Hd6d+D3IDBh3mV8Tqizh6fQceyo+ck4NbE4/Df0Dr2H+v0W7 S13eMeZa/shDshMU+AdEo7hMOZRjMPP/4BS4FUC7rPmt2bNfpfgAISo9boKhZb84Wiendde/f0A Zq6njJo4mL9fOWsKJoKjwBZ3cUCqUad2GBjCY9al9/h/kVTfLngNIWAZxy1If/iDtb1ctA/MqUI lbz3+se9aOTH/0MGw4HG9z3toFap7ogLxSspG5Z10VFt86va8EjBylaDHUso9IRyjeRaJ8XtmYG DJQrVyG+QkiESiYWIwWBstMcREpyNoFlrO0iZxw+sID622Kp X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam Currently, the nameserver doesn't limit the number of nodes it handles. This can be an attack vector if a malicious client starts registering random nodes, leading to memory exhaustion. Hence, limit the maximum number of nodes to 64. Note that, limit of 64 is chosen based on the current platform requirements. If requirement changes in the future, this limit can be increased. Cc: stable@vger.kernel.org Fixes: 0c2204a4ad71 ("net: qrtr: Migrate nameservice to kernel from userspa= ce") Signed-off-by: Manivannan Sadhasivam --- net/qrtr/ns.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/net/qrtr/ns.c b/net/qrtr/ns.c index 1b9a90240a68..c0418764470b 100644 --- a/net/qrtr/ns.c +++ b/net/qrtr/ns.c @@ -71,12 +71,16 @@ struct qrtr_node { u32 server_count; }; =20 -/* Max server, lookup limits are chosen based on the current platform requ= irements. - * If the requirement changes in the future, these values can be increased. +/* Max nodes, server, lookup limits are chosen based on the current platfo= rm + * requirements. If the requirement changes in the future, these values ca= n be + * increased. */ +#define QRTR_NS_MAX_NODES 64 #define QRTR_NS_MAX_SERVERS 256 #define QRTR_NS_MAX_LOOKUPS 64 =20 +static u8 node_count; + static struct qrtr_node *node_get(unsigned int node_id) { struct qrtr_node *node; @@ -85,6 +89,11 @@ static struct qrtr_node *node_get(unsigned int node_id) if (node) return node; =20 + if (node_count >=3D QRTR_NS_MAX_NODES) { + pr_err_ratelimited("QRTR clients exceed max node limit!\n"); + return NULL; + } + /* If node didn't exist, allocate and insert it to the tree */ node =3D kzalloc_obj(*node); if (!node) @@ -98,6 +107,8 @@ static struct qrtr_node *node_get(unsigned int node_id) return NULL; } =20 + node_count++; + return node; } =20 @@ -404,6 +415,7 @@ static int ctrl_cmd_bye(struct sockaddr_qrtr *from) delete_node: xa_erase(&nodes, from->sq_node); kfree(node); + node_count--; =20 return ret; } --=20 2.51.0 From nobody Sun Jun 14 16:05:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 03BD03DA5A9; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775756056; cv=none; b=HFdp6QCT/J3iKn9OBeJXbxaD34TZWXmlWiXCKl1SH3aMUpYW7WG7qe0B5zTzf1WiG0cYy1EAA4rK2lDdVPJ9Xcu3atI77ZG4JOXKi33qXRNeQtO8+4l4Q9pyY7aW8F8GFczk5SJrA/emrIa6i1a/p4nDeUM+dsR7JUccVB8EgDU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775756056; c=relaxed/simple; bh=N2UehBHwD0b+vXSAniQeYmjabyJSqrbaO6Ihq79PUqk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MB80SW/VxD8r4EMTXNlU/givhU4INrtkdI1vTE+5usU4zusW+B+LKqzdsLEU/m8wRNrMjKVa/1guMK635PdJc5sbal1pKRSudvJaKYngyBVCLHAVYmOZZpI3Pcoe93lMQHpkLg++lOOxtOU4IwZwcIOAAD8Xr+45Jx8SZ6AiZ4Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TM1vo6yM; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TM1vo6yM" Received: by smtp.kernel.org (Postfix) with ESMTPS id BEBB6C2BCB8; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775756055; bh=N2UehBHwD0b+vXSAniQeYmjabyJSqrbaO6Ihq79PUqk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=TM1vo6yMBmYlwaV09HmXkFIhYUlGg8werx667FxcV3ieXu4HCLHcgMJ1GSXQ1hKgV SpLh6wM5TC4po8GAVGEWda0fR+ddl8OLRHdNaOWIaZbWFQzOiM+v+mJ9N6Mif5HffF vNVEJFgjvS1m8RhBmgXppRFvfdx1hHPuov/1AKCB1/BdVYP41bcPMJesxRli6j1ePD TdRJ6HgjVRnM+qzyggj7DwIPOiQChECVQRNU23EVkV2iI0DRSo+od9qPdhO42NHu7A eIHWndf70OKFzyGz8k4uxkX5IX2WAufbhxWdQyerLhHZUS1pcHKQ9/S1rb1lWa+zkX fK7tSiPKgvgNA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3E20F364AB; Thu, 9 Apr 2026 17:34:15 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Thu, 09 Apr 2026 23:04:16 +0530 Subject: [PATCH v3 5/5] net: qrtr: ns: Fix use-after-free in driver remove() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260409-qrtr-fix-v3-5-00a8a5ff2b51@oss.qualcomm.com> References: <20260409-qrtr-fix-v3-0-00a8a5ff2b51@oss.qualcomm.com> In-Reply-To: <20260409-qrtr-fix-v3-0-00a8a5ff2b51@oss.qualcomm.com> To: Manivannan Sadhasivam , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: linux-arm-msm@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2278; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=V/lNXK246ObIRyadcl4o0mX29UnERYEL429gbGnbvt4=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBp1+MVFmkz3GrDM1VqrwI42KBiIO7BWLpIpODKV oobcMdu7pWJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCadfjFQAKCRBVnxHm/pHO 9bIeB/9ukjNf14yQzyuXLftfQliy2vooFgxNwaNzjdTiAARnXiRD+7S7cZpIGbe5ESd5uCHrbo5 29tR2KpOjgkcgImZiPFVLg+gKmdczsj4USWqRFhCutPfaFIMpiKGa147FzqXkRt8UkbsNLrGtVI pjj8hLUT21okm3/YKKxvwDOfSsdB+P7KUH8NbMAntUekbw1M8o+JKwdCkEWjOtR3NPcaLaYpY73 uIsc+5/IYdBLzOUOoBKxr0Kva6M0lBTlDEwxApY7HejF+P4j/eqbi+jN33FPVAq+GxSDfSRKoig Qiq9yIX5Lm7ah6lCe/7g/6/OhMGUkGZZfYMdVReK8VVI3PkC X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Endpoint-Received: by B4 Relay for manivannan.sadhasivam@oss.qualcomm.com/default with auth_id=461 X-Original-From: Manivannan Sadhasivam Reply-To: manivannan.sadhasivam@oss.qualcomm.com From: Manivannan Sadhasivam In the remove callback, if a packet arrives after destroy_workqueue() is called, but before sock_release(), the qrtr_ns_data_ready() callback will try to queue the work, causing use-after-free issue. Fix this issue by saving the default 'sk_data_ready' callback during qrtr_ns_init() and use it to replace the qrtr_ns_data_ready() callback at the start of remove(). This ensures that even if a packet arrives after destroy_workqueue(), the work struct will not be dereferenced. Note that it is also required to ensure that the RX threads are completed before destroying the workqueue, because the threads could be using the qrtr_ns_data_ready() callback. Cc: stable@vger.kernel.org Fixes: 0c2204a4ad71 ("net: qrtr: Migrate nameservice to kernel from userspa= ce") Signed-off-by: Manivannan Sadhasivam --- net/qrtr/ns.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/net/qrtr/ns.c b/net/qrtr/ns.c index c0418764470b..b3f9bbcf9ab9 100644 --- a/net/qrtr/ns.c +++ b/net/qrtr/ns.c @@ -25,6 +25,7 @@ static struct { u32 lookup_count; struct workqueue_struct *workqueue; struct work_struct work; + void (*saved_data_ready)(struct sock *sk); int local_node; } qrtr_ns; =20 @@ -757,6 +758,7 @@ int qrtr_ns_init(void) goto err_sock; } =20 + qrtr_ns.saved_data_ready =3D qrtr_ns.sock->sk->sk_data_ready; qrtr_ns.sock->sk->sk_data_ready =3D qrtr_ns_data_ready; =20 sq.sq_port =3D QRTR_PORT_CTRL; @@ -797,6 +799,10 @@ int qrtr_ns_init(void) return 0; =20 err_wq: + write_lock_bh(&qrtr_ns.sock->sk->sk_callback_lock); + qrtr_ns.sock->sk->sk_data_ready =3D qrtr_ns.saved_data_ready; + write_unlock_bh(&qrtr_ns.sock->sk->sk_callback_lock); + destroy_workqueue(qrtr_ns.workqueue); err_sock: sock_release(qrtr_ns.sock); @@ -806,7 +812,12 @@ EXPORT_SYMBOL_GPL(qrtr_ns_init); =20 void qrtr_ns_remove(void) { + write_lock_bh(&qrtr_ns.sock->sk->sk_callback_lock); + qrtr_ns.sock->sk->sk_data_ready =3D qrtr_ns.saved_data_ready; + write_unlock_bh(&qrtr_ns.sock->sk->sk_callback_lock); + cancel_work_sync(&qrtr_ns.work); + synchronize_net(); destroy_workqueue(qrtr_ns.workqueue); =20 /* sock_release() expects the two references that were put during --=20 2.51.0