[PATCH mptcp] mptcp: re-check dsn before reading from subflow
by Florian Westphal
mptcp_subflow_data_available() is commonly called via
ssk->sk_data_ready(), in this case the mptcp socket lock
cannot be acquired.
Therefore, while we can safely discard subflow data that
was already received up to msk->ack_seq, we cannot be sure
that 'subflow->data_avail' will still be valid at the time
userspace wants to read the data -- a previous read on a
different subflow might have carried this data already.
In that (unlikely) event, msk->ack_seq will have been updated
and will be ahead of the subflow dsn.
We can check for this condition and skip/resync to the expected
sequence number.
Signed-off-by: Florian Westphal <fw(a)strlen.de>
---
I could also submit this directly for net-next, but this
patch is only needed w. MP_JOIN support.
net/mptcp/protocol.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 53a2b0ba2241..8f2fc72fc5ed 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -121,6 +121,27 @@ static void __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk,
MPTCP_SKB_CB(skb)->offset = offset;
}
+/* both sockets must be locked */
+static bool mptcp_subflow_dsn_valid(const struct mptcp_sock *msk,
+ struct sock *ssk)
+{
+ struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
+ u64 dsn = mptcp_subflow_get_mapped_dsn(subflow);
+
+ /* revalidate data sequence number.
+ *
+ * mptcp_subflow_data_available() is usually called
+ * without msk lock. Its unlikely (but possible)
+ * that msk->ack_seq has been advanced since the last
+ * call found in-sequence data.
+ */
+ if (likely(dsn == msk->ack_seq))
+ return true;
+
+ subflow->data_avail = 0;
+ return mptcp_subflow_data_available(ssk);
+}
+
static bool __mptcp_move_skbs_from_subflow(struct mptcp_sock *msk,
struct sock *ssk,
unsigned int *bytes)
@@ -133,6 +154,11 @@ static bool __mptcp_move_skbs_from_subflow(struct mptcp_sock *msk,
bool done = false;
int rcvbuf;
+ if (!mptcp_subflow_dsn_valid(msk, ssk)) {
+ *bytes = 0;
+ return false;
+ }
+
rcvbuf = max(ssk->sk_rcvbuf, sk->sk_rcvbuf);
if (rcvbuf > sk->sk_rcvbuf)
sk->sk_rcvbuf = rcvbuf;
--
2.24.1
10 months, 2 weeks
[mptcp:t/mptcp-Implement-path-manager-interface-commands 20/25] net/mptcp/pm.c:31:7: error: no member named 'addr_signal' in 'struct mptcp_sock'
by kbuild test robot
tree: https://github.com/multipath-tcp/mptcp_net-next.git t/mptcp-Implement-path-manager-interface-commands
head: a28e79bf6de027fea5d0522a32a686aacf5658a7
commit: 781d512532236fdeb2038457060aa4a470e01f7e [20/25] tgupdate: merge t/mptcp-Implement-path-manager-interface-commands base into t/mptcp-Implement-path-manager-interface-commands
config: x86_64-allyesconfig (attached as .config)
compiler: clang version 11.0.0 (git://gitmirror/llvm_project 949134e2fefd34a38ed71de90dffe2300e2e1139)
reproduce:
# FIXME the reproduce steps for clang is not ready yet
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
Note: the mptcp/t/mptcp-Implement-path-manager-interface-commands HEAD a28e79bf6de027fea5d0522a32a686aacf5658a7 builds fine.
It only hurts bisectibility.
All errors (new ones prefixed by >>):
>> net/mptcp/pm.c:31:7: error: no member named 'addr_signal' in 'struct mptcp_sock'
msk->addr_signal = 1;
~~~ ^
net/mptcp/pm.c:57:7: error: no member named 'addr_signal' in 'struct mptcp_sock'
msk->addr_signal = 1;
~~~ ^
2 errors generated.
vim +31 net/mptcp/pm.c
532e0037f0c3af Peter Krystad 2020-02-26 12
532e0037f0c3af Peter Krystad 2020-02-26 13 int mptcp_pm_announce_addr(u32 token, u8 local_id, struct in_addr *addr)
532e0037f0c3af Peter Krystad 2020-02-26 14 {
4b738110d9bfa5 Peter Krystad 2020-02-26 15 struct mptcp_sock *msk = mptcp_token_get_sock(token);
4b738110d9bfa5 Peter Krystad 2020-02-26 16 int err = 0;
4b738110d9bfa5 Peter Krystad 2020-02-26 17
4b738110d9bfa5 Peter Krystad 2020-02-26 18 if (!msk)
4b738110d9bfa5 Peter Krystad 2020-02-26 19 return -EINVAL;
4b738110d9bfa5 Peter Krystad 2020-02-26 20
4b738110d9bfa5 Peter Krystad 2020-02-26 21 if (msk->pm.local_valid) {
4b738110d9bfa5 Peter Krystad 2020-02-26 22 err = -EBADR;
4b738110d9bfa5 Peter Krystad 2020-02-26 23 goto announce_put;
4b738110d9bfa5 Peter Krystad 2020-02-26 24 }
4b738110d9bfa5 Peter Krystad 2020-02-26 25
4b738110d9bfa5 Peter Krystad 2020-02-26 26 pr_debug("msk=%p, local_id=%d", msk, local_id);
4b738110d9bfa5 Peter Krystad 2020-02-26 27 msk->pm.local_valid = 1;
4b738110d9bfa5 Peter Krystad 2020-02-26 28 msk->pm.local_id = local_id;
4b738110d9bfa5 Peter Krystad 2020-02-26 29 msk->pm.local_family = AF_INET;
4b738110d9bfa5 Peter Krystad 2020-02-26 30 msk->pm.local_addr = *addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 @31 msk->addr_signal = 1;
4b738110d9bfa5 Peter Krystad 2020-02-26 32
4b738110d9bfa5 Peter Krystad 2020-02-26 33 announce_put:
4b738110d9bfa5 Peter Krystad 2020-02-26 34 sock_put((struct sock *)msk);
4b738110d9bfa5 Peter Krystad 2020-02-26 35 return err;
532e0037f0c3af Peter Krystad 2020-02-26 36 }
532e0037f0c3af Peter Krystad 2020-02-26 37
:::::: The code at line 31 was first introduced by commit
:::::: 4b738110d9bfa5e1a763123e0ef6d0d2f5852782 mptcp: Implement path manager interface commands
:::::: TO: Peter Krystad <peter.krystad(a)linux.intel.com>
:::::: CC: Matthieu Baerts <matthieu.baerts(a)tessares.net>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 3 weeks
[mptcp:t/mptcp-Implement-path-manager-interface-commands 23/25] net//mptcp/pm.c:46:8: error: implicit declaration of function 'mptcp_subflow_connect'
by kbuild test robot
tree: https://github.com/multipath-tcp/mptcp_net-next.git t/mptcp-Implement-path-manager-interface-commands
head: a28e79bf6de027fea5d0522a32a686aacf5658a7
commit: eba1df51e6151d1cc04a559911cf905992581b22 [23/25] tgupdate: merge t/mptcp-Implement-path-manager-interface-commands base into t/mptcp-Implement-path-manager-interface-commands
config: mips-randconfig-a001-20200228 (attached as .config)
compiler: mipsel-linux-gcc (GCC) 5.5.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout eba1df51e6151d1cc04a559911cf905992581b22
# save the attached .config to linux build tree
GCC_VERSION=5.5.0 make.cross ARCH=mips
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
Note: the mptcp/t/mptcp-Implement-path-manager-interface-commands HEAD a28e79bf6de027fea5d0522a32a686aacf5658a7 builds fine.
It only hurts bisectibility.
All errors (new ones prefixed by >>):
net//mptcp/pm.c: In function 'mptcp_pm_announce_addr':
net//mptcp/pm.c:18:21: error: 'msk' redeclared as different kind of symbol
struct mptcp_sock *msk = mptcp_token_get_sock(token);
^
net//mptcp/pm.c:15:47: note: previous definition of 'msk' was here
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
^
net//mptcp/pm.c:18:48: error: 'token' undeclared (first use in this function)
struct mptcp_sock *msk = mptcp_token_get_sock(token);
^
net//mptcp/pm.c:18:48: note: each undeclared identifier is reported only once for each function it appears in
net//mptcp/pm.c:30:14: error: 'struct mptcp_pm_data' has no member named 'remote_valid'
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^
net//mptcp/pm.c:30:31: error: 'remote_id' undeclared (first use in this function)
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^
net//mptcp/pm.c:30:51: error: 'struct mptcp_pm_data' has no member named 'remote_id'
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^
net//mptcp/pm.c:38:18: error: incompatible types when assigning to type 'struct in_addr' from type 'const struct mptcp_addr_info'
local.sin_addr = *addr;
^
net//mptcp/pm.c:42:29: error: 'struct mptcp_pm_data' has no member named 'remote_family'
remote.sin_family = msk->pm.remote_family;
^
net//mptcp/pm.c:44:27: error: 'struct mptcp_pm_data' has no member named 'remote_addr'
remote.sin_addr = msk->pm.remote_addr;
^
>> net//mptcp/pm.c:46:8: error: implicit declaration of function 'mptcp_subflow_connect' [-Werror=implicit-function-declaration]
err = mptcp_subflow_connect(sk, (struct sockaddr *)&local,
^
net//mptcp/pm.c: In function 'mptcp_pm_remove_addr':
net//mptcp/pm.c:56:21: error: 'msk' redeclared as different kind of symbol
struct mptcp_sock *msk = mptcp_token_get_sock(token);
^
net//mptcp/pm.c:54:45: note: previous definition of 'msk' was here
int mptcp_pm_remove_addr(struct mptcp_sock *msk, u8 local_id)
^
net//mptcp/pm.c:56:48: error: 'token' undeclared (first use in this function)
struct mptcp_sock *msk = mptcp_token_get_sock(token);
^
net//mptcp/pm.c:68:14: error: 'struct mptcp_pm_data' has no member named 'remote_valid'
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^
net//mptcp/pm.c:68:31: error: 'remote_id' undeclared (first use in this function)
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^
net//mptcp/pm.c:68:51: error: 'struct mptcp_pm_data' has no member named 'remote_id'
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^
net//mptcp/pm.c:75:6: error: 'addr' undeclared (first use in this function)
if (addr)
^
net//mptcp/pm.c:80:30: error: 'struct mptcp_pm_data' has no member named 'remote_family'
remote.sin6_family = msk->pm.remote_family;
^
net//mptcp/pm.c:82:28: error: 'struct mptcp_pm_data' has no member named 'remote_addr6'
remote.sin6_addr = msk->pm.remote_addr6;
^
cc1: some warnings being treated as errors
vim +/mptcp_subflow_connect +46 net//mptcp/pm.c
532e0037f0c3af Peter Krystad 2020-02-26 14
cb6c1764eb317d Paolo Abeni 2020-02-24 15 int mptcp_pm_announce_addr(struct mptcp_sock *msk,
cb6c1764eb317d Paolo Abeni 2020-02-24 16 const struct mptcp_addr_info *addr)
532e0037f0c3af Peter Krystad 2020-02-26 17 {
4b738110d9bfa5 Peter Krystad 2020-02-26 18 struct mptcp_sock *msk = mptcp_token_get_sock(token);
4b738110d9bfa5 Peter Krystad 2020-02-26 19 struct sockaddr_in remote;
4b738110d9bfa5 Peter Krystad 2020-02-26 20 struct sockaddr_in local;
4b738110d9bfa5 Peter Krystad 2020-02-26 21 struct sock *sk;
4b738110d9bfa5 Peter Krystad 2020-02-26 22 int err;
4b738110d9bfa5 Peter Krystad 2020-02-26 23
4b738110d9bfa5 Peter Krystad 2020-02-26 24 if (!msk)
4b738110d9bfa5 Peter Krystad 2020-02-26 25 return -EINVAL;
4b738110d9bfa5 Peter Krystad 2020-02-26 26
4b738110d9bfa5 Peter Krystad 2020-02-26 27 pr_debug("msk=%p", msk);
4b738110d9bfa5 Peter Krystad 2020-02-26 28
4b738110d9bfa5 Peter Krystad 2020-02-26 29 sk = (struct sock *)msk;
4b738110d9bfa5 Peter Krystad 2020-02-26 30 if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
4b738110d9bfa5 Peter Krystad 2020-02-26 31 err = -EBADR;
4b738110d9bfa5 Peter Krystad 2020-02-26 32 goto create_put;
4b738110d9bfa5 Peter Krystad 2020-02-26 33 }
4b738110d9bfa5 Peter Krystad 2020-02-26 34
4b738110d9bfa5 Peter Krystad 2020-02-26 35 local.sin_family = AF_INET;
4b738110d9bfa5 Peter Krystad 2020-02-26 36 local.sin_port = 0;
4b738110d9bfa5 Peter Krystad 2020-02-26 37 if (addr)
4b738110d9bfa5 Peter Krystad 2020-02-26 @38 local.sin_addr = *addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 39 else
4b738110d9bfa5 Peter Krystad 2020-02-26 40 local.sin_addr.s_addr = htonl(INADDR_ANY);
4b738110d9bfa5 Peter Krystad 2020-02-26 41
4b738110d9bfa5 Peter Krystad 2020-02-26 42 remote.sin_family = msk->pm.remote_family;
4b738110d9bfa5 Peter Krystad 2020-02-26 43 remote.sin_port = inet_sk(sk)->inet_dport;
4b738110d9bfa5 Peter Krystad 2020-02-26 44 remote.sin_addr = msk->pm.remote_addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 45
4b738110d9bfa5 Peter Krystad 2020-02-26 @46 err = mptcp_subflow_connect(sk, (struct sockaddr *)&local,
4b738110d9bfa5 Peter Krystad 2020-02-26 47 (struct sockaddr *)&remote, remote_id);
4b738110d9bfa5 Peter Krystad 2020-02-26 48
4b738110d9bfa5 Peter Krystad 2020-02-26 49 create_put:
4b738110d9bfa5 Peter Krystad 2020-02-26 50 sock_put(sk);
4b738110d9bfa5 Peter Krystad 2020-02-26 51 return err;
532e0037f0c3af Peter Krystad 2020-02-26 52 }
532e0037f0c3af Peter Krystad 2020-02-26 53
:::::: The code at line 46 was first introduced by commit
:::::: 4b738110d9bfa5e1a763123e0ef6d0d2f5852782 mptcp: Implement path manager interface commands
:::::: TO: Peter Krystad <peter.krystad(a)linux.intel.com>
:::::: CC: Matthieu Baerts <matthieu.baerts(a)tessares.net>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 3 weeks
[mptcp:t/mptcp-Implement-path-manager-interface-commands 23/25] net/mptcp/pm.c:46:8: error: implicit declaration of function 'mptcp_subflow_connect'; did you mean 'mptcp_subflow_init'?
by kbuild test robot
tree: https://github.com/multipath-tcp/mptcp_net-next.git t/mptcp-Implement-path-manager-interface-commands
head: a28e79bf6de027fea5d0522a32a686aacf5658a7
commit: eba1df51e6151d1cc04a559911cf905992581b22 [23/25] tgupdate: merge t/mptcp-Implement-path-manager-interface-commands base into t/mptcp-Implement-path-manager-interface-commands
config: openrisc-randconfig-a001-20200228 (attached as .config)
compiler: or1k-linux-gcc (GCC) 9.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout eba1df51e6151d1cc04a559911cf905992581b22
# save the attached .config to linux build tree
GCC_VERSION=9.2.0 make.cross ARCH=openrisc
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
Note: the mptcp/t/mptcp-Implement-path-manager-interface-commands HEAD a28e79bf6de027fea5d0522a32a686aacf5658a7 builds fine.
It only hurts bisectibility.
All errors (new ones prefixed by >>):
net/mptcp/pm.c: In function 'mptcp_pm_announce_addr':
net/mptcp/pm.c:18:21: error: 'msk' redeclared as different kind of symbol
18 | struct mptcp_sock *msk = mptcp_token_get_sock(token);
| ^~~
net/mptcp/pm.c:15:47: note: previous definition of 'msk' was here
15 | int mptcp_pm_announce_addr(struct mptcp_sock *msk,
| ~~~~~~~~~~~~~~~~~~~^~~
net/mptcp/pm.c:18:48: error: 'token' undeclared (first use in this function); did you mean 'to_kset'?
18 | struct mptcp_sock *msk = mptcp_token_get_sock(token);
| ^~~~~
| to_kset
net/mptcp/pm.c:18:48: note: each undeclared identifier is reported only once for each function it appears in
net/mptcp/pm.c:30:14: error: 'struct mptcp_pm_data' has no member named 'remote_valid'
30 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^
net/mptcp/pm.c:30:31: error: 'remote_id' undeclared (first use in this function); did you mean 'remote'?
30 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^~~~~~~~~
| remote
net/mptcp/pm.c:30:52: error: 'struct mptcp_pm_data' has no member named 'remote_id'; did you mean 'remote'?
30 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^~~~~~~~~
| remote
net/mptcp/pm.c:38:20: error: incompatible types when assigning to type 'struct in_addr' from type 'const struct mptcp_addr_info'
38 | local.sin_addr = *addr;
| ^
net/mptcp/pm.c:42:29: error: 'struct mptcp_pm_data' has no member named 'remote_family'
42 | remote.sin_family = msk->pm.remote_family;
| ^
net/mptcp/pm.c:44:27: error: 'struct mptcp_pm_data' has no member named 'remote_addr'
44 | remote.sin_addr = msk->pm.remote_addr;
| ^
>> net/mptcp/pm.c:46:8: error: implicit declaration of function 'mptcp_subflow_connect'; did you mean 'mptcp_subflow_init'? [-Werror=implicit-function-declaration]
46 | err = mptcp_subflow_connect(sk, (struct sockaddr *)&local,
| ^~~~~~~~~~~~~~~~~~~~~
| mptcp_subflow_init
net/mptcp/pm.c: In function 'mptcp_pm_remove_addr':
net/mptcp/pm.c:56:21: error: 'msk' redeclared as different kind of symbol
56 | struct mptcp_sock *msk = mptcp_token_get_sock(token);
| ^~~
net/mptcp/pm.c:54:45: note: previous definition of 'msk' was here
54 | int mptcp_pm_remove_addr(struct mptcp_sock *msk, u8 local_id)
| ~~~~~~~~~~~~~~~~~~~^~~
net/mptcp/pm.c:56:48: error: 'token' undeclared (first use in this function); did you mean 'to_kset'?
56 | struct mptcp_sock *msk = mptcp_token_get_sock(token);
| ^~~~~
| to_kset
net/mptcp/pm.c:68:14: error: 'struct mptcp_pm_data' has no member named 'remote_valid'
68 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^
net/mptcp/pm.c:68:31: error: 'remote_id' undeclared (first use in this function); did you mean 'remote'?
68 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^~~~~~~~~
| remote
net/mptcp/pm.c:68:52: error: 'struct mptcp_pm_data' has no member named 'remote_id'; did you mean 'remote'?
68 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^~~~~~~~~
| remote
net/mptcp/pm.c:75:6: error: 'addr' undeclared (first use in this function)
75 | if (addr)
| ^~~~
net/mptcp/pm.c:80:30: error: 'struct mptcp_pm_data' has no member named 'remote_family'
80 | remote.sin6_family = msk->pm.remote_family;
| ^
net/mptcp/pm.c:82:28: error: 'struct mptcp_pm_data' has no member named 'remote_addr6'
82 | remote.sin6_addr = msk->pm.remote_addr6;
| ^
cc1: some warnings being treated as errors
vim +46 net/mptcp/pm.c
532e0037f0c3af Peter Krystad 2020-02-26 14
cb6c1764eb317d Paolo Abeni 2020-02-24 15 int mptcp_pm_announce_addr(struct mptcp_sock *msk,
cb6c1764eb317d Paolo Abeni 2020-02-24 16 const struct mptcp_addr_info *addr)
532e0037f0c3af Peter Krystad 2020-02-26 17 {
4b738110d9bfa5 Peter Krystad 2020-02-26 18 struct mptcp_sock *msk = mptcp_token_get_sock(token);
4b738110d9bfa5 Peter Krystad 2020-02-26 19 struct sockaddr_in remote;
4b738110d9bfa5 Peter Krystad 2020-02-26 20 struct sockaddr_in local;
4b738110d9bfa5 Peter Krystad 2020-02-26 21 struct sock *sk;
4b738110d9bfa5 Peter Krystad 2020-02-26 22 int err;
4b738110d9bfa5 Peter Krystad 2020-02-26 23
4b738110d9bfa5 Peter Krystad 2020-02-26 24 if (!msk)
4b738110d9bfa5 Peter Krystad 2020-02-26 25 return -EINVAL;
4b738110d9bfa5 Peter Krystad 2020-02-26 26
4b738110d9bfa5 Peter Krystad 2020-02-26 27 pr_debug("msk=%p", msk);
4b738110d9bfa5 Peter Krystad 2020-02-26 28
4b738110d9bfa5 Peter Krystad 2020-02-26 29 sk = (struct sock *)msk;
4b738110d9bfa5 Peter Krystad 2020-02-26 30 if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
4b738110d9bfa5 Peter Krystad 2020-02-26 31 err = -EBADR;
4b738110d9bfa5 Peter Krystad 2020-02-26 32 goto create_put;
4b738110d9bfa5 Peter Krystad 2020-02-26 33 }
4b738110d9bfa5 Peter Krystad 2020-02-26 34
4b738110d9bfa5 Peter Krystad 2020-02-26 35 local.sin_family = AF_INET;
4b738110d9bfa5 Peter Krystad 2020-02-26 36 local.sin_port = 0;
4b738110d9bfa5 Peter Krystad 2020-02-26 37 if (addr)
4b738110d9bfa5 Peter Krystad 2020-02-26 38 local.sin_addr = *addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 39 else
4b738110d9bfa5 Peter Krystad 2020-02-26 40 local.sin_addr.s_addr = htonl(INADDR_ANY);
4b738110d9bfa5 Peter Krystad 2020-02-26 41
4b738110d9bfa5 Peter Krystad 2020-02-26 42 remote.sin_family = msk->pm.remote_family;
4b738110d9bfa5 Peter Krystad 2020-02-26 43 remote.sin_port = inet_sk(sk)->inet_dport;
4b738110d9bfa5 Peter Krystad 2020-02-26 44 remote.sin_addr = msk->pm.remote_addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 45
4b738110d9bfa5 Peter Krystad 2020-02-26 @46 err = mptcp_subflow_connect(sk, (struct sockaddr *)&local,
4b738110d9bfa5 Peter Krystad 2020-02-26 47 (struct sockaddr *)&remote, remote_id);
4b738110d9bfa5 Peter Krystad 2020-02-26 48
4b738110d9bfa5 Peter Krystad 2020-02-26 49 create_put:
4b738110d9bfa5 Peter Krystad 2020-02-26 50 sock_put(sk);
4b738110d9bfa5 Peter Krystad 2020-02-26 51 return err;
532e0037f0c3af Peter Krystad 2020-02-26 52 }
532e0037f0c3af Peter Krystad 2020-02-26 53
:::::: The code at line 46 was first introduced by commit
:::::: 4b738110d9bfa5e1a763123e0ef6d0d2f5852782 mptcp: Implement path manager interface commands
:::::: TO: Peter Krystad <peter.krystad(a)linux.intel.com>
:::::: CC: Matthieu Baerts <matthieu.baerts(a)tessares.net>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 3 weeks
[mptcp:t/mptcp-Implement-path-manager-interface-commands 21/25] net/mptcp/pm.c:30:15: error: 'struct mptcp_pm_data' has no member named 'remote_valid'; did you mean 'remote'?
by kbuild test robot
tree: https://github.com/multipath-tcp/mptcp_net-next.git t/mptcp-Implement-path-manager-interface-commands
head: a28e79bf6de027fea5d0522a32a686aacf5658a7
commit: f8513e13c445c1804d044dae4b612ea986b491cb [21/25] tgupdate: merge t/mptcp-Implement-path-manager-interface-commands base into t/mptcp-Implement-path-manager-interface-commands
config: s390-randconfig-a001-20200228 (attached as .config)
compiler: s390-linux-gcc (GCC) 7.5.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout f8513e13c445c1804d044dae4b612ea986b491cb
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=s390
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
Note: the mptcp/t/mptcp-Implement-path-manager-interface-commands HEAD a28e79bf6de027fea5d0522a32a686aacf5658a7 builds fine.
It only hurts bisectibility.
All errors (new ones prefixed by >>):
net/mptcp/pm.c: In function 'mptcp_pm_announce_addr':
net/mptcp/pm.c:18:21: error: 'msk' redeclared as different kind of symbol
struct mptcp_sock *msk = mptcp_token_get_sock(token);
^~~
net/mptcp/pm.c:15:47: note: previous definition of 'msk' was here
int mptcp_pm_announce_addr(struct mptcp_sock *msk,
^~~
net/mptcp/pm.c:18:48: error: 'token' undeclared (first use in this function); did you mean 'to_kset'?
struct mptcp_sock *msk = mptcp_token_get_sock(token);
^~~~~
to_kset
net/mptcp/pm.c:18:48: note: each undeclared identifier is reported only once for each function it appears in
>> net/mptcp/pm.c:30:15: error: 'struct mptcp_pm_data' has no member named 'remote_valid'; did you mean 'remote'?
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^~~~~~~~~~~~
remote
net/mptcp/pm.c:30:31: error: 'remote_id' undeclared (first use in this function); did you mean 'remote'?
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^~~~~~~~~
remote
net/mptcp/pm.c:30:52: error: 'struct mptcp_pm_data' has no member named 'remote_id'; did you mean 'remote'?
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^~~~~~~~~
remote
net/mptcp/pm.c:38:18: error: incompatible types when assigning to type 'struct in_addr' from type 'const struct mptcp_addr_info'
local.sin_addr = *addr;
^
net/mptcp/pm.c:42:29: error: 'struct mptcp_pm_data' has no member named 'remote_family'
remote.sin_family = msk->pm.remote_family;
^
>> net/mptcp/pm.c:44:28: error: 'struct mptcp_pm_data' has no member named 'remote_addr'; did you mean 'remote'?
remote.sin_addr = msk->pm.remote_addr;
^~~~~~~~~~~
remote
net/mptcp/pm.c: In function 'mptcp_pm_remove_addr':
net/mptcp/pm.c:56:21: error: 'msk' redeclared as different kind of symbol
struct mptcp_sock *msk = mptcp_token_get_sock(token);
^~~
net/mptcp/pm.c:54:45: note: previous definition of 'msk' was here
int mptcp_pm_remove_addr(struct mptcp_sock *msk, u8 local_id)
^~~
net/mptcp/pm.c:56:48: error: 'token' undeclared (first use in this function); did you mean 'to_kset'?
struct mptcp_sock *msk = mptcp_token_get_sock(token);
^~~~~
to_kset
net/mptcp/pm.c:68:15: error: 'struct mptcp_pm_data' has no member named 'remote_valid'; did you mean 'remote'?
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^~~~~~~~~~~~
remote
net/mptcp/pm.c:68:31: error: 'remote_id' undeclared (first use in this function); did you mean 'remote'?
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^~~~~~~~~
remote
net/mptcp/pm.c:68:52: error: 'struct mptcp_pm_data' has no member named 'remote_id'; did you mean 'remote'?
if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
^~~~~~~~~
remote
>> net/mptcp/pm.c:75:6: error: 'addr' undeclared (first use in this function); did you mean 'idr'?
if (addr)
^~~~
idr
net/mptcp/pm.c:80:30: error: 'struct mptcp_pm_data' has no member named 'remote_family'
remote.sin6_family = msk->pm.remote_family;
^
>> net/mptcp/pm.c:82:29: error: 'struct mptcp_pm_data' has no member named 'remote_addr6'; did you mean 'remote'?
remote.sin6_addr = msk->pm.remote_addr6;
^~~~~~~~~~~~
remote
vim +30 net/mptcp/pm.c
532e0037f0c3af Peter Krystad 2020-02-26 14
cb6c1764eb317d Paolo Abeni 2020-02-24 15 int mptcp_pm_announce_addr(struct mptcp_sock *msk,
cb6c1764eb317d Paolo Abeni 2020-02-24 16 const struct mptcp_addr_info *addr)
532e0037f0c3af Peter Krystad 2020-02-26 17 {
4b738110d9bfa5 Peter Krystad 2020-02-26 18 struct mptcp_sock *msk = mptcp_token_get_sock(token);
4b738110d9bfa5 Peter Krystad 2020-02-26 19 struct sockaddr_in remote;
4b738110d9bfa5 Peter Krystad 2020-02-26 20 struct sockaddr_in local;
4b738110d9bfa5 Peter Krystad 2020-02-26 21 struct sock *sk;
4b738110d9bfa5 Peter Krystad 2020-02-26 22 int err;
4b738110d9bfa5 Peter Krystad 2020-02-26 23
4b738110d9bfa5 Peter Krystad 2020-02-26 24 if (!msk)
4b738110d9bfa5 Peter Krystad 2020-02-26 25 return -EINVAL;
4b738110d9bfa5 Peter Krystad 2020-02-26 26
4b738110d9bfa5 Peter Krystad 2020-02-26 27 pr_debug("msk=%p", msk);
4b738110d9bfa5 Peter Krystad 2020-02-26 28
4b738110d9bfa5 Peter Krystad 2020-02-26 29 sk = (struct sock *)msk;
4b738110d9bfa5 Peter Krystad 2020-02-26 @30 if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
4b738110d9bfa5 Peter Krystad 2020-02-26 31 err = -EBADR;
4b738110d9bfa5 Peter Krystad 2020-02-26 32 goto create_put;
4b738110d9bfa5 Peter Krystad 2020-02-26 33 }
4b738110d9bfa5 Peter Krystad 2020-02-26 34
4b738110d9bfa5 Peter Krystad 2020-02-26 35 local.sin_family = AF_INET;
4b738110d9bfa5 Peter Krystad 2020-02-26 36 local.sin_port = 0;
4b738110d9bfa5 Peter Krystad 2020-02-26 37 if (addr)
4b738110d9bfa5 Peter Krystad 2020-02-26 38 local.sin_addr = *addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 39 else
4b738110d9bfa5 Peter Krystad 2020-02-26 40 local.sin_addr.s_addr = htonl(INADDR_ANY);
4b738110d9bfa5 Peter Krystad 2020-02-26 41
4b738110d9bfa5 Peter Krystad 2020-02-26 42 remote.sin_family = msk->pm.remote_family;
4b738110d9bfa5 Peter Krystad 2020-02-26 43 remote.sin_port = inet_sk(sk)->inet_dport;
4b738110d9bfa5 Peter Krystad 2020-02-26 @44 remote.sin_addr = msk->pm.remote_addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 45
4b738110d9bfa5 Peter Krystad 2020-02-26 46 err = mptcp_subflow_connect(sk, (struct sockaddr *)&local,
4b738110d9bfa5 Peter Krystad 2020-02-26 47 (struct sockaddr *)&remote, remote_id);
4b738110d9bfa5 Peter Krystad 2020-02-26 48
4b738110d9bfa5 Peter Krystad 2020-02-26 49 create_put:
4b738110d9bfa5 Peter Krystad 2020-02-26 50 sock_put(sk);
4b738110d9bfa5 Peter Krystad 2020-02-26 51 return err;
532e0037f0c3af Peter Krystad 2020-02-26 52 }
532e0037f0c3af Peter Krystad 2020-02-26 53
cb6c1764eb317d Paolo Abeni 2020-02-24 54 int mptcp_pm_remove_addr(struct mptcp_sock *msk, u8 local_id)
532e0037f0c3af Peter Krystad 2020-02-26 55 {
4b738110d9bfa5 Peter Krystad 2020-02-26 56 struct mptcp_sock *msk = mptcp_token_get_sock(token);
4b738110d9bfa5 Peter Krystad 2020-02-26 57 struct sockaddr_in6 remote;
4b738110d9bfa5 Peter Krystad 2020-02-26 58 struct sockaddr_in6 local;
4b738110d9bfa5 Peter Krystad 2020-02-26 59 struct sock *sk;
4b738110d9bfa5 Peter Krystad 2020-02-26 60 int err;
4b738110d9bfa5 Peter Krystad 2020-02-26 61
4b738110d9bfa5 Peter Krystad 2020-02-26 62 if (!msk)
4b738110d9bfa5 Peter Krystad 2020-02-26 63 return -EINVAL;
4b738110d9bfa5 Peter Krystad 2020-02-26 64
4b738110d9bfa5 Peter Krystad 2020-02-26 65 pr_debug("msk=%p", msk);
4b738110d9bfa5 Peter Krystad 2020-02-26 66 sk = (struct sock *)msk;
4b738110d9bfa5 Peter Krystad 2020-02-26 67
4b738110d9bfa5 Peter Krystad 2020-02-26 68 if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
4b738110d9bfa5 Peter Krystad 2020-02-26 69 err = -EBADR;
4b738110d9bfa5 Peter Krystad 2020-02-26 70 goto create_put;
4b738110d9bfa5 Peter Krystad 2020-02-26 71 }
4b738110d9bfa5 Peter Krystad 2020-02-26 72
4b738110d9bfa5 Peter Krystad 2020-02-26 73 local.sin6_family = AF_INET6;
4b738110d9bfa5 Peter Krystad 2020-02-26 74 local.sin6_port = 0;
4b738110d9bfa5 Peter Krystad 2020-02-26 @75 if (addr)
4b738110d9bfa5 Peter Krystad 2020-02-26 76 local.sin6_addr = *addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 77 else
4b738110d9bfa5 Peter Krystad 2020-02-26 78 local.sin6_addr = in6addr_any;
4b738110d9bfa5 Peter Krystad 2020-02-26 79
4b738110d9bfa5 Peter Krystad 2020-02-26 80 remote.sin6_family = msk->pm.remote_family;
4b738110d9bfa5 Peter Krystad 2020-02-26 81 remote.sin6_port = inet_sk(sk)->inet_dport;
4b738110d9bfa5 Peter Krystad 2020-02-26 @82 remote.sin6_addr = msk->pm.remote_addr6;
4b738110d9bfa5 Peter Krystad 2020-02-26 83
4b738110d9bfa5 Peter Krystad 2020-02-26 84 err = mptcp_subflow_connect(sk, (struct sockaddr *)&local,
4b738110d9bfa5 Peter Krystad 2020-02-26 85 (struct sockaddr *)&remote, remote_id);
4b738110d9bfa5 Peter Krystad 2020-02-26 86
4b738110d9bfa5 Peter Krystad 2020-02-26 87 create_put:
4b738110d9bfa5 Peter Krystad 2020-02-26 88 sock_put(sk);
4b738110d9bfa5 Peter Krystad 2020-02-26 89 return err;
532e0037f0c3af Peter Krystad 2020-02-26 90 }
532e0037f0c3af Peter Krystad 2020-02-26 91
:::::: The code at line 30 was first introduced by commit
:::::: 4b738110d9bfa5e1a763123e0ef6d0d2f5852782 mptcp: Implement path manager interface commands
:::::: TO: Peter Krystad <peter.krystad(a)linux.intel.com>
:::::: CC: Matthieu Baerts <matthieu.baerts(a)tessares.net>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 3 weeks
[mptcp:t/mptcp-Implement-path-manager-interface-commands 21/25] net/mptcp/pm.c:18:21: error: 'msk' redeclared as different kind of symbol
by kbuild test robot
tree: https://github.com/multipath-tcp/mptcp_net-next.git t/mptcp-Implement-path-manager-interface-commands
head: a28e79bf6de027fea5d0522a32a686aacf5658a7
commit: f8513e13c445c1804d044dae4b612ea986b491cb [21/25] tgupdate: merge t/mptcp-Implement-path-manager-interface-commands base into t/mptcp-Implement-path-manager-interface-commands
config: openrisc-randconfig-a001-20200228 (attached as .config)
compiler: or1k-linux-gcc (GCC) 9.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout f8513e13c445c1804d044dae4b612ea986b491cb
# save the attached .config to linux build tree
GCC_VERSION=9.2.0 make.cross ARCH=openrisc
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
Note: the mptcp/t/mptcp-Implement-path-manager-interface-commands HEAD a28e79bf6de027fea5d0522a32a686aacf5658a7 builds fine.
It only hurts bisectibility.
All errors (new ones prefixed by >>):
net/mptcp/pm.c: In function 'mptcp_pm_announce_addr':
>> net/mptcp/pm.c:18:21: error: 'msk' redeclared as different kind of symbol
18 | struct mptcp_sock *msk = mptcp_token_get_sock(token);
| ^~~
net/mptcp/pm.c:15:47: note: previous definition of 'msk' was here
15 | int mptcp_pm_announce_addr(struct mptcp_sock *msk,
| ~~~~~~~~~~~~~~~~~~~^~~
>> net/mptcp/pm.c:18:48: error: 'token' undeclared (first use in this function); did you mean 'to_kset'?
18 | struct mptcp_sock *msk = mptcp_token_get_sock(token);
| ^~~~~
| to_kset
net/mptcp/pm.c:18:48: note: each undeclared identifier is reported only once for each function it appears in
>> net/mptcp/pm.c:30:14: error: 'struct mptcp_pm_data' has no member named 'remote_valid'
30 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^
>> net/mptcp/pm.c:30:31: error: 'remote_id' undeclared (first use in this function); did you mean 'remote'?
30 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^~~~~~~~~
| remote
>> net/mptcp/pm.c:30:52: error: 'struct mptcp_pm_data' has no member named 'remote_id'; did you mean 'remote'?
30 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^~~~~~~~~
| remote
>> net/mptcp/pm.c:38:20: error: incompatible types when assigning to type 'struct in_addr' from type 'const struct mptcp_addr_info'
38 | local.sin_addr = *addr;
| ^
>> net/mptcp/pm.c:42:29: error: 'struct mptcp_pm_data' has no member named 'remote_family'
42 | remote.sin_family = msk->pm.remote_family;
| ^
>> net/mptcp/pm.c:44:27: error: 'struct mptcp_pm_data' has no member named 'remote_addr'
44 | remote.sin_addr = msk->pm.remote_addr;
| ^
net/mptcp/pm.c: In function 'mptcp_pm_remove_addr':
net/mptcp/pm.c:56:21: error: 'msk' redeclared as different kind of symbol
56 | struct mptcp_sock *msk = mptcp_token_get_sock(token);
| ^~~
net/mptcp/pm.c:54:45: note: previous definition of 'msk' was here
54 | int mptcp_pm_remove_addr(struct mptcp_sock *msk, u8 local_id)
| ~~~~~~~~~~~~~~~~~~~^~~
net/mptcp/pm.c:56:48: error: 'token' undeclared (first use in this function); did you mean 'to_kset'?
56 | struct mptcp_sock *msk = mptcp_token_get_sock(token);
| ^~~~~
| to_kset
net/mptcp/pm.c:68:14: error: 'struct mptcp_pm_data' has no member named 'remote_valid'
68 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^
net/mptcp/pm.c:68:31: error: 'remote_id' undeclared (first use in this function); did you mean 'remote'?
68 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^~~~~~~~~
| remote
net/mptcp/pm.c:68:52: error: 'struct mptcp_pm_data' has no member named 'remote_id'; did you mean 'remote'?
68 | if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
| ^~~~~~~~~
| remote
>> net/mptcp/pm.c:75:6: error: 'addr' undeclared (first use in this function)
75 | if (addr)
| ^~~~
net/mptcp/pm.c:80:30: error: 'struct mptcp_pm_data' has no member named 'remote_family'
80 | remote.sin6_family = msk->pm.remote_family;
| ^
>> net/mptcp/pm.c:82:28: error: 'struct mptcp_pm_data' has no member named 'remote_addr6'
82 | remote.sin6_addr = msk->pm.remote_addr6;
| ^
vim +/msk +18 net/mptcp/pm.c
532e0037f0c3af Peter Krystad 2020-02-26 14
cb6c1764eb317d Paolo Abeni 2020-02-24 15 int mptcp_pm_announce_addr(struct mptcp_sock *msk,
cb6c1764eb317d Paolo Abeni 2020-02-24 16 const struct mptcp_addr_info *addr)
532e0037f0c3af Peter Krystad 2020-02-26 17 {
4b738110d9bfa5 Peter Krystad 2020-02-26 @18 struct mptcp_sock *msk = mptcp_token_get_sock(token);
4b738110d9bfa5 Peter Krystad 2020-02-26 19 struct sockaddr_in remote;
4b738110d9bfa5 Peter Krystad 2020-02-26 20 struct sockaddr_in local;
4b738110d9bfa5 Peter Krystad 2020-02-26 21 struct sock *sk;
4b738110d9bfa5 Peter Krystad 2020-02-26 22 int err;
4b738110d9bfa5 Peter Krystad 2020-02-26 23
4b738110d9bfa5 Peter Krystad 2020-02-26 24 if (!msk)
4b738110d9bfa5 Peter Krystad 2020-02-26 25 return -EINVAL;
4b738110d9bfa5 Peter Krystad 2020-02-26 26
4b738110d9bfa5 Peter Krystad 2020-02-26 27 pr_debug("msk=%p", msk);
4b738110d9bfa5 Peter Krystad 2020-02-26 28
4b738110d9bfa5 Peter Krystad 2020-02-26 29 sk = (struct sock *)msk;
4b738110d9bfa5 Peter Krystad 2020-02-26 @30 if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
4b738110d9bfa5 Peter Krystad 2020-02-26 31 err = -EBADR;
4b738110d9bfa5 Peter Krystad 2020-02-26 32 goto create_put;
4b738110d9bfa5 Peter Krystad 2020-02-26 33 }
4b738110d9bfa5 Peter Krystad 2020-02-26 34
4b738110d9bfa5 Peter Krystad 2020-02-26 35 local.sin_family = AF_INET;
4b738110d9bfa5 Peter Krystad 2020-02-26 36 local.sin_port = 0;
4b738110d9bfa5 Peter Krystad 2020-02-26 37 if (addr)
4b738110d9bfa5 Peter Krystad 2020-02-26 @38 local.sin_addr = *addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 39 else
4b738110d9bfa5 Peter Krystad 2020-02-26 40 local.sin_addr.s_addr = htonl(INADDR_ANY);
4b738110d9bfa5 Peter Krystad 2020-02-26 41
4b738110d9bfa5 Peter Krystad 2020-02-26 @42 remote.sin_family = msk->pm.remote_family;
4b738110d9bfa5 Peter Krystad 2020-02-26 43 remote.sin_port = inet_sk(sk)->inet_dport;
4b738110d9bfa5 Peter Krystad 2020-02-26 @44 remote.sin_addr = msk->pm.remote_addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 45
4b738110d9bfa5 Peter Krystad 2020-02-26 46 err = mptcp_subflow_connect(sk, (struct sockaddr *)&local,
4b738110d9bfa5 Peter Krystad 2020-02-26 47 (struct sockaddr *)&remote, remote_id);
4b738110d9bfa5 Peter Krystad 2020-02-26 48
4b738110d9bfa5 Peter Krystad 2020-02-26 49 create_put:
4b738110d9bfa5 Peter Krystad 2020-02-26 50 sock_put(sk);
4b738110d9bfa5 Peter Krystad 2020-02-26 51 return err;
532e0037f0c3af Peter Krystad 2020-02-26 52 }
532e0037f0c3af Peter Krystad 2020-02-26 53
cb6c1764eb317d Paolo Abeni 2020-02-24 54 int mptcp_pm_remove_addr(struct mptcp_sock *msk, u8 local_id)
532e0037f0c3af Peter Krystad 2020-02-26 55 {
4b738110d9bfa5 Peter Krystad 2020-02-26 56 struct mptcp_sock *msk = mptcp_token_get_sock(token);
4b738110d9bfa5 Peter Krystad 2020-02-26 57 struct sockaddr_in6 remote;
4b738110d9bfa5 Peter Krystad 2020-02-26 58 struct sockaddr_in6 local;
4b738110d9bfa5 Peter Krystad 2020-02-26 59 struct sock *sk;
4b738110d9bfa5 Peter Krystad 2020-02-26 60 int err;
4b738110d9bfa5 Peter Krystad 2020-02-26 61
4b738110d9bfa5 Peter Krystad 2020-02-26 62 if (!msk)
4b738110d9bfa5 Peter Krystad 2020-02-26 63 return -EINVAL;
4b738110d9bfa5 Peter Krystad 2020-02-26 64
4b738110d9bfa5 Peter Krystad 2020-02-26 65 pr_debug("msk=%p", msk);
4b738110d9bfa5 Peter Krystad 2020-02-26 66 sk = (struct sock *)msk;
4b738110d9bfa5 Peter Krystad 2020-02-26 67
4b738110d9bfa5 Peter Krystad 2020-02-26 68 if (!msk->pm.remote_valid || remote_id != msk->pm.remote_id) {
4b738110d9bfa5 Peter Krystad 2020-02-26 69 err = -EBADR;
4b738110d9bfa5 Peter Krystad 2020-02-26 70 goto create_put;
4b738110d9bfa5 Peter Krystad 2020-02-26 71 }
4b738110d9bfa5 Peter Krystad 2020-02-26 72
4b738110d9bfa5 Peter Krystad 2020-02-26 73 local.sin6_family = AF_INET6;
4b738110d9bfa5 Peter Krystad 2020-02-26 74 local.sin6_port = 0;
4b738110d9bfa5 Peter Krystad 2020-02-26 @75 if (addr)
4b738110d9bfa5 Peter Krystad 2020-02-26 76 local.sin6_addr = *addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 77 else
4b738110d9bfa5 Peter Krystad 2020-02-26 78 local.sin6_addr = in6addr_any;
4b738110d9bfa5 Peter Krystad 2020-02-26 79
4b738110d9bfa5 Peter Krystad 2020-02-26 80 remote.sin6_family = msk->pm.remote_family;
4b738110d9bfa5 Peter Krystad 2020-02-26 81 remote.sin6_port = inet_sk(sk)->inet_dport;
4b738110d9bfa5 Peter Krystad 2020-02-26 @82 remote.sin6_addr = msk->pm.remote_addr6;
4b738110d9bfa5 Peter Krystad 2020-02-26 83
4b738110d9bfa5 Peter Krystad 2020-02-26 84 err = mptcp_subflow_connect(sk, (struct sockaddr *)&local,
4b738110d9bfa5 Peter Krystad 2020-02-26 85 (struct sockaddr *)&remote, remote_id);
4b738110d9bfa5 Peter Krystad 2020-02-26 86
4b738110d9bfa5 Peter Krystad 2020-02-26 87 create_put:
4b738110d9bfa5 Peter Krystad 2020-02-26 88 sock_put(sk);
4b738110d9bfa5 Peter Krystad 2020-02-26 89 return err;
532e0037f0c3af Peter Krystad 2020-02-26 90 }
532e0037f0c3af Peter Krystad 2020-02-26 91
:::::: The code at line 18 was first introduced by commit
:::::: 4b738110d9bfa5e1a763123e0ef6d0d2f5852782 mptcp: Implement path manager interface commands
:::::: TO: Peter Krystad <peter.krystad(a)linux.intel.com>
:::::: CC: Matthieu Baerts <matthieu.baerts(a)tessares.net>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 4 weeks
[PATCH v4 0/9] add locking to PM APis, implement PM netlink
by Paolo Abeni
This implement the locking required by the PM to allow concurent subflow
accessing the msk PM data in a safe way. Such data is protected via a msk-level
spinlock. It relies on the Double checked locking to avoid contention in the
most common scenarion (no or very little PM "actions").
Additionally changes more than a bit the PM hooks/APIs, to be hopefully simpler
and avoiding duplicate code (no v4/v6 variant, work queue management done by the
core PM infra).
It also introduce the PM netlink - it replace the current basic ones, the
related patch has been dropped locally.
git tree available at:
https://github.com/pabeni/mptcp/tree/mptcp_net-next_part3_7
changes from v3:
- many cleanup and netlink fixes (Matt) - see individual patches changelog
for the details
changes from v2:
- hook the new tests into the self-tests infra
changes from v1:
- 2 new patches: mp_join self-tests (9/9) and a specific mp_join fix (6/9)
- fixed several bugs as pointed out by the above tests
- added support for bind to interface
changes from RFC:
- cleanup uAPIs
- added self-tests for the uAPIs
- fixed ton of bugs
- included feedback from Mat
include/uapi/linux/mptcp.h | 53 +
net/mptcp/Makefile | 3
net/mptcp/options.c | 60 -
net/mptcp/pm.c | 361 +++------
net/mptcp/pm_netlink.c | 829 ++++++++++++++++++++++
net/mptcp/protocol.c | 14
net/mptcp/protocol.h | 113 +-
net/mptcp/subflow.c | 65 +
tools/testing/selftests/net/mptcp/Makefile | 9
tools/testing/selftests/net/mptcp/mptcp_connect.c | 19
tools/testing/selftests/net/mptcp/mptcp_join.sh | 296 +++++++
tools/testing/selftests/net/mptcp/pm_netlink.sh | 123 +++
tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 604 ++++++++++++++++
13 files changed, 2230 insertions(+), 319 deletions(-)
10 months, 4 weeks
[mptcp:t/mptcp-Implement-path-manager-interface-commands 20/20] net/mptcp/pm.c:31:5: error: 'struct mptcp_sock' has no member named 'addr_signal'
by kbuild test robot
tree: https://github.com/multipath-tcp/mptcp_net-next.git t/mptcp-Implement-path-manager-interface-commands
head: 781d512532236fdeb2038457060aa4a470e01f7e
commit: 781d512532236fdeb2038457060aa4a470e01f7e [20/20] tgupdate: merge t/mptcp-Implement-path-manager-interface-commands base into t/mptcp-Implement-path-manager-interface-commands
config: c6x-allyesconfig (attached as .config)
compiler: c6x-elf-gcc (GCC) 7.5.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 781d512532236fdeb2038457060aa4a470e01f7e
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=c6x
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
net/mptcp/pm.c: In function 'mptcp_pm_announce_addr':
>> net/mptcp/pm.c:31:5: error: 'struct mptcp_sock' has no member named 'addr_signal'
msk->addr_signal = 1;
^~
net/mptcp/pm.c: In function 'mptcp_pm_announce_addr6':
net/mptcp/pm.c:57:5: error: 'struct mptcp_sock' has no member named 'addr_signal'
msk->addr_signal = 1;
^~
vim +31 net/mptcp/pm.c
532e0037f0c3af Peter Krystad 2020-02-26 12
532e0037f0c3af Peter Krystad 2020-02-26 13 int mptcp_pm_announce_addr(u32 token, u8 local_id, struct in_addr *addr)
532e0037f0c3af Peter Krystad 2020-02-26 14 {
4b738110d9bfa5 Peter Krystad 2020-02-26 15 struct mptcp_sock *msk = mptcp_token_get_sock(token);
4b738110d9bfa5 Peter Krystad 2020-02-26 16 int err = 0;
4b738110d9bfa5 Peter Krystad 2020-02-26 17
4b738110d9bfa5 Peter Krystad 2020-02-26 18 if (!msk)
4b738110d9bfa5 Peter Krystad 2020-02-26 19 return -EINVAL;
4b738110d9bfa5 Peter Krystad 2020-02-26 20
4b738110d9bfa5 Peter Krystad 2020-02-26 21 if (msk->pm.local_valid) {
4b738110d9bfa5 Peter Krystad 2020-02-26 22 err = -EBADR;
4b738110d9bfa5 Peter Krystad 2020-02-26 23 goto announce_put;
4b738110d9bfa5 Peter Krystad 2020-02-26 24 }
4b738110d9bfa5 Peter Krystad 2020-02-26 25
4b738110d9bfa5 Peter Krystad 2020-02-26 26 pr_debug("msk=%p, local_id=%d", msk, local_id);
4b738110d9bfa5 Peter Krystad 2020-02-26 27 msk->pm.local_valid = 1;
4b738110d9bfa5 Peter Krystad 2020-02-26 28 msk->pm.local_id = local_id;
4b738110d9bfa5 Peter Krystad 2020-02-26 29 msk->pm.local_family = AF_INET;
4b738110d9bfa5 Peter Krystad 2020-02-26 30 msk->pm.local_addr = *addr;
4b738110d9bfa5 Peter Krystad 2020-02-26 @31 msk->addr_signal = 1;
4b738110d9bfa5 Peter Krystad 2020-02-26 32
4b738110d9bfa5 Peter Krystad 2020-02-26 33 announce_put:
4b738110d9bfa5 Peter Krystad 2020-02-26 34 sock_put((struct sock *)msk);
4b738110d9bfa5 Peter Krystad 2020-02-26 35 return err;
532e0037f0c3af Peter Krystad 2020-02-26 36 }
532e0037f0c3af Peter Krystad 2020-02-26 37
:::::: The code at line 31 was first introduced by commit
:::::: 4b738110d9bfa5e1a763123e0ef6d0d2f5852782 mptcp: Implement path manager interface commands
:::::: TO: Peter Krystad <peter.krystad(a)linux.intel.com>
:::::: CC: Matthieu Baerts <matthieu.baerts(a)tessares.net>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
10 months, 4 weeks