All of lore.kernel.org
 help / color / mirror / Atom feed
* [LTP] [PATCH v5 00/11] watchqueue testing suite
@ 2022-01-27  9:24 Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 01/11] Add KEYCTL_WATCH_KEY to lapi keyctl.h fallback Andrea Cervesato
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

This patch-set add a new testing suite for the watch queue kernel feature
described in https://www.kernel.org/doc/html/latest/watch_queue.html

Andrea Cervesato (11):
  Add KEYCTL_WATCH_KEY to lapi keyctl.h fallback
  Add lapi/watch_queue.h header fallback
  Add wqueue01 test
  Add wqueue02 test
  Add wqueue03 test
  Add wqueue04 test
  Add wqueue05 test
  Add wqueue06 test
  Add wqueue07 test
  Add wqueue08 test
  Add wqueue09 test

 include/lapi/keyctl.h                  |   4 +
 include/lapi/watch_queue.h             | 112 +++++++++++++++++
 runtest/watchqueue                     |   9 ++
 scenario_groups/default                |   1 +
 testcases/kernel/Makefile              |   1 +
 testcases/kernel/watchqueue/.gitignore |   9 ++
 testcases/kernel/watchqueue/Makefile   |   8 ++
 testcases/kernel/watchqueue/common.h   | 167 +++++++++++++++++++++++++
 testcases/kernel/watchqueue/wqueue01.c |  43 +++++++
 testcases/kernel/watchqueue/wqueue02.c |  43 +++++++
 testcases/kernel/watchqueue/wqueue03.c |  43 +++++++
 testcases/kernel/watchqueue/wqueue04.c |  43 +++++++
 testcases/kernel/watchqueue/wqueue05.c |  43 +++++++
 testcases/kernel/watchqueue/wqueue06.c |  42 +++++++
 testcases/kernel/watchqueue/wqueue07.c |  43 +++++++
 testcases/kernel/watchqueue/wqueue08.c |  48 +++++++
 testcases/kernel/watchqueue/wqueue09.c |  55 ++++++++
 17 files changed, 714 insertions(+)
 create mode 100644 include/lapi/watch_queue.h
 create mode 100644 runtest/watchqueue
 create mode 100644 testcases/kernel/watchqueue/.gitignore
 create mode 100644 testcases/kernel/watchqueue/Makefile
 create mode 100644 testcases/kernel/watchqueue/common.h
 create mode 100644 testcases/kernel/watchqueue/wqueue01.c
 create mode 100644 testcases/kernel/watchqueue/wqueue02.c
 create mode 100644 testcases/kernel/watchqueue/wqueue03.c
 create mode 100644 testcases/kernel/watchqueue/wqueue04.c
 create mode 100644 testcases/kernel/watchqueue/wqueue05.c
 create mode 100644 testcases/kernel/watchqueue/wqueue06.c
 create mode 100644 testcases/kernel/watchqueue/wqueue07.c
 create mode 100644 testcases/kernel/watchqueue/wqueue08.c
 create mode 100644 testcases/kernel/watchqueue/wqueue09.c

-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 01/11] Add KEYCTL_WATCH_KEY to lapi keyctl.h fallback
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 02/11] Add lapi/watch_queue.h header fallback Andrea Cervesato
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

Added KEYCTL_WATCH_KEY keyctl syscall command that is required by
watch queue tests.

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---
 include/lapi/keyctl.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/include/lapi/keyctl.h b/include/lapi/keyctl.h
index d899345c9..3be782494 100644
--- a/include/lapi/keyctl.h
+++ b/include/lapi/keyctl.h
@@ -140,6 +140,10 @@ static inline key_serial_t keyctl_join_session_keyring(const char *name) {
 # define KEYCTL_INVALIDATE 21
 #endif
 
+#ifndef KEYCTL_WATCH_KEY
+# define KEYCTL_WATCH_KEY 32
+#endif
+
 /* key permissions */
 #ifndef KEY_POS_VIEW
 # define KEY_POS_VIEW    0x01000000
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 02/11] Add lapi/watch_queue.h header fallback
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 01/11] Add KEYCTL_WATCH_KEY to lapi keyctl.h fallback Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 03/11] Add wqueue01 test Andrea Cervesato
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---
 include/lapi/watch_queue.h | 112 +++++++++++++++++++++++++++++++++++++
 1 file changed, 112 insertions(+)
 create mode 100644 include/lapi/watch_queue.h

diff --git a/include/lapi/watch_queue.h b/include/lapi/watch_queue.h
new file mode 100644
index 000000000..438e62239
--- /dev/null
+++ b/include/lapi/watch_queue.h
@@ -0,0 +1,112 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ *
+ * This file is created to resolve conflicts between user space and kernel
+ * space fctnl.h declaration. linux/watch_queue.h is not handled, since
+ * user space fcntl.h redefines kernel space structures.
+ */
+
+#ifndef LAPI_WATCH_QUEUE_H__
+#define LAPI_WATCH_QUEUE_H__
+
+#include <stdint.h>
+#include "lapi/ioctl.h"
+#include "lapi/fcntl.h"
+
+#define O_NOTIFICATION_PIPE	O_EXCL	/* Parameter to pipe2() selecting notification pipe */
+
+#define IOC_WATCH_QUEUE_SET_SIZE	_IO('W', 0x60)	/* Set the size in pages */
+#define IOC_WATCH_QUEUE_SET_FILTER	_IO('W', 0x61)	/* Set the filter */
+
+enum watch_notification_type {
+	WATCH_TYPE_META		= 0,	/* Special record */
+	WATCH_TYPE_KEY_NOTIFY	= 1,	/* Key change event notification */
+	WATCH_TYPE__NR		= 2
+};
+
+enum watch_meta_notification_subtype {
+	WATCH_META_REMOVAL_NOTIFICATION	= 0,	/* Watched object was removed */
+	WATCH_META_LOSS_NOTIFICATION	= 1,	/* Data loss occurred */
+};
+
+/*
+ * Notification record header.  This is aligned to 64-bits so that subclasses
+ * can contain __u64 fields.
+ */
+struct watch_notification {
+	uint32_t			type:24;	/* enum watch_notification_type */
+	uint32_t			subtype:8;	/* Type-specific subtype (filterable) */
+	uint32_t			info;
+#define WATCH_INFO_LENGTH	0x0000007f	/* Length of record */
+#define WATCH_INFO_LENGTH__SHIFT 0
+#define WATCH_INFO_ID		0x0000ff00	/* ID of watchpoint */
+#define WATCH_INFO_ID__SHIFT	8
+#define WATCH_INFO_TYPE_INFO	0xffff0000	/* Type-specific info */
+#define WATCH_INFO_TYPE_INFO__SHIFT 16
+#define WATCH_INFO_FLAG_0	0x00010000	/* Type-specific info, flag bit 0 */
+#define WATCH_INFO_FLAG_1	0x00020000	/* ... */
+#define WATCH_INFO_FLAG_2	0x00040000
+#define WATCH_INFO_FLAG_3	0x00080000
+#define WATCH_INFO_FLAG_4	0x00100000
+#define WATCH_INFO_FLAG_5	0x00200000
+#define WATCH_INFO_FLAG_6	0x00400000
+#define WATCH_INFO_FLAG_7	0x00800000
+};
+
+/*
+ * Notification filtering rules (IOC_WATCH_QUEUE_SET_FILTER).
+ */
+struct watch_notification_type_filter {
+	uint32_t	type;			/* Type to apply filter to */
+	uint32_t	info_filter;		/* Filter on watch_notification::info */
+	uint32_t	info_mask;		/* Mask of relevant bits in info_filter */
+	uint32_t	subtype_filter[8];	/* Bitmask of subtypes to filter on */
+};
+
+struct watch_notification_filter {
+	uint32_t	nr_filters;		/* Number of filters */
+	uint32_t	__reserved;		/* Must be 0 */
+	struct watch_notification_type_filter filters[];
+};
+
+
+/*
+ * Extended watch removal notification.  This is used optionally if the type
+ * wants to indicate an identifier for the object being watched, if there is
+ * such.  This can be distinguished by the length.
+ *
+ * type -> WATCH_TYPE_META
+ * subtype -> WATCH_META_REMOVAL_NOTIFICATION
+ */
+struct watch_notification_removal {
+	struct watch_notification watch;
+	uint64_t	id;		/* Type-dependent identifier */
+};
+
+/*
+ * Type of key/keyring change notification.
+ */
+enum key_notification_subtype {
+	NOTIFY_KEY_INSTANTIATED	= 0, /* Key was instantiated (aux is error code) */
+	NOTIFY_KEY_UPDATED	= 1, /* Key was updated */
+	NOTIFY_KEY_LINKED	= 2, /* Key (aux) was added to watched keyring */
+	NOTIFY_KEY_UNLINKED	= 3, /* Key (aux) was removed from watched keyring */
+	NOTIFY_KEY_CLEARED	= 4, /* Keyring was cleared */
+	NOTIFY_KEY_REVOKED	= 5, /* Key was revoked */
+	NOTIFY_KEY_INVALIDATED	= 6, /* Key was invalidated */
+	NOTIFY_KEY_SETATTR	= 7, /* Key's attributes got changed */
+};
+
+/*
+ * Key/keyring notification record.
+ * - watch.type = WATCH_TYPE_KEY_NOTIFY
+ * - watch.subtype = enum key_notification_type
+ */
+struct key_notification {
+	struct watch_notification watch;
+	uint32_t	key_id;		/* The key/keyring affected */
+	uint32_t	aux;		/* Per-type auxiliary data */
+};
+
+#endif /* LAPI_WATCH_QUEUE_H__ */
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 03/11] Add wqueue01 test
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 01/11] Add KEYCTL_WATCH_KEY to lapi keyctl.h fallback Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 02/11] Add lapi/watch_queue.h header fallback Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 04/11] Add wqueue02 test Andrea Cervesato
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

This test is testing NOTIFY_KEY_UPDATED event

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---

In v5 wqueue_watch function is now handling pipe2 when CONFIG_WATCH_QUEUE is
not defined. Also added a better format for common.h and tests files.

 runtest/watchqueue                     |   1 +
 scenario_groups/default                |   1 +
 testcases/kernel/Makefile              |   1 +
 testcases/kernel/watchqueue/.gitignore |   1 +
 testcases/kernel/watchqueue/Makefile   |   8 ++
 testcases/kernel/watchqueue/common.h   | 167 +++++++++++++++++++++++++
 testcases/kernel/watchqueue/wqueue01.c |  43 +++++++
 7 files changed, 222 insertions(+)
 create mode 100644 runtest/watchqueue
 create mode 100644 testcases/kernel/watchqueue/.gitignore
 create mode 100644 testcases/kernel/watchqueue/Makefile
 create mode 100644 testcases/kernel/watchqueue/common.h
 create mode 100644 testcases/kernel/watchqueue/wqueue01.c

diff --git a/runtest/watchqueue b/runtest/watchqueue
new file mode 100644
index 000000000..782577d6d
--- /dev/null
+++ b/runtest/watchqueue
@@ -0,0 +1 @@
+wqueue01 wqueue01
diff --git a/scenario_groups/default b/scenario_groups/default
index 1dc2987d5..68bd5300d 100644
--- a/scenario_groups/default
+++ b/scenario_groups/default
@@ -30,3 +30,4 @@ cve
 crypto
 kernel_misc
 uevent
+watchqueue
diff --git a/testcases/kernel/Makefile b/testcases/kernel/Makefile
index 4604f1f38..d44856c57 100644
--- a/testcases/kernel/Makefile
+++ b/testcases/kernel/Makefile
@@ -38,6 +38,7 @@ SUBDIRS			+= connectors \
 			   sound \
 			   tracing \
 			   uevents \
+			   watchqueue \
 
 ifeq ($(WITH_POWER_MANAGEMENT_TESTSUITE),yes)
 SUBDIRS			+= power_management
diff --git a/testcases/kernel/watchqueue/.gitignore b/testcases/kernel/watchqueue/.gitignore
new file mode 100644
index 000000000..c61ac6165
--- /dev/null
+++ b/testcases/kernel/watchqueue/.gitignore
@@ -0,0 +1 @@
+wqueue01
diff --git a/testcases/kernel/watchqueue/Makefile b/testcases/kernel/watchqueue/Makefile
new file mode 100644
index 000000000..896d66d42
--- /dev/null
+++ b/testcases/kernel/watchqueue/Makefile
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+top_srcdir			?= ../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
+
+LDLIBS += $(KEYUTILS_LIBS)
diff --git a/testcases/kernel/watchqueue/common.h b/testcases/kernel/watchqueue/common.h
new file mode 100644
index 000000000..8ed38bd4a
--- /dev/null
+++ b/testcases/kernel/watchqueue/common.h
@@ -0,0 +1,167 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+#ifndef WQUEUE_COMMON_H__
+#define WQUEUE_COMMON_H__
+
+#define _GNU_SOURCE
+
+#include <unistd.h>
+#include "tst_test.h"
+#include "lapi/watch_queue.h"
+#include "lapi/keyctl.h"
+
+static struct watch_notification_filter wqueue_filter = {
+	.nr_filters	= 2,
+	.filters = {
+		[0]	= {
+			.type			= WATCH_TYPE_META,
+			.subtype_filter[0]	= UINT_MAX,
+		},
+		[1]	= {
+			.type			= WATCH_TYPE_KEY_NOTIFY,
+			.subtype_filter[0]	= UINT_MAX,
+		},
+	},
+};
+
+static inline int wqueue_key_event(struct watch_notification *n, size_t len,
+								   unsigned int wtype, int type)
+{
+	struct key_notification *k;
+	const char *msg;
+
+	if (wtype != WATCH_TYPE_KEY_NOTIFY)
+		return 0;
+
+	if (len != sizeof(struct key_notification))
+		tst_brk(TBROK, "Incorrect key message length");
+
+	switch (n->subtype) {
+	case NOTIFY_KEY_INSTANTIATED:
+		msg = "instantiated";
+		break;
+	case NOTIFY_KEY_UPDATED:
+		msg = "updated";
+		break;
+	case NOTIFY_KEY_LINKED:
+		msg = "linked";
+		break;
+	case NOTIFY_KEY_UNLINKED:
+		msg = "unlinked";
+		break;
+	case NOTIFY_KEY_CLEARED:
+		msg = "cleared";
+		break;
+	case NOTIFY_KEY_REVOKED:
+		msg = "revoked";
+		break;
+	case NOTIFY_KEY_INVALIDATED:
+		msg = "invalidated";
+		break;
+	case NOTIFY_KEY_SETATTR:
+		msg = "setattr";
+		break;
+	default:
+		msg = "Invalid notification";
+		break;
+	};
+
+	k = (struct key_notification *)n;
+	tst_res(TINFO, "KEY %08x change=%u[%s] aux=%u", k->key_id, n->subtype, msg,
+			k->aux);
+
+	if (n->subtype == type)
+		return 1;
+
+	return 0;
+}
+
+static inline key_serial_t wqueue_add_key(int fd)
+{
+	key_serial_t key;
+
+	key = add_key("user", "ltptestkey", "a", 1, KEY_SPEC_SESSION_KEYRING);
+	if (key == -1)
+		tst_brk(TBROK, "add_key error: %s", tst_strerrno(errno));
+
+	keyctl(KEYCTL_WATCH_KEY, key, fd, 0x01);
+	keyctl(KEYCTL_WATCH_KEY, KEY_SPEC_SESSION_KEYRING, fd, 0x02);
+
+	return key;
+}
+
+static inline int wqueue_watch(int buf_size,
+							   struct watch_notification_filter *filter)
+{
+	int pipefd[2];
+	int fd;
+
+	TEST(pipe2(pipefd, O_NOTIFICATION_PIPE));
+	if (TST_RET) {
+		switch (TST_ERR) {
+		case ENOPKG:
+			tst_brk(TCONF | TTERRNO, "CONFIG_WATCH_QUEUE is not set");
+			break;
+		case EINVAL:
+			tst_brk(TCONF | TTERRNO, "O_NOTIFICATION_PIPE is not supported");
+			break;
+		default:
+			tst_brk(TBROK | TTERRNO, "pipe2() returned %ld", TST_RET);
+		}
+	}
+
+	fd = pipefd[0];
+
+	SAFE_IOCTL(fd, IOC_WATCH_QUEUE_SET_SIZE, buf_size);
+	SAFE_IOCTL(fd, IOC_WATCH_QUEUE_SET_FILTER, filter);
+
+	return fd;
+}
+
+typedef void (*wqueue_callback)(struct watch_notification *n, size_t len,
+								unsigned int wtype);
+
+static void wqueue_consumer(int fd, wqueue_callback cb)
+{
+	unsigned char buffer[433], *p, *end;
+	union {
+		struct watch_notification n;
+		unsigned char buf1[128];
+	} n;
+	ssize_t buf_len;
+
+	tst_res(TINFO, "Reading watch queue events");
+
+	buf_len = SAFE_READ(0, fd, buffer, sizeof(buffer));
+
+	p = buffer;
+	end = buffer + buf_len;
+	while (p < end) {
+		size_t largest, len;
+
+		largest = end - p;
+		if (largest > 128)
+			largest = 128;
+
+		if (largest < sizeof(struct watch_notification))
+			tst_brk(TBROK, "Short message header: %zu", largest);
+
+		memcpy(&n, p, largest);
+
+		tst_res(TINFO, "NOTIFY[%03zx]: ty=%06x sy=%02x i=%08x", p - buffer,
+				n.n.type, n.n.subtype, n.n.info);
+
+		len = n.n.info & WATCH_INFO_LENGTH;
+		if (len < sizeof(n.n) || len > largest)
+			tst_brk(TBROK, "Bad message length: %zu/%zu", len, largest);
+
+		cb(&n.n, len, n.n.type);
+
+		p += len;
+	}
+}
+
+#endif
diff --git a/testcases/kernel/watchqueue/wqueue01.c b/testcases/kernel/watchqueue/wqueue01.c
new file mode 100644
index 000000000..7ee2845ef
--- /dev/null
+++ b/testcases/kernel/watchqueue/wqueue01.c
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Test if keyctl update is correctly recognized by watch queue.
+ */
+
+#define _GNU_SOURCE
+
+#include "tst_test.h"
+#include "lapi/keyctl.h"
+#include "common.h"
+
+static void saw_key_updated(struct watch_notification *n, size_t len,
+							unsigned int wtype)
+{
+	if (wqueue_key_event(n, len, wtype, NOTIFY_KEY_UPDATED))
+		tst_res(TPASS, "keyctl update has been recognized");
+	else
+		tst_res(TFAIL, "keyctl update has not been recognized");
+}
+
+static void run(void)
+{
+	int fd;
+	key_serial_t key;
+
+	fd = wqueue_watch(256, &wqueue_filter);
+	key = wqueue_add_key(fd);
+
+	keyctl(KEYCTL_UPDATE, key, "b", 1);
+	wqueue_consumer(fd, saw_key_updated);
+
+	SAFE_CLOSE(fd);
+}
+
+static struct tst_test test = {
+	.test_all = run,
+};
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 04/11] Add wqueue02 test
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
                   ` (2 preceding siblings ...)
  2022-01-27  9:24 ` [LTP] [PATCH v5 03/11] Add wqueue01 test Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 05/11] Add wqueue03 test Andrea Cervesato
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

This test is testing NOTIFY_KEY_UNLINKED event

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---
 runtest/watchqueue                     |  1 +
 testcases/kernel/watchqueue/.gitignore |  1 +
 testcases/kernel/watchqueue/wqueue02.c | 43 ++++++++++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 testcases/kernel/watchqueue/wqueue02.c

diff --git a/runtest/watchqueue b/runtest/watchqueue
index 782577d6d..0d442ff01 100644
--- a/runtest/watchqueue
+++ b/runtest/watchqueue
@@ -1 +1,2 @@
 wqueue01 wqueue01
+wqueue02 wqueue02
diff --git a/testcases/kernel/watchqueue/.gitignore b/testcases/kernel/watchqueue/.gitignore
index c61ac6165..4f8695201 100644
--- a/testcases/kernel/watchqueue/.gitignore
+++ b/testcases/kernel/watchqueue/.gitignore
@@ -1 +1,2 @@
 wqueue01
+wqueue02
diff --git a/testcases/kernel/watchqueue/wqueue02.c b/testcases/kernel/watchqueue/wqueue02.c
new file mode 100644
index 000000000..72df32b69
--- /dev/null
+++ b/testcases/kernel/watchqueue/wqueue02.c
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Test if keyctl unlink is correctly recognized by watch queue.
+ */
+
+#define _GNU_SOURCE
+
+#include "tst_test.h"
+#include "lapi/keyctl.h"
+#include "common.h"
+
+static void saw_key_unlinked(struct watch_notification *n, size_t len,
+							 unsigned int wtype)
+{
+	if (wqueue_key_event(n, len, wtype, NOTIFY_KEY_UNLINKED))
+		tst_res(TPASS, "keyctl unlink has been recognized");
+	else
+		tst_res(TFAIL, "keyctl unlink has not been recognized");
+}
+
+static void run(void)
+{
+	int fd;
+	key_serial_t key;
+
+	fd = wqueue_watch(256, &wqueue_filter);
+	key = wqueue_add_key(fd);
+
+	keyctl(KEYCTL_UNLINK, key, KEY_SPEC_SESSION_KEYRING);
+	wqueue_consumer(fd, saw_key_unlinked);
+
+	SAFE_CLOSE(fd);
+}
+
+static struct tst_test test = {
+	.test_all = run,
+};
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 05/11] Add wqueue03 test
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
                   ` (3 preceding siblings ...)
  2022-01-27  9:24 ` [LTP] [PATCH v5 04/11] Add wqueue02 test Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 06/11] Add wqueue04 test Andrea Cervesato
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

This test is testing NOTIFY_KEY_REVOKED event

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---
 runtest/watchqueue                     |  1 +
 testcases/kernel/watchqueue/.gitignore |  1 +
 testcases/kernel/watchqueue/wqueue03.c | 43 ++++++++++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 testcases/kernel/watchqueue/wqueue03.c

diff --git a/runtest/watchqueue b/runtest/watchqueue
index 0d442ff01..0606db1e0 100644
--- a/runtest/watchqueue
+++ b/runtest/watchqueue
@@ -1,2 +1,3 @@
 wqueue01 wqueue01
 wqueue02 wqueue02
+wqueue03 wqueue03
diff --git a/testcases/kernel/watchqueue/.gitignore b/testcases/kernel/watchqueue/.gitignore
index 4f8695201..36a7473d8 100644
--- a/testcases/kernel/watchqueue/.gitignore
+++ b/testcases/kernel/watchqueue/.gitignore
@@ -1,2 +1,3 @@
 wqueue01
 wqueue02
+wqueue03
diff --git a/testcases/kernel/watchqueue/wqueue03.c b/testcases/kernel/watchqueue/wqueue03.c
new file mode 100644
index 000000000..e6e4c2091
--- /dev/null
+++ b/testcases/kernel/watchqueue/wqueue03.c
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Test if keyctl revoke is correctly recognized by watch queue.
+ */
+
+#define _GNU_SOURCE
+
+#include "tst_test.h"
+#include "lapi/keyctl.h"
+#include "common.h"
+
+static void saw_key_revoked(struct watch_notification *n, size_t len,
+							unsigned int wtype)
+{
+	if (wqueue_key_event(n, len, wtype, NOTIFY_KEY_REVOKED))
+		tst_res(TPASS, "keyctl revoke has been recognized");
+	else
+		tst_res(TFAIL, "keyctl revoke has not been recognized");
+}
+
+static void run(void)
+{
+	int fd;
+	key_serial_t key;
+
+	fd = wqueue_watch(256, &wqueue_filter);
+	key = wqueue_add_key(fd);
+
+	keyctl(KEYCTL_REVOKE, key);
+	wqueue_consumer(fd, saw_key_revoked);
+
+	SAFE_CLOSE(fd);
+}
+
+static struct tst_test test = {
+	.test_all = run,
+};
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 06/11] Add wqueue04 test
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
                   ` (4 preceding siblings ...)
  2022-01-27  9:24 ` [LTP] [PATCH v5 05/11] Add wqueue03 test Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 07/11] Add wqueue05 test Andrea Cervesato
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

This test is testing NOTIFY_KEY_LINKED event

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---
 runtest/watchqueue                     |  1 +
 testcases/kernel/watchqueue/.gitignore |  1 +
 testcases/kernel/watchqueue/wqueue04.c | 43 ++++++++++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 testcases/kernel/watchqueue/wqueue04.c

diff --git a/runtest/watchqueue b/runtest/watchqueue
index 0606db1e0..cd897f4b4 100644
--- a/runtest/watchqueue
+++ b/runtest/watchqueue
@@ -1,3 +1,4 @@
 wqueue01 wqueue01
 wqueue02 wqueue02
 wqueue03 wqueue03
+wqueue04 wqueue04
diff --git a/testcases/kernel/watchqueue/.gitignore b/testcases/kernel/watchqueue/.gitignore
index 36a7473d8..13f492dbe 100644
--- a/testcases/kernel/watchqueue/.gitignore
+++ b/testcases/kernel/watchqueue/.gitignore
@@ -1,3 +1,4 @@
 wqueue01
 wqueue02
 wqueue03
+wqueue04
diff --git a/testcases/kernel/watchqueue/wqueue04.c b/testcases/kernel/watchqueue/wqueue04.c
new file mode 100644
index 000000000..dd585f2dc
--- /dev/null
+++ b/testcases/kernel/watchqueue/wqueue04.c
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Test if keyctl link is correctly recognized by watch queue.
+ */
+
+#define _GNU_SOURCE
+
+#include "tst_test.h"
+#include "lapi/keyctl.h"
+#include "common.h"
+
+static void saw_key_linked(struct watch_notification *n, size_t len,
+						   unsigned int wtype)
+{
+	if (wqueue_key_event(n, len, wtype, NOTIFY_KEY_LINKED))
+		tst_res(TPASS, "keyctl link has been recognized");
+	else
+		tst_res(TFAIL, "keyctl link has not been recognized");
+}
+
+static void run(void)
+{
+	int fd;
+	key_serial_t key;
+
+	fd = wqueue_watch(256, &wqueue_filter);
+	key = wqueue_add_key(fd);
+
+	keyctl(KEYCTL_LINK, key, KEY_SPEC_SESSION_KEYRING);
+	wqueue_consumer(fd, saw_key_linked);
+
+	SAFE_CLOSE(fd);
+}
+
+static struct tst_test test = {
+	.test_all = run,
+};
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 07/11] Add wqueue05 test
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
                   ` (5 preceding siblings ...)
  2022-01-27  9:24 ` [LTP] [PATCH v5 06/11] Add wqueue04 test Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 08/11] Add wqueue06 test Andrea Cervesato
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---
 runtest/watchqueue                     |  1 +
 testcases/kernel/watchqueue/.gitignore |  1 +
 testcases/kernel/watchqueue/wqueue05.c | 43 ++++++++++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 testcases/kernel/watchqueue/wqueue05.c

diff --git a/runtest/watchqueue b/runtest/watchqueue
index cd897f4b4..596d45154 100644
--- a/runtest/watchqueue
+++ b/runtest/watchqueue
@@ -2,3 +2,4 @@ wqueue01 wqueue01
 wqueue02 wqueue02
 wqueue03 wqueue03
 wqueue04 wqueue04
+wqueue05 wqueue05
diff --git a/testcases/kernel/watchqueue/.gitignore b/testcases/kernel/watchqueue/.gitignore
index 13f492dbe..9f4ac81e7 100644
--- a/testcases/kernel/watchqueue/.gitignore
+++ b/testcases/kernel/watchqueue/.gitignore
@@ -2,3 +2,4 @@ wqueue01
 wqueue02
 wqueue03
 wqueue04
+wqueue05
diff --git a/testcases/kernel/watchqueue/wqueue05.c b/testcases/kernel/watchqueue/wqueue05.c
new file mode 100644
index 000000000..173e8fc73
--- /dev/null
+++ b/testcases/kernel/watchqueue/wqueue05.c
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Test if keyctl invalidate is correctly recognized by watch queue.
+ */
+
+#define _GNU_SOURCE
+
+#include "tst_test.h"
+#include "lapi/keyctl.h"
+#include "common.h"
+
+static void saw_key_invalidated(struct watch_notification *n, size_t len,
+								unsigned int wtype)
+{
+	if (wqueue_key_event(n, len, wtype, NOTIFY_KEY_INVALIDATED))
+		tst_res(TPASS, "keyctl invalidate has been recognized");
+	else
+		tst_res(TFAIL, "keyctl invalidate has not been recognized");
+}
+
+static void run(void)
+{
+	int fd;
+	key_serial_t key;
+
+	fd = wqueue_watch(256, &wqueue_filter);
+	key = wqueue_add_key(fd);
+
+	keyctl(KEYCTL_INVALIDATE, key);
+	wqueue_consumer(fd, saw_key_invalidated);
+
+	SAFE_CLOSE(fd);
+}
+
+static struct tst_test test = {
+	.test_all = run,
+};
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 08/11] Add wqueue06 test
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
                   ` (6 preceding siblings ...)
  2022-01-27  9:24 ` [LTP] [PATCH v5 07/11] Add wqueue05 test Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 09/11] Add wqueue07 test Andrea Cervesato
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

This test is testing NOTIFY_KEY_INVALIDATED event

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---
 runtest/watchqueue                     |  1 +
 testcases/kernel/watchqueue/.gitignore |  1 +
 testcases/kernel/watchqueue/wqueue06.c | 42 ++++++++++++++++++++++++++
 3 files changed, 44 insertions(+)
 create mode 100644 testcases/kernel/watchqueue/wqueue06.c

diff --git a/runtest/watchqueue b/runtest/watchqueue
index 596d45154..de086b6a7 100644
--- a/runtest/watchqueue
+++ b/runtest/watchqueue
@@ -3,3 +3,4 @@ wqueue02 wqueue02
 wqueue03 wqueue03
 wqueue04 wqueue04
 wqueue05 wqueue05
+wqueue06 wqueue06
diff --git a/testcases/kernel/watchqueue/.gitignore b/testcases/kernel/watchqueue/.gitignore
index 9f4ac81e7..e167b500d 100644
--- a/testcases/kernel/watchqueue/.gitignore
+++ b/testcases/kernel/watchqueue/.gitignore
@@ -3,3 +3,4 @@ wqueue02
 wqueue03
 wqueue04
 wqueue05
+wqueue06
diff --git a/testcases/kernel/watchqueue/wqueue06.c b/testcases/kernel/watchqueue/wqueue06.c
new file mode 100644
index 000000000..d7806998e
--- /dev/null
+++ b/testcases/kernel/watchqueue/wqueue06.c
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Test if keyctl clear is correctly recognized by watch queue.
+ */
+
+#define _GNU_SOURCE
+
+#include "tst_test.h"
+#include "lapi/keyctl.h"
+#include "common.h"
+
+static void saw_key_cleared(struct watch_notification *n, size_t len,
+							unsigned int wtype)
+{
+	if (wqueue_key_event(n, len, wtype, NOTIFY_KEY_CLEARED))
+		tst_res(TPASS, "keyctl clear has been recognized");
+	else
+		tst_res(TFAIL, "keyctl clear has not been recognized");
+}
+
+static void run(void)
+{
+	int fd;
+
+	fd = wqueue_watch(256, &wqueue_filter);
+	wqueue_add_key(fd);
+
+	keyctl(KEYCTL_CLEAR, KEY_SPEC_SESSION_KEYRING);
+	wqueue_consumer(fd, saw_key_cleared);
+
+	SAFE_CLOSE(fd);
+}
+
+static struct tst_test test = {
+	.test_all = run,
+};
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 09/11] Add wqueue07 test
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
                   ` (7 preceding siblings ...)
  2022-01-27  9:24 ` [LTP] [PATCH v5 08/11] Add wqueue06 test Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 10/11] Add wqueue08 test Andrea Cervesato
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

This test is testing NOTIFY_KEY_SETATTR event

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---
 runtest/watchqueue                     |  1 +
 testcases/kernel/watchqueue/.gitignore |  1 +
 testcases/kernel/watchqueue/wqueue07.c | 43 ++++++++++++++++++++++++++
 3 files changed, 45 insertions(+)
 create mode 100644 testcases/kernel/watchqueue/wqueue07.c

diff --git a/runtest/watchqueue b/runtest/watchqueue
index de086b6a7..bdb461018 100644
--- a/runtest/watchqueue
+++ b/runtest/watchqueue
@@ -4,3 +4,4 @@ wqueue03 wqueue03
 wqueue04 wqueue04
 wqueue05 wqueue05
 wqueue06 wqueue06
+wqueue07 wqueue07
diff --git a/testcases/kernel/watchqueue/.gitignore b/testcases/kernel/watchqueue/.gitignore
index e167b500d..891b19775 100644
--- a/testcases/kernel/watchqueue/.gitignore
+++ b/testcases/kernel/watchqueue/.gitignore
@@ -4,3 +4,4 @@ wqueue03
 wqueue04
 wqueue05
 wqueue06
+wqueue07
diff --git a/testcases/kernel/watchqueue/wqueue07.c b/testcases/kernel/watchqueue/wqueue07.c
new file mode 100644
index 000000000..b2bd98b6a
--- /dev/null
+++ b/testcases/kernel/watchqueue/wqueue07.c
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Test if keyctl setperm is correctly recognized by watch queue.
+ */
+
+#define _GNU_SOURCE
+
+#include "tst_test.h"
+#include "lapi/keyctl.h"
+#include "common.h"
+
+static void saw_key_setattr(struct watch_notification *n, size_t len,
+							unsigned int wtype)
+{
+	if (wqueue_key_event(n, len, wtype, NOTIFY_KEY_SETATTR))
+		tst_res(TPASS, "keyctl setattr has been recognized");
+	else
+		tst_res(TFAIL, "keyctl setattr has not been recognized");
+}
+
+static void run(void)
+{
+	int fd;
+	key_serial_t key;
+
+	fd = wqueue_watch(256, &wqueue_filter);
+	key = wqueue_add_key(fd);
+
+	keyctl(KEYCTL_SETPERM, key, KEY_POS_ALL | KEY_USR_ALL);
+	wqueue_consumer(fd, saw_key_setattr);
+
+	SAFE_CLOSE(fd);
+}
+
+static struct tst_test test = {
+	.test_all = run,
+};
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 10/11] Add wqueue08 test
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
                   ` (8 preceding siblings ...)
  2022-01-27  9:24 ` [LTP] [PATCH v5 09/11] Add wqueue07 test Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27  9:24 ` [LTP] [PATCH v5 11/11] Add wqueue09 test Andrea Cervesato
  2022-01-27 16:14 ` [LTP] [PATCH v5 00/11] watchqueue testing suite Cyril Hrubis
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

This test is testing WATCH_META_REMOVAL_NOTIFICATION event

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---
 runtest/watchqueue                     |  1 +
 testcases/kernel/watchqueue/.gitignore |  1 +
 testcases/kernel/watchqueue/wqueue08.c | 48 ++++++++++++++++++++++++++
 3 files changed, 50 insertions(+)
 create mode 100644 testcases/kernel/watchqueue/wqueue08.c

diff --git a/runtest/watchqueue b/runtest/watchqueue
index bdb461018..badf7afb0 100644
--- a/runtest/watchqueue
+++ b/runtest/watchqueue
@@ -5,3 +5,4 @@ wqueue04 wqueue04
 wqueue05 wqueue05
 wqueue06 wqueue06
 wqueue07 wqueue07
+wqueue08 wqueue08
diff --git a/testcases/kernel/watchqueue/.gitignore b/testcases/kernel/watchqueue/.gitignore
index 891b19775..0f998fe79 100644
--- a/testcases/kernel/watchqueue/.gitignore
+++ b/testcases/kernel/watchqueue/.gitignore
@@ -5,3 +5,4 @@ wqueue04
 wqueue05
 wqueue06
 wqueue07
+wqueue08
diff --git a/testcases/kernel/watchqueue/wqueue08.c b/testcases/kernel/watchqueue/wqueue08.c
new file mode 100644
index 000000000..4933c5e0e
--- /dev/null
+++ b/testcases/kernel/watchqueue/wqueue08.c
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Test if key watch removal is correctly recognized by watch queue.
+ */
+
+#define _GNU_SOURCE
+
+#include "tst_test.h"
+#include "lapi/keyctl.h"
+#include "common.h"
+
+static void saw_watch_removal(struct watch_notification *n,
+							  LTP_ATTRIBUTE_UNUSED size_t len,
+							  unsigned int wtype)
+{
+	if (wtype != WATCH_TYPE_META)
+		return;
+
+	if (n->subtype == WATCH_META_REMOVAL_NOTIFICATION)
+		tst_res(TPASS, "Meta removal notification received");
+	else
+		tst_res(TFAIL, "Event not recognized");
+}
+
+static void run(void)
+{
+	int fd;
+	key_serial_t key;
+
+	fd = wqueue_watch(256, &wqueue_filter);
+	key = wqueue_add_key(fd);
+
+	/* if watch_id = -1 key is removed from the watch queue */
+	keyctl(KEYCTL_WATCH_KEY, key, fd, -1);
+	wqueue_consumer(fd, saw_watch_removal);
+
+	SAFE_CLOSE(fd);
+}
+
+static struct tst_test test = {
+	.test_all = run,
+};
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* [LTP] [PATCH v5 11/11] Add wqueue09 test
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
                   ` (9 preceding siblings ...)
  2022-01-27  9:24 ` [LTP] [PATCH v5 10/11] Add wqueue08 test Andrea Cervesato
@ 2022-01-27  9:24 ` Andrea Cervesato
  2022-01-27 16:14 ` [LTP] [PATCH v5 00/11] watchqueue testing suite Cyril Hrubis
  11 siblings, 0 replies; 13+ messages in thread
From: Andrea Cervesato @ 2022-01-27  9:24 UTC (permalink / raw)
  To: ltp

This test is testing WATCH_META_LOSS_NOTIFICATION event

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.de>
---
 runtest/watchqueue                     |  1 +
 testcases/kernel/watchqueue/.gitignore |  1 +
 testcases/kernel/watchqueue/wqueue09.c | 55 ++++++++++++++++++++++++++
 3 files changed, 57 insertions(+)
 create mode 100644 testcases/kernel/watchqueue/wqueue09.c

diff --git a/runtest/watchqueue b/runtest/watchqueue
index badf7afb0..bd6b0a423 100644
--- a/runtest/watchqueue
+++ b/runtest/watchqueue
@@ -6,3 +6,4 @@ wqueue05 wqueue05
 wqueue06 wqueue06
 wqueue07 wqueue07
 wqueue08 wqueue08
+wqueue09 wqueue09
diff --git a/testcases/kernel/watchqueue/.gitignore b/testcases/kernel/watchqueue/.gitignore
index 0f998fe79..dcfcd8272 100644
--- a/testcases/kernel/watchqueue/.gitignore
+++ b/testcases/kernel/watchqueue/.gitignore
@@ -6,3 +6,4 @@ wqueue05
 wqueue06
 wqueue07
 wqueue08
+wqueue09
diff --git a/testcases/kernel/watchqueue/wqueue09.c b/testcases/kernel/watchqueue/wqueue09.c
new file mode 100644
index 000000000..f0e429ead
--- /dev/null
+++ b/testcases/kernel/watchqueue/wqueue09.c
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2021 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Fill the watch queue and wait for a notification loss.
+ */
+
+#define _GNU_SOURCE
+
+#include "tst_test.h"
+#include "lapi/keyctl.h"
+#include "common.h"
+
+static int data_lost;
+
+static void saw_data_loss(struct watch_notification *n,
+						  LTP_ATTRIBUTE_UNUSED size_t len, unsigned int wtype)
+{
+	if (wtype != WATCH_TYPE_META)
+		return;
+
+	if (n->subtype == WATCH_META_LOSS_NOTIFICATION)
+		data_lost = 1;
+}
+
+static void run(void)
+{
+	int fd;
+	key_serial_t key;
+
+	fd = wqueue_watch(1, &wqueue_filter);
+
+	key = wqueue_add_key(fd);
+	keyctl(KEYCTL_UPDATE, key, "b", 1);
+	keyctl(KEYCTL_REVOKE, key);
+
+	data_lost = 0;
+	while (!data_lost)
+		wqueue_consumer(fd, saw_data_loss);
+
+	SAFE_CLOSE(fd);
+
+	if (data_lost)
+		tst_res(TPASS, "Meta loss notification received");
+	else
+		tst_res(TFAIL, "Event not recognized");
+}
+
+static struct tst_test test = {
+	.test_all = run,
+};
-- 
2.34.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

* Re: [LTP] [PATCH v5 00/11] watchqueue testing suite
  2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
                   ` (10 preceding siblings ...)
  2022-01-27  9:24 ` [LTP] [PATCH v5 11/11] Add wqueue09 test Andrea Cervesato
@ 2022-01-27 16:14 ` Cyril Hrubis
  11 siblings, 0 replies; 13+ messages in thread
From: Cyril Hrubis @ 2022-01-27 16:14 UTC (permalink / raw)
  To: Andrea Cervesato; +Cc: ltp

Hi!
Pushed with two minor changes, thanks.

* There is no need to define _GNU_SOURCE in common.h when it's defined
  in each respective test

* The function declaration that span over two lines were
  misaligned, looks like your tabwidth != 8

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

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

end of thread, other threads:[~2022-01-27 16:12 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-27  9:24 [LTP] [PATCH v5 00/11] watchqueue testing suite Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 01/11] Add KEYCTL_WATCH_KEY to lapi keyctl.h fallback Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 02/11] Add lapi/watch_queue.h header fallback Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 03/11] Add wqueue01 test Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 04/11] Add wqueue02 test Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 05/11] Add wqueue03 test Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 06/11] Add wqueue04 test Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 07/11] Add wqueue05 test Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 08/11] Add wqueue06 test Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 09/11] Add wqueue07 test Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 10/11] Add wqueue08 test Andrea Cervesato
2022-01-27  9:24 ` [LTP] [PATCH v5 11/11] Add wqueue09 test Andrea Cervesato
2022-01-27 16:14 ` [LTP] [PATCH v5 00/11] watchqueue testing suite Cyril Hrubis

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.