LCOV - code coverage report
Current view: top level - include/asm-generic - termios.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 4 34 11.8 %
Date: 2021-04-22 12:43:58 Functions: 2 6 33.3 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _ASM_GENERIC_TERMIOS_H
       3             : #define _ASM_GENERIC_TERMIOS_H
       4             : 
       5             : 
       6             : #include <linux/uaccess.h>
       7             : #include <uapi/asm-generic/termios.h>
       8             : 
       9             : /*      intr=^C         quit=^\         erase=del       kill=^U
      10             :         eof=^D          vtime=\0        vmin=\1         sxtc=\0
      11             :         start=^Q        stop=^S         susp=^Z         eol=\0
      12             :         reprint=^R      discard=^U      werase=^W       lnext=^V
      13             :         eol2=\0
      14             : */
      15             : #define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
      16             : 
      17             : /*
      18             :  * Translate a "termio" structure into a "termios". Ugh.
      19             :  */
      20           0 : static inline int user_termio_to_kernel_termios(struct ktermios *termios,
      21             :                                                 const struct termio __user *termio)
      22             : {
      23           0 :         unsigned short tmp;
      24             : 
      25           0 :         if (get_user(tmp, &termio->c_iflag) < 0)
      26           0 :                 goto fault;
      27           0 :         termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp;
      28             : 
      29           0 :         if (get_user(tmp, &termio->c_oflag) < 0)
      30           0 :                 goto fault;
      31           0 :         termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp;
      32             : 
      33           0 :         if (get_user(tmp, &termio->c_cflag) < 0)
      34           0 :                 goto fault;
      35           0 :         termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp;
      36             : 
      37           0 :         if (get_user(tmp, &termio->c_lflag) < 0)
      38           0 :                 goto fault;
      39           0 :         termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp;
      40             : 
      41           0 :         if (get_user(termios->c_line, &termio->c_line) < 0)
      42           0 :                 goto fault;
      43             : 
      44           0 :         if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0)
      45           0 :                 goto fault;
      46             : 
      47             :         return 0;
      48             : 
      49             :  fault:
      50             :         return -EFAULT;
      51             : }
      52             : 
      53             : /*
      54             :  * Translate a "termios" structure into a "termio". Ugh.
      55             :  */
      56           0 : static inline int kernel_termios_to_user_termio(struct termio __user *termio,
      57             :                                                 struct ktermios *termios)
      58             : {
      59           0 :         if (put_user(termios->c_iflag, &termio->c_iflag) < 0 ||
      60           0 :             put_user(termios->c_oflag, &termio->c_oflag) < 0 ||
      61           0 :             put_user(termios->c_cflag, &termio->c_cflag) < 0 ||
      62           0 :             put_user(termios->c_lflag, &termio->c_lflag) < 0 ||
      63           0 :             put_user(termios->c_line,  &termio->c_line) < 0 ||
      64           0 :             copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0)
      65           0 :                 return -EFAULT;
      66             : 
      67             :         return 0;
      68             : }
      69             : 
      70             : #ifdef TCGETS2
      71           0 : static inline int user_termios_to_kernel_termios(struct ktermios *k,
      72             :                                                  struct termios2 __user *u)
      73             : {
      74           0 :         return copy_from_user(k, u, sizeof(struct termios2));
      75             : }
      76             : 
      77           0 : static inline int kernel_termios_to_user_termios(struct termios2 __user *u,
      78             :                                                  struct ktermios *k)
      79             : {
      80           0 :         return copy_to_user(u, k, sizeof(struct termios2));
      81             : }
      82             : 
      83           4 : static inline int user_termios_to_kernel_termios_1(struct ktermios *k,
      84             :                                                    struct termios __user *u)
      85             : {
      86           4 :         return copy_from_user(k, u, sizeof(struct termios));
      87             : }
      88             : 
      89         164 : static inline int kernel_termios_to_user_termios_1(struct termios __user *u,
      90             :                                                    struct ktermios *k)
      91             : {
      92         164 :         return copy_to_user(u, k, sizeof(struct termios));
      93             : }
      94             : #else /* TCGETS2 */
      95             : static inline int user_termios_to_kernel_termios(struct ktermios *k,
      96             :                                                  struct termios __user *u)
      97             : {
      98             :         return copy_from_user(k, u, sizeof(struct termios));
      99             : }
     100             : 
     101             : static inline int kernel_termios_to_user_termios(struct termios __user *u,
     102             :                                                  struct ktermios *k)
     103             : {
     104             :         return copy_to_user(u, k, sizeof(struct termios));
     105             : }
     106             : #endif /* TCGETS2 */
     107             : 
     108             : #endif /* _ASM_GENERIC_TERMIOS_H */

Generated by: LCOV version 1.14