mptcp: do not fill info not used by the PM in used
authorMatthieu Baerts <matthieu.baerts@tessares.net>
Mon, 27 Mar 2023 10:22:23 +0000 (12:22 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 29 Mar 2023 08:01:28 +0000 (09:01 +0100)
Only the in-kernel PM uses the number of address and subflow limits
allowed per connection.

It then makes more sense not to display such info when other PMs are
used not to confuse the userspace by showing limits not being used.

While at it, we can get rid of the "val" variable and add indentations
instead.

It would have been good to have done this modification directly in
commit 4d25247d3ae4 ("mptcp: bypass in-kernel PM restrictions for non-kernel PMs")
but as we change a bit the behaviour, it is fine not to backport it to
stable.

Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/mptcp/sockopt.c

index 5cef4d3..b655ceb 100644 (file)
@@ -885,7 +885,6 @@ out:
 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info)
 {
        u32 flags = 0;
-       u8 val;
 
        memset(info, 0, sizeof(*info));
 
@@ -893,12 +892,19 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info)
        info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled);
        info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted);
        info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used);
-       info->mptcpi_subflows_max = mptcp_pm_get_subflows_max(msk);
-       val = mptcp_pm_get_add_addr_signal_max(msk);
-       info->mptcpi_add_addr_signal_max = val;
-       val = mptcp_pm_get_add_addr_accept_max(msk);
-       info->mptcpi_add_addr_accepted_max = val;
-       info->mptcpi_local_addr_max = mptcp_pm_get_local_addr_max(msk);
+
+       /* The following limits only make sense for the in-kernel PM */
+       if (mptcp_pm_is_kernel(msk)) {
+               info->mptcpi_subflows_max =
+                       mptcp_pm_get_subflows_max(msk);
+               info->mptcpi_add_addr_signal_max =
+                       mptcp_pm_get_add_addr_signal_max(msk);
+               info->mptcpi_add_addr_accepted_max =
+                       mptcp_pm_get_add_addr_accept_max(msk);
+               info->mptcpi_local_addr_max =
+                       mptcp_pm_get_local_addr_max(msk);
+       }
+
        if (test_bit(MPTCP_FALLBACK_DONE, &msk->flags))
                flags |= MPTCP_INFO_FLAG_FALLBACK;
        if (READ_ONCE(msk->can_ack))