From nobody Tue Apr 7 14:05:30 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 7D63B3C9EC0; Fri, 3 Apr 2026 16:06:20 +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=1775232380; cv=none; b=ftfPHtgEraM0XBcxFObVvXaGmgQjYKohZ+Ed/XxsL/nH5vClOMsJBjB2YsXALTGzBgyvmo6aqZ5F8DZAoCWRZUVhv8KNPjKX2o/beEPvhjAaRue+l34K3gWWcUlOHZ2D3uHIkBYVUkVxyYb8cZ58guEaxIPUZzaulMj2Nak+PJU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775232380; c=relaxed/simple; bh=Ia3tPnC56tz9K91w3AqY0ZvMpakxHnNBSGZqH3L/LfI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lUKjMzwrPqBJod020+WPrt+xiJRxXDZ+iX7z5TmbwgI28nMGomoM3axG0WnkaEGK+0fwxkwPKqptCfdHPxGr2B3Q8Qb6XM+NHXoQ2VXjT2KqqAI8dd4dSKO7AUbsb6l4yHp7S3mBvlUrh1+1bEaKicgeRQo+KMOisBtYqH4GkQU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VOlmxn3H; 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="VOlmxn3H" Received: by smtp.kernel.org (Postfix) with ESMTPS id 47088C2BCB0; Fri, 3 Apr 2026 16:06:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775232380; bh=Ia3tPnC56tz9K91w3AqY0ZvMpakxHnNBSGZqH3L/LfI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=VOlmxn3Hk+OoRC/P7eToZofNkcsKv4vceXjh5/L6ff7BBU+vZCO3daYkqr1Yw6Vgk 561+9s9MdOvByjMDEe4Kla+Qz32mAbL/mK3BcwJPTPyg15oscnogWP6To/RvsnUrls 9Y+pBtZ7wzwwN6wtfn1Sn2CQx1TxHCwrSKo3OSzShDCRGuVyp1OAz9J0XbgFMrRBTx 5OY+FuFmnThW7FiJ7r9IJeuo99DJZ2vZY1UjC/QU4nFe6e9YM/sytwdq2iyxGVpBaF 8Kg/Ytoaam5HSOXrnB0ig1OAtqhPTJ+S7obbmjJn3TezTMXi+sBlqlb4NBcb+0j87b ve3zzucJPNVaA== 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 332ECE8537A; Fri, 3 Apr 2026 16:06:20 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Fri, 03 Apr 2026 21:36:04 +0530 Subject: [PATCH v2 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: <20260403-qrtr-fix-v2-1-f88a14859c63@oss.qualcomm.com> References: <20260403-qrtr-fix-v2-0-f88a14859c63@oss.qualcomm.com> In-Reply-To: <20260403-qrtr-fix-v2-0-f88a14859c63@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+kc71AcsmYgBpz+V5iWagZ44B/XtW7bzTMm3VyehS81n6rAV5x HloeQgFVx2JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCac/leQAKCRBVnxHm/pHO 9bl6B/9U8q+zrFV+Ph4OxVYjcFNBcyIYhtED6MZXpaAi9D+8JT7Tt0mCjQ0KSvr9q03N6NYRjQD 8+ALUxMYQ/5Tofa835NJS0WlNXm9/cQBFVo1kIDld6M17VA1/LiKOElIZQpdMbQ2N4pXKwj0+qi +ARQ8JCMj+1zx9LFMYB6a12ILPKlDNTDs0mA2ysGFNdLoc8nGZtfCOoN5kXUS4EBfOCWRhEHz3e nP1iHVTvtjUtzwMSMyeHRuaB/sz+8MmV0fUr5tl5q428wW6sAbqFEpUxssM7o4LcU2TQO2L/8Em dDyjnfpDUZPEGBunp2MuqT49INb1bJNl0fQk4I/eVm5KiMFd 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