lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 14 Apr 2008 22:39:21 +0200
From:	sander van ginkel <sander@...-ginkel.eu>
To:	Alan Cox <alan@...rguk.ukuu.org.uk>
CC:	sander@...-ginkel.eu, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] ptmx: adding handshake support

Corrected the last issues

Signed-off-by: Sander van Ginkel <sander@...-ginkel.eu>

===================================================================

diff -pru linux-2.6.25-rc8.orig/drivers/char/pty.c 
linux-2.6.25-rc8/drivers/char/pty.c
--- linux-2.6.25-rc8.orig/drivers/char/pty.c    2008-04-01 
21:44:26.000000000 +0200
+++ linux-2.6.25-rc8/drivers/char/pty.c    2008-04-14 23:01:56.000000000 
+0200
@@ -196,6 +196,7 @@ static void pty_flush_buffer(struct tty_
 
 static int pty_open(struct tty_struct *tty, struct file * filp)
 {
+    unsigned int    *mcrmsr;
     int    retval = -ENODEV;
 
     if (!tty || !tty->link)
@@ -212,11 +213,50 @@ static int pty_open(struct tty_struct *t
     clear_bit(TTY_OTHER_CLOSED, &tty->link->flags);
     set_bit(TTY_THROTTLED, &tty->flags);
     set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
+
+    /* first time accessing this device, let's create it */
+
+    mcrmsr = kzalloc(sizeof(*mcrmsr), GFP_KERNEL);
+
+    if (mcrmsr != NULL) {
+
+        /* save our data within the tty structure */
+
+        *mcrmsr=0;
+
+        tty->driver_data = mcrmsr;
+        tty->link->driver_data = mcrmsr;
+    }
+    else
+    {
+        goto out;
+    }      
+
     retval = 0;
+
 out:
     return retval;
 }
 
+static int pty_tiocmget(struct tty_struct *tty, struct file *file)
+{
+    unsigned int *mcrmsr;
+
+    mcrmsr = tty->driver_data;
+
+    return *mcrmsr;
+}
+
+static int pty_tiocmset(struct tty_struct *tty, struct file 
*file,unsigned int set, unsigned int clear)
+{
+    unsigned int *mcrmsr;
+
+    mcrmsr = tty->driver_data;
+    *mcrmsr=set;
+
+    return 0;
+}
+
 static void pty_set_termios(struct tty_struct *tty, struct ktermios 
*old_termios)
 {
         tty->termios->c_cflag &= ~(CSIZE | PARENB);
@@ -232,6 +272,8 @@ static const struct tty_operations pty_o
     .chars_in_buffer = pty_chars_in_buffer,
     .unthrottle = pty_unthrottle,
     .set_termios = pty_set_termios,
+    .tiocmget = pty_tiocmget,
+    .tiocmset = pty_tiocmset,
 };
 
 /* Traditional BSD devices */
@@ -364,11 +406,26 @@ static struct ctl_table pty_root_table[]
 static int pty_unix98_ioctl(struct tty_struct *tty, struct file *file,
                 unsigned int cmd, unsigned long arg)
 {
+    unsigned int value;
+    unsigned int *mcrmsr;
+
+        mcrmsr=tty->driver_data;
+
     switch (cmd) {
     case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */
         return pty_set_lock(tty, (int __user *)arg);
     case TIOCGPTN: /* Get PT Number */
         return put_user(tty->index, (unsigned int __user *)arg);
+
+    case VMCRMSR: /* Set all of the handshake line, even the normally 
read only */
+        {
+        if (copy_from_user(&value,(unsigned int *)arg,sizeof(unsigned 
int)))
+            return -EFAULT;
+
+        *mcrmsr=value;
+
+        return 0;
+        }        
     }
 
     return -ENOIOCTLCMD;


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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ