From: David Howells <dhowells@redhat.com>
To: torvalds@linux-foundation.org, viro@zeniv.linux.org.uk
Cc: dhowells@redhat.comdhowells@redhat.com, casey@schaufler-ca.com,
sds@tycho.nsa.gov, nicolas.dichtel@6wind.com, raven@themaw.net,
christian@brauner.io, andres@anarazel.de, jlayton@redhat.com,
dray@redhat.com, kzak@redhat.com, keyrings@vger.kernel.org,
linux-api@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-security-module@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [RFC PATCH 01/17] uapi: General notification queue definitions [ver #4]
Date: Mon, 09 Mar 2020 12:17:21 +0000 [thread overview]
Message-ID: <158375624103.334846.15282432828559449957.stgit@warthog.procyon.org.uk> (raw)
In-Reply-To: <158375623086.334846.16121725232323108842.stgit@warthog.procyon.org.uk>
Add UAPI definitions for the general notification queue, including the
following pieces:
(*) struct watch_notification.
This is the metadata header for notification messages. It includes a
type and subtype that indicate the source of the message
(eg. WATCH_TYPE_MOUNT_NOTIFY) and the kind of the message
(eg. NOTIFY_MOUNT_NEW_MOUNT).
The header also contains an information field that conveys the
following information:
- WATCH_INFO_LENGTH. The size of the entry (entries are variable
length).
- WATCH_INFO_ID. The watch ID specified when the watchpoint was
set.
- WATCH_INFO_TYPE_INFO. (Sub)type-specific information.
- WATCH_INFO_FLAG_*. Flag bits overlain on the type-specific
information. For use by the type.
All the information in the header can be used in filtering messages at
the point of writing into the buffer.
(*) struct watch_notification_removal
This is an extended watch-removal notification record that includes an
'id' field that can indicate the identifier of the object being
removed if available (for instance, a keyring serial number).
Signed-off-by: David Howells <dhowells@redhat.com>
---
include/uapi/linux/watch_queue.h | 55 ++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644 include/uapi/linux/watch_queue.h
diff --git a/include/uapi/linux/watch_queue.h b/include/uapi/linux/watch_queue.h
new file mode 100644
index 000000000000..5f3d21e8a34b
--- /dev/null
+++ b/include/uapi/linux/watch_queue.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef _UAPI_LINUX_WATCH_QUEUE_H
+#define _UAPI_LINUX_WATCH_QUEUE_H
+
+#include <linux/types.h>
+
+enum watch_notification_type {
+ WATCH_TYPE_META = 0, /* Special record */
+ WATCH_TYPE__NR = 1
+};
+
+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 {
+ __u32 type:24; /* enum watch_notification_type */
+ __u32 subtype:8; /* Type-specific subtype (filterable) */
+ __u32 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
+};
+
+
+/*
+ * 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;
+ __u64 id; /* Type-dependent identifier */
+};
+
+#endif /* _UAPI_LINUX_WATCH_QUEUE_H */
next prev parent reply other threads:[~2020-03-09 12:17 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-09 12:17 [RFC PATCH 00/17] pipe: Keyrings, mount and superblock notifications [ver #4] David Howells
2020-03-09 12:17 ` David Howells [this message]
2020-03-09 12:17 ` [RFC PATCH 02/17] security: Add hooks to rule on setting a watch " David Howells
2020-03-09 12:17 ` [RFC PATCH 03/17] security: Add a hook for the point of notification insertion " David Howells
2020-03-09 12:17 ` [RFC PATCH 04/17] pipe: Add O_NOTIFICATION_PIPE " David Howells
2020-03-09 12:17 ` [RFC PATCH 05/17] pipe: Add general notification queue support " David Howells
2020-03-09 12:18 ` [RFC PATCH 06/17] watch_queue: Add a key/keyring notification facility " David Howells
2020-03-09 12:18 ` [RFC PATCH 07/17] Add sample notification program " David Howells
2020-03-09 12:18 ` [RFC PATCH 08/17] pipe: Allow buffers to be marked read-whole-or-error for notifications " David Howells
2020-03-09 12:18 ` [RFC PATCH 09/17] pipe: Add notification lossage handling " David Howells
2020-03-09 12:18 ` [RFC PATCH 10/17] selinux: Implement the watch_key security hook " David Howells
2020-03-09 12:18 ` [RFC PATCH 11/17] smack: Implement the watch_key and post_notification hooks " David Howells
2020-03-09 12:19 ` [RFC PATCH 12/17] watch_queue: Add security hooks to rule on setting mount and sb watches " David Howells
2020-03-09 12:19 ` [RFC PATCH 13/17] watch_queue: Implement mount topology and attribute change notifications " David Howells
2020-03-09 12:19 ` [RFC PATCH 14/17] watch_queue: sample: Display mount tree " David Howells
2020-03-09 12:19 ` [RFC PATCH 15/17] watch_queue: Introduce a non-repeating system-unique superblock ID " David Howells
2020-03-09 12:19 ` [RFC PATCH 16/17] watch_queue: Add superblock notifications " David Howells
2020-03-09 12:19 ` [RFC PATCH 17/17] watch_queue: sample: Display " David Howells
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=158375624103.334846.15282432828559449957.stgit@warthog.procyon.org.uk \
--to=dhowells@redhat.com \
--cc=dhowells@redhat.comdhowells \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).