[LTP] [PATCH] rpc: create valid fd to pass libtirpc validation

Liu Jian liujian56@huawei.com
Tue Jan 6 13:05:45 CET 2026


The testcase(rpc_svc_destroy, rpc_svcfd_create, rpc_xprt_register,
rpc_xprt_unregister) was failing due to an invalid fd, which
caused libtirpc's internal validation to reject the operation.
This change ensures a valid socket fd is created and can pass the
validation checks in libtirpc.

Signed-off-by: Liu Jian <liujian56@huawei.com>
---
 .../rpc_svc_destroy.c                         | 26 +++++++++++++++++++
 .../rpc_svcfd_create.c                        | 25 ++++++++++++++++++
 .../rpc_xprt_register.c                       | 24 +++++++++++++++++
 .../rpc_xprt_unregister.c                     | 24 +++++++++++++++++
 4 files changed, 99 insertions(+)

diff --git a/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_createdestroy_svc_destroy/rpc_svc_destroy.c b/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_createdestroy_svc_destroy/rpc_svc_destroy.c
index 22e560843..8d86276c8 100644
--- a/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_createdestroy_svc_destroy/rpc_svc_destroy.c
+++ b/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_createdestroy_svc_destroy/rpc_svc_destroy.c
@@ -30,6 +30,11 @@
 #include <time.h>
 #include <rpc/rpc.h>
 
+#include <unistd.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
 //Standard define
 #define PROCNUM 1
 #define VERSNUM 1
@@ -43,6 +48,27 @@ int main(void)
 	int test_status = 1;	//Default test result set to FAILED
 	int fd = 0;
 	SVCXPRT *svcr = NULL;
+	struct sockaddr_in server_addr;
+
+	fd = socket(AF_INET, SOCK_DGRAM, 0);
+	if (fd < 0) {
+		printf("socket creation failed");
+		return test_status;
+	}
+
+	memset(&server_addr, 0, sizeof(server_addr));
+	server_addr.sin_family = AF_INET;
+	server_addr.sin_port = htons(9001);
+	if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
+		printf("inet_pton failed");
+		close(fd);
+		return test_status;
+	}
+	if (connect(fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
+		printf("connect failed");
+		close(fd);
+		return test_status;
+	}
 
 	//First of all, create a server
 	svcr = svcfd_create(fd, 0, 0);
diff --git a/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_createdestroy_svcfd_create/rpc_svcfd_create.c b/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_createdestroy_svcfd_create/rpc_svcfd_create.c
index f0d89ba48..d409ed536 100644
--- a/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_createdestroy_svcfd_create/rpc_svcfd_create.c
+++ b/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_createdestroy_svcfd_create/rpc_svcfd_create.c
@@ -29,6 +29,10 @@
 #include <stdlib.h>
 #include <time.h>
 #include <rpc/rpc.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
 
 //Standard define
 #define PROCNUM 1
@@ -43,6 +47,27 @@ int main(void)
 	int test_status = 1;	//Default test result set to FAILED
 	int fd = 0;
 	SVCXPRT *svcr = NULL;
+	struct sockaddr_in server_addr;
+
+	fd = socket(AF_INET, SOCK_DGRAM, 0);
+	if (fd < 0) {
+		printf("socket creation failed");
+		return test_status;
+	}
+
+	memset(&server_addr, 0, sizeof(server_addr));
+	server_addr.sin_family = AF_INET;
+	server_addr.sin_port = htons(9001);
+	if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
+		printf("inet_pton failed");
+		close(fd);
+		return test_status;
+	}
+	if (connect(fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
+		printf("connect failed");
+		close(fd);
+		return test_status;
+	}
 
 	//create a server
 	svcr = svcfd_create(fd, 0, 0);
diff --git a/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_regunreg_xprt_register/rpc_xprt_register.c b/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_regunreg_xprt_register/rpc_xprt_register.c
index b10a1ce5e..10a78af34 100644
--- a/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_regunreg_xprt_register/rpc_xprt_register.c
+++ b/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_regunreg_xprt_register/rpc_xprt_register.c
@@ -31,6 +31,9 @@
 #include <rpc/rpc.h>
 #include <sys/types.h>
 #include <sys/socket.h>
+#include <unistd.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
 
 //Standard define
 #define PROCNUM 1
@@ -45,6 +48,27 @@ int main(void)
 	int test_status = 1;	//Default test result set to FAILED
 	SVCXPRT *svcr = NULL;
 	int fd = 0;
+	struct sockaddr_in server_addr;
+
+	fd = socket(AF_INET, SOCK_DGRAM, 0);
+	if (fd < 0) {
+		printf("socket creation failed");
+		return test_status;
+	}
+
+	memset(&server_addr, 0, sizeof(server_addr));
+	server_addr.sin_family = AF_INET;
+	server_addr.sin_port = htons(9001);
+	if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
+		printf("inet_pton failed");
+		close(fd);
+		return test_status;
+	}
+	if (connect(fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
+		printf("connect failed");
+		close(fd);
+		return test_status;
+	}
 
 	//create a server
 	svcr = svcfd_create(fd, 1024, 1024);
diff --git a/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_regunreg_xprt_unregister/rpc_xprt_unregister.c b/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_regunreg_xprt_unregister/rpc_xprt_unregister.c
index 3b6130eaa..8f3fa9b13 100644
--- a/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_regunreg_xprt_unregister/rpc_xprt_unregister.c
+++ b/testcases/network/rpc/rpc-tirpc/tests_pack/rpc_suite/rpc/rpc_regunreg_xprt_unregister/rpc_xprt_unregister.c
@@ -31,6 +31,9 @@
 #include <rpc/rpc.h>
 #include <sys/types.h>
 #include <sys/socket.h>
+#include <unistd.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
 
 //Standard define
 #define PROCNUM 1
@@ -49,6 +52,27 @@ int main(int argn, char *argc[])
 	int test_status = 1;	//Default test result set to FAILED
 	SVCXPRT *svcr = NULL;
 	int fd = 0;
+	struct sockaddr_in server_addr;
+
+	fd = socket(AF_INET, SOCK_DGRAM, 0);
+	if (fd < 0) {
+		printf("socket creation failed");
+		return test_status;
+	}
+
+	memset(&server_addr, 0, sizeof(server_addr));
+	server_addr.sin_family = AF_INET;
+	server_addr.sin_port = htons(9001);
+	if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
+		printf("inet_pton failed");
+		close(fd);
+		return test_status;
+	}
+	if (connect(fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
+		printf("connect failed");
+		close(fd);
+		return test_status;
+	}
 
 	//create a server
 	svcr = svcfd_create(fd, 1024, 1024);
-- 
2.34.1



More information about the ltp mailing list