From nobody Tue Apr 7 12:23:28 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 From nobody Tue Apr 7 12:23:28 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 7C7BB3C7E0C; 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=Ku/QKUeJDUieZCQxi0WK3OB5xPJjiVc21kUyJzIiBb0dlLuPwvGAUKFHsNSsGEklGRFT/V1VVe2wlBfQrY09vY0eKFUg5CMgCkwW4wIqD/Cw72gBp6yCXdDHgclhGZeS+r74WyF1yU2XZc++ZFMvbKvgfifMklVsC5Xy+6AuodM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775232380; c=relaxed/simple; bh=FkZrOYd4SIthvtaubjUizQIoOvRP4US5d2YU8l/XfTc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pipo9KfILgM0KsFcBMEbLRaYOaFa/ttUWEAIHd1/5smYf0qdBPkwAuPwS/3iD1UGvdeXpRhpSXWzBFQTZYOkDpRcvKT+YJRcTyiDlz8kB8FWxntvRm0Qs1zH0wQFRBERx7zksHIfegY6c4tD8euMnEDxhnx6S2sfL6Z6O6bPJXs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sbzDHC7c; 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="sbzDHC7c" Received: by smtp.kernel.org (Postfix) with ESMTPS id 5193EC2BCB2; 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=FkZrOYd4SIthvtaubjUizQIoOvRP4US5d2YU8l/XfTc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=sbzDHC7cUVgUiah7oXzjamvOfAgIIvT2zgiFChY087D74QjDQZ9HH5HF7t3xgF4Pe KeJ061xYs3zPvodfGOGpJKRPeU9tFkMya4yI484BPXK7ijdcaWxBW+NvD0b+5U8/zH wcPYV93Ch8pKWlTq/39fXXLmvjIHYJJ/YfQAlXiy9/wsjIwy2bUJv9Qvmh8SCW8VbN oWx2vgr6QVCoXu+jCd8NhgekmrcfnU3TJOzdLI+B5V2SCSSTMuLzNx/MCS/YSD8Aq2 cSaaVx4uqOIqGa3H+EnLcFsKHE6bBuJq+JE5lZO8ljc+DCbZBVnOfpJsOinv8RiI25 JZJWyMaDt/IIA== 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 4822DE85380; Fri, 3 Apr 2026 16:06:20 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Fri, 03 Apr 2026 21:36:05 +0530 Subject: [PATCH v2 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: <20260403-qrtr-fix-v2-2-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, 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+kc71AcsmYgBpz+V5NSoe88Fs+mn/8xIznK2nO1RPvTIemSAHh hlrrMj89m+JATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCac/leQAKCRBVnxHm/pHO 9bumB/4qjJ2HMIYIEweuwJYY42DD+Ry/JD69DMQ8cTXFoUTuJK4PACvPqQSeio5PNtKN8y63Fz/ n8VE/iC3xcpd+14dc+gdNPPRqPBvSmox46f0FC0TbkwhRzUkKubwR0ZhxcyQARrkigykzPEF8Xp LmIh1h8IDr0nndYq5UwJrVZi416v07OrSJH4innrm7Mw+uVauBill9zLG4vJT3gBvJYM5q2oJ/k jnLLw6suZd+nj1Jlkf2rdsRggSssnT+raxPemEUtjnQgw6MyI9D65zMf+iIqF+JfrLKjK8XVy03 Gy8ppHl41AAwJ4UC7gmoVtCC/Bd+fnbqlqbtJ5kYDzvGX+r4 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 Tue Apr 7 12:23:28 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 9A5A43C9EE2; 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=J9rvWmkzy6hkDpRVjL/DPWBsm1u6qYL/++54DrJK5Gz4zfJGXC9seVU9h3Fub8ZrsbLbF+TM7/arSBEfli6GOyW7qTKuHZUc1ZAxBUkcpHeQvc96bWQpgpl6JaOH3o9Ju2ofhNO2wHbVGya/GKpkg1TFNrsj5hziGqE7kUCsUBc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775232380; c=relaxed/simple; bh=OVA9ySi2NDnxZL1XGji4sBrLrLk0Vex89+jaxSp8wgM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oHPPR+1VcMdCrO5tg23xlZ4G+W8s0AYj8fZrg5xWjQsMMf8Qfs/Pdvu/UtvgtyvpGwsP6/bN8CldPKx90OtS6z3hWjxLi7qsO2ejt1rK7M0IQrvkfGBLmT5pvZnj1AWyfJX6Rzw5tWuamO64f75P97X+O76zEiW4LHi9EgTPrX4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hMg1HUCT; 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="hMg1HUCT" Received: by smtp.kernel.org (Postfix) with ESMTPS id 6ABF9C4AF0C; 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=OVA9ySi2NDnxZL1XGji4sBrLrLk0Vex89+jaxSp8wgM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=hMg1HUCTuyDeVGx97Qv8ZxKQ+SQCQiaYkz2Z1RO1Mevkcggl6ZsJeqkevFVjVJA89 IeN3kanqFQSo/2QHlS1xMNUgEOYzZ0WfEoKsVwKjXZAxzg5Kio1+pyW6sCs4q6RRUG JGRH542ieaq5WdKgoEQFXAuDH/Kg9BujQStMcTeBZjQn4xDQ5bCY/OHRgnevdU/oOr eYJrp2ihLAkhg7oJwRHb1ZkLCthbkTtD8Hlf7K4O+Dv90Qmt+OUkglSlS2uEqbST0Q oLibVpv+hJ8AqI6SDMb8btH6P7QqmYi3f+fdAXKQptl51ONySN5qoS8jOuOADrvDBI qdkkU3UuYAFFg== 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 5D62BE8537F; Fri, 3 Apr 2026 16:06:20 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Fri, 03 Apr 2026 21:36:06 +0530 Subject: [PATCH v2 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: <20260403-qrtr-fix-v2-3-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, Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1899; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=/IYkRv6TPT121VtWWvMGCswFaIzLb9VKFEQbapivX0Q=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpz+V5/dD8PbvIUlqd0cZdQwy4HKVv9WbX7+cOM ACM0pPpT2iJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCac/leQAKCRBVnxHm/pHO 9f3AB/474jeE5ogQivj26joZxxPOfK7BJtqUVJPmApO/uhzYcsqAwTA9TAJMgfDZNJ5yE7uHIuH bpMxWSe9wPrhLeAG1sD+xg114iQAvNPyeIO9q50MYf0Q5XK3Wv4NBm9PVKg5swtbUtwhniw0UZf 1YrdxMc41+yof73Kp0hOrB7RNSqxrl5Y2fppGtDYudx3oTLcGHGPhm5Yt19fPHhPZajLDDRg5op VMDxwcPGsvMx1JiZufRvekQ+RyWOJf9LMSs+VbUbnEuSdcTm3EAROtejcSME000uOjTb3tx4Lia OGCOuGjfEI8QRHqnfdrMljj4IklEscCQLniZ1kqCfnKSIGCT 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 | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/net/qrtr/ns.c b/net/qrtr/ns.c index 5b08d4d4840a..c95014673135 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,15 @@ 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; + +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 Tue Apr 7 12:23:28 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 9AC253C9EF7; 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=ALTG+xdNxdIJrW0bnu5MaYhe+hKKiddNFyfnybrh1wEu07b7dFqx0qx140LFMXVIbWPtx2V15Rr7V4VVXO88ocLbR6qtP4FkeeT7tFJS6xyOQXm1R4glZ/4FDR4ZmMzDxmPQwF11s81dL0xAUEiUu1JENuIG5JOCozVyrrAOx1I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775232380; c=relaxed/simple; bh=+IreoY8ybxDW/7yXddV+9PeSVyOUT80MAS4QP+12A3c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BzctCkjgRC/JjVFMMEqUQ8JpJUGvwD1pF23vuMN6f8eKghXK+ZIyCVtC1ht5u18uA1lZAO+3BFqHxTPFFcRYUnT+NSWmfC3A/qGsx15YmKlLhGf65u1cW4joWpQ5aDPZvNKf9F5hCDRn3xjg7SGLL2nY4+XhHgT88A+gDOZm5q0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gXxhTLMH; 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="gXxhTLMH" Received: by smtp.kernel.org (Postfix) with ESMTPS id 7C526C4CEF7; 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=+IreoY8ybxDW/7yXddV+9PeSVyOUT80MAS4QP+12A3c=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=gXxhTLMHLxIN4e6PrEEUAylzc/yjNi5kUHkH8HkvOI5+g1tDM/88afxZelbYObUYJ 7mffASG8su8DVcsr2sbHD/mQNzWTrkbuBTCqV7VDPqCZ5IsHNprUyOVsT/c+BN29Fh hGCRuOxYQEHN16m/deTECLdE4j8ca4G3EVMYSmn3RFTfnmINxWkhimXiUHAMRXqkdF qb8Jp8exhZmdRWQ/R2wNHG8zeYGtcpAlhdyR+X+cJUA2xva9c3FSwFIyanRUBx1F/I 8pBDa8usoBRg1qzcrPPbvxamKiqEiTo5XLJFcv6kS7fUhv6yEh3A0aliTFBuelzdtd 0iKQrmIm74p0g== 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 7246CE85371; Fri, 3 Apr 2026 16:06:20 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Fri, 03 Apr 2026 21:36:07 +0530 Subject: [PATCH v2 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: <20260403-qrtr-fix-v2-4-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, 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=8L5m2aoKXkyeJv+ghcGBYXrQ5c+E3LaZMPU6xmIYTgM=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpz+V5uTT45q8F9iGETlriRibWydTqxwbT0kUTd h2ndpUVMAiJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCac/leQAKCRBVnxHm/pHO 9ZJoB/9bB8AF7kRMXLBnfps7v/P6Wt4RbCQjgGtv3WTb3y6IiMejy1SWtaZG1SPDh/8kVZZpbKR UildFw4+/tjG9orpzv4ZatzCSBzbtMYdwJb/yrYdNO/+MXhIntsN9ftncYoocSfucrrcOj9aQ0x /hSBrHVkRoa40UR+xrRG6VzwUj595J7QnbPpKqrNyT9o2KwWbh8luOU95eVYleGXwnvk3b8MsRx nv/uqnJcyPsF8bX802BafzasOwqQutSGqvXIMtuUQ4voBTxG43wFh/0nJ6EvTJHO+lBwLCvaIQc nVj7F8J3FnhiusAgokQBtGIMvXygTVeLGGLdpAp4Xwu7IHf1 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 c95014673135..dfb5dad9473c 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 @@ -401,6 +412,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 Tue Apr 7 12:23:28 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 AF0313CCFAA; 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=UAwGuLtF057Q5M3jlylYWM4eWRQ2QluDZaXl3NYtnUZ9ea3Y8lvqLtFLWWGQl4SqaqiptmsbPAw5+kwb8IeSa7wyY8hagAxWcKBaHccCAJvY6NGgvxKDD02AXwtSWS//EyWxoZaoIgNJRzjOXuqVFK2ukDbtg0RVVzZjAE/0hNg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775232380; c=relaxed/simple; bh=RckRdf53GDiyrrla3oj4hAD/DNKxx6grhyOozCqDgGk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Lnj9C+dmss+4W4wgvC+1LD0Q5IB+vwgvO+egbZNUlPTxinEF/tSgruQ5Nnv46zDtCFBcfj/esBoj4cNO3GHhSVbfPHznQDnZEdfKkaTIerELpICSgRyQmDq8iuBBQivYb+skbSLEH9xX1/pMuxBRGaP+qPHqK/qEe3k7uhqB/zs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eQPiLmjo; 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="eQPiLmjo" Received: by smtp.kernel.org (Postfix) with ESMTPS id 8CD30C2BCB1; 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=RckRdf53GDiyrrla3oj4hAD/DNKxx6grhyOozCqDgGk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=eQPiLmjouzXSU4RKCt1QNDmyKpx6hGTo4t0e+rtTzqN2lbZ8alZMfGnrOumHoVbNc AKLrexeniymhQyKbQvw+MvLqtur7bsHJSu9FRTMo0X4etpXrJSx4hlqZQQy/6fZtIZ 5KMjwE3hxm0b7pHCiH35miUVEV7qXWAjo2j8tO3J3QLkJGUpND6bF19D7ZRROlVN5N gpmxC3OV5U9wFOcIw49oMjZATlQfi0RvRJYOrG4LbEuZ3W+xg2s0eG0tFib2Y2/0ZY L45nBgFpeVYSVf44lOsT2DeiHL5SAoXf7fluo6pEp1kYFcMxZts+2XCIj8q3mBogTe thur9XTGihwvQ== 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 842ACE8537A; Fri, 3 Apr 2026 16:06:20 +0000 (UTC) From: Manivannan Sadhasivam via B4 Relay Date: Fri, 03 Apr 2026 21:36:08 +0530 Subject: [PATCH v2 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: <20260403-qrtr-fix-v2-5-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, Manivannan Sadhasivam X-Mailer: b4 0.15.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1665; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=EKnJBPyE8K/Uxe3dMOqp6oAHc724HrgGM2UtRYAxcbE=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBpz+V58HcsafAzCiDUq93S+ISP2Pv+dqaFAy7vX VMZ11JAjSWJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCac/leQAKCRBVnxHm/pHO 9fZRB/0WRME4UaAPVOxxBfAFS6wZkqdpCyfphwoctFAR7hmeHtgnPcSfuhFz5NvDeBGfpMX4GwZ R2omrFgpOYXH7q+Zzu9nkqY9hFzL1kQSDhqHVVA1mHvvFTaMkH1rxk6F8hDGANaQwsXbpJxm4ks BvvFNB+pmoh+dhddW8cCNLB6Q7feta3EKULMgJQoqxlZOjSqwW39sVybhMQvJjxq5QQT6/H1mYQ wz2sLHbGI2KJ2y5gxq2P2RnsEFz8NDuWGjFG5xZFwCtB+4DKjvkT0OGTE8a1OUZJ5JNpXSruUyH Ui06PAMD8c+pZGhTPQDU1Obul5IXePJYBlp0rahYZYCa1RM9 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. 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 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/net/qrtr/ns.c b/net/qrtr/ns.c index dfb5dad9473c..c62d79e03d64 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 @@ -754,6 +755,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; @@ -803,6 +805,10 @@ 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); destroy_workqueue(qrtr_ns.workqueue); =20 --=20 2.51.0