|
@@ -795,6 +795,19 @@ int n_tty_ioctl(struct tty_struct * tty, struct file * file,
|
|
|
if (L_ICANON(tty))
|
|
|
retval = inq_canon(tty);
|
|
|
return put_user(retval, (unsigned int __user *) arg);
|
|
|
+#ifndef TCGETS2
|
|
|
+ case TIOCGLCKTRMIOS:
|
|
|
+ if (kernel_termios_to_user_termios((struct termios __user *)arg, real_tty->termios_locked))
|
|
|
+ return -EFAULT;
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ case TIOCSLCKTRMIOS:
|
|
|
+ if (!capable(CAP_SYS_ADMIN))
|
|
|
+ return -EPERM;
|
|
|
+ if (user_termios_to_kernel_termios(real_tty->termios_locked, (struct termios __user *) arg))
|
|
|
+ return -EFAULT;
|
|
|
+ return 0;
|
|
|
+#else
|
|
|
case TIOCGLCKTRMIOS:
|
|
|
if (kernel_termios_to_user_termios_1((struct termios __user *)arg, real_tty->termios_locked))
|
|
|
return -EFAULT;
|
|
@@ -806,6 +819,7 @@ int n_tty_ioctl(struct tty_struct * tty, struct file * file,
|
|
|
if (user_termios_to_kernel_termios_1(real_tty->termios_locked, (struct termios __user *) arg))
|
|
|
return -EFAULT;
|
|
|
return 0;
|
|
|
+#endif
|
|
|
|
|
|
case TIOCPKT:
|
|
|
{
|