diff mbox series

[mptcp-next,v2,07/21] mptcp: netlink: process IPv6 addrs in creating listening sockets

Message ID 20220112221523.1829397-8-kishen.maloor@intel.com (mailing list archive)
State Superseded, archived
Commit df2b5c816e230f2e4ed17897b76ef99234212719
Headers show
Series mptcp: support userspace path management | expand

Checks

Context Check Description
matttbe/checkpatch success total: 0 errors, 0 warnings, 0 checks, 20 lines checked
matttbe/build fail Build error with: -Werror
matttbe/KVM_Validation__normal warning Unstable: 2 failed test(s): packetdrill_add_addr selftest_mptcp_join

Commit Message

Kishen Maloor Jan. 12, 2022, 10:15 p.m. UTC
This change updates mptcp_pm_nl_create_listen_socket() to create
listening sockets bound to IPv6 addresses (where IPv6 is supported).

Signed-off-by: Kishen Maloor <kishen.maloor@intel.com>
---
 net/mptcp/pm_netlink.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Paolo Abeni Jan. 14, 2022, 3:27 p.m. UTC | #1
Hello,

On Wed, 2022-01-12 at 17:15 -0500, Kishen Maloor wrote:
> This change updates mptcp_pm_nl_create_listen_socket() to create
> listening sockets bound to IPv6 addresses (where IPv6 is supported).
> 
> Signed-off-by: Kishen Maloor <kishen.maloor@intel.com>
> ---
>  net/mptcp/pm_netlink.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
> index 4c1895dbc2a5..779ec9d375f0 100644
> --- a/net/mptcp/pm_netlink.c
> +++ b/net/mptcp/pm_netlink.c
> @@ -986,6 +986,7 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
>  					    struct mptcp_pm_addr_entry *entry,
>  					    struct socket **lsk)
>  {
> +	int addrlen = sizeof(struct sockaddr_in);
>  	struct sockaddr_storage addr;
>  	struct mptcp_sock *msk;
>  	struct socket *ssock;
> @@ -1010,8 +1011,11 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
>  	}
>  
>  	mptcp_info2sockaddr(&entry->addr, &addr, entry->addr.family);
> -	err = kernel_bind(ssock, (struct sockaddr *)&addr,
> -			  sizeof(struct sockaddr_in));
> +#if IS_ENABLED(CONFIG_MPTCP_IPV6)
> +	if (entry->addr.family == AF_INET6)
> +		addrlen = sizeof(struct sockaddr_in6);
> +#endif
> +	err = kernel_bind(ssock, (struct sockaddr *)&addr, addrlen);
>  	if (err) {
>  		pr_warn("kernel_bind error, err=%d", err);
>  		goto out;

This looks a bugfix for -net to me?

Possibly worthy additional an additional mp_join self-test for the ipv6
case.

Thanks!

/P
Mat Martineau Jan. 14, 2022, 10:09 p.m. UTC | #2
On Fri, 14 Jan 2022, Paolo Abeni wrote:

> Hello,
>
> On Wed, 2022-01-12 at 17:15 -0500, Kishen Maloor wrote:
>> This change updates mptcp_pm_nl_create_listen_socket() to create
>> listening sockets bound to IPv6 addresses (where IPv6 is supported).
>>

This tag -

Fixes: 1729cf186d8a ("mptcp: create the listening socket for new port")

would help with backporting to stable.

>> Signed-off-by: Kishen Maloor <kishen.maloor@intel.com>
>> ---
>>  net/mptcp/pm_netlink.c | 8 ++++++--
>>  1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
>> index 4c1895dbc2a5..779ec9d375f0 100644
>> --- a/net/mptcp/pm_netlink.c
>> +++ b/net/mptcp/pm_netlink.c
>> @@ -986,6 +986,7 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
>>  					    struct mptcp_pm_addr_entry *entry,
>>  					    struct socket **lsk)
>>  {
>> +	int addrlen = sizeof(struct sockaddr_in);
>>  	struct sockaddr_storage addr;
>>  	struct mptcp_sock *msk;
>>  	struct socket *ssock;
>> @@ -1010,8 +1011,11 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
>>  	}
>>
>>  	mptcp_info2sockaddr(&entry->addr, &addr, entry->addr.family);
>> -	err = kernel_bind(ssock, (struct sockaddr *)&addr,
>> -			  sizeof(struct sockaddr_in));
>> +#if IS_ENABLED(CONFIG_MPTCP_IPV6)
>> +	if (entry->addr.family == AF_INET6)
>> +		addrlen = sizeof(struct sockaddr_in6);
>> +#endif
>> +	err = kernel_bind(ssock, (struct sockaddr *)&addr, addrlen);
>>  	if (err) {
>>  		pr_warn("kernel_bind error, err=%d", err);
>>  		goto out;
>
> This looks a bugfix for -net to me?
>
> Possibly worthy additional an additional mp_join self-test for the ipv6
> case.
>

I agree, this would be good for -net. Kishen can you add the suggested 
selftest too and repost separately for mptcp-net?

--
Mat Martineau
Intel
Kishen Maloor Jan. 19, 2022, 1:25 a.m. UTC | #3
On 1/14/22 2:09 PM, Mat Martineau wrote:
> On Fri, 14 Jan 2022, Paolo Abeni wrote:
> 
>> Hello,
>>
>> On Wed, 2022-01-12 at 17:15 -0500, Kishen Maloor wrote:
>>> This change updates mptcp_pm_nl_create_listen_socket() to create
>>> listening sockets bound to IPv6 addresses (where IPv6 is supported).
>>>
> 
> This tag -
> 
> Fixes: 1729cf186d8a ("mptcp: create the listening socket for new port")
> 
> would help with backporting to stable.
> 
>>> Signed-off-by: Kishen Maloor <kishen.maloor@intel.com>
>>> ---
>>>  net/mptcp/pm_netlink.c | 8 ++++++--
>>>  1 file changed, 6 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
>>> index 4c1895dbc2a5..779ec9d375f0 100644
>>> --- a/net/mptcp/pm_netlink.c
>>> +++ b/net/mptcp/pm_netlink.c
>>> @@ -986,6 +986,7 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
>>>                          struct mptcp_pm_addr_entry *entry,
>>>                          struct socket **lsk)
>>>  {
>>> +    int addrlen = sizeof(struct sockaddr_in);
>>>      struct sockaddr_storage addr;
>>>      struct mptcp_sock *msk;
>>>      struct socket *ssock;
>>> @@ -1010,8 +1011,11 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
>>>      }
>>>
>>>      mptcp_info2sockaddr(&entry->addr, &addr, entry->addr.family);
>>> -    err = kernel_bind(ssock, (struct sockaddr *)&addr,
>>> -              sizeof(struct sockaddr_in));
>>> +#if IS_ENABLED(CONFIG_MPTCP_IPV6)
>>> +    if (entry->addr.family == AF_INET6)
>>> +        addrlen = sizeof(struct sockaddr_in6);
>>> +#endif
>>> +    err = kernel_bind(ssock, (struct sockaddr *)&addr, addrlen);
>>>      if (err) {
>>>          pr_warn("kernel_bind error, err=%d", err);
>>>          goto out;
>>
>> This looks a bugfix for -net to me?

Sure, we can record a bug and the fact that this commit fixes it.

>>
>> Possibly worthy additional an additional mp_join self-test for the ipv6
>> case.
>>
> 
> I agree, this would be good for -net. Kishen can you add the suggested selftest too and repost separately for mptcp-net?
> 

Actually, this path is currently exercised by self-tests in userspace_pm.sh through address 
advertisements from the namespace containing the MPTCP client, for which a listening 
socket is created to subsequently receive MPJs. 

> -- 
> Mat Martineau
> Intel
Mat Martineau Jan. 19, 2022, 7:14 p.m. UTC | #4
On Tue, 18 Jan 2022, Kishen Maloor wrote:

> On 1/14/22 2:09 PM, Mat Martineau wrote:
>> On Fri, 14 Jan 2022, Paolo Abeni wrote:
>>
>>> Hello,
>>>
>>> On Wed, 2022-01-12 at 17:15 -0500, Kishen Maloor wrote:
>>>> This change updates mptcp_pm_nl_create_listen_socket() to create
>>>> listening sockets bound to IPv6 addresses (where IPv6 is supported).
>>>>
>>
>> This tag -
>>
>> Fixes: 1729cf186d8a ("mptcp: create the listening socket for new port")
>>
>> would help with backporting to stable.
>>
>>>> Signed-off-by: Kishen Maloor <kishen.maloor@intel.com>
>>>> ---
>>>>  net/mptcp/pm_netlink.c | 8 ++++++--
>>>>  1 file changed, 6 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
>>>> index 4c1895dbc2a5..779ec9d375f0 100644
>>>> --- a/net/mptcp/pm_netlink.c
>>>> +++ b/net/mptcp/pm_netlink.c
>>>> @@ -986,6 +986,7 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
>>>>                          struct mptcp_pm_addr_entry *entry,
>>>>                          struct socket **lsk)
>>>>  {
>>>> +    int addrlen = sizeof(struct sockaddr_in);
>>>>      struct sockaddr_storage addr;
>>>>      struct mptcp_sock *msk;
>>>>      struct socket *ssock;
>>>> @@ -1010,8 +1011,11 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
>>>>      }
>>>>
>>>>      mptcp_info2sockaddr(&entry->addr, &addr, entry->addr.family);
>>>> -    err = kernel_bind(ssock, (struct sockaddr *)&addr,
>>>> -              sizeof(struct sockaddr_in));
>>>> +#if IS_ENABLED(CONFIG_MPTCP_IPV6)
>>>> +    if (entry->addr.family == AF_INET6)
>>>> +        addrlen = sizeof(struct sockaddr_in6);
>>>> +#endif
>>>> +    err = kernel_bind(ssock, (struct sockaddr *)&addr, addrlen);
>>>>      if (err) {
>>>>          pr_warn("kernel_bind error, err=%d", err);
>>>>          goto out;
>>>
>>> This looks a bugfix for -net to me?
>
> Sure, we can record a bug and the fact that this commit fixes it.
>
>>>
>>> Possibly worthy additional an additional mp_join self-test for the ipv6
>>> case.
>>>
>>
>> I agree, this would be good for -net. Kishen can you add the suggested selftest too and repost separately for mptcp-net?
>>
>
> Actually, this path is currently exercised by self-tests in userspace_pm.sh through address
> advertisements from the namespace containing the MPTCP client, for which a listening
> socket is created to subsequently receive MPJs.

Ok, it's good that it's covered going forward. Re-reading Paolo's comment, 
maybe that was the main purpose of the requested test (rather than adding 
to self test coverage in -stable). Should be enough to have the kernel fix 
itself for the -net patch.

--
Mat Martineau
Intel
diff mbox series

Patch

diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 4c1895dbc2a5..779ec9d375f0 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -986,6 +986,7 @@  static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
 					    struct mptcp_pm_addr_entry *entry,
 					    struct socket **lsk)
 {
+	int addrlen = sizeof(struct sockaddr_in);
 	struct sockaddr_storage addr;
 	struct mptcp_sock *msk;
 	struct socket *ssock;
@@ -1010,8 +1011,11 @@  static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
 	}
 
 	mptcp_info2sockaddr(&entry->addr, &addr, entry->addr.family);
-	err = kernel_bind(ssock, (struct sockaddr *)&addr,
-			  sizeof(struct sockaddr_in));
+#if IS_ENABLED(CONFIG_MPTCP_IPV6)
+	if (entry->addr.family == AF_INET6)
+		addrlen = sizeof(struct sockaddr_in6);
+#endif
+	err = kernel_bind(ssock, (struct sockaddr *)&addr, addrlen);
 	if (err) {
 		pr_warn("kernel_bind error, err=%d", err);
 		goto out;