All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH mptcp-next v2 0/3] check more values from mptcp_sock
@ 2022-03-20 13:55 Geliang Tang
  2022-03-20 13:55 ` [PATCH mptcp-next v2 1/3] Squash to "selftests: bpf: test bpf_skc_to_mptcp_sock" Geliang Tang
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Geliang Tang @ 2022-03-20 13:55 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patchset checked two more values from 'mptcp_sock', ca_name and
first.

v2:
 - merge the squash-to patch.
 - drop bpf_trace_printk() in patch 2 & 3.

Geliang Tang (3):
  Squash to "selftests: bpf: test bpf_skc_to_mptcp_sock"
  selftests: bpf: verify ca_name of struct mptcp_sock
  selftests: bpf: verify first subflow of mptcp_sock

 tools/testing/selftests/bpf/bpf_tcp_helpers.h |  8 +++-
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 43 ++++++++++++++++++-
 tools/testing/selftests/bpf/progs/mptcp.c     |  9 ++++
 3 files changed, 58 insertions(+), 2 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH mptcp-next v2 1/3] Squash to "selftests: bpf: test bpf_skc_to_mptcp_sock"
  2022-03-20 13:55 [PATCH mptcp-next v2 0/3] check more values from mptcp_sock Geliang Tang
@ 2022-03-20 13:55 ` Geliang Tang
  2022-03-20 13:55 ` [PATCH mptcp-next v2 2/3] selftests: bpf: verify ca_name of struct mptcp_sock Geliang Tang
  2022-03-20 13:55 ` [PATCH mptcp-next v2 3/3] selftests: bpf: verify first subflow of mptcp_sock Geliang Tang
  2 siblings, 0 replies; 5+ messages in thread
From: Geliang Tang @ 2022-03-20 13:55 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

Some small cleanups.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 tools/testing/selftests/bpf/bpf_tcp_helpers.h  | 2 +-
 tools/testing/selftests/bpf/prog_tests/mptcp.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
index 05f62f81cc4d..9ea6687c8f4d 100644
--- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h
+++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
@@ -86,7 +86,7 @@ struct tcp_sock {
 struct mptcp_sock {
 	struct inet_connection_sock	sk;
 
-	__u32	token;
+	__u32		token;
 } __attribute__((preserve_access_index));
 
 static __always_inline struct inet_connection_sock *inet_csk(const struct sock *sk)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 035a87755b94..80ae5a9777bf 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -56,7 +56,7 @@ static __u32 get_msk_token(void)
 	fd = open(monitor_log_path, O_RDONLY);
 	if (CHECK_FAIL(fd < 0)) {
 		log_err("Failed to open %s", monitor_log_path);
-		goto err;
+		return token;
 	}
 
 	len = read(fd, buf, sizeof(buf));
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH mptcp-next v2 2/3] selftests: bpf: verify ca_name of struct mptcp_sock
  2022-03-20 13:55 [PATCH mptcp-next v2 0/3] check more values from mptcp_sock Geliang Tang
  2022-03-20 13:55 ` [PATCH mptcp-next v2 1/3] Squash to "selftests: bpf: test bpf_skc_to_mptcp_sock" Geliang Tang
@ 2022-03-20 13:55 ` Geliang Tang
  2022-03-22 20:50   ` Mat Martineau
  2022-03-20 13:55 ` [PATCH mptcp-next v2 3/3] selftests: bpf: verify first subflow of mptcp_sock Geliang Tang
  2 siblings, 1 reply; 5+ messages in thread
From: Geliang Tang @ 2022-03-20 13:55 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patch verified another member of struct mptcp_sock, ca_name. Added a
new function get_msk_ca_name() to read the sysctl tcp_congestion_control
and verified it in verify_msk().

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 tools/testing/selftests/bpf/bpf_tcp_helpers.h |  5 +++
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 33 +++++++++++++++++++
 tools/testing/selftests/bpf/progs/mptcp.c     |  4 +++
 3 files changed, 42 insertions(+)

diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
index 9ea6687c8f4d..bebe382bcc7a 100644
--- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h
+++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
@@ -16,6 +16,10 @@ BPF_PROG(name, args)
 #define SOL_TCP 6
 #endif
 
+#ifndef TCP_CA_NAME_MAX
+#define TCP_CA_NAME_MAX	16
+#endif
+
 #define tcp_jiffies32 ((__u32)bpf_jiffies64())
 
 struct sock_common {
@@ -87,6 +91,7 @@ struct mptcp_sock {
 	struct inet_connection_sock	sk;
 
 	__u32		token;
+	char		ca_name[TCP_CA_NAME_MAX];
 } __attribute__((preserve_access_index));
 
 static __always_inline struct inet_connection_sock *inet_csk(const struct sock *sk)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 80ae5a9777bf..d2941fbc686c 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -3,12 +3,19 @@
 #include "cgroup_helpers.h"
 #include "network_helpers.h"
 
+#define TCP_CA_SYSCTL	"/proc/sys/net/ipv4/tcp_congestion_control"
+
+#ifndef TCP_CA_NAME_MAX
+#define TCP_CA_NAME_MAX	16
+#endif
+
 char monitor_log_path[64];
 
 struct mptcp_storage {
 	__u32 invoked;
 	__u32 is_mptcp;
 	__u32 token;
+	char ca_name[TCP_CA_NAME_MAX];
 };
 
 static int verify_tsk(int map_fd, int client_fd)
@@ -77,14 +84,34 @@ static __u32 get_msk_token(void)
 	return token;
 }
 
+void get_msk_ca_name(char ca_name[])
+{
+	ssize_t len;
+	int fd;
+
+	fd = open(TCP_CA_SYSCTL, O_RDONLY);
+	if (CHECK_FAIL(fd < 0)) {
+		log_err("Failed to open %s", TCP_CA_SYSCTL);
+		return;
+	}
+
+	len = read(fd, ca_name, TCP_CA_NAME_MAX);
+	if (CHECK_FAIL(len < 0))
+		log_err("Failed to read %s", TCP_CA_SYSCTL);
+
+	close(fd);
+}
+
 static int verify_msk(int map_fd, int client_fd)
 {
 	char *msg = "MPTCP subflow socket";
 	int err = 0, cfd = client_fd;
 	struct mptcp_storage val;
+	char ca_name[TCP_CA_NAME_MAX];
 	__u32 token;
 
 	token = get_msk_token();
+	get_msk_ca_name(ca_name);
 	if (token <= 0) {
 		log_err("Unexpected token %x", token);
 		return -1;
@@ -113,6 +140,12 @@ static int verify_msk(int map_fd, int client_fd)
 		err++;
 	}
 
+	if (strncmp(val.ca_name, ca_name, strlen(val.ca_name))) {
+		log_err("Unexpected mptcp_sock.ca_name %s != %s",
+			val.ca_name, ca_name);
+		err++;
+	}
+
 	return err;
 }
 
diff --git a/tools/testing/selftests/bpf/progs/mptcp.c b/tools/testing/selftests/bpf/progs/mptcp.c
index b08448a12c02..99718f20c5f8 100644
--- a/tools/testing/selftests/bpf/progs/mptcp.c
+++ b/tools/testing/selftests/bpf/progs/mptcp.c
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0
+#include <string.h>
 #include <linux/bpf.h>
 #include <bpf/bpf_helpers.h>
 #include "bpf_tcp_helpers.h"
@@ -10,6 +11,7 @@ struct mptcp_storage {
 	__u32 invoked;
 	__u32 is_mptcp;
 	__u32 token;
+	char ca_name[TCP_CA_NAME_MAX];
 };
 
 struct {
@@ -47,6 +49,7 @@ int _sockops(struct bpf_sock_ops *ctx)
 			return 1;
 
 		storage->token = 0;
+		bzero(storage->ca_name, TCP_CA_NAME_MAX);
 	} else {
 		msk = bpf_skc_to_mptcp_sock(sk);
 		if (!msk)
@@ -58,6 +61,7 @@ int _sockops(struct bpf_sock_ops *ctx)
 			return 1;
 
 		storage->token = msk->token;
+		memcpy(storage->ca_name, msk->ca_name, TCP_CA_NAME_MAX);
 	}
 	storage->invoked++;
 	storage->is_mptcp = tcp_sk->is_mptcp;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH mptcp-next v2 3/3] selftests: bpf: verify first subflow of mptcp_sock
  2022-03-20 13:55 [PATCH mptcp-next v2 0/3] check more values from mptcp_sock Geliang Tang
  2022-03-20 13:55 ` [PATCH mptcp-next v2 1/3] Squash to "selftests: bpf: test bpf_skc_to_mptcp_sock" Geliang Tang
  2022-03-20 13:55 ` [PATCH mptcp-next v2 2/3] selftests: bpf: verify ca_name of struct mptcp_sock Geliang Tang
@ 2022-03-20 13:55 ` Geliang Tang
  2 siblings, 0 replies; 5+ messages in thread
From: Geliang Tang @ 2022-03-20 13:55 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patch verified the 'first' struct member of struct mptcp_sock, which
pointed to the first subflow of msk. Saved 'sk' in mptcp_storage, and
verified it with 'first' in verify_msk().

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 tools/testing/selftests/bpf/bpf_tcp_helpers.h  | 1 +
 tools/testing/selftests/bpf/prog_tests/mptcp.c | 8 ++++++++
 tools/testing/selftests/bpf/progs/mptcp.c      | 5 +++++
 3 files changed, 14 insertions(+)

diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
index bebe382bcc7a..f92357597e63 100644
--- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h
+++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
@@ -91,6 +91,7 @@ struct mptcp_sock {
 	struct inet_connection_sock	sk;
 
 	__u32		token;
+	struct sock	*first;
 	char		ca_name[TCP_CA_NAME_MAX];
 } __attribute__((preserve_access_index));
 
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index d2941fbc686c..030188b8b13c 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -14,7 +14,9 @@ char monitor_log_path[64];
 struct mptcp_storage {
 	__u32 invoked;
 	__u32 is_mptcp;
+	struct sock *sk;
 	__u32 token;
+	struct sock *first;
 	char ca_name[TCP_CA_NAME_MAX];
 };
 
@@ -140,6 +142,12 @@ static int verify_msk(int map_fd, int client_fd)
 		err++;
 	}
 
+	if (val.first != val.sk) {
+		log_err("Unexpected mptcp_sock.first %p != %p",
+			val.first, val.sk);
+		err++;
+	}
+
 	if (strncmp(val.ca_name, ca_name, strlen(val.ca_name))) {
 		log_err("Unexpected mptcp_sock.ca_name %s != %s",
 			val.ca_name, ca_name);
diff --git a/tools/testing/selftests/bpf/progs/mptcp.c b/tools/testing/selftests/bpf/progs/mptcp.c
index 99718f20c5f8..ec3fde560e29 100644
--- a/tools/testing/selftests/bpf/progs/mptcp.c
+++ b/tools/testing/selftests/bpf/progs/mptcp.c
@@ -10,7 +10,9 @@ __u32 _version SEC("version") = 1;
 struct mptcp_storage {
 	__u32 invoked;
 	__u32 is_mptcp;
+	struct sock *sk;
 	__u32 token;
+	struct sock *first;
 	char ca_name[TCP_CA_NAME_MAX];
 };
 
@@ -50,6 +52,7 @@ int _sockops(struct bpf_sock_ops *ctx)
 
 		storage->token = 0;
 		bzero(storage->ca_name, TCP_CA_NAME_MAX);
+		storage->first = NULL;
 	} else {
 		msk = bpf_skc_to_mptcp_sock(sk);
 		if (!msk)
@@ -62,9 +65,11 @@ int _sockops(struct bpf_sock_ops *ctx)
 
 		storage->token = msk->token;
 		memcpy(storage->ca_name, msk->ca_name, TCP_CA_NAME_MAX);
+		storage->first = msk->first;
 	}
 	storage->invoked++;
 	storage->is_mptcp = tcp_sk->is_mptcp;
+	storage->sk = (struct sock *)sk;
 	bpf_trace_printk(fmt, sizeof(fmt),
 			 storage->invoked, storage->is_mptcp, storage->token);
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH mptcp-next v2 2/3] selftests: bpf: verify ca_name of struct mptcp_sock
  2022-03-20 13:55 ` [PATCH mptcp-next v2 2/3] selftests: bpf: verify ca_name of struct mptcp_sock Geliang Tang
@ 2022-03-22 20:50   ` Mat Martineau
  0 siblings, 0 replies; 5+ messages in thread
From: Mat Martineau @ 2022-03-22 20:50 UTC (permalink / raw)
  To: Geliang Tang; +Cc: mptcp

On Sun, 20 Mar 2022, Geliang Tang wrote:

> This patch verified another member of struct mptcp_sock, ca_name. Added a
> new function get_msk_ca_name() to read the sysctl tcp_congestion_control
> and verified it in verify_msk().
>
> Signed-off-by: Geliang Tang <geliang.tang@suse.com>
> ---
> tools/testing/selftests/bpf/bpf_tcp_helpers.h |  5 +++
> .../testing/selftests/bpf/prog_tests/mptcp.c  | 33 +++++++++++++++++++
> tools/testing/selftests/bpf/progs/mptcp.c     |  4 +++
> 3 files changed, 42 insertions(+)
>
> diff --git a/tools/testing/selftests/bpf/bpf_tcp_helpers.h b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
> index 9ea6687c8f4d..bebe382bcc7a 100644
> --- a/tools/testing/selftests/bpf/bpf_tcp_helpers.h
> +++ b/tools/testing/selftests/bpf/bpf_tcp_helpers.h
> @@ -16,6 +16,10 @@ BPF_PROG(name, args)
> #define SOL_TCP 6
> #endif
>
> +#ifndef TCP_CA_NAME_MAX
> +#define TCP_CA_NAME_MAX	16
> +#endif
> +
> #define tcp_jiffies32 ((__u32)bpf_jiffies64())
>
> struct sock_common {
> @@ -87,6 +91,7 @@ struct mptcp_sock {
> 	struct inet_connection_sock	sk;
>
> 	__u32		token;
> +	char		ca_name[TCP_CA_NAME_MAX];
> } __attribute__((preserve_access_index));
>
> static __always_inline struct inet_connection_sock *inet_csk(const struct sock *sk)
> diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> index 80ae5a9777bf..d2941fbc686c 100644
> --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> @@ -3,12 +3,19 @@
> #include "cgroup_helpers.h"
> #include "network_helpers.h"
>
> +#define TCP_CA_SYSCTL	"/proc/sys/net/ipv4/tcp_congestion_control"
> +
> +#ifndef TCP_CA_NAME_MAX
> +#define TCP_CA_NAME_MAX	16
> +#endif
> +
> char monitor_log_path[64];
>
> struct mptcp_storage {
> 	__u32 invoked;
> 	__u32 is_mptcp;
> 	__u32 token;
> +	char ca_name[TCP_CA_NAME_MAX];
> };
>
> static int verify_tsk(int map_fd, int client_fd)
> @@ -77,14 +84,34 @@ static __u32 get_msk_token(void)
> 	return token;
> }
>
> +void get_msk_ca_name(char ca_name[])
> +{
> +	ssize_t len;
> +	int fd;
> +
> +	fd = open(TCP_CA_SYSCTL, O_RDONLY);
> +	if (CHECK_FAIL(fd < 0)) {
> +		log_err("Failed to open %s", TCP_CA_SYSCTL);
> +		return;
> +	}
> +
> +	len = read(fd, ca_name, TCP_CA_NAME_MAX);
> +	if (CHECK_FAIL(len < 0))
> +		log_err("Failed to read %s", TCP_CA_SYSCTL);
> +
> +	close(fd);
> +}
> +
> static int verify_msk(int map_fd, int client_fd)
> {
> 	char *msg = "MPTCP subflow socket";
> 	int err = 0, cfd = client_fd;
> 	struct mptcp_storage val;
> +	char ca_name[TCP_CA_NAME_MAX];
> 	__u32 token;
>
> 	token = get_msk_token();
> +	get_msk_ca_name(ca_name);
> 	if (token <= 0) {
> 		log_err("Unexpected token %x", token);
> 		return -1;
> @@ -113,6 +140,12 @@ static int verify_msk(int map_fd, int client_fd)
> 		err++;
> 	}
>
> +	if (strncmp(val.ca_name, ca_name, strlen(val.ca_name))) {

Hi Geliang -

Since we don't know if val.ca_name or ca_name are null-terminated, the 
length should be limited to TCP_CA_NAME_MAX instead of 
strlen(val.ca_name). strncmp will already limit based on null termination 
of the two input strings, and using strlen(val.ca_name) could erroneously 
return 0 if val.ca_name was the shorter string and the initial bytes 
matched.

When you repost this series, can you also rebase "add add 
skc_to_mptcp_sock v10" and squash patch 3 of this series?

Thanks!

Mat


> +		log_err("Unexpected mptcp_sock.ca_name %s != %s",
> +			val.ca_name, ca_name);
> +		err++;
> +	}
> +
> 	return err;
> }
>
> diff --git a/tools/testing/selftests/bpf/progs/mptcp.c b/tools/testing/selftests/bpf/progs/mptcp.c
> index b08448a12c02..99718f20c5f8 100644
> --- a/tools/testing/selftests/bpf/progs/mptcp.c
> +++ b/tools/testing/selftests/bpf/progs/mptcp.c
> @@ -1,4 +1,5 @@
> // SPDX-License-Identifier: GPL-2.0
> +#include <string.h>
> #include <linux/bpf.h>
> #include <bpf/bpf_helpers.h>
> #include "bpf_tcp_helpers.h"
> @@ -10,6 +11,7 @@ struct mptcp_storage {
> 	__u32 invoked;
> 	__u32 is_mptcp;
> 	__u32 token;
> +	char ca_name[TCP_CA_NAME_MAX];
> };
>
> struct {
> @@ -47,6 +49,7 @@ int _sockops(struct bpf_sock_ops *ctx)
> 			return 1;
>
> 		storage->token = 0;
> +		bzero(storage->ca_name, TCP_CA_NAME_MAX);
> 	} else {
> 		msk = bpf_skc_to_mptcp_sock(sk);
> 		if (!msk)
> @@ -58,6 +61,7 @@ int _sockops(struct bpf_sock_ops *ctx)
> 			return 1;
>
> 		storage->token = msk->token;
> +		memcpy(storage->ca_name, msk->ca_name, TCP_CA_NAME_MAX);
> 	}
> 	storage->invoked++;
> 	storage->is_mptcp = tcp_sk->is_mptcp;
> -- 
> 2.34.1
>
>
>

--
Mat Martineau
Intel

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-03-22 20:50 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-20 13:55 [PATCH mptcp-next v2 0/3] check more values from mptcp_sock Geliang Tang
2022-03-20 13:55 ` [PATCH mptcp-next v2 1/3] Squash to "selftests: bpf: test bpf_skc_to_mptcp_sock" Geliang Tang
2022-03-20 13:55 ` [PATCH mptcp-next v2 2/3] selftests: bpf: verify ca_name of struct mptcp_sock Geliang Tang
2022-03-22 20:50   ` Mat Martineau
2022-03-20 13:55 ` [PATCH mptcp-next v2 3/3] selftests: bpf: verify first subflow of mptcp_sock Geliang Tang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.