MPTCP Linux Development
 help / color / mirror / Atom feed
* [PATCH mptcp-next 0/3] mptcp: fix bug in userspace PM APIs
@ 2022-04-19 23:03 Kishen Maloor
  2022-04-19 23:03 ` [PATCH mptcp-next 1/3] Squash-to: mptcp: netlink: Add MPTCP_PM_CMD_ANNOUNCE Kishen Maloor
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Kishen Maloor @ 2022-04-19 23:03 UTC (permalink / raw)
  To: kishen.maloor, mptcp

This series fixes issue #267:
https://github.com/multipath-tcp/mptcp_net-next/issues/267

Specifically, calls to mptcp_token_get_sock() from userspace PM APIs
hold a reference to the msk which needs to be freed before leaving those
functions. This was causing a memory leak which was caught in
the CI debug build.

Kishen Maloor (3):
  Squash-to: mptcp: netlink: Add MPTCP_PM_CMD_ANNOUNCE
  Squash-to: mptcp: netlink: Add MPTCP_PM_CMD_REMOVE
  Squash-to: mptcp: netlink: allow userspace-driven subflow
    establishment

 net/mptcp/pm_userspace.c | 93 +++++++++++++++++++++++-----------------
 1 file changed, 53 insertions(+), 40 deletions(-)


base-commit: e561667a821b0ecccba582520829f38da50567a3
--
2.31.1

^ permalink raw reply	[flat|nested] 8+ messages in thread
* [PATCH mptcp-next v2 3/3] Squash-to: mptcp: netlink: allow userspace-driven subflow establishment
@ 2022-04-20  4:25 Kishen Maloor
  2022-04-20  6:17 ` Squash-to: mptcp: netlink: allow userspace-driven subflow establishment: Tests Results MPTCP CI
  0 siblings, 1 reply; 8+ messages in thread
From: Kishen Maloor @ 2022-04-20  4:25 UTC (permalink / raw)
  To: kishen.maloor, mptcp

Signed-off-by: Kishen Maloor <kishen.maloor@intel.com>
---
 net/mptcp/pm_userspace.c | 59 ++++++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 27 deletions(-)

diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index bd8b692c60c4..f56378e4f597 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -251,13 +251,13 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
 	struct mptcp_addr_info addr_r;
 	struct mptcp_addr_info addr_l;
 	struct mptcp_sock *msk;
+	int err = -EINVAL;
 	struct sock *sk;
 	u32 token_val;
-	int ret;
 
 	if (!laddr || !raddr || !token) {
 		GENL_SET_ERR_MSG(info, "missing required inputs");
-		return -EINVAL;
+		return err;
 	}
 
 	token_val = nla_get_u32(token);
@@ -265,39 +265,41 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
 	msk = mptcp_token_get_sock(genl_info_net(info), token_val);
 	if (!msk) {
 		NL_SET_ERR_MSG_ATTR(info->extack, token, "invalid token");
-		return -EINVAL;
+		return err;
 	}
 
 	if (!mptcp_pm_is_userspace(msk)) {
 		GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected");
-		return -EINVAL;
+		goto create_err;
 	}
 
-	ret = mptcp_pm_parse_addr(laddr, info, &addr_l);
-	if (ret < 0) {
+	err = mptcp_pm_parse_addr(laddr, info, &addr_l);
+	if (err < 0) {
 		NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
-		return -EINVAL;
+		goto create_err;
 	}
 
 	if (addr_l.id == 0) {
 		NL_SET_ERR_MSG_ATTR(info->extack, laddr, "missing local addr id");
-		return -EINVAL;
+		goto create_err;
 	}
 
-	ret = mptcp_pm_parse_addr(raddr, info, &addr_r);
-	if (ret < 0) {
+	err = mptcp_pm_parse_addr(raddr, info, &addr_r);
+	if (err < 0) {
 		NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
-		return -EINVAL;
+		goto create_err;
 	}
 
 	sk = &msk->sk.icsk_inet.sk;
 	lock_sock(sk);
 
-	ret = __mptcp_subflow_connect(sk, &addr_l, &addr_r);
+	err = __mptcp_subflow_connect(sk, &addr_l, &addr_r);
 
 	release_sock(sk);
 
-	return ret;
+ create_err:
+	sock_put((struct sock *)msk);
+	return err;
 }
 
 static struct sock *mptcp_nl_find_ssk(struct mptcp_sock *msk,
@@ -366,12 +368,12 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct genl_info *info)
 	struct mptcp_addr_info addr_r;
 	struct mptcp_sock *msk;
 	struct sock *sk, *ssk;
+	int err = -EINVAL;
 	u32 token_val;
-	int ret;
 
 	if (!laddr || !raddr || !token) {
 		GENL_SET_ERR_MSG(info, "missing required inputs");
-		return -EINVAL;
+		return err;
 	}
 
 	token_val = nla_get_u32(token);
@@ -379,34 +381,34 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct genl_info *info)
 	msk = mptcp_token_get_sock(genl_info_net(info), token_val);
 	if (!msk) {
 		NL_SET_ERR_MSG_ATTR(info->extack, token, "invalid token");
-		return -EINVAL;
+		return err;
 	}
 
 	if (!mptcp_pm_is_userspace(msk)) {
 		GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected");
-		return -EINVAL;
+		goto destroy_err;
 	}
 
-	ret = mptcp_pm_parse_addr(laddr, info, &addr_l);
-	if (ret < 0) {
+	err = mptcp_pm_parse_addr(laddr, info, &addr_l);
+	if (err < 0) {
 		NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
-		return ret;
+		goto destroy_err;
 	}
 
-	ret = mptcp_pm_parse_addr(raddr, info, &addr_r);
-	if (ret < 0) {
+	err = mptcp_pm_parse_addr(raddr, info, &addr_r);
+	if (err < 0) {
 		NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
-		return ret;
+		goto destroy_err;
 	}
 
 	if (addr_l.family != addr_r.family) {
 		GENL_SET_ERR_MSG(info, "address families do not match");
-		return -EINVAL;
+		goto destroy_err;
 	}
 
 	if (!addr_l.port || !addr_r.port) {
 		GENL_SET_ERR_MSG(info, "missing local or remote port");
-		return -EINVAL;
+		goto destroy_err;
 	}
 
 	sk = &msk->sk.icsk_inet.sk;
@@ -416,9 +418,12 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct genl_info *info)
 
 		mptcp_subflow_shutdown(sk, ssk, RCV_SHUTDOWN | SEND_SHUTDOWN);
 		mptcp_close_ssk(sk, ssk, subflow);
+		err = 0;
 	} else {
-		ret = -ESRCH;
+		err = -ESRCH;
 	}
 
-	return ret;
+ destroy_err:
+	sock_put((struct sock *)msk);
+	return err;
 }
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-04-20  6:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-19 23:03 [PATCH mptcp-next 0/3] mptcp: fix bug in userspace PM APIs Kishen Maloor
2022-04-19 23:03 ` [PATCH mptcp-next 1/3] Squash-to: mptcp: netlink: Add MPTCP_PM_CMD_ANNOUNCE Kishen Maloor
2022-04-20  1:04   ` Geliang Tang
2022-04-19 23:03 ` [PATCH mptcp-next 2/3] Squash-to: mptcp: netlink: Add MPTCP_PM_CMD_REMOVE Kishen Maloor
2022-04-19 23:03 ` [PATCH mptcp-next 3/3] Squash-to: mptcp: netlink: allow userspace-driven subflow establishment Kishen Maloor
2022-04-20  1:02   ` Squash-to: mptcp: netlink: allow userspace-driven subflow establishment: Tests Results MPTCP CI
2022-04-19 23:22 ` [PATCH mptcp-next 0/3] mptcp: fix bug in userspace PM APIs Mat Martineau
  -- strict thread matches above, loose matches on Subject: below --
2022-04-20  4:25 [PATCH mptcp-next v2 3/3] Squash-to: mptcp: netlink: allow userspace-driven subflow establishment Kishen Maloor
2022-04-20  6:17 ` Squash-to: mptcp: netlink: allow userspace-driven subflow establishment: Tests Results MPTCP CI

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox