cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

termios.h (2933B)


      1/*
      2 * This file is subject to the terms and conditions of the GNU General Public
      3 * License.  See the file "COPYING" in the main directory of this archive
      4 * for more details.
      5 *
      6 * Copyright (C) 1995, 1996, 2000, 2001 by Ralf Baechle
      7 * Copyright (C) 2000, 2001 Silicon Graphics, Inc.
      8 */
      9#ifndef _ASM_TERMIOS_H
     10#define _ASM_TERMIOS_H
     11
     12#include <linux/uaccess.h>
     13#include <uapi/asm/termios.h>
     14
     15/*
     16 *	intr=^C		quit=^\		erase=del	kill=^U
     17 *	vmin=\1		vtime=\0	eol2=\0		swtc=\0
     18 *	start=^Q	stop=^S		susp=^Z		vdsusp=
     19 *	reprint=^R	discard=^U	werase=^W	lnext=^V
     20 *	eof=^D		eol=\0
     21 */
     22#define INIT_C_CC "\003\034\177\025\1\0\0\0\021\023\032\0\022\017\027\026\004\0"
     23
     24#include <linux/string.h>
     25
     26/*
     27 * Translate a "termio" structure into a "termios". Ugh.
     28 */
     29static inline int user_termio_to_kernel_termios(struct ktermios *termios,
     30	struct termio __user *termio)
     31{
     32	unsigned short iflag, oflag, cflag, lflag;
     33	unsigned int err;
     34
     35	if (!access_ok(termio, sizeof(struct termio)))
     36		return -EFAULT;
     37
     38	err = __get_user(iflag, &termio->c_iflag);
     39	termios->c_iflag = (termios->c_iflag & 0xffff0000) | iflag;
     40	err |=__get_user(oflag, &termio->c_oflag);
     41	termios->c_oflag = (termios->c_oflag & 0xffff0000) | oflag;
     42	err |=__get_user(cflag, &termio->c_cflag);
     43	termios->c_cflag = (termios->c_cflag & 0xffff0000) | cflag;
     44	err |=__get_user(lflag, &termio->c_lflag);
     45	termios->c_lflag = (termios->c_lflag & 0xffff0000) | lflag;
     46	err |=__get_user(termios->c_line, &termio->c_line);
     47	if (err)
     48		return -EFAULT;
     49
     50	if (__copy_from_user(termios->c_cc, termio->c_cc, NCC))
     51		return -EFAULT;
     52
     53	return 0;
     54}
     55
     56/*
     57 * Translate a "termios" structure into a "termio". Ugh.
     58 */
     59static inline int kernel_termios_to_user_termio(struct termio __user *termio,
     60	struct ktermios *termios)
     61{
     62	int err;
     63
     64	if (!access_ok(termio, sizeof(struct termio)))
     65		return -EFAULT;
     66
     67	err = __put_user(termios->c_iflag, &termio->c_iflag);
     68	err |= __put_user(termios->c_oflag, &termio->c_oflag);
     69	err |= __put_user(termios->c_cflag, &termio->c_cflag);
     70	err |= __put_user(termios->c_lflag, &termio->c_lflag);
     71	err |= __put_user(termios->c_line, &termio->c_line);
     72	if (err)
     73		return -EFAULT;
     74
     75	if (__copy_to_user(termio->c_cc, termios->c_cc, NCC))
     76		return -EFAULT;
     77
     78	return 0;
     79}
     80
     81static inline int user_termios_to_kernel_termios(struct ktermios __user *k,
     82	struct termios2 *u)
     83{
     84	return copy_from_user(k, u, sizeof(struct termios2)) ? -EFAULT : 0;
     85}
     86
     87static inline int kernel_termios_to_user_termios(struct termios2 __user *u,
     88	struct ktermios *k)
     89{
     90	return copy_to_user(u, k, sizeof(struct termios2)) ? -EFAULT : 0;
     91}
     92
     93static inline int user_termios_to_kernel_termios_1(struct ktermios *k,
     94	struct termios __user *u)
     95{
     96	return copy_from_user(k, u, sizeof(struct termios)) ? -EFAULT : 0;
     97}
     98
     99static inline int kernel_termios_to_user_termios_1(struct termios __user *u,
    100	struct ktermios *k)
    101{
    102	return copy_to_user(u, k, sizeof(struct termios)) ? -EFAULT : 0;
    103}
    104
    105#endif /* _ASM_TERMIOS_H */