...
...
34
34
35
The behaviour when there are no errors should then not be modified.
35
The behaviour when there are no errors should then not be modified.
36
36
37
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
37
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
38
---
38
---
39
Changes in v3:
40
- Patch 11: a variable was no longer assigned in pm_userspace.c, but
41
still used in this patch (and no longer in the next one). (Geliang)
42
- Rebased on top of the latest net-next.
43
- Link to v2: https://lore.kernel.org/r/20250117-net-next-mptcp-pm-misc-cleanup-2-v2-0-61d4fe0586e8@kernel.org
44
45
Changes in v2:
46
- Patch 11: a variable was no longer assigned in pm_netlink.c, but still
47
used in this patch (and no longer in the next one). (Simon)
48
- Link to v1: https://lore.kernel.org/r/20250116-net-next-mptcp-pm-misc-cleanup-2-v1-0-c0b43f18fe06@kernel.org
49
50
---
39
Geliang Tang (9):
51
Geliang Tang (9):
40
mptcp: pm: drop info of userspace_pm_remove_id_zero_address
52
mptcp: pm: drop info of userspace_pm_remove_id_zero_address
41
mptcp: pm: userspace: use GENL_REQ_ATTR_CHECK
53
mptcp: pm: userspace: use GENL_REQ_ATTR_CHECK
42
mptcp: pm: make three pm wrappers static
54
mptcp: pm: make three pm wrappers static
43
mptcp: pm: drop skb parameter of get_addr
55
mptcp: pm: drop skb parameter of get_addr
...
...
59
net/mptcp/pm_netlink.c | 129 ++++++++++-------------------
71
net/mptcp/pm_netlink.c | 129 ++++++++++-------------------
60
net/mptcp/pm_userspace.c | 209 +++++++++++++++++++++--------------------------
72
net/mptcp/pm_userspace.c | 209 +++++++++++++++++++++--------------------------
61
net/mptcp/protocol.h | 14 ++--
73
net/mptcp/protocol.h | 14 ++--
62
4 files changed, 225 insertions(+), 213 deletions(-)
74
4 files changed, 225 insertions(+), 213 deletions(-)
63
---
75
---
64
base-commit: b44e27b4df1a1cd3fd84cf26c82156ed0301575f
76
base-commit: 26db4dbb747813b5946aff31485873f071a10332
65
change-id: 20250116-net-next-mptcp-pm-misc-cleanup-2-b0f50eff8084
77
change-id: 20250116-net-next-mptcp-pm-misc-cleanup-2-b0f50eff8084
66
78
67
Best regards,
79
Best regards,
68
--
80
--
69
Matthieu Baerts (NGI0) <matttbe@kernel.org>
81
Matthieu Baerts (NGI0) <matttbe@kernel.org>
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
The only use of 'info' parameter of userspace_pm_remove_id_zero_address()
3
The only use of 'info' parameter of userspace_pm_remove_id_zero_address()
4
is to set an error message into it.
4
is to set an error message into it.
5
5
6
Plus, this helper will only fail when it cannot find any subflows with a
6
Plus, this helper will only fail when it cannot find any subflows with a
7
local address ID 0.
7
local address ID 0.
8
8
9
This patch drops this parameter and sets the error message where this
9
This patch drops this parameter and sets the error message where this
10
function is called in mptcp_pm_nl_remove_doit().
10
function is called in mptcp_pm_nl_remove_doit().
11
11
12
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
12
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
13
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
13
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
14
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
14
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
15
---
15
---
16
net/mptcp/pm_userspace.c | 15 ++++++++-------
16
net/mptcp/pm_userspace.c | 15 ++++++++-------
17
1 file changed, 8 insertions(+), 7 deletions(-)
17
1 file changed, 8 insertions(+), 7 deletions(-)
18
18
19
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
19
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
20
index XXXXXXX..XXXXXXX 100644
20
index XXXXXXX..XXXXXXX 100644
21
--- a/net/mptcp/pm_userspace.c
21
--- a/net/mptcp/pm_userspace.c
22
+++ b/net/mptcp/pm_userspace.c
22
+++ b/net/mptcp/pm_userspace.c
23
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
23
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
24
    return err;
24
    return err;
25
}
25
}
26
26
27
-static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk,
27
-static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk,
28
-                         struct genl_info *info)
28
-                         struct genl_info *info)
29
+static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk)
29
+static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk)
30
{
30
{
31
    struct mptcp_rm_list list = { .nr = 0 };
31
    struct mptcp_rm_list list = { .nr = 0 };
32
    struct mptcp_subflow_context *subflow;
32
    struct mptcp_subflow_context *subflow;
33
@@ -XXX,XX +XXX,XX @@ static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk,
33
@@ -XXX,XX +XXX,XX @@ static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk,
34
            break;
34
            break;
35
        }
35
        }
36
    }
36
    }
37
-    if (!has_id_0) {
37
-    if (!has_id_0) {
38
-        GENL_SET_ERR_MSG(info, "address with id 0 not found");
38
-        GENL_SET_ERR_MSG(info, "address with id 0 not found");
39
+    if (!has_id_0)
39
+    if (!has_id_0)
40
        goto remove_err;
40
        goto remove_err;
41
-    }
41
-    }
42
42
43
    list.ids[list.nr++] = 0;
43
    list.ids[list.nr++] = 0;
44
44
45
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
45
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
46
    sk = (struct sock *)msk;
46
    sk = (struct sock *)msk;
47
47
48
    if (id_val == 0) {
48
    if (id_val == 0) {
49
-        err = mptcp_userspace_pm_remove_id_zero_address(msk, info);
49
-        err = mptcp_userspace_pm_remove_id_zero_address(msk, info);
50
+        err = mptcp_userspace_pm_remove_id_zero_address(msk);
50
+        err = mptcp_userspace_pm_remove_id_zero_address(msk);
51
        goto out;
51
        goto out;
52
    }
52
    }
53
53
54
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
54
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
55
    spin_lock_bh(&msk->pm.lock);
55
    spin_lock_bh(&msk->pm.lock);
56
    match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val);
56
    match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val);
57
    if (!match) {
57
    if (!match) {
58
-        GENL_SET_ERR_MSG(info, "address with specified id not found");
58
-        GENL_SET_ERR_MSG(info, "address with specified id not found");
59
        spin_unlock_bh(&msk->pm.lock);
59
        spin_unlock_bh(&msk->pm.lock);
60
        release_sock(sk);
60
        release_sock(sk);
61
        goto out;
61
        goto out;
62
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
62
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
63
63
64
    err = 0;
64
    err = 0;
65
out:
65
out:
66
+    if (err)
66
+    if (err)
67
+        GENL_SET_ERR_MSG_FMT(info,
67
+        GENL_SET_ERR_MSG_FMT(info,
68
+                 "address with id %u not found",
68
+                 "address with id %u not found",
69
+                 id_val);
69
+                 id_val);
70
+
70
+
71
    sock_put(sk);
71
    sock_put(sk);
72
    return err;
72
    return err;
73
}
73
}
74
74
75
--
75
--
76
2.47.1
76
2.47.1
diff view generated by jsdifflib
1
Since its introduction in commit 892f396c8e68 ("mptcp: netlink: issue
1
Since its introduction in commit 892f396c8e68 ("mptcp: netlink: issue
2
MP_PRIO signals from userspace PMs"), it was mandatory to specify the
2
MP_PRIO signals from userspace PMs"), it was mandatory to specify the
3
remote address, because of the 'if (rem->addr.family == AF_UNSPEC)'
3
remote address, because of the 'if (rem->addr.family == AF_UNSPEC)'
4
check done later one.
4
check done later one.
5
5
6
In theory, this attribute can be optional, but it sounds better to be
6
In theory, this attribute can be optional, but it sounds better to be
7
precise to avoid sending the MP_PRIO on the wrong subflow, e.g. if there
7
precise to avoid sending the MP_PRIO on the wrong subflow, e.g. if there
8
are multiple subflows attached to the same local ID. This can be relaxed
8
are multiple subflows attached to the same local ID. This can be relaxed
9
later on if there is a need to act on multiple subflows with one
9
later on if there is a need to act on multiple subflows with one
10
command.
10
command.
11
11
12
For the moment, the check to see if attr_rem is NULL can be removed,
12
For the moment, the check to see if attr_rem is NULL can be removed,
13
because mptcp_pm_parse_entry() will do this check as well, no need to do
13
because mptcp_pm_parse_entry() will do this check as well, no need to do
14
that differently here.
14
that differently here.
15
15
16
Reviewed-by: Geliang Tang <geliang@kernel.org>
16
Reviewed-by: Geliang Tang <geliang@kernel.org>
17
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
17
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
18
---
18
---
19
net/mptcp/pm_userspace.c | 8 +++-----
19
net/mptcp/pm_userspace.c | 8 +++-----
20
1 file changed, 3 insertions(+), 5 deletions(-)
20
1 file changed, 3 insertions(+), 5 deletions(-)
21
21
22
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
22
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
23
index XXXXXXX..XXXXXXX 100644
23
index XXXXXXX..XXXXXXX 100644
24
--- a/net/mptcp/pm_userspace.c
24
--- a/net/mptcp/pm_userspace.c
25
+++ b/net/mptcp/pm_userspace.c
25
+++ b/net/mptcp/pm_userspace.c
26
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
26
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
27
    if (ret < 0)
27
    if (ret < 0)
28
        goto set_flags_err;
28
        goto set_flags_err;
29
29
30
-    if (attr_rem) {
30
-    if (attr_rem) {
31
-        ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
31
-        ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
32
-        if (ret < 0)
32
-        if (ret < 0)
33
-            goto set_flags_err;
33
-            goto set_flags_err;
34
-    }
34
-    }
35
+    ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
35
+    ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
36
+    if (ret < 0)
36
+    if (ret < 0)
37
+        goto set_flags_err;
37
+        goto set_flags_err;
38
38
39
    if (loc.addr.family == AF_UNSPEC ||
39
    if (loc.addr.family == AF_UNSPEC ||
40
     rem.addr.family == AF_UNSPEC) {
40
     rem.addr.family == AF_UNSPEC) {
41
41
42
--
42
--
43
2.47.1
43
2.47.1
diff view generated by jsdifflib
1
Some errors reported by the userspace PM were vague: "this or that is
1
Some errors reported by the userspace PM were vague: "this or that is
2
invalid".
2
invalid".
3
3
4
It is easier for the userspace to know which part is wrong, instead of
4
It is easier for the userspace to know which part is wrong, instead of
5
having to guess that.
5
having to guess that.
6
6
7
While at it, in mptcp_userspace_pm_set_flags() move the parsing after
7
While at it, in mptcp_userspace_pm_set_flags() move the parsing after
8
the check linked to the local attribute.
8
the check linked to the local attribute.
9
9
10
Reviewed-by: Geliang Tang <geliang@kernel.org>
10
Reviewed-by: Geliang Tang <geliang@kernel.org>
11
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
11
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
12
---
12
---
13
net/mptcp/pm_userspace.c | 31 ++++++++++++++++++++++++-------
13
net/mptcp/pm_userspace.c | 31 ++++++++++++++++++++++++-------
14
1 file changed, 24 insertions(+), 7 deletions(-)
14
1 file changed, 24 insertions(+), 7 deletions(-)
15
15
16
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
16
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
17
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
18
--- a/net/mptcp/pm_userspace.c
18
--- a/net/mptcp/pm_userspace.c
19
+++ b/net/mptcp/pm_userspace.c
19
+++ b/net/mptcp/pm_userspace.c
20
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
20
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
21
        goto announce_err;
21
        goto announce_err;
22
    }
22
    }
23
23
24
-    if (addr_val.addr.id == 0 || !(addr_val.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) {
24
-    if (addr_val.addr.id == 0 || !(addr_val.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) {
25
-        GENL_SET_ERR_MSG(info, "invalid addr id or flags");
25
-        GENL_SET_ERR_MSG(info, "invalid addr id or flags");
26
+    if (addr_val.addr.id == 0) {
26
+    if (addr_val.addr.id == 0) {
27
+        GENL_SET_ERR_MSG(info, "invalid addr id");
27
+        GENL_SET_ERR_MSG(info, "invalid addr id");
28
+        err = -EINVAL;
28
+        err = -EINVAL;
29
+        goto announce_err;
29
+        goto announce_err;
30
+    }
30
+    }
31
+
31
+
32
+    if (!(addr_val.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) {
32
+    if (!(addr_val.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) {
33
+        GENL_SET_ERR_MSG(info, "invalid addr flags");
33
+        GENL_SET_ERR_MSG(info, "invalid addr flags");
34
        err = -EINVAL;
34
        err = -EINVAL;
35
        goto announce_err;
35
        goto announce_err;
36
    }
36
    }
37
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
37
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
38
        goto destroy_err;
38
        goto destroy_err;
39
    }
39
    }
40
40
41
-    if (!addr_l.addr.port || !addr_r.port) {
41
-    if (!addr_l.addr.port || !addr_r.port) {
42
-        GENL_SET_ERR_MSG(info, "missing local or remote port");
42
-        GENL_SET_ERR_MSG(info, "missing local or remote port");
43
+    if (!addr_l.addr.port) {
43
+    if (!addr_l.addr.port) {
44
+        GENL_SET_ERR_MSG(info, "missing local port");
44
+        GENL_SET_ERR_MSG(info, "missing local port");
45
+        err = -EINVAL;
45
+        err = -EINVAL;
46
+        goto destroy_err;
46
+        goto destroy_err;
47
+    }
47
+    }
48
+
48
+
49
+    if (!addr_r.port) {
49
+    if (!addr_r.port) {
50
+        GENL_SET_ERR_MSG(info, "missing remote port");
50
+        GENL_SET_ERR_MSG(info, "missing remote port");
51
        err = -EINVAL;
51
        err = -EINVAL;
52
        goto destroy_err;
52
        goto destroy_err;
53
    }
53
    }
54
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
54
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
55
    if (ret < 0)
55
    if (ret < 0)
56
        goto set_flags_err;
56
        goto set_flags_err;
57
57
58
+    if (loc.addr.family == AF_UNSPEC) {
58
+    if (loc.addr.family == AF_UNSPEC) {
59
+        GENL_SET_ERR_MSG(info, "invalid local address family");
59
+        GENL_SET_ERR_MSG(info, "invalid local address family");
60
+        ret = -EINVAL;
60
+        ret = -EINVAL;
61
+        goto set_flags_err;
61
+        goto set_flags_err;
62
+    }
62
+    }
63
+
63
+
64
    ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
64
    ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
65
    if (ret < 0)
65
    if (ret < 0)
66
        goto set_flags_err;
66
        goto set_flags_err;
67
67
68
-    if (loc.addr.family == AF_UNSPEC ||
68
-    if (loc.addr.family == AF_UNSPEC ||
69
-     rem.addr.family == AF_UNSPEC) {
69
-     rem.addr.family == AF_UNSPEC) {
70
-        GENL_SET_ERR_MSG(info, "invalid address families");
70
-        GENL_SET_ERR_MSG(info, "invalid address families");
71
+    if (rem.addr.family == AF_UNSPEC) {
71
+    if (rem.addr.family == AF_UNSPEC) {
72
+        GENL_SET_ERR_MSG(info, "invalid remote address family");
72
+        GENL_SET_ERR_MSG(info, "invalid remote address family");
73
        ret = -EINVAL;
73
        ret = -EINVAL;
74
        goto set_flags_err;
74
        goto set_flags_err;
75
    }
75
    }
76
76
77
--
77
--
78
2.47.1
78
2.47.1
diff view generated by jsdifflib
1
Some error messages were:
1
Some error messages were:
2
2
3
- too generic: "missing input", "invalid request"
3
- too generic: "missing input", "invalid request"
4
4
5
- not precise enough: "limit greater than maximum" but what's the max?
5
- not precise enough: "limit greater than maximum" but what's the max?
6
6
7
- missing: subflow not found, or connect error.
7
- missing: subflow not found, or connect error.
8
8
9
This can be easily improved by being more precise, or adding new error
9
This can be easily improved by being more precise, or adding new error
10
messages.
10
messages.
11
11
12
Reviewed-by: Geliang Tang <geliang@kernel.org>
12
Reviewed-by: Geliang Tang <geliang@kernel.org>
13
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
13
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
14
---
14
---
15
net/mptcp/pm_netlink.c | 6 ++++--
15
net/mptcp/pm_netlink.c | 6 ++++--
16
net/mptcp/pm_userspace.c | 10 +++++++++-
16
net/mptcp/pm_userspace.c | 10 +++++++++-
17
2 files changed, 13 insertions(+), 3 deletions(-)
17
2 files changed, 13 insertions(+), 3 deletions(-)
18
18
19
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
19
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
20
index XXXXXXX..XXXXXXX 100644
20
index XXXXXXX..XXXXXXX 100644
21
--- a/net/mptcp/pm_netlink.c
21
--- a/net/mptcp/pm_netlink.c
22
+++ b/net/mptcp/pm_netlink.c
22
+++ b/net/mptcp/pm_netlink.c
23
@@ -XXX,XX +XXX,XX @@ static int parse_limit(struct genl_info *info, int id, unsigned int *limit)
23
@@ -XXX,XX +XXX,XX @@ static int parse_limit(struct genl_info *info, int id, unsigned int *limit)
24
24
25
    *limit = nla_get_u32(attr);
25
    *limit = nla_get_u32(attr);
26
    if (*limit > MPTCP_PM_ADDR_MAX) {
26
    if (*limit > MPTCP_PM_ADDR_MAX) {
27
-        GENL_SET_ERR_MSG(info, "limit greater than maximum");
27
-        GENL_SET_ERR_MSG(info, "limit greater than maximum");
28
+        NL_SET_ERR_MSG_ATTR_FMT(info->extack, attr,
28
+        NL_SET_ERR_MSG_ATTR_FMT(info->extack, attr,
29
+                    "limit greater than maximum (%u)",
29
+                    "limit greater than maximum (%u)",
30
+                    MPTCP_PM_ADDR_MAX);
30
+                    MPTCP_PM_ADDR_MAX);
31
        return -EINVAL;
31
        return -EINVAL;
32
    }
32
    }
33
    return 0;
33
    return 0;
34
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
34
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
35
    if (addr.addr.family == AF_UNSPEC) {
35
    if (addr.addr.family == AF_UNSPEC) {
36
        lookup_by_id = 1;
36
        lookup_by_id = 1;
37
        if (!addr.addr.id) {
37
        if (!addr.addr.id) {
38
-            GENL_SET_ERR_MSG(info, "missing required inputs");
38
-            GENL_SET_ERR_MSG(info, "missing required inputs");
39
+            GENL_SET_ERR_MSG(info, "missing address ID");
39
+            GENL_SET_ERR_MSG(info, "missing address ID");
40
            return -EOPNOTSUPP;
40
            return -EOPNOTSUPP;
41
        }
41
        }
42
    }
42
    }
43
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
43
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
44
index XXXXXXX..XXXXXXX 100644
44
index XXXXXXX..XXXXXXX 100644
45
--- a/net/mptcp/pm_userspace.c
45
--- a/net/mptcp/pm_userspace.c
46
+++ b/net/mptcp/pm_userspace.c
46
+++ b/net/mptcp/pm_userspace.c
47
@@ -XXX,XX +XXX,XX @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *in
47
@@ -XXX,XX +XXX,XX @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *in
48
    }
48
    }
49
49
50
    if (!mptcp_pm_is_userspace(msk)) {
50
    if (!mptcp_pm_is_userspace(msk)) {
51
-        GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected");
51
-        GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected");
52
+        GENL_SET_ERR_MSG(info, "userspace PM not selected");
52
+        GENL_SET_ERR_MSG(info, "userspace PM not selected");
53
        sock_put((struct sock *)msk);
53
        sock_put((struct sock *)msk);
54
        return NULL;
54
        return NULL;
55
    }
55
    }
56
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
56
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
57
    err = __mptcp_subflow_connect(sk, &local, &addr_r);
57
    err = __mptcp_subflow_connect(sk, &local, &addr_r);
58
    release_sock(sk);
58
    release_sock(sk);
59
59
60
+    if (err)
60
+    if (err)
61
+        GENL_SET_ERR_MSG_FMT(info, "connect error: %d", err);
61
+        GENL_SET_ERR_MSG_FMT(info, "connect error: %d", err);
62
+
62
+
63
    spin_lock_bh(&msk->pm.lock);
63
    spin_lock_bh(&msk->pm.lock);
64
    if (err)
64
    if (err)
65
        mptcp_userspace_pm_delete_local_addr(msk, &entry);
65
        mptcp_userspace_pm_delete_local_addr(msk, &entry);
66
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
66
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
67
    lock_sock(sk);
67
    lock_sock(sk);
68
    ssk = mptcp_nl_find_ssk(msk, &addr_l.addr, &addr_r);
68
    ssk = mptcp_nl_find_ssk(msk, &addr_l.addr, &addr_r);
69
    if (!ssk) {
69
    if (!ssk) {
70
+        GENL_SET_ERR_MSG(info, "subflow not found");
70
+        GENL_SET_ERR_MSG(info, "subflow not found");
71
        err = -ESRCH;
71
        err = -ESRCH;
72
        goto release_sock;
72
        goto release_sock;
73
    }
73
    }
74
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
74
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
75
    ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup);
75
    ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup);
76
    release_sock(sk);
76
    release_sock(sk);
77
77
78
+    /* mptcp_pm_nl_mp_prio_send_ack() only fails in one case */
78
+    /* mptcp_pm_nl_mp_prio_send_ack() only fails in one case */
79
+    if (ret < 0)
79
+    if (ret < 0)
80
+        GENL_SET_ERR_MSG(info, "subflow not found");
80
+        GENL_SET_ERR_MSG(info, "subflow not found");
81
+
81
+
82
set_flags_err:
82
set_flags_err:
83
    sock_put(sk);
83
    sock_put(sk);
84
    return ret;
84
    return ret;
85
85
86
--
86
--
87
2.47.1
87
2.47.1
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
A more general way to check if MPTCP_PM_ATTR_* exists in 'info'
3
A more general way to check if MPTCP_PM_ATTR_* exists in 'info'
4
is to use GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_*) instead of
4
is to use GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_*) instead of
5
directly reading info->attrs[MPTCP_PM_ATTR_*] and then checking
5
directly reading info->attrs[MPTCP_PM_ATTR_*] and then checking
6
if it's NULL.
6
if it's NULL.
7
7
8
So this patch uses GENL_REQ_ATTR_CHECK() for userspace PM in
8
So this patch uses GENL_REQ_ATTR_CHECK() for userspace PM in
9
mptcp_pm_nl_announce_doit(), mptcp_pm_nl_remove_doit(),
9
mptcp_pm_nl_announce_doit(), mptcp_pm_nl_remove_doit(),
10
mptcp_pm_nl_subflow_create_doit(), mptcp_pm_nl_subflow_destroy_doit()
10
mptcp_pm_nl_subflow_create_doit(), mptcp_pm_nl_subflow_destroy_doit()
11
and mptcp_userspace_pm_get_sock().
11
and mptcp_userspace_pm_get_sock().
12
12
13
Suggested-by: Jakub Kicinski <kuba@kernel.org>
13
Suggested-by: Jakub Kicinski <kuba@kernel.org>
14
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
14
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
15
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
15
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
16
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
16
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
17
---
17
---
18
net/mptcp/pm_userspace.c | 41 +++++++++++++++++++----------------------
18
net/mptcp/pm_userspace.c | 41 +++++++++++++++++++----------------------
19
1 file changed, 19 insertions(+), 22 deletions(-)
19
1 file changed, 19 insertions(+), 22 deletions(-)
20
20
21
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
21
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
22
index XXXXXXX..XXXXXXX 100644
22
index XXXXXXX..XXXXXXX 100644
23
--- a/net/mptcp/pm_userspace.c
23
--- a/net/mptcp/pm_userspace.c
24
+++ b/net/mptcp/pm_userspace.c
24
+++ b/net/mptcp/pm_userspace.c
25
@@ -XXX,XX +XXX,XX @@ bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
25
@@ -XXX,XX +XXX,XX @@ bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
26
26
27
static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *info)
27
static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *info)
28
{
28
{
29
-    struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
29
-    struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
30
    struct mptcp_sock *msk;
30
    struct mptcp_sock *msk;
31
+    struct nlattr *token;
31
+    struct nlattr *token;
32
32
33
-    if (!token) {
33
-    if (!token) {
34
-        GENL_SET_ERR_MSG(info, "missing required token");
34
-        GENL_SET_ERR_MSG(info, "missing required token");
35
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_TOKEN))
35
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_TOKEN))
36
        return NULL;
36
        return NULL;
37
-    }
37
-    }
38
38
39
+    token = info->attrs[MPTCP_PM_ATTR_TOKEN];
39
+    token = info->attrs[MPTCP_PM_ATTR_TOKEN];
40
    msk = mptcp_token_get_sock(genl_info_net(info), nla_get_u32(token));
40
    msk = mptcp_token_get_sock(genl_info_net(info), nla_get_u32(token));
41
    if (!msk) {
41
    if (!msk) {
42
        NL_SET_ERR_MSG_ATTR(info->extack, token, "invalid token");
42
        NL_SET_ERR_MSG_ATTR(info->extack, token, "invalid token");
43
@@ -XXX,XX +XXX,XX @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *in
43
@@ -XXX,XX +XXX,XX @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *in
44
44
45
int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
45
int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
46
{
46
{
47
-    struct nlattr *addr = info->attrs[MPTCP_PM_ATTR_ADDR];
47
-    struct nlattr *addr = info->attrs[MPTCP_PM_ATTR_ADDR];
48
    struct mptcp_pm_addr_entry addr_val;
48
    struct mptcp_pm_addr_entry addr_val;
49
    struct mptcp_sock *msk;
49
    struct mptcp_sock *msk;
50
+    struct nlattr *addr;
50
+    struct nlattr *addr;
51
    int err = -EINVAL;
51
    int err = -EINVAL;
52
    struct sock *sk;
52
    struct sock *sk;
53
53
54
-    if (!addr) {
54
-    if (!addr) {
55
-        GENL_SET_ERR_MSG(info, "missing required address");
55
-        GENL_SET_ERR_MSG(info, "missing required address");
56
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR))
56
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR))
57
        return err;
57
        return err;
58
-    }
58
-    }
59
59
60
    msk = mptcp_userspace_pm_get_sock(info);
60
    msk = mptcp_userspace_pm_get_sock(info);
61
    if (!msk)
61
    if (!msk)
62
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
62
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
63
63
64
    sk = (struct sock *)msk;
64
    sk = (struct sock *)msk;
65
65
66
+    addr = info->attrs[MPTCP_PM_ATTR_ADDR];
66
+    addr = info->attrs[MPTCP_PM_ATTR_ADDR];
67
    err = mptcp_pm_parse_entry(addr, info, true, &addr_val);
67
    err = mptcp_pm_parse_entry(addr, info, true, &addr_val);
68
    if (err < 0) {
68
    if (err < 0) {
69
        GENL_SET_ERR_MSG(info, "error parsing local address");
69
        GENL_SET_ERR_MSG(info, "error parsing local address");
70
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
70
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
71
71
72
int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
72
int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
73
{
73
{
74
-    struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID];
74
-    struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID];
75
    struct mptcp_pm_addr_entry *match;
75
    struct mptcp_pm_addr_entry *match;
76
    struct mptcp_sock *msk;
76
    struct mptcp_sock *msk;
77
+    struct nlattr *id;
77
+    struct nlattr *id;
78
    int err = -EINVAL;
78
    int err = -EINVAL;
79
    struct sock *sk;
79
    struct sock *sk;
80
    u8 id_val;
80
    u8 id_val;
81
81
82
-    if (!id) {
82
-    if (!id) {
83
-        GENL_SET_ERR_MSG(info, "missing required ID");
83
-        GENL_SET_ERR_MSG(info, "missing required ID");
84
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_LOC_ID))
84
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_LOC_ID))
85
        return err;
85
        return err;
86
-    }
86
-    }
87
87
88
+    id = info->attrs[MPTCP_PM_ATTR_LOC_ID];
88
+    id = info->attrs[MPTCP_PM_ATTR_LOC_ID];
89
    id_val = nla_get_u8(id);
89
    id_val = nla_get_u8(id);
90
90
91
    msk = mptcp_userspace_pm_get_sock(info);
91
    msk = mptcp_userspace_pm_get_sock(info);
92
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
92
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
93
93
94
int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
94
int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
95
{
95
{
96
-    struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
96
-    struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
97
-    struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
97
-    struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
98
    struct mptcp_pm_addr_entry entry = { 0 };
98
    struct mptcp_pm_addr_entry entry = { 0 };
99
    struct mptcp_addr_info addr_r;
99
    struct mptcp_addr_info addr_r;
100
+    struct nlattr *raddr, *laddr;
100
+    struct nlattr *raddr, *laddr;
101
    struct mptcp_pm_local local;
101
    struct mptcp_pm_local local;
102
    struct mptcp_sock *msk;
102
    struct mptcp_sock *msk;
103
    int err = -EINVAL;
103
    int err = -EINVAL;
104
    struct sock *sk;
104
    struct sock *sk;
105
105
106
-    if (!laddr || !raddr) {
106
-    if (!laddr || !raddr) {
107
-        GENL_SET_ERR_MSG(info, "missing required address(es)");
107
-        GENL_SET_ERR_MSG(info, "missing required address(es)");
108
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) ||
108
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) ||
109
+     GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE))
109
+     GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE))
110
        return err;
110
        return err;
111
-    }
111
-    }
112
112
113
    msk = mptcp_userspace_pm_get_sock(info);
113
    msk = mptcp_userspace_pm_get_sock(info);
114
    if (!msk)
114
    if (!msk)
115
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
115
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
116
116
117
    sk = (struct sock *)msk;
117
    sk = (struct sock *)msk;
118
118
119
+    laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
119
+    laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
120
    err = mptcp_pm_parse_entry(laddr, info, true, &entry);
120
    err = mptcp_pm_parse_entry(laddr, info, true, &entry);
121
    if (err < 0) {
121
    if (err < 0) {
122
        NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
122
        NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
123
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
123
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
124
    }
124
    }
125
    entry.flags |= MPTCP_PM_ADDR_FLAG_SUBFLOW;
125
    entry.flags |= MPTCP_PM_ADDR_FLAG_SUBFLOW;
126
126
127
+    raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
127
+    raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
128
    err = mptcp_pm_parse_addr(raddr, info, &addr_r);
128
    err = mptcp_pm_parse_addr(raddr, info, &addr_r);
129
    if (err < 0) {
129
    if (err < 0) {
130
        NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
130
        NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
131
@@ -XXX,XX +XXX,XX @@ static struct sock *mptcp_nl_find_ssk(struct mptcp_sock *msk,
131
@@ -XXX,XX +XXX,XX @@ static struct sock *mptcp_nl_find_ssk(struct mptcp_sock *msk,
132
132
133
int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info)
133
int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info)
134
{
134
{
135
-    struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
135
-    struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
136
-    struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
136
-    struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
137
    struct mptcp_pm_addr_entry addr_l;
137
    struct mptcp_pm_addr_entry addr_l;
138
    struct mptcp_addr_info addr_r;
138
    struct mptcp_addr_info addr_r;
139
+    struct nlattr *raddr, *laddr;
139
+    struct nlattr *raddr, *laddr;
140
    struct mptcp_sock *msk;
140
    struct mptcp_sock *msk;
141
    struct sock *sk, *ssk;
141
    struct sock *sk, *ssk;
142
    int err = -EINVAL;
142
    int err = -EINVAL;
143
143
144
-    if (!laddr || !raddr) {
144
-    if (!laddr || !raddr) {
145
-        GENL_SET_ERR_MSG(info, "missing required address(es)");
145
-        GENL_SET_ERR_MSG(info, "missing required address(es)");
146
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) ||
146
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) ||
147
+     GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE))
147
+     GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE))
148
        return err;
148
        return err;
149
-    }
149
-    }
150
150
151
    msk = mptcp_userspace_pm_get_sock(info);
151
    msk = mptcp_userspace_pm_get_sock(info);
152
    if (!msk)
152
    if (!msk)
153
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
153
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
154
154
155
    sk = (struct sock *)msk;
155
    sk = (struct sock *)msk;
156
156
157
+    laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
157
+    laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
158
    err = mptcp_pm_parse_entry(laddr, info, true, &addr_l);
158
    err = mptcp_pm_parse_entry(laddr, info, true, &addr_l);
159
    if (err < 0) {
159
    if (err < 0) {
160
        NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
160
        NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
161
        goto destroy_err;
161
        goto destroy_err;
162
    }
162
    }
163
163
164
+    raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
164
+    raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
165
    err = mptcp_pm_parse_addr(raddr, info, &addr_r);
165
    err = mptcp_pm_parse_addr(raddr, info, &addr_r);
166
    if (err < 0) {
166
    if (err < 0) {
167
        NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
167
        NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
168
168
169
--
169
--
170
2.47.1
170
2.47.1
diff view generated by jsdifflib
1
mptcp_pm_parse_entry() and mptcp_pm_parse_addr() will already set a
1
mptcp_pm_parse_entry() and mptcp_pm_parse_addr() will already set a
2
error message in case of parsing issue.
2
error message in case of parsing issue.
3
3
4
Then, no need to override this error message with another less precise
4
Then, no need to override this error message with another less precise
5
one: "error parsing address".
5
one: "error parsing address".
6
6
7
Reviewed-by: Geliang Tang <geliang@kernel.org>
7
Reviewed-by: Geliang Tang <geliang@kernel.org>
8
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
8
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
9
---
9
---
10
net/mptcp/pm_userspace.c | 20 +++++---------------
10
net/mptcp/pm_userspace.c | 20 +++++---------------
11
1 file changed, 5 insertions(+), 15 deletions(-)
11
1 file changed, 5 insertions(+), 15 deletions(-)
12
12
13
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
13
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
14
index XXXXXXX..XXXXXXX 100644
14
index XXXXXXX..XXXXXXX 100644
15
--- a/net/mptcp/pm_userspace.c
15
--- a/net/mptcp/pm_userspace.c
16
+++ b/net/mptcp/pm_userspace.c
16
+++ b/net/mptcp/pm_userspace.c
17
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
17
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
18
18
19
    addr = info->attrs[MPTCP_PM_ATTR_ADDR];
19
    addr = info->attrs[MPTCP_PM_ATTR_ADDR];
20
    err = mptcp_pm_parse_entry(addr, info, true, &addr_val);
20
    err = mptcp_pm_parse_entry(addr, info, true, &addr_val);
21
-    if (err < 0) {
21
-    if (err < 0) {
22
-        GENL_SET_ERR_MSG(info, "error parsing local address");
22
-        GENL_SET_ERR_MSG(info, "error parsing local address");
23
+    if (err < 0)
23
+    if (err < 0)
24
        goto announce_err;
24
        goto announce_err;
25
-    }
25
-    }
26
26
27
    if (addr_val.addr.id == 0) {
27
    if (addr_val.addr.id == 0) {
28
        GENL_SET_ERR_MSG(info, "invalid addr id");
28
        GENL_SET_ERR_MSG(info, "invalid addr id");
29
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
29
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
30
30
31
    laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
31
    laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
32
    err = mptcp_pm_parse_entry(laddr, info, true, &entry);
32
    err = mptcp_pm_parse_entry(laddr, info, true, &entry);
33
-    if (err < 0) {
33
-    if (err < 0) {
34
-        NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
34
-        NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
35
+    if (err < 0)
35
+    if (err < 0)
36
        goto create_err;
36
        goto create_err;
37
-    }
37
-    }
38
38
39
    if (entry.flags & MPTCP_PM_ADDR_FLAG_SIGNAL) {
39
    if (entry.flags & MPTCP_PM_ADDR_FLAG_SIGNAL) {
40
        GENL_SET_ERR_MSG(info, "invalid addr flags");
40
        GENL_SET_ERR_MSG(info, "invalid addr flags");
41
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
41
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info)
42
42
43
    raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
43
    raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
44
    err = mptcp_pm_parse_addr(raddr, info, &addr_r);
44
    err = mptcp_pm_parse_addr(raddr, info, &addr_r);
45
-    if (err < 0) {
45
-    if (err < 0) {
46
-        NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
46
-        NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
47
+    if (err < 0)
47
+    if (err < 0)
48
        goto create_err;
48
        goto create_err;
49
-    }
49
-    }
50
50
51
    if (!mptcp_pm_addr_families_match(sk, &entry.addr, &addr_r)) {
51
    if (!mptcp_pm_addr_families_match(sk, &entry.addr, &addr_r)) {
52
        GENL_SET_ERR_MSG(info, "families mismatch");
52
        GENL_SET_ERR_MSG(info, "families mismatch");
53
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
53
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
54
54
55
    laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
55
    laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
56
    err = mptcp_pm_parse_entry(laddr, info, true, &addr_l);
56
    err = mptcp_pm_parse_entry(laddr, info, true, &addr_l);
57
-    if (err < 0) {
57
-    if (err < 0) {
58
-        NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
58
-        NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
59
+    if (err < 0)
59
+    if (err < 0)
60
        goto destroy_err;
60
        goto destroy_err;
61
-    }
61
-    }
62
62
63
    raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
63
    raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
64
    err = mptcp_pm_parse_addr(raddr, info, &addr_r);
64
    err = mptcp_pm_parse_addr(raddr, info, &addr_r);
65
-    if (err < 0) {
65
-    if (err < 0) {
66
-        NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
66
-        NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
67
+    if (err < 0)
67
+    if (err < 0)
68
        goto destroy_err;
68
        goto destroy_err;
69
-    }
69
-    }
70
70
71
#if IS_ENABLED(CONFIG_MPTCP_IPV6)
71
#if IS_ENABLED(CONFIG_MPTCP_IPV6)
72
    if (addr_l.addr.family == AF_INET && ipv6_addr_v4mapped(&addr_r.addr6)) {
72
    if (addr_l.addr.family == AF_INET && ipv6_addr_v4mapped(&addr_r.addr6)) {
73
73
74
--
74
--
75
2.47.1
75
2.47.1
diff view generated by jsdifflib
1
mptcp_pm_parse_entry() will check if the given attribute is defined. If
1
mptcp_pm_parse_entry() will check if the given attribute is defined. If
2
not, it will return a generic error: "missing address info".
2
not, it will return a generic error: "missing address info".
3
3
4
It might then not be clear for the userspace developer which attribute
4
It might then not be clear for the userspace developer which attribute
5
is missing, especially when the command takes multiple addresses.
5
is missing, especially when the command takes multiple addresses.
6
6
7
By using GENL_REQ_ATTR_CHECK(), the userspace will get a hint about
7
By using GENL_REQ_ATTR_CHECK(), the userspace will get a hint about
8
which attribute is missing, making thing clearer. Note that this is what
8
which attribute is missing, making thing clearer. Note that this is what
9
was already done for most of the other MPTCP NL commands, this patch
9
was already done for most of the other MPTCP NL commands, this patch
10
simply adds the missing ones.
10
simply adds the missing ones.
11
11
12
Reviewed-by: Geliang Tang <geliang@kernel.org>
12
Reviewed-by: Geliang Tang <geliang@kernel.org>
13
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
13
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
14
---
14
---
15
net/mptcp/pm_netlink.c | 24 ++++++++++++++++++++----
15
net/mptcp/pm_netlink.c | 24 ++++++++++++++++++++----
16
net/mptcp/pm_userspace.c | 15 ++++++++++++---
16
net/mptcp/pm_userspace.c | 15 ++++++++++++---
17
2 files changed, 32 insertions(+), 7 deletions(-)
17
2 files changed, 32 insertions(+), 7 deletions(-)
18
18
19
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
19
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
20
index XXXXXXX..XXXXXXX 100644
20
index XXXXXXX..XXXXXXX 100644
21
--- a/net/mptcp/pm_netlink.c
21
--- a/net/mptcp/pm_netlink.c
22
+++ b/net/mptcp/pm_netlink.c
22
+++ b/net/mptcp/pm_netlink.c
23
@@ -XXX,XX +XXX,XX @@ static bool mptcp_pm_has_addr_attr_id(const struct nlattr *attr,
23
@@ -XXX,XX +XXX,XX @@ static bool mptcp_pm_has_addr_attr_id(const struct nlattr *attr,
24
24
25
int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, struct genl_info *info)
25
int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, struct genl_info *info)
26
{
26
{
27
-    struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
27
-    struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
28
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
28
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
29
    struct mptcp_pm_addr_entry addr, *entry;
29
    struct mptcp_pm_addr_entry addr, *entry;
30
+    struct nlattr *attr;
30
+    struct nlattr *attr;
31
    int ret;
31
    int ret;
32
32
33
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
33
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
34
+        return -EINVAL;
34
+        return -EINVAL;
35
+
35
+
36
+    attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
36
+    attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
37
    ret = mptcp_pm_parse_entry(attr, info, true, &addr);
37
    ret = mptcp_pm_parse_entry(attr, info, true, &addr);
38
    if (ret < 0)
38
    if (ret < 0)
39
        return ret;
39
        return ret;
40
@@ -XXX,XX +XXX,XX @@ static int mptcp_nl_remove_id_zero_address(struct net *net,
40
@@ -XXX,XX +XXX,XX @@ static int mptcp_nl_remove_id_zero_address(struct net *net,
41
41
42
int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, struct genl_info *info)
42
int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, struct genl_info *info)
43
{
43
{
44
-    struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
44
-    struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
45
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
45
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
46
    struct mptcp_pm_addr_entry addr, *entry;
46
    struct mptcp_pm_addr_entry addr, *entry;
47
    unsigned int addr_max;
47
    unsigned int addr_max;
48
+    struct nlattr *attr;
48
+    struct nlattr *attr;
49
    int ret;
49
    int ret;
50
50
51
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
51
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
52
+        return -EINVAL;
52
+        return -EINVAL;
53
+
53
+
54
+    attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
54
+    attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
55
    ret = mptcp_pm_parse_entry(attr, info, false, &addr);
55
    ret = mptcp_pm_parse_entry(attr, info, false, &addr);
56
    if (ret < 0)
56
    if (ret < 0)
57
        return ret;
57
        return ret;
58
@@ -XXX,XX +XXX,XX @@ int mptcp_nl_fill_addr(struct sk_buff *skb,
58
@@ -XXX,XX +XXX,XX @@ int mptcp_nl_fill_addr(struct sk_buff *skb,
59
59
60
int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
60
int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
61
{
61
{
62
-    struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
62
-    struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
63
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
63
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
64
    struct mptcp_pm_addr_entry addr, *entry;
64
    struct mptcp_pm_addr_entry addr, *entry;
65
    struct sk_buff *msg;
65
    struct sk_buff *msg;
66
+    struct nlattr *attr;
66
+    struct nlattr *attr;
67
    void *reply;
67
    void *reply;
68
    int ret;
68
    int ret;
69
69
70
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
70
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
71
+        return -EINVAL;
71
+        return -EINVAL;
72
+
72
+
73
+    attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
73
+    attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
74
    ret = mptcp_pm_parse_entry(attr, info, false, &addr);
74
    ret = mptcp_pm_parse_entry(attr, info, false, &addr);
75
    if (ret < 0)
75
    if (ret < 0)
76
        return ret;
76
        return ret;
77
@@ -XXX,XX +XXX,XX @@ static int mptcp_nl_set_flags(struct net *net,
77
@@ -XXX,XX +XXX,XX @@ static int mptcp_nl_set_flags(struct net *net,
78
int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
78
int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
79
{
79
{
80
    struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, };
80
    struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, };
81
-    struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR];
81
-    struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR];
82
    u8 changed, mask = MPTCP_PM_ADDR_FLAG_BACKUP |
82
    u8 changed, mask = MPTCP_PM_ADDR_FLAG_BACKUP |
83
             MPTCP_PM_ADDR_FLAG_FULLMESH;
83
             MPTCP_PM_ADDR_FLAG_FULLMESH;
84
    struct net *net = sock_net(skb->sk);
84
    struct net *net = sock_net(skb->sk);
85
    struct mptcp_pm_addr_entry *entry;
85
    struct mptcp_pm_addr_entry *entry;
86
    struct pm_nl_pernet *pernet;
86
    struct pm_nl_pernet *pernet;
87
+    struct nlattr *attr;
87
+    struct nlattr *attr;
88
    u8 lookup_by_id = 0;
88
    u8 lookup_by_id = 0;
89
    u8 bkup = 0;
89
    u8 bkup = 0;
90
    int ret;
90
    int ret;
91
91
92
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR))
92
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR))
93
+        return -EINVAL;
93
+        return -EINVAL;
94
+
94
+
95
    pernet = pm_nl_get_pernet(net);
95
    pernet = pm_nl_get_pernet(net);
96
96
97
+    attr = info->attrs[MPTCP_PM_ATTR_ADDR];
97
+    attr = info->attrs[MPTCP_PM_ATTR_ADDR];
98
    ret = mptcp_pm_parse_entry(attr, info, false, &addr);
98
    ret = mptcp_pm_parse_entry(attr, info, false, &addr);
99
    if (ret < 0)
99
    if (ret < 0)
100
        return ret;
100
        return ret;
101
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
101
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
102
index XXXXXXX..XXXXXXX 100644
102
index XXXXXXX..XXXXXXX 100644
103
--- a/net/mptcp/pm_userspace.c
103
--- a/net/mptcp/pm_userspace.c
104
+++ b/net/mptcp/pm_userspace.c
104
+++ b/net/mptcp/pm_userspace.c
105
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
105
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
106
{
106
{
107
    struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, };
107
    struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, };
108
    struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, };
108
    struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, };
109
-    struct nlattr *attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
109
-    struct nlattr *attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
110
-    struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR];
110
-    struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR];
111
    struct mptcp_pm_addr_entry *entry;
111
    struct mptcp_pm_addr_entry *entry;
112
+    struct nlattr *attr, *attr_rem;
112
+    struct nlattr *attr, *attr_rem;
113
    struct mptcp_sock *msk;
113
    struct mptcp_sock *msk;
114
    int ret = -EINVAL;
114
    int ret = -EINVAL;
115
    struct sock *sk;
115
    struct sock *sk;
116
    u8 bkup = 0;
116
    u8 bkup = 0;
117
117
118
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) ||
118
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) ||
119
+     GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE))
119
+     GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE))
120
+        return ret;
120
+        return ret;
121
+
121
+
122
    msk = mptcp_userspace_pm_get_sock(info);
122
    msk = mptcp_userspace_pm_get_sock(info);
123
    if (!msk)
123
    if (!msk)
124
        return ret;
124
        return ret;
125
125
126
    sk = (struct sock *)msk;
126
    sk = (struct sock *)msk;
127
127
128
+    attr = info->attrs[MPTCP_PM_ATTR_ADDR];
128
+    attr = info->attrs[MPTCP_PM_ATTR_ADDR];
129
    ret = mptcp_pm_parse_entry(attr, info, false, &loc);
129
    ret = mptcp_pm_parse_entry(attr, info, false, &loc);
130
    if (ret < 0)
130
    if (ret < 0)
131
        goto set_flags_err;
131
        goto set_flags_err;
132
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
132
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
133
        goto set_flags_err;
133
        goto set_flags_err;
134
    }
134
    }
135
135
136
+    attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
136
+    attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
137
    ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
137
    ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
138
    if (ret < 0)
138
    if (ret < 0)
139
        goto set_flags_err;
139
        goto set_flags_err;
140
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
140
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
141
int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
141
int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
142
                struct genl_info *info)
142
                struct genl_info *info)
143
{
143
{
144
-    struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
144
-    struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
145
    struct mptcp_pm_addr_entry addr, *entry;
145
    struct mptcp_pm_addr_entry addr, *entry;
146
    struct mptcp_sock *msk;
146
    struct mptcp_sock *msk;
147
    struct sk_buff *msg;
147
    struct sk_buff *msg;
148
+    struct nlattr *attr;
148
+    struct nlattr *attr;
149
    int ret = -EINVAL;
149
    int ret = -EINVAL;
150
    struct sock *sk;
150
    struct sock *sk;
151
    void *reply;
151
    void *reply;
152
152
153
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
153
+    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
154
+        return ret;
154
+        return ret;
155
+
155
+
156
    msk = mptcp_userspace_pm_get_sock(info);
156
    msk = mptcp_userspace_pm_get_sock(info);
157
    if (!msk)
157
    if (!msk)
158
        return ret;
158
        return ret;
159
159
160
    sk = (struct sock *)msk;
160
    sk = (struct sock *)msk;
161
161
162
+    attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
162
+    attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
163
    ret = mptcp_pm_parse_entry(attr, info, false, &addr);
163
    ret = mptcp_pm_parse_entry(attr, info, false, &addr);
164
    if (ret < 0)
164
    if (ret < 0)
165
        goto out;
165
        goto out;
166
166
167
--
167
--
168
2.47.1
168
2.47.1
diff view generated by jsdifflib
...
...
76
-        GENL_SET_ERR_MSG(info, "address not found");
76
-        GENL_SET_ERR_MSG(info, "address not found");
77
+        NL_SET_ERR_MSG_ATTR(info->extack, attr, "address not found");
77
+        NL_SET_ERR_MSG_ATTR(info->extack, attr, "address not found");
78
        return -EINVAL;
78
        return -EINVAL;
79
    }
79
    }
80
    if ((addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) &&
80
    if ((addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) &&
81
     (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) {
81
     (entry->flags & (MPTCP_PM_ADDR_FLAG_SIGNAL |
82
             MPTCP_PM_ADDR_FLAG_IMPLICIT))) {
82
        spin_unlock_bh(&pernet->lock);
83
        spin_unlock_bh(&pernet->lock);
83
-        GENL_SET_ERR_MSG(info, "invalid addr flags");
84
-        GENL_SET_ERR_MSG(info, "invalid addr flags");
84
+        NL_SET_ERR_MSG_ATTR(info->extack, attr, "invalid addr flags");
85
+        NL_SET_ERR_MSG_ATTR(info->extack, attr, "invalid addr flags");
85
        return -EINVAL;
86
        return -EINVAL;
86
    }
87
    }
...
...
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Three netlink functions:
3
Three netlink functions:
4
4
5
    mptcp_pm_nl_get_addr_doit()
5
    mptcp_pm_nl_get_addr_doit()
6
    mptcp_pm_nl_get_addr_dumpit()
6
    mptcp_pm_nl_get_addr_dumpit()
7
    mptcp_pm_nl_set_flags_doit()
7
    mptcp_pm_nl_set_flags_doit()
8
8
9
are generic, implemented for each PM, in-kernel PM and userspace PM. It's
9
are generic, implemented for each PM, in-kernel PM and userspace PM. It's
10
clearer to move them from pm_netlink.c to pm.c.
10
clearer to move them from pm_netlink.c to pm.c.
11
11
12
And the linked three path manager wrappers
12
And the linked three path manager wrappers
13
13
14
    mptcp_pm_get_addr()
14
    mptcp_pm_get_addr()
15
    mptcp_pm_dump_addr()
15
    mptcp_pm_dump_addr()
16
    mptcp_pm_set_flags()
16
    mptcp_pm_set_flags()
17
17
18
can be changed as static functions, no need to export them in protocol.h.
18
can be changed as static functions, no need to export them in protocol.h.
19
19
20
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
20
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
21
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
21
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
22
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
22
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
23
---
23
---
24
net/mptcp/pm.c | 23 ++++++++++++++++++++---
24
net/mptcp/pm.c | 23 ++++++++++++++++++++---
25
net/mptcp/pm_netlink.c | 16 ----------------
25
net/mptcp/pm_netlink.c | 16 ----------------
26
net/mptcp/protocol.h | 3 ---
26
net/mptcp/protocol.h | 3 ---
27
3 files changed, 20 insertions(+), 22 deletions(-)
27
3 files changed, 20 insertions(+), 22 deletions(-)
28
28
29
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
29
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
30
index XXXXXXX..XXXXXXX 100644
30
index XXXXXXX..XXXXXXX 100644
31
--- a/net/mptcp/pm.c
31
--- a/net/mptcp/pm.c
32
+++ b/net/mptcp/pm.c
32
+++ b/net/mptcp/pm.c
33
@@ -XXX,XX +XXX,XX @@
33
@@ -XXX,XX +XXX,XX @@
34
#include "protocol.h"
34
#include "protocol.h"
35
35
36
#include "mib.h"
36
#include "mib.h"
37
+#include "mptcp_pm_gen.h"
37
+#include "mptcp_pm_gen.h"
38
38
39
/* path manager command handlers */
39
/* path manager command handlers */
40
40
41
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
41
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
42
    return mptcp_pm_nl_is_backup(msk, &skc_local);
42
    return mptcp_pm_nl_is_backup(msk, &skc_local);
43
}
43
}
44
44
45
-int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info)
45
-int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info)
46
+static int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info)
46
+static int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info)
47
{
47
{
48
    if (info->attrs[MPTCP_PM_ATTR_TOKEN])
48
    if (info->attrs[MPTCP_PM_ATTR_TOKEN])
49
        return mptcp_userspace_pm_get_addr(skb, info);
49
        return mptcp_userspace_pm_get_addr(skb, info);
50
    return mptcp_pm_nl_get_addr(skb, info);
50
    return mptcp_pm_nl_get_addr(skb, info);
51
}
51
}
52
52
53
-int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
53
-int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
54
+int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
54
+int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
55
+{
55
+{
56
+    return mptcp_pm_get_addr(skb, info);
56
+    return mptcp_pm_get_addr(skb, info);
57
+}
57
+}
58
+
58
+
59
+static int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
59
+static int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
60
{
60
{
61
    const struct genl_info *info = genl_info_dump(cb);
61
    const struct genl_info *info = genl_info_dump(cb);
62
62
63
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
63
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
64
    return mptcp_pm_nl_dump_addr(msg, cb);
64
    return mptcp_pm_nl_dump_addr(msg, cb);
65
}
65
}
66
66
67
-int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
67
-int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
68
+int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
68
+int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
69
+                struct netlink_callback *cb)
69
+                struct netlink_callback *cb)
70
+{
70
+{
71
+    return mptcp_pm_dump_addr(msg, cb);
71
+    return mptcp_pm_dump_addr(msg, cb);
72
+}
72
+}
73
+
73
+
74
+static int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
74
+static int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
75
{
75
{
76
    if (info->attrs[MPTCP_PM_ATTR_TOKEN])
76
    if (info->attrs[MPTCP_PM_ATTR_TOKEN])
77
        return mptcp_userspace_pm_set_flags(skb, info);
77
        return mptcp_userspace_pm_set_flags(skb, info);
78
    return mptcp_pm_nl_set_flags(skb, info);
78
    return mptcp_pm_nl_set_flags(skb, info);
79
}
79
}
80
80
81
+int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info)
81
+int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info)
82
+{
82
+{
83
+    return mptcp_pm_set_flags(skb, info);
83
+    return mptcp_pm_set_flags(skb, info);
84
+}
84
+}
85
+
85
+
86
void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk)
86
void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk)
87
{
87
{
88
    struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
88
    struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
89
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
89
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
90
index XXXXXXX..XXXXXXX 100644
90
index XXXXXXX..XXXXXXX 100644
91
--- a/net/mptcp/pm_netlink.c
91
--- a/net/mptcp/pm_netlink.c
92
+++ b/net/mptcp/pm_netlink.c
92
+++ b/net/mptcp/pm_netlink.c
93
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
93
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
94
    return ret;
94
    return ret;
95
}
95
}
96
96
97
-int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
97
-int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
98
-{
98
-{
99
-    return mptcp_pm_get_addr(skb, info);
99
-    return mptcp_pm_get_addr(skb, info);
100
-}
100
-}
101
-
101
-
102
int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
102
int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
103
             struct netlink_callback *cb)
103
             struct netlink_callback *cb)
104
{
104
{
105
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
105
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
106
    return msg->len;
106
    return msg->len;
107
}
107
}
108
108
109
-int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
109
-int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
110
-                struct netlink_callback *cb)
110
-                struct netlink_callback *cb)
111
-{
111
-{
112
-    return mptcp_pm_dump_addr(msg, cb);
112
-    return mptcp_pm_dump_addr(msg, cb);
113
-}
113
-}
114
-
114
-
115
static int parse_limit(struct genl_info *info, int id, unsigned int *limit)
115
static int parse_limit(struct genl_info *info, int id, unsigned int *limit)
116
{
116
{
117
    struct nlattr *attr = info->attrs[id];
117
    struct nlattr *attr = info->attrs[id];
118
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
118
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
119
    return 0;
119
    return 0;
120
}
120
}
121
121
122
-int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info)
122
-int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info)
123
-{
123
-{
124
-    return mptcp_pm_set_flags(skb, info);
124
-    return mptcp_pm_set_flags(skb, info);
125
-}
125
-}
126
-
126
-
127
static void mptcp_nl_mcast_send(struct net *net, struct sk_buff *nlskb, gfp_t gfp)
127
static void mptcp_nl_mcast_send(struct net *net, struct sk_buff *nlskb, gfp_t gfp)
128
{
128
{
129
    genlmsg_multicast_netns(&mptcp_genl_family, net,
129
    genlmsg_multicast_netns(&mptcp_genl_family, net,
130
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
130
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
131
index XXXXXXX..XXXXXXX 100644
131
index XXXXXXX..XXXXXXX 100644
132
--- a/net/mptcp/protocol.h
132
--- a/net/mptcp/protocol.h
133
+++ b/net/mptcp/protocol.h
133
+++ b/net/mptcp/protocol.h
134
@@ -XXX,XX +XXX,XX @@ bool mptcp_lookup_subflow_by_saddr(const struct list_head *list,
134
@@ -XXX,XX +XXX,XX @@ bool mptcp_lookup_subflow_by_saddr(const struct list_head *list,
135
                 const struct mptcp_addr_info *saddr);
135
                 const struct mptcp_addr_info *saddr);
136
bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
136
bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
137
                 const struct mptcp_addr_info *addr);
137
                 const struct mptcp_addr_info *addr);
138
-int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
138
-int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
139
int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info);
139
int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info);
140
int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
140
int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
141
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
141
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
142
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_in
142
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_in
143
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc);
143
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc);
144
bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
144
bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
145
bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
145
bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
146
-int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb);
146
-int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb);
147
int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
147
int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
148
             struct netlink_callback *cb);
148
             struct netlink_callback *cb);
149
int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
149
int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
150
                 struct netlink_callback *cb);
150
                 struct netlink_callback *cb);
151
-int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info);
151
-int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info);
152
int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info);
152
int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info);
153
int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
153
int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
154
                struct genl_info *info);
154
                struct genl_info *info);
155
155
156
--
156
--
157
2.47.1
157
2.47.1
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
The first parameters 'skb' of get_addr() interfaces are now useless
3
The first parameters 'skb' of get_addr() interfaces are now useless
4
since mptcp_userspace_pm_get_sock() helper is used. This patch drops
4
since mptcp_userspace_pm_get_sock() helper is used. This patch drops
5
these useless parameters of them.
5
these useless parameters of them.
6
6
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
8
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
9
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
9
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
10
---
10
---
11
net/mptcp/pm.c | 8 ++++----
11
net/mptcp/pm.c | 8 ++++----
12
net/mptcp/pm_netlink.c | 2 +-
12
net/mptcp/pm_netlink.c | 2 +-
13
net/mptcp/pm_userspace.c | 3 +--
13
net/mptcp/pm_userspace.c | 3 +--
14
net/mptcp/protocol.h | 5 ++---
14
net/mptcp/protocol.h | 5 ++---
15
4 files changed, 8 insertions(+), 10 deletions(-)
15
4 files changed, 8 insertions(+), 10 deletions(-)
16
16
17
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
17
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
18
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
19
--- a/net/mptcp/pm.c
19
--- a/net/mptcp/pm.c
20
+++ b/net/mptcp/pm.c
20
+++ b/net/mptcp/pm.c
21
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
21
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
22
    return mptcp_pm_nl_is_backup(msk, &skc_local);
22
    return mptcp_pm_nl_is_backup(msk, &skc_local);
23
}
23
}
24
24
25
-static int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info)
25
-static int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info)
26
+static int mptcp_pm_get_addr(struct genl_info *info)
26
+static int mptcp_pm_get_addr(struct genl_info *info)
27
{
27
{
28
    if (info->attrs[MPTCP_PM_ATTR_TOKEN])
28
    if (info->attrs[MPTCP_PM_ATTR_TOKEN])
29
-        return mptcp_userspace_pm_get_addr(skb, info);
29
-        return mptcp_userspace_pm_get_addr(skb, info);
30
-    return mptcp_pm_nl_get_addr(skb, info);
30
-    return mptcp_pm_nl_get_addr(skb, info);
31
+        return mptcp_userspace_pm_get_addr(info);
31
+        return mptcp_userspace_pm_get_addr(info);
32
+    return mptcp_pm_nl_get_addr(info);
32
+    return mptcp_pm_nl_get_addr(info);
33
}
33
}
34
34
35
int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
35
int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
36
{
36
{
37
-    return mptcp_pm_get_addr(skb, info);
37
-    return mptcp_pm_get_addr(skb, info);
38
+    return mptcp_pm_get_addr(info);
38
+    return mptcp_pm_get_addr(info);
39
}
39
}
40
40
41
static int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
41
static int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
42
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
42
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
43
index XXXXXXX..XXXXXXX 100644
43
index XXXXXXX..XXXXXXX 100644
44
--- a/net/mptcp/pm_netlink.c
44
--- a/net/mptcp/pm_netlink.c
45
+++ b/net/mptcp/pm_netlink.c
45
+++ b/net/mptcp/pm_netlink.c
46
@@ -XXX,XX +XXX,XX @@ int mptcp_nl_fill_addr(struct sk_buff *skb,
46
@@ -XXX,XX +XXX,XX @@ int mptcp_nl_fill_addr(struct sk_buff *skb,
47
    return -EMSGSIZE;
47
    return -EMSGSIZE;
48
}
48
}
49
49
50
-int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
50
-int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
51
+int mptcp_pm_nl_get_addr(struct genl_info *info)
51
+int mptcp_pm_nl_get_addr(struct genl_info *info)
52
{
52
{
53
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
53
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
54
    struct mptcp_pm_addr_entry addr, *entry;
54
    struct mptcp_pm_addr_entry addr, *entry;
55
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
55
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
56
index XXXXXXX..XXXXXXX 100644
56
index XXXXXXX..XXXXXXX 100644
57
--- a/net/mptcp/pm_userspace.c
57
--- a/net/mptcp/pm_userspace.c
58
+++ b/net/mptcp/pm_userspace.c
58
+++ b/net/mptcp/pm_userspace.c
59
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
59
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
60
    return ret;
60
    return ret;
61
}
61
}
62
62
63
-int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
63
-int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
64
-                struct genl_info *info)
64
-                struct genl_info *info)
65
+int mptcp_userspace_pm_get_addr(struct genl_info *info)
65
+int mptcp_userspace_pm_get_addr(struct genl_info *info)
66
{
66
{
67
    struct mptcp_pm_addr_entry addr, *entry;
67
    struct mptcp_pm_addr_entry addr, *entry;
68
    struct mptcp_sock *msk;
68
    struct mptcp_sock *msk;
69
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
69
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
70
index XXXXXXX..XXXXXXX 100644
70
index XXXXXXX..XXXXXXX 100644
71
--- a/net/mptcp/protocol.h
71
--- a/net/mptcp/protocol.h
72
+++ b/net/mptcp/protocol.h
72
+++ b/net/mptcp/protocol.h
73
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
73
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
74
             struct netlink_callback *cb);
74
             struct netlink_callback *cb);
75
int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
75
int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
76
                 struct netlink_callback *cb);
76
                 struct netlink_callback *cb);
77
-int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info);
77
-int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info);
78
-int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
78
-int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
79
-                struct genl_info *info);
79
-                struct genl_info *info);
80
+int mptcp_pm_nl_get_addr(struct genl_info *info);
80
+int mptcp_pm_nl_get_addr(struct genl_info *info);
81
+int mptcp_userspace_pm_get_addr(struct genl_info *info);
81
+int mptcp_userspace_pm_get_addr(struct genl_info *info);
82
82
83
static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflow)
83
static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflow)
84
{
84
{
85
85
86
--
86
--
87
2.47.1
87
2.47.1
diff view generated by jsdifflib
...
...
9
9
10
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
10
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
11
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
11
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
12
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
12
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
13
---
13
---
14
v2:
15
- Fix 'attr' no longer being set in mptcp_pm_nl_get_addr(), but still
16
used in this patch (no longer in the next one). (Simon)
17
v3:
18
- Same fix, but in mptcp_userspace_pm_get_addr().
19
---
14
net/mptcp/pm.c | 20 ++++++++++++++++----
20
net/mptcp/pm.c | 20 ++++++++++++++++----
15
net/mptcp/pm_netlink.c | 14 +++-----------
21
net/mptcp/pm_netlink.c | 16 ++++------------
16
net/mptcp/pm_userspace.c | 14 +++-----------
22
net/mptcp/pm_userspace.c | 16 ++++------------
17
net/mptcp/protocol.h | 4 ++--
23
net/mptcp/protocol.h | 4 ++--
18
4 files changed, 24 insertions(+), 28 deletions(-)
24
4 files changed, 26 insertions(+), 30 deletions(-)
19
25
20
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
26
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
21
index XXXXXXX..XXXXXXX 100644
27
index XXXXXXX..XXXXXXX 100644
22
--- a/net/mptcp/pm.c
28
--- a/net/mptcp/pm.c
23
+++ b/net/mptcp/pm.c
29
+++ b/net/mptcp/pm.c
...
...
63
}
69
}
64
70
65
-int mptcp_pm_nl_get_addr(struct genl_info *info)
71
-int mptcp_pm_nl_get_addr(struct genl_info *info)
66
+int mptcp_pm_nl_get_addr(u8 id, struct genl_info *info)
72
+int mptcp_pm_nl_get_addr(u8 id, struct genl_info *info)
67
{
73
{
74
+    struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
68
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
75
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
69
-    struct mptcp_pm_addr_entry addr, *entry;
76
-    struct mptcp_pm_addr_entry addr, *entry;
70
+    struct mptcp_pm_addr_entry *entry;
77
+    struct mptcp_pm_addr_entry *entry;
71
    struct sk_buff *msg;
78
    struct sk_buff *msg;
72
    struct nlattr *attr;
79
-    struct nlattr *attr;
73
    void *reply;
80
    void *reply;
74
    int ret;
81
    int ret;
75
82
76
-    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
83
-    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
77
-        return -EINVAL;
84
-        return -EINVAL;
...
...
103
110
104
-int mptcp_userspace_pm_get_addr(struct genl_info *info)
111
-int mptcp_userspace_pm_get_addr(struct genl_info *info)
105
+int mptcp_userspace_pm_get_addr(u8 id, struct genl_info *info)
112
+int mptcp_userspace_pm_get_addr(u8 id, struct genl_info *info)
106
{
113
{
107
-    struct mptcp_pm_addr_entry addr, *entry;
114
-    struct mptcp_pm_addr_entry addr, *entry;
115
+    struct nlattr *attr = attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
108
+    struct mptcp_pm_addr_entry *entry;
116
+    struct mptcp_pm_addr_entry *entry;
109
    struct mptcp_sock *msk;
117
    struct mptcp_sock *msk;
110
    struct sk_buff *msg;
118
    struct sk_buff *msg;
111
    struct nlattr *attr;
119
-    struct nlattr *attr;
112
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_get_addr(struct genl_info *info)
120
    int ret = -EINVAL;
113
    struct sock *sk;
121
    struct sock *sk;
114
    void *reply;
122
    void *reply;
115
123
116
-    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
124
-    if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR))
117
-        return ret;
125
-        return ret;
...
...
diff view generated by jsdifflib
...
...
117
117
118
-int mptcp_pm_nl_get_addr(u8 id, struct genl_info *info)
118
-int mptcp_pm_nl_get_addr(u8 id, struct genl_info *info)
119
+int mptcp_pm_nl_get_addr(u8 id, struct mptcp_pm_addr_entry *addr,
119
+int mptcp_pm_nl_get_addr(u8 id, struct mptcp_pm_addr_entry *addr,
120
+             struct genl_info *info)
120
+             struct genl_info *info)
121
{
121
{
122
-    struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
122
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
123
    struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
123
    struct mptcp_pm_addr_entry *entry;
124
    struct mptcp_pm_addr_entry *entry;
124
-    struct sk_buff *msg;
125
-    struct sk_buff *msg;
125
-    struct nlattr *attr;
126
-    void *reply;
126
-    void *reply;
127
-    int ret;
127
-    int ret;
128
-
128
-
129
-    msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
129
-    msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
130
-    if (!msg)
130
-    if (!msg)
...
...
177
177
178
-int mptcp_userspace_pm_get_addr(u8 id, struct genl_info *info)
178
-int mptcp_userspace_pm_get_addr(u8 id, struct genl_info *info)
179
+int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_addr_entry *addr,
179
+int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_addr_entry *addr,
180
+                struct genl_info *info)
180
+                struct genl_info *info)
181
{
181
{
182
-    struct nlattr *attr = attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
182
    struct mptcp_pm_addr_entry *entry;
183
    struct mptcp_pm_addr_entry *entry;
183
    struct mptcp_sock *msk;
184
    struct mptcp_sock *msk;
184
-    struct sk_buff *msg;
185
-    struct sk_buff *msg;
185
-    struct nlattr *attr;
186
    int ret = -EINVAL;
186
    int ret = -EINVAL;
187
    struct sock *sk;
187
    struct sock *sk;
188
-    void *reply;
188
-    void *reply;
189
189
190
    msk = mptcp_userspace_pm_get_sock(info);
190
    msk = mptcp_userspace_pm_get_sock(info);
...
...
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
The first parameter 'skb' in mptcp_pm_nl_set_flags() is only used to
3
The first parameter 'skb' in mptcp_pm_nl_set_flags() is only used to
4
obtained the network namespace, which can also be obtained through the
4
obtained the network namespace, which can also be obtained through the
5
second parameters 'info' by using genl_info_net() helper.
5
second parameters 'info' by using genl_info_net() helper.
6
6
7
This patch drops these useless parameters 'skb' in all three set_flags()
7
This patch drops these useless parameters 'skb' in all three set_flags()
8
interfaces.
8
interfaces.
9
9
10
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
10
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
11
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
11
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
12
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
12
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
13
---
13
---
14
net/mptcp/pm.c | 8 ++++----
14
net/mptcp/pm.c | 8 ++++----
15
net/mptcp/pm_netlink.c | 4 ++--
15
net/mptcp/pm_netlink.c | 4 ++--
16
net/mptcp/pm_userspace.c | 2 +-
16
net/mptcp/pm_userspace.c | 2 +-
17
net/mptcp/protocol.h | 4 ++--
17
net/mptcp/protocol.h | 4 ++--
18
4 files changed, 9 insertions(+), 9 deletions(-)
18
4 files changed, 9 insertions(+), 9 deletions(-)
19
19
20
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
20
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
21
index XXXXXXX..XXXXXXX 100644
21
index XXXXXXX..XXXXXXX 100644
22
--- a/net/mptcp/pm.c
22
--- a/net/mptcp/pm.c
23
+++ b/net/mptcp/pm.c
23
+++ b/net/mptcp/pm.c
24
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
24
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
25
    return mptcp_pm_dump_addr(msg, cb);
25
    return mptcp_pm_dump_addr(msg, cb);
26
}
26
}
27
27
28
-static int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
28
-static int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
29
+static int mptcp_pm_set_flags(struct genl_info *info)
29
+static int mptcp_pm_set_flags(struct genl_info *info)
30
{
30
{
31
    if (info->attrs[MPTCP_PM_ATTR_TOKEN])
31
    if (info->attrs[MPTCP_PM_ATTR_TOKEN])
32
-        return mptcp_userspace_pm_set_flags(skb, info);
32
-        return mptcp_userspace_pm_set_flags(skb, info);
33
-    return mptcp_pm_nl_set_flags(skb, info);
33
-    return mptcp_pm_nl_set_flags(skb, info);
34
+        return mptcp_userspace_pm_set_flags(info);
34
+        return mptcp_userspace_pm_set_flags(info);
35
+    return mptcp_pm_nl_set_flags(info);
35
+    return mptcp_pm_nl_set_flags(info);
36
}
36
}
37
37
38
int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info)
38
int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info)
39
{
39
{
40
-    return mptcp_pm_set_flags(skb, info);
40
-    return mptcp_pm_set_flags(skb, info);
41
+    return mptcp_pm_set_flags(info);
41
+    return mptcp_pm_set_flags(info);
42
}
42
}
43
43
44
void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk)
44
void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk)
45
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
45
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
46
index XXXXXXX..XXXXXXX 100644
46
index XXXXXXX..XXXXXXX 100644
47
--- a/net/mptcp/pm_netlink.c
47
--- a/net/mptcp/pm_netlink.c
48
+++ b/net/mptcp/pm_netlink.c
48
+++ b/net/mptcp/pm_netlink.c
49
@@ -XXX,XX +XXX,XX @@ static int mptcp_nl_set_flags(struct net *net,
49
@@ -XXX,XX +XXX,XX @@ static int mptcp_nl_set_flags(struct net *net,
50
    return ret;
50
    return ret;
51
}
51
}
52
52
53
-int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
53
-int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info)
54
+int mptcp_pm_nl_set_flags(struct genl_info *info)
54
+int mptcp_pm_nl_set_flags(struct genl_info *info)
55
{
55
{
56
    struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, };
56
    struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, };
57
    u8 changed, mask = MPTCP_PM_ADDR_FLAG_BACKUP |
57
    u8 changed, mask = MPTCP_PM_ADDR_FLAG_BACKUP |
58
             MPTCP_PM_ADDR_FLAG_FULLMESH;
58
             MPTCP_PM_ADDR_FLAG_FULLMESH;
59
-    struct net *net = sock_net(skb->sk);
59
-    struct net *net = sock_net(skb->sk);
60
+    struct net *net = genl_info_net(info);
60
+    struct net *net = genl_info_net(info);
61
    struct mptcp_pm_addr_entry *entry;
61
    struct mptcp_pm_addr_entry *entry;
62
    struct pm_nl_pernet *pernet;
62
    struct pm_nl_pernet *pernet;
63
    struct nlattr *attr;
63
    struct nlattr *attr;
64
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
64
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
65
index XXXXXXX..XXXXXXX 100644
65
index XXXXXXX..XXXXXXX 100644
66
--- a/net/mptcp/pm_userspace.c
66
--- a/net/mptcp/pm_userspace.c
67
+++ b/net/mptcp/pm_userspace.c
67
+++ b/net/mptcp/pm_userspace.c
68
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
68
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
69
    return err;
69
    return err;
70
}
70
}
71
71
72
-int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
72
-int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info)
73
+int mptcp_userspace_pm_set_flags(struct genl_info *info)
73
+int mptcp_userspace_pm_set_flags(struct genl_info *info)
74
{
74
{
75
    struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, };
75
    struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, };
76
    struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, };
76
    struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, };
77
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
77
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
78
index XXXXXXX..XXXXXXX 100644
78
index XXXXXXX..XXXXXXX 100644
79
--- a/net/mptcp/protocol.h
79
--- a/net/mptcp/protocol.h
80
+++ b/net/mptcp/protocol.h
80
+++ b/net/mptcp/protocol.h
81
@@ -XXX,XX +XXX,XX @@ bool mptcp_lookup_subflow_by_saddr(const struct list_head *list,
81
@@ -XXX,XX +XXX,XX @@ bool mptcp_lookup_subflow_by_saddr(const struct list_head *list,
82
                 const struct mptcp_addr_info *saddr);
82
                 const struct mptcp_addr_info *saddr);
83
bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
83
bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
84
                 const struct mptcp_addr_info *addr);
84
                 const struct mptcp_addr_info *addr);
85
-int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info);
85
-int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info);
86
-int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
86
-int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info);
87
+int mptcp_pm_nl_set_flags(struct genl_info *info);
87
+int mptcp_pm_nl_set_flags(struct genl_info *info);
88
+int mptcp_userspace_pm_set_flags(struct genl_info *info);
88
+int mptcp_userspace_pm_set_flags(struct genl_info *info);
89
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
89
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
90
             const struct mptcp_addr_info *addr,
90
             const struct mptcp_addr_info *addr,
91
             bool echo);
91
             bool echo);
92
92
93
--
93
--
94
2.47.1
94
2.47.1
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Generally, in the path manager interfaces, the local address is defined
3
Generally, in the path manager interfaces, the local address is defined
4
as an mptcp_pm_addr_entry type address, while the remote address is
4
as an mptcp_pm_addr_entry type address, while the remote address is
5
defined as an mptcp_addr_info type one:
5
defined as an mptcp_addr_info type one:
6
6
7
(struct mptcp_pm_addr_entry *local, struct mptcp_addr_info *remote)
7
(struct mptcp_pm_addr_entry *local, struct mptcp_addr_info *remote)
8
8
9
But the set_flags() interface uses two mptcp_pm_addr_entry type
9
But the set_flags() interface uses two mptcp_pm_addr_entry type
10
parameters.
10
parameters.
11
11
12
This patch changes the second one to mptcp_addr_info type and use helper
12
This patch changes the second one to mptcp_addr_info type and use helper
13
mptcp_pm_parse_addr() to parse it instead of using mptcp_pm_parse_entry().
13
mptcp_pm_parse_addr() to parse it instead of using mptcp_pm_parse_entry().
14
14
15
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
15
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
16
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
16
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
17
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
17
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
18
---
18
---
19
net/mptcp/pm_userspace.c | 8 ++++----
19
net/mptcp/pm_userspace.c | 8 ++++----
20
1 file changed, 4 insertions(+), 4 deletions(-)
20
1 file changed, 4 insertions(+), 4 deletions(-)
21
21
22
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
22
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
23
index XXXXXXX..XXXXXXX 100644
23
index XXXXXXX..XXXXXXX 100644
24
--- a/net/mptcp/pm_userspace.c
24
--- a/net/mptcp/pm_userspace.c
25
+++ b/net/mptcp/pm_userspace.c
25
+++ b/net/mptcp/pm_userspace.c
26
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
26
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info
27
int mptcp_userspace_pm_set_flags(struct genl_info *info)
27
int mptcp_userspace_pm_set_flags(struct genl_info *info)
28
{
28
{
29
    struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, };
29
    struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, };
30
-    struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, };
30
-    struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, };
31
+    struct mptcp_addr_info rem = { .family = AF_UNSPEC, };
31
+    struct mptcp_addr_info rem = { .family = AF_UNSPEC, };
32
    struct mptcp_pm_addr_entry *entry;
32
    struct mptcp_pm_addr_entry *entry;
33
    struct nlattr *attr, *attr_rem;
33
    struct nlattr *attr, *attr_rem;
34
    struct mptcp_sock *msk;
34
    struct mptcp_sock *msk;
35
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct genl_info *info)
35
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct genl_info *info)
36
    }
36
    }
37
37
38
    attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
38
    attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
39
-    ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
39
-    ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem);
40
+    ret = mptcp_pm_parse_addr(attr_rem, info, &rem);
40
+    ret = mptcp_pm_parse_addr(attr_rem, info, &rem);
41
    if (ret < 0)
41
    if (ret < 0)
42
        goto set_flags_err;
42
        goto set_flags_err;
43
43
44
-    if (rem.addr.family == AF_UNSPEC) {
44
-    if (rem.addr.family == AF_UNSPEC) {
45
+    if (rem.family == AF_UNSPEC) {
45
+    if (rem.family == AF_UNSPEC) {
46
        NL_SET_ERR_MSG_ATTR(info->extack, attr_rem,
46
        NL_SET_ERR_MSG_ATTR(info->extack, attr_rem,
47
                 "invalid remote address family");
47
                 "invalid remote address family");
48
        ret = -EINVAL;
48
        ret = -EINVAL;
49
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct genl_info *info)
49
@@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct genl_info *info)
50
    spin_unlock_bh(&msk->pm.lock);
50
    spin_unlock_bh(&msk->pm.lock);
51
51
52
    lock_sock(sk);
52
    lock_sock(sk);
53
-    ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup);
53
-    ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup);
54
+    ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem, bkup);
54
+    ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem, bkup);
55
    release_sock(sk);
55
    release_sock(sk);
56
56
57
    /* mptcp_pm_nl_mp_prio_send_ack() only fails in one case */
57
    /* mptcp_pm_nl_mp_prio_send_ack() only fails in one case */
58
58
59
--
59
--
60
2.47.1
60
2.47.1
diff view generated by jsdifflib
...
...
103
        NL_SET_ERR_MSG_ATTR(info->extack, attr, "address not found");
103
        NL_SET_ERR_MSG_ATTR(info->extack, attr, "address not found");
104
        return -EINVAL;
104
        return -EINVAL;
105
    }
105
    }
106
-    if ((addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) &&
106
-    if ((addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) &&
107
+    if ((local->flags & MPTCP_PM_ADDR_FLAG_FULLMESH) &&
107
+    if ((local->flags & MPTCP_PM_ADDR_FLAG_FULLMESH) &&
108
     (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) {
108
     (entry->flags & (MPTCP_PM_ADDR_FLAG_SIGNAL |
109
             MPTCP_PM_ADDR_FLAG_IMPLICIT))) {
109
        spin_unlock_bh(&pernet->lock);
110
        spin_unlock_bh(&pernet->lock);
110
        NL_SET_ERR_MSG_ATTR(info->extack, attr, "invalid addr flags");
111
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_set_flags(struct genl_info *info)
111
        return -EINVAL;
112
        return -EINVAL;
112
    }
113
    }
113
114
114
-    changed = (addr.flags ^ entry->flags) & mask;
115
-    changed = (addr.flags ^ entry->flags) & mask;
115
-    entry->flags = (entry->flags & ~mask) | (addr.flags & mask);
116
-    entry->flags = (entry->flags & ~mask) | (addr.flags & mask);
...
...
diff view generated by jsdifflib