[Devel] [PATCH rh7] ve/pty: create ptmx device per ve namespace
Vladimir Davydov
vdavydov at parallels.com
Wed Jul 29 07:10:54 PDT 2015
After Unix98 PTY driver "virtualization" was reverted, we have to
manually set sysfs permissions for ptmx. This, however, is currently
impossible, because tty_class is still virtualized, which makes
ve.sysfs_permissions ignore it (see sysfs_perms_set).
This patch is a quick-fix which simply creates/destroys ptmx device in
ve namespace on container start/stop. It must be dropped when commit
6022450d12653 ("ve/tty: make tty_class VE-namespace aware") is reverted.
Signed-off-by: Vladimir Davydov <vdavydov at parallels.com>
---
drivers/tty/pty.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
index bd17a459af67..529046b79b0d 100644
--- a/drivers/tty/pty.c
+++ b/drivers/tty/pty.c
@@ -818,6 +818,32 @@ err_file:
return retval;
}
+static int ve_unix98_pty_init(void *data)
+{
+ struct ve_struct *ve = data;
+ struct device *dev;
+
+ dev = device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 2), ve, "ptmx");
+ if (IS_ERR(dev)) {
+ pr_warn("Failed to create ptmx device for ve %s: %ld\n",
+ ve->ve_name, PTR_ERR(dev));
+ return PTR_ERR(dev);
+ }
+ return 0;
+}
+
+static void ve_unix98_pty_fini(void *data)
+{
+ device_destroy_namespace(tty_class, MKDEV(TTYAUX_MAJOR, 2), data);
+}
+
+static struct ve_hook ve_unix98_pty_hook = {
+ .init = ve_unix98_pty_init,
+ .fini = ve_unix98_pty_fini,
+ .priority = HOOK_PRIO_DEFAULT,
+ .owner = THIS_MODULE,
+};
+
static struct file_operations ptmx_fops;
static void __init unix98_pty_init(void)
@@ -882,6 +908,7 @@ static void __init unix98_pty_init(void)
register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0)
panic("Couldn't register /dev/ptmx driver");
device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 2), NULL, "ptmx");
+ ve_hook_register(VE_SS_CHAIN, &ve_unix98_pty_hook);
}
#else
--
2.1.4
More information about the Devel
mailing list