Commit cd6d627f authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'mptcp-various-small-and-unrelated-improvements'

Matthieu Baerts says:

====================
mptcp: various small and unrelated improvements

Here are various unrelated patches:

- Patch 1: sched: remove unused structure.

- Patch 2: sched: split the validation part, a preparation for later.

- Patch 3: pm: clarify code, not to think there is a possible UaF.
  Note: a previous version has already been sent individually to Netdev.

- Patch 4: subflow: simplify subflow_hmac_valid by passing subflow_req.

- Patch 5: mib: add counter for MPJoin rejected by the PM.

- Patch 6: selftests: validate this new MPJoinRejected counter.

- Patch 7: selftests: define nlh variable only where needed.

- Patch 8: selftests: show how to use IPPROTO_MPTCP with getaddrinfo.
  Note: a previous version has already been sent individually to Netdev.

v1: https://lore.kernel.org/20250411-net-next-mptcp-sched-mib-sft-misc-v1-0-85ac8c6654c3@kernel.org
====================

Link: https://patch.msgid.link/20250413-net-next-mptcp-sched-mib-sft-misc-v2-0-0f83a4350150@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents f15e4106 a862771d
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -101,18 +101,9 @@ struct mptcp_out_options {
#define MPTCP_SCHED_MAX		128
#define MPTCP_SCHED_BUF_MAX	(MPTCP_SCHED_NAME_MAX * MPTCP_SCHED_MAX)

#define MPTCP_SUBFLOWS_MAX	8

struct mptcp_sched_data {
	u8	subflows;
	struct mptcp_subflow_context *contexts[MPTCP_SUBFLOWS_MAX];
};

struct mptcp_sched_ops {
	int (*get_send)(struct mptcp_sock *msk,
			struct mptcp_sched_data *data);
	int (*get_retrans)(struct mptcp_sock *msk,
			   struct mptcp_sched_data *data);
	int (*get_send)(struct mptcp_sock *msk);
	int (*get_retrans)(struct mptcp_sock *msk);

	char			name[MPTCP_SCHED_NAME_MAX];
	struct module		*owner;
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ static const struct snmp_mib mptcp_snmp_list[] = {
	SNMP_MIB_ITEM("MPJoinSynAckHMacFailure", MPTCP_MIB_JOINSYNACKMAC),
	SNMP_MIB_ITEM("MPJoinAckRx", MPTCP_MIB_JOINACKRX),
	SNMP_MIB_ITEM("MPJoinAckHMacFailure", MPTCP_MIB_JOINACKMAC),
	SNMP_MIB_ITEM("MPJoinRejected", MPTCP_MIB_JOINREJECTED),
	SNMP_MIB_ITEM("MPJoinSynTx", MPTCP_MIB_JOINSYNTX),
	SNMP_MIB_ITEM("MPJoinSynTxCreatSkErr", MPTCP_MIB_JOINSYNTXCREATSKERR),
	SNMP_MIB_ITEM("MPJoinSynTxBindErr", MPTCP_MIB_JOINSYNTXBINDERR),
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ enum linux_mptcp_mib_field {
	MPTCP_MIB_JOINSYNACKMAC,	/* HMAC was wrong on SYN/ACK + MP_JOIN */
	MPTCP_MIB_JOINACKRX,		/* Received an ACK + MP_JOIN */
	MPTCP_MIB_JOINACKMAC,		/* HMAC was wrong on ACK + MP_JOIN */
	MPTCP_MIB_JOINREJECTED,		/* The PM rejected the JOIN request */
	MPTCP_MIB_JOINSYNTX,		/* Sending a SYN + MP_JOIN */
	MPTCP_MIB_JOINSYNTXCREATSKERR,	/* Not able to create a socket when sending a SYN + MP_JOIN */
	MPTCP_MIB_JOINSYNTXBINDERR,	/* Not able to bind() the address when sending a SYN + MP_JOIN */
+4 −1
Original line number Diff line number Diff line
@@ -151,10 +151,13 @@ bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
				     const struct mptcp_addr_info *addr)
{
	struct mptcp_pm_add_entry *entry;
	bool ret;

	entry = mptcp_pm_del_add_timer(msk, addr, false);
	ret = entry;
	kfree(entry);
	return entry;

	return ret;
}

bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock *sk)
+3 −1
Original line number Diff line number Diff line
@@ -3527,8 +3527,10 @@ bool mptcp_finish_join(struct sock *ssk)
		return true;
	}

	if (!mptcp_pm_allow_new_subflow(msk))
	if (!mptcp_pm_allow_new_subflow(msk)) {
		MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_JOINREJECTED);
		goto err_prohibited;
	}

	/* If we can't acquire msk socket lock here, let the release callback
	 * handle it
Loading