[PATCH] Support compat_ioctl get/set termios_locked

From: Thomas Meyer
Date: Sat Sep 24 2011 - 04:51:45 EST


When running a Fedora 15 (x86) on an x86_64 kernel, in the boot process
plymouthd complains about those two missing ioctls:
[ 2.581783] ioctl32(plymouthd:186): Unknown cmd fd(10) cmd(00005457){t:'T';sz:0} arg(ffb6a5d0) on /dev/tty1
[ 2.581803] ioctl32(plymouthd:186): Unknown cmd fd(10) cmd(00005456){t:'T';sz:0} arg(ffb6a680) on /dev/tty1

both ioctl functions work on the 'struct termios', which has the same
size (36 bytes) on x86 and x86_64, so it's just a matter of converting the
pointer from userland.

Signed-off-by: Thomas Meyer <thomas@xxxxxxxx>
---
drivers/tty/n_tty.c | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
index 39d6ab6..24843da 100644
--- a/drivers/tty/n_tty.c
+++ b/drivers/tty/n_tty.c
@@ -40,6 +40,7 @@
#include <linux/tty.h>
#include <linux/timer.h>
#include <linux/ctype.h>
+#include <linux/compat.h>
#include <linux/mm.h>
#include <linux/string.h>
#include <linux/slab.h>
@@ -2095,6 +2096,20 @@ static int n_tty_ioctl(struct tty_struct *tty, struct file *file,
}
}

+#ifdef CONFIG_COMPAT
+static long n_tty_compat_ioctl(struct tty_struct *tty, struct file *file,
+ unsigned int cmd, unsigned long arg)
+{
+ switch (cmd) {
+ case TIOCGLCKTRMIOS:
+ case TIOCSLCKTRMIOS:
+ return tty_mode_ioctl(tty, file, cmd, (unsigned long) compat_ptr(arg));
+ default:
+ return -ENOIOCTLCMD;
+ }
+}
+#endif
+
struct tty_ldisc_ops tty_ldisc_N_TTY = {
.magic = TTY_LDISC_MAGIC,
.name = "n_tty",
@@ -2105,6 +2120,9 @@ struct tty_ldisc_ops tty_ldisc_N_TTY = {
.read = n_tty_read,
.write = n_tty_write,
.ioctl = n_tty_ioctl,
+#ifdef CONFIG_COMPAT
+ .compat_ioctl = n_tty_compat_ioctl,
+#endif
.set_termios = n_tty_set_termios,
.poll = n_tty_poll,
.receive_buf = n_tty_receive_buf,
--
1.7.6.2


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/