Read /proc/sys/net/ipv4/tcp_congestion_control directly, instead of
using sysctl.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 20 ++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 7e704f5aab05..ed5773c26045 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -88,12 +88,26 @@ static __u32 get_msk_token(void)
void get_msk_ca_name(char ca_name[])
{
- FILE *stream = popen("sysctl -b net.ipv4.tcp_congestion_control", "r");
+ size_t len;
+ int fd;
+
+ fd = open("/proc/sys/net/ipv4/tcp_congestion_control", O_RDONLY);
+ if (CHECK_FAIL(fd < 0)) {
+ log_err("Failed to open tcp_congestion_control");
+ return;
+ }
- if (!fgets(ca_name, TCP_CA_NAME_MAX, stream))
+ len = read(fd, ca_name, TCP_CA_NAME_MAX);
+ if (CHECK_FAIL(len < 0)) {
log_err("Failed to read ca_name");
+ goto err;
+ }
+
+ if (len > 0 && ca_name[len - 1] == '\n')
+ ca_name[len - 1] = '\0';
- pclose(stream);
+err:
+ close(fd);
}
static int verify_msk(int map_fd, int client_fd)
--
2.34.1