107 lines
3.0 KiB
Diff
107 lines
3.0 KiB
Diff
ntsync uses a misc device as the simplest and least intrusive uAPI interface.
|
|
|
|
Each file description on the device represents an isolated NT instance, intended
|
|
to correspond to a single NT virtual machine.
|
|
|
|
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
---
|
|
drivers/misc/Kconfig | 9 ++++++++
|
|
drivers/misc/Makefile | 1 +
|
|
drivers/misc/ntsync.c | 53 +++++++++++++++++++++++++++++++++++++++++++
|
|
3 files changed, 63 insertions(+)
|
|
create mode 100644 drivers/misc/ntsync.c
|
|
|
|
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
|
|
index 4fb291f0bf7c..bdd8a71bd853 100644
|
|
--- a/drivers/misc/Kconfig
|
|
+++ b/drivers/misc/Kconfig
|
|
@@ -504,6 +504,15 @@ config OPEN_DICE
|
|
measured boot flow. Userspace can use CDIs for remote attestation
|
|
and sealing.
|
|
|
|
+config NTSYNC
|
|
+ tristate "NT synchronization primitive emulation"
|
|
+ help
|
|
+ This module provides kernel support for emulation of Windows NT
|
|
+ synchronization primitives. It is not a hardware driver.
|
|
+
|
|
+ To compile this driver as a module, choose M here: the
|
|
+ module will be called ntsync.
|
|
+
|
|
If unsure, say N.
|
|
|
|
config VCPU_STALL_DETECTOR
|
|
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
|
|
index ea6ea5bbbc9c..153a3f4837e8 100644
|
|
--- a/drivers/misc/Makefile
|
|
+++ b/drivers/misc/Makefile
|
|
@@ -59,6 +59,7 @@ obj-$(CONFIG_PVPANIC) += pvpanic/
|
|
obj-$(CONFIG_UACCE) += uacce/
|
|
obj-$(CONFIG_XILINX_SDFEC) += xilinx_sdfec.o
|
|
obj-$(CONFIG_HISI_HIKEY_USB) += hisi_hikey_usb.o
|
|
+obj-$(CONFIG_NTSYNC) += ntsync.o
|
|
obj-$(CONFIG_HI6421V600_IRQ) += hi6421v600-irq.o
|
|
obj-$(CONFIG_OPEN_DICE) += open-dice.o
|
|
obj-$(CONFIG_GP_PCI1XXXX) += mchp_pci1xxxx/
|
|
diff --git a/drivers/misc/ntsync.c b/drivers/misc/ntsync.c
|
|
new file mode 100644
|
|
index 000000000000..9424c6210e51
|
|
--- /dev/null
|
|
+++ b/drivers/misc/ntsync.c
|
|
@@ -0,0 +1,53 @@
|
|
+// SPDX-License-Identifier: GPL-2.0-only
|
|
+/*
|
|
+ * ntsync.c - Kernel driver for NT synchronization primitives
|
|
+ *
|
|
+ * Copyright (C) 2021-2022 Elizabeth Figura
|
|
+ */
|
|
+
|
|
+#include <linux/fs.h>
|
|
+#include <linux/miscdevice.h>
|
|
+#include <linux/module.h>
|
|
+
|
|
+#define NTSYNC_NAME "ntsync"
|
|
+
|
|
+static int ntsync_char_open(struct inode *inode, struct file *file)
|
|
+{
|
|
+ return nonseekable_open(inode, file);
|
|
+}
|
|
+
|
|
+static int ntsync_char_release(struct inode *inode, struct file *file)
|
|
+{
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static long ntsync_char_ioctl(struct file *file, unsigned int cmd,
|
|
+ unsigned long parm)
|
|
+{
|
|
+ switch (cmd) {
|
|
+ default:
|
|
+ return -ENOIOCTLCMD;
|
|
+ }
|
|
+}
|
|
+
|
|
+static const struct file_operations ntsync_fops = {
|
|
+ .owner = THIS_MODULE,
|
|
+ .open = ntsync_char_open,
|
|
+ .release = ntsync_char_release,
|
|
+ .unlocked_ioctl = ntsync_char_ioctl,
|
|
+ .compat_ioctl = ntsync_char_ioctl,
|
|
+ .llseek = no_llseek,
|
|
+};
|
|
+
|
|
+static struct miscdevice ntsync_misc = {
|
|
+ .minor = MISC_DYNAMIC_MINOR,
|
|
+ .name = NTSYNC_NAME,
|
|
+ .fops = &ntsync_fops,
|
|
+};
|
|
+
|
|
+module_misc_device(ntsync_misc);
|
|
+
|
|
+MODULE_AUTHOR("Elizabeth Figura");
|
|
+MODULE_DESCRIPTION("Kernel driver for NT synchronization primitives");
|
|
+MODULE_LICENSE("GPL");
|
|
+MODULE_ALIAS("devname:" NTSYNC_NAME);
|
|
--
|
|
2.43.0
|