All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET
@ 2022-03-17  8:29 Krasnov Arseniy Vladimirovich
  2022-03-17  8:31 ` [PATCH net-next v4 1/2] af_vsock: SOCK_SEQPACKET receive timeout test Krasnov Arseniy Vladimirovich
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Krasnov Arseniy Vladimirovich @ 2022-03-17  8:29 UTC (permalink / raw)
  To: Stefano Garzarella
  Cc: Krasnov Arseniy, Rokosov Dmitry Dmitrievich, kvm, virtualization,
	netdev, linux-kernel, Krasnov Arseniy Vladimirovich

This adds two tests: for receive timeout and reading to invalid
buffer provided by user. I forgot to put both patches to main
patchset.

Arseniy Krasnov(2):

af_vsock: SOCK_SEQPACKET receive timeout test
af_vsock: SOCK_SEQPACKET broken buffer test

tools/testing/vsock/vsock_test.c | 215 +++++++++++++++++++++++++++++++++++++++
1 file changed, 215 insertions(+)

v1 -> v2:
 see every patch after '---' line.

v2 -> v3:
 see every patch after '---' line.

v3 -> v4:
 see every patch after '---' line.

-- 
2.25.1

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

* [PATCH net-next v4 1/2] af_vsock: SOCK_SEQPACKET receive timeout test
  2022-03-17  8:29 [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET Krasnov Arseniy Vladimirovich
@ 2022-03-17  8:31 ` Krasnov Arseniy Vladimirovich
  2022-03-17  8:49     ` Stefano Garzarella
  2022-03-17  8:33 ` [PATCH net-next v4 2/2] af_vsock: SOCK_SEQPACKET broken buffer test Krasnov Arseniy Vladimirovich
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: Krasnov Arseniy Vladimirovich @ 2022-03-17  8:31 UTC (permalink / raw)
  To: Stefano Garzarella
  Cc: Krasnov Arseniy, Rokosov Dmitry Dmitrievich, virtualization,
	netdev, linux-kernel, kvm, Krasnov Arseniy Vladimirovich

Test for receive timeout check: connection is established,
receiver sets timeout, but sender does nothing. Receiver's
'read()' call must return EAGAIN.

Signed-off-by: Krasnov Arseniy Vladimirovich <AVKrasnov@sberdevices.ru>
---
 v3 -> v4:
 1) Fix stupid bug about invalid 'if()' line.

 tools/testing/vsock/vsock_test.c | 84 ++++++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)

diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c
index 2a3638c0a008..5b8561b80914 100644
--- a/tools/testing/vsock/vsock_test.c
+++ b/tools/testing/vsock/vsock_test.c
@@ -16,6 +16,7 @@
 #include <linux/kernel.h>
 #include <sys/types.h>
 #include <sys/socket.h>
+#include <time.h>
 
 #include "timeout.h"
 #include "control.h"
@@ -391,6 +392,84 @@ static void test_seqpacket_msg_trunc_server(const struct test_opts *opts)
 	close(fd);
 }
 
+static time_t current_nsec(void)
+{
+	struct timespec ts;
+
+	if (clock_gettime(CLOCK_REALTIME, &ts)) {
+		perror("clock_gettime(3) failed");
+		exit(EXIT_FAILURE);
+	}
+
+	return (ts.tv_sec * 1000000000ULL) + ts.tv_nsec;
+}
+
+#define RCVTIMEO_TIMEOUT_SEC 1
+#define READ_OVERHEAD_NSEC 250000000 /* 0.25 sec */
+
+static void test_seqpacket_timeout_client(const struct test_opts *opts)
+{
+	int fd;
+	struct timeval tv;
+	char dummy;
+	time_t read_enter_ns;
+	time_t read_overhead_ns;
+
+	fd = vsock_seqpacket_connect(opts->peer_cid, 1234);
+	if (fd < 0) {
+		perror("connect");
+		exit(EXIT_FAILURE);
+	}
+
+	tv.tv_sec = RCVTIMEO_TIMEOUT_SEC;
+	tv.tv_usec = 0;
+
+	if (setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (void *)&tv, sizeof(tv)) == -1) {
+		perror("setsockopt 'SO_RCVTIMEO'");
+		exit(EXIT_FAILURE);
+	}
+
+	read_enter_ns = current_nsec();
+
+	if (read(fd, &dummy, sizeof(dummy)) != -1) {
+		fprintf(stderr,
+			"expected 'dummy' read(2) failure\n");
+		exit(EXIT_FAILURE);
+	}
+
+	if (errno != EAGAIN) {
+		perror("EAGAIN expected");
+		exit(EXIT_FAILURE);
+	}
+
+	read_overhead_ns = current_nsec() - read_enter_ns -
+			1000000000ULL * RCVTIMEO_TIMEOUT_SEC;
+
+	if (read_overhead_ns > READ_OVERHEAD_NSEC) {
+		fprintf(stderr,
+			"too much time in read(2), %lu > %i ns\n",
+			read_overhead_ns, READ_OVERHEAD_NSEC);
+		exit(EXIT_FAILURE);
+	}
+
+	control_writeln("WAITDONE");
+	close(fd);
+}
+
+static void test_seqpacket_timeout_server(const struct test_opts *opts)
+{
+	int fd;
+
+	fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL);
+	if (fd < 0) {
+		perror("accept");
+		exit(EXIT_FAILURE);
+	}
+
+	control_expectln("WAITDONE");
+	close(fd);
+}
+
 static struct test_case test_cases[] = {
 	{
 		.name = "SOCK_STREAM connection reset",
@@ -431,6 +510,11 @@ static struct test_case test_cases[] = {
 		.run_client = test_seqpacket_msg_trunc_client,
 		.run_server = test_seqpacket_msg_trunc_server,
 	},
+	{
+		.name = "SOCK_SEQPACKET timeout",
+		.run_client = test_seqpacket_timeout_client,
+		.run_server = test_seqpacket_timeout_server,
+	},
 	{},
 };
 
-- 
2.25.1

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

* [PATCH net-next v4 2/2] af_vsock: SOCK_SEQPACKET broken buffer test
  2022-03-17  8:29 [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET Krasnov Arseniy Vladimirovich
  2022-03-17  8:31 ` [PATCH net-next v4 1/2] af_vsock: SOCK_SEQPACKET receive timeout test Krasnov Arseniy Vladimirovich
@ 2022-03-17  8:33 ` Krasnov Arseniy Vladimirovich
  2022-03-18  5:05 ` [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET Krasnov Arseniy Vladimirovich
  2022-03-18 15:30 ` patchwork-bot+netdevbpf
  3 siblings, 0 replies; 7+ messages in thread
From: Krasnov Arseniy Vladimirovich @ 2022-03-17  8:33 UTC (permalink / raw)
  To: Stefano Garzarella
  Cc: Krasnov Arseniy, Rokosov Dmitry Dmitrievich,
	Krasnov Arseniy Vladimirovich, kvm, virtualization, netdev,
	linux-kernel

Add test where sender sends two message, each with own
data pattern. Reader tries to read first to broken buffer:
it has three pages size, but middle page is unmapped. Then,
reader tries to read second message to valid buffer. Test
checks, that uncopied part of first message was dropped
and thus not copied as part of second message.

Signed-off-by: Krasnov Arseniy Vladimirovich <AVKrasnov@sberdevices.ru>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
---
 tools/testing/vsock/vsock_test.c | 131 +++++++++++++++++++++++++++++++
 1 file changed, 131 insertions(+)

diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c
index 5b8561b80914..dc577461afc2 100644
--- a/tools/testing/vsock/vsock_test.c
+++ b/tools/testing/vsock/vsock_test.c
@@ -17,6 +17,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <time.h>
+#include <sys/mman.h>
 
 #include "timeout.h"
 #include "control.h"
@@ -470,6 +471,131 @@ static void test_seqpacket_timeout_server(const struct test_opts *opts)
 	close(fd);
 }
 
+#define BUF_PATTERN_1 'a'
+#define BUF_PATTERN_2 'b'
+
+static void test_seqpacket_invalid_rec_buffer_client(const struct test_opts *opts)
+{
+	int fd;
+	unsigned char *buf1;
+	unsigned char *buf2;
+	int buf_size = getpagesize() * 3;
+
+	fd = vsock_seqpacket_connect(opts->peer_cid, 1234);
+	if (fd < 0) {
+		perror("connect");
+		exit(EXIT_FAILURE);
+	}
+
+	buf1 = malloc(buf_size);
+	if (!buf1) {
+		perror("'malloc()' for 'buf1'");
+		exit(EXIT_FAILURE);
+	}
+
+	buf2 = malloc(buf_size);
+	if (!buf2) {
+		perror("'malloc()' for 'buf2'");
+		exit(EXIT_FAILURE);
+	}
+
+	memset(buf1, BUF_PATTERN_1, buf_size);
+	memset(buf2, BUF_PATTERN_2, buf_size);
+
+	if (send(fd, buf1, buf_size, 0) != buf_size) {
+		perror("send failed");
+		exit(EXIT_FAILURE);
+	}
+
+	if (send(fd, buf2, buf_size, 0) != buf_size) {
+		perror("send failed");
+		exit(EXIT_FAILURE);
+	}
+
+	close(fd);
+}
+
+static void test_seqpacket_invalid_rec_buffer_server(const struct test_opts *opts)
+{
+	int fd;
+	unsigned char *broken_buf;
+	unsigned char *valid_buf;
+	int page_size = getpagesize();
+	int buf_size = page_size * 3;
+	ssize_t res;
+	int prot = PROT_READ | PROT_WRITE;
+	int flags = MAP_PRIVATE | MAP_ANONYMOUS;
+	int i;
+
+	fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL);
+	if (fd < 0) {
+		perror("accept");
+		exit(EXIT_FAILURE);
+	}
+
+	/* Setup first buffer. */
+	broken_buf = mmap(NULL, buf_size, prot, flags, -1, 0);
+	if (broken_buf == MAP_FAILED) {
+		perror("mmap for 'broken_buf'");
+		exit(EXIT_FAILURE);
+	}
+
+	/* Unmap "hole" in buffer. */
+	if (munmap(broken_buf + page_size, page_size)) {
+		perror("'broken_buf' setup");
+		exit(EXIT_FAILURE);
+	}
+
+	valid_buf = mmap(NULL, buf_size, prot, flags, -1, 0);
+	if (valid_buf == MAP_FAILED) {
+		perror("mmap for 'valid_buf'");
+		exit(EXIT_FAILURE);
+	}
+
+	/* Try to fill buffer with unmapped middle. */
+	res = read(fd, broken_buf, buf_size);
+	if (res != -1) {
+		fprintf(stderr,
+			"expected 'broken_buf' read(2) failure, got %zi\n",
+			res);
+		exit(EXIT_FAILURE);
+	}
+
+	if (errno != ENOMEM) {
+		perror("unexpected errno of 'broken_buf'");
+		exit(EXIT_FAILURE);
+	}
+
+	/* Try to fill valid buffer. */
+	res = read(fd, valid_buf, buf_size);
+	if (res < 0) {
+		perror("unexpected 'valid_buf' read(2) failure");
+		exit(EXIT_FAILURE);
+	}
+
+	if (res != buf_size) {
+		fprintf(stderr,
+			"invalid 'valid_buf' read(2), expected %i, got %zi\n",
+			buf_size, res);
+		exit(EXIT_FAILURE);
+	}
+
+	for (i = 0; i < buf_size; i++) {
+		if (valid_buf[i] != BUF_PATTERN_2) {
+			fprintf(stderr,
+				"invalid pattern for 'valid_buf' at %i, expected %hhX, got %hhX\n",
+				i, BUF_PATTERN_2, valid_buf[i]);
+			exit(EXIT_FAILURE);
+		}
+	}
+
+	/* Unmap buffers. */
+	munmap(broken_buf, page_size);
+	munmap(broken_buf + page_size * 2, page_size);
+	munmap(valid_buf, buf_size);
+	close(fd);
+}
+
 static struct test_case test_cases[] = {
 	{
 		.name = "SOCK_STREAM connection reset",
@@ -515,6 +641,11 @@ static struct test_case test_cases[] = {
 		.run_client = test_seqpacket_timeout_client,
 		.run_server = test_seqpacket_timeout_server,
 	},
+	{
+		.name = "SOCK_SEQPACKET invalid receive buffer",
+		.run_client = test_seqpacket_invalid_rec_buffer_client,
+		.run_server = test_seqpacket_invalid_rec_buffer_server,
+	},
 	{},
 };
 
-- 
2.25.1

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

* Re: [PATCH net-next v4 1/2] af_vsock: SOCK_SEQPACKET receive timeout test
  2022-03-17  8:31 ` [PATCH net-next v4 1/2] af_vsock: SOCK_SEQPACKET receive timeout test Krasnov Arseniy Vladimirovich
@ 2022-03-17  8:49     ` Stefano Garzarella
  0 siblings, 0 replies; 7+ messages in thread
From: Stefano Garzarella @ 2022-03-17  8:49 UTC (permalink / raw)
  To: Krasnov Arseniy Vladimirovich
  Cc: Krasnov Arseniy, Rokosov Dmitry Dmitrievich, virtualization,
	netdev, linux-kernel, kvm

On Thu, Mar 17, 2022 at 08:31:49AM +0000, Krasnov Arseniy Vladimirovich wrote:
>Test for receive timeout check: connection is established,
>receiver sets timeout, but sender does nothing. Receiver's
>'read()' call must return EAGAIN.
>
>Signed-off-by: Krasnov Arseniy Vladimirovich <AVKrasnov@sberdevices.ru>
>---
> v3 -> v4:
> 1) Fix stupid bug about invalid 'if()' line.
>
> tools/testing/vsock/vsock_test.c | 84 ++++++++++++++++++++++++++++++++
> 1 file changed, 84 insertions(+)

Everything is okay now, tests pass and the patch looks good to me:

Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>

Thanks,
Stefano


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

* Re: [PATCH net-next v4 1/2] af_vsock: SOCK_SEQPACKET receive timeout test
@ 2022-03-17  8:49     ` Stefano Garzarella
  0 siblings, 0 replies; 7+ messages in thread
From: Stefano Garzarella @ 2022-03-17  8:49 UTC (permalink / raw)
  To: Krasnov Arseniy Vladimirovich
  Cc: kvm, netdev, linux-kernel, virtualization, Krasnov Arseniy,
	Rokosov Dmitry Dmitrievich

On Thu, Mar 17, 2022 at 08:31:49AM +0000, Krasnov Arseniy Vladimirovich wrote:
>Test for receive timeout check: connection is established,
>receiver sets timeout, but sender does nothing. Receiver's
>'read()' call must return EAGAIN.
>
>Signed-off-by: Krasnov Arseniy Vladimirovich <AVKrasnov@sberdevices.ru>
>---
> v3 -> v4:
> 1) Fix stupid bug about invalid 'if()' line.
>
> tools/testing/vsock/vsock_test.c | 84 ++++++++++++++++++++++++++++++++
> 1 file changed, 84 insertions(+)

Everything is okay now, tests pass and the patch looks good to me:

Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>

Thanks,
Stefano

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

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

* Re: [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET
  2022-03-17  8:29 [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET Krasnov Arseniy Vladimirovich
  2022-03-17  8:31 ` [PATCH net-next v4 1/2] af_vsock: SOCK_SEQPACKET receive timeout test Krasnov Arseniy Vladimirovich
  2022-03-17  8:33 ` [PATCH net-next v4 2/2] af_vsock: SOCK_SEQPACKET broken buffer test Krasnov Arseniy Vladimirovich
@ 2022-03-18  5:05 ` Krasnov Arseniy Vladimirovich
  2022-03-18 15:30 ` patchwork-bot+netdevbpf
  3 siblings, 0 replies; 7+ messages in thread
From: Krasnov Arseniy Vladimirovich @ 2022-03-18  5:05 UTC (permalink / raw)
  To: Stefano Garzarella
  Cc: Krasnov Arseniy, Rokosov Dmitry Dmitrievich, kvm, virtualization,
	netdev, linux-kernel

On 17.03.2022 11:29, Krasnov Arseniy Vladimirovich wrote:

Great! Thank You for reviewing this patchset!

> This adds two tests: for receive timeout and reading to invalid
> buffer provided by user. I forgot to put both patches to main
> patchset.
> 
> Arseniy Krasnov(2):
> 
> af_vsock: SOCK_SEQPACKET receive timeout test
> af_vsock: SOCK_SEQPACKET broken buffer test
> 
> tools/testing/vsock/vsock_test.c | 215 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 215 insertions(+)
> 
> v1 -> v2:
>  see every patch after '---' line.
> 
> v2 -> v3:
>  see every patch after '---' line.
> 
> v3 -> v4:
>  see every patch after '---' line.
> 


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

* Re: [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET
  2022-03-17  8:29 [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET Krasnov Arseniy Vladimirovich
                   ` (2 preceding siblings ...)
  2022-03-18  5:05 ` [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET Krasnov Arseniy Vladimirovich
@ 2022-03-18 15:30 ` patchwork-bot+netdevbpf
  3 siblings, 0 replies; 7+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-03-18 15:30 UTC (permalink / raw)
  To: Krasnov Arseniy Vladimirovich
  Cc: sgarzare, oxffffaa, DDRokosov, kvm, virtualization, netdev, linux-kernel

Hello:

This series was applied to netdev/net-next.git (master)
by David S. Miller <davem@davemloft.net>:

On Thu, 17 Mar 2022 08:29:50 +0000 you wrote:
> This adds two tests: for receive timeout and reading to invalid
> buffer provided by user. I forgot to put both patches to main
> patchset.
> 
> Arseniy Krasnov(2):
> 
> af_vsock: SOCK_SEQPACKET receive timeout test
> af_vsock: SOCK_SEQPACKET broken buffer test
> 
> [...]

Here is the summary with links:
  - [net-next,v4,1/2] af_vsock: SOCK_SEQPACKET receive timeout test
    https://git.kernel.org/netdev/net-next/c/efb3719f4ab0
  - [net-next,v4,2/2] af_vsock: SOCK_SEQPACKET broken buffer test
    https://git.kernel.org/netdev/net-next/c/e89600ebeeb1

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



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

end of thread, other threads:[~2022-03-18 15:30 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-17  8:29 [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET Krasnov Arseniy Vladimirovich
2022-03-17  8:31 ` [PATCH net-next v4 1/2] af_vsock: SOCK_SEQPACKET receive timeout test Krasnov Arseniy Vladimirovich
2022-03-17  8:49   ` Stefano Garzarella
2022-03-17  8:49     ` Stefano Garzarella
2022-03-17  8:33 ` [PATCH net-next v4 2/2] af_vsock: SOCK_SEQPACKET broken buffer test Krasnov Arseniy Vladimirovich
2022-03-18  5:05 ` [PATCH net-next v4 0/2] af_vsock: add two new tests for SOCK_SEQPACKET Krasnov Arseniy Vladimirovich
2022-03-18 15:30 ` patchwork-bot+netdevbpf

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.