LCOV - code coverage report
Current view: top level - include/linux - compat.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 13 0.0 %
Date: 2022-04-01 14:35:51 Functions: 0 1 0.0 %
Branches: 0 14 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: GPL-2.0 */
       2                 :            : #ifndef _LINUX_COMPAT_H
       3                 :            : #define _LINUX_COMPAT_H
       4                 :            : /*
       5                 :            :  * These are the type definitions for the architecture specific
       6                 :            :  * syscall compatibility layer.
       7                 :            :  */
       8                 :            : 
       9                 :            : #include <linux/types.h>
      10                 :            : #include <linux/time.h>
      11                 :            : 
      12                 :            : #include <linux/stat.h>
      13                 :            : #include <linux/param.h>  /* for HZ */
      14                 :            : #include <linux/sem.h>
      15                 :            : #include <linux/socket.h>
      16                 :            : #include <linux/if.h>
      17                 :            : #include <linux/fs.h>
      18                 :            : #include <linux/aio_abi.h>        /* for aio_context_t */
      19                 :            : #include <linux/uaccess.h>
      20                 :            : #include <linux/unistd.h>
      21                 :            : 
      22                 :            : #include <asm/compat.h>
      23                 :            : 
      24                 :            : #ifdef CONFIG_COMPAT
      25                 :            : #include <asm/siginfo.h>
      26                 :            : #include <asm/signal.h>
      27                 :            : #endif
      28                 :            : 
      29                 :            : #ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER
      30                 :            : /*
      31                 :            :  * It may be useful for an architecture to override the definitions of the
      32                 :            :  * COMPAT_SYSCALL_DEFINE0 and COMPAT_SYSCALL_DEFINEx() macros, in particular
      33                 :            :  * to use a different calling convention for syscalls. To allow for that,
      34                 :            :  + the prototypes for the compat_sys_*() functions below will *not* be included
      35                 :            :  * if CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled.
      36                 :            :  */
      37                 :            : #include <asm/syscall_wrapper.h>
      38                 :            : #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */
      39                 :            : 
      40                 :            : #ifndef COMPAT_USE_64BIT_TIME
      41                 :            : #define COMPAT_USE_64BIT_TIME 0
      42                 :            : #endif
      43                 :            : 
      44                 :            : #ifndef __SC_DELOUSE
      45                 :            : #define __SC_DELOUSE(t,v) ((__force t)(unsigned long)(v))
      46                 :            : #endif
      47                 :            : 
      48                 :            : #ifndef COMPAT_SYSCALL_DEFINE0
      49                 :            : #define COMPAT_SYSCALL_DEFINE0(name) \
      50                 :            :         asmlinkage long compat_sys_##name(void); \
      51                 :            :         ALLOW_ERROR_INJECTION(compat_sys_##name, ERRNO); \
      52                 :            :         asmlinkage long compat_sys_##name(void)
      53                 :            : #endif /* COMPAT_SYSCALL_DEFINE0 */
      54                 :            : 
      55                 :            : #define COMPAT_SYSCALL_DEFINE1(name, ...) \
      56                 :            :         COMPAT_SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
      57                 :            : #define COMPAT_SYSCALL_DEFINE2(name, ...) \
      58                 :            :         COMPAT_SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)
      59                 :            : #define COMPAT_SYSCALL_DEFINE3(name, ...) \
      60                 :            :         COMPAT_SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
      61                 :            : #define COMPAT_SYSCALL_DEFINE4(name, ...) \
      62                 :            :         COMPAT_SYSCALL_DEFINEx(4, _##name, __VA_ARGS__)
      63                 :            : #define COMPAT_SYSCALL_DEFINE5(name, ...) \
      64                 :            :         COMPAT_SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)
      65                 :            : #define COMPAT_SYSCALL_DEFINE6(name, ...) \
      66                 :            :         COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
      67                 :            : 
      68                 :            : /*
      69                 :            :  * The asmlinkage stub is aliased to a function named __se_compat_sys_*() which
      70                 :            :  * sign-extends 32-bit ints to longs whenever needed. The actual work is
      71                 :            :  * done within __do_compat_sys_*().
      72                 :            :  */
      73                 :            : #ifndef COMPAT_SYSCALL_DEFINEx
      74                 :            : #define COMPAT_SYSCALL_DEFINEx(x, name, ...)                                    \
      75                 :            :         __diag_push();                                                          \
      76                 :            :         __diag_ignore(GCC, 8, "-Wattribute-alias",                            \
      77                 :            :                       "Type aliasing is used to sanitize syscall arguments");\
      78                 :            :         asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));       \
      79                 :            :         asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))        \
      80                 :            :                 __attribute__((alias(__stringify(__se_compat_sys##name))));     \
      81                 :            :         ALLOW_ERROR_INJECTION(compat_sys##name, ERRNO);                         \
      82                 :            :         static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
      83                 :            :         asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__));  \
      84                 :            :         asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__))   \
      85                 :            :         {                                                                       \
      86                 :            :                 long ret = __do_compat_sys##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__));\
      87                 :            :                 __MAP(x,__SC_TEST,__VA_ARGS__);                                 \
      88                 :            :                 return ret;                                                     \
      89                 :            :         }                                                                       \
      90                 :            :         __diag_pop();                                                           \
      91                 :            :         static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
      92                 :            : #endif /* COMPAT_SYSCALL_DEFINEx */
      93                 :            : 
      94                 :            : #ifdef CONFIG_COMPAT
      95                 :            : 
      96                 :            : #ifndef compat_user_stack_pointer
      97                 :            : #define compat_user_stack_pointer() current_user_stack_pointer()
      98                 :            : #endif
      99                 :            : #ifndef compat_sigaltstack      /* we'll need that for MIPS */
     100                 :            : typedef struct compat_sigaltstack {
     101                 :            :         compat_uptr_t                   ss_sp;
     102                 :            :         int                             ss_flags;
     103                 :            :         compat_size_t                   ss_size;
     104                 :            : } compat_stack_t;
     105                 :            : #endif
     106                 :            : #ifndef COMPAT_MINSIGSTKSZ
     107                 :            : #define COMPAT_MINSIGSTKSZ      MINSIGSTKSZ
     108                 :            : #endif
     109                 :            : 
     110                 :            : #define compat_jiffies_to_clock_t(x)    \
     111                 :            :                 (((unsigned long)(x) * COMPAT_USER_HZ) / HZ)
     112                 :            : 
     113                 :            : typedef __compat_uid32_t        compat_uid_t;
     114                 :            : typedef __compat_gid32_t        compat_gid_t;
     115                 :            : 
     116                 :            : struct compat_sel_arg_struct;
     117                 :            : struct rusage;
     118                 :            : 
     119                 :            : struct old_itimerval32;
     120                 :            : 
     121                 :            : struct compat_tms {
     122                 :            :         compat_clock_t          tms_utime;
     123                 :            :         compat_clock_t          tms_stime;
     124                 :            :         compat_clock_t          tms_cutime;
     125                 :            :         compat_clock_t          tms_cstime;
     126                 :            : };
     127                 :            : 
     128                 :            : #define _COMPAT_NSIG_WORDS      (_COMPAT_NSIG / _COMPAT_NSIG_BPW)
     129                 :            : 
     130                 :            : typedef struct {
     131                 :            :         compat_sigset_word      sig[_COMPAT_NSIG_WORDS];
     132                 :            : } compat_sigset_t;
     133                 :            : 
     134                 :            : int set_compat_user_sigmask(const compat_sigset_t __user *umask,
     135                 :            :                             size_t sigsetsize);
     136                 :            : 
     137                 :            : struct compat_sigaction {
     138                 :            : #ifndef __ARCH_HAS_IRIX_SIGACTION
     139                 :            :         compat_uptr_t                   sa_handler;
     140                 :            :         compat_ulong_t                  sa_flags;
     141                 :            : #else
     142                 :            :         compat_uint_t                   sa_flags;
     143                 :            :         compat_uptr_t                   sa_handler;
     144                 :            : #endif
     145                 :            : #ifdef __ARCH_HAS_SA_RESTORER
     146                 :            :         compat_uptr_t                   sa_restorer;
     147                 :            : #endif
     148                 :            :         compat_sigset_t                 sa_mask __packed;
     149                 :            : };
     150                 :            : 
     151                 :            : typedef union compat_sigval {
     152                 :            :         compat_int_t    sival_int;
     153                 :            :         compat_uptr_t   sival_ptr;
     154                 :            : } compat_sigval_t;
     155                 :            : 
     156                 :            : typedef struct compat_siginfo {
     157                 :            :         int si_signo;
     158                 :            : #ifndef __ARCH_HAS_SWAPPED_SIGINFO
     159                 :            :         int si_errno;
     160                 :            :         int si_code;
     161                 :            : #else
     162                 :            :         int si_code;
     163                 :            :         int si_errno;
     164                 :            : #endif
     165                 :            : 
     166                 :            :         union {
     167                 :            :                 int _pad[128/sizeof(int) - 3];
     168                 :            : 
     169                 :            :                 /* kill() */
     170                 :            :                 struct {
     171                 :            :                         compat_pid_t _pid;      /* sender's pid */
     172                 :            :                         __compat_uid32_t _uid;  /* sender's uid */
     173                 :            :                 } _kill;
     174                 :            : 
     175                 :            :                 /* POSIX.1b timers */
     176                 :            :                 struct {
     177                 :            :                         compat_timer_t _tid;    /* timer id */
     178                 :            :                         int _overrun;           /* overrun count */
     179                 :            :                         compat_sigval_t _sigval;        /* same as below */
     180                 :            :                 } _timer;
     181                 :            : 
     182                 :            :                 /* POSIX.1b signals */
     183                 :            :                 struct {
     184                 :            :                         compat_pid_t _pid;      /* sender's pid */
     185                 :            :                         __compat_uid32_t _uid;  /* sender's uid */
     186                 :            :                         compat_sigval_t _sigval;
     187                 :            :                 } _rt;
     188                 :            : 
     189                 :            :                 /* SIGCHLD */
     190                 :            :                 struct {
     191                 :            :                         compat_pid_t _pid;      /* which child */
     192                 :            :                         __compat_uid32_t _uid;  /* sender's uid */
     193                 :            :                         int _status;            /* exit code */
     194                 :            :                         compat_clock_t _utime;
     195                 :            :                         compat_clock_t _stime;
     196                 :            :                 } _sigchld;
     197                 :            : 
     198                 :            : #ifdef CONFIG_X86_X32_ABI
     199                 :            :                 /* SIGCHLD (x32 version) */
     200                 :            :                 struct {
     201                 :            :                         compat_pid_t _pid;      /* which child */
     202                 :            :                         __compat_uid32_t _uid;  /* sender's uid */
     203                 :            :                         int _status;            /* exit code */
     204                 :            :                         compat_s64 _utime;
     205                 :            :                         compat_s64 _stime;
     206                 :            :                 } _sigchld_x32;
     207                 :            : #endif
     208                 :            : 
     209                 :            :                 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGEMT */
     210                 :            :                 struct {
     211                 :            :                         compat_uptr_t _addr;    /* faulting insn/memory ref. */
     212                 :            : #ifdef __ARCH_SI_TRAPNO
     213                 :            :                         int _trapno;    /* TRAP # which caused the signal */
     214                 :            : #endif
     215                 :            : #define __COMPAT_ADDR_BND_PKEY_PAD  (__alignof__(compat_uptr_t) < sizeof(short) ? \
     216                 :            :                                      sizeof(short) : __alignof__(compat_uptr_t))
     217                 :            :                         union {
     218                 :            :                                 /*
     219                 :            :                                  * used when si_code=BUS_MCEERR_AR or
     220                 :            :                                  * used when si_code=BUS_MCEERR_AO
     221                 :            :                                  */
     222                 :            :                                 short int _addr_lsb;    /* Valid LSB of the reported address. */
     223                 :            :                                 /* used when si_code=SEGV_BNDERR */
     224                 :            :                                 struct {
     225                 :            :                                         char _dummy_bnd[__COMPAT_ADDR_BND_PKEY_PAD];
     226                 :            :                                         compat_uptr_t _lower;
     227                 :            :                                         compat_uptr_t _upper;
     228                 :            :                                 } _addr_bnd;
     229                 :            :                                 /* used when si_code=SEGV_PKUERR */
     230                 :            :                                 struct {
     231                 :            :                                         char _dummy_pkey[__COMPAT_ADDR_BND_PKEY_PAD];
     232                 :            :                                         u32 _pkey;
     233                 :            :                                 } _addr_pkey;
     234                 :            :                         };
     235                 :            :                 } _sigfault;
     236                 :            : 
     237                 :            :                 /* SIGPOLL */
     238                 :            :                 struct {
     239                 :            :                         compat_long_t _band;    /* POLL_IN, POLL_OUT, POLL_MSG */
     240                 :            :                         int _fd;
     241                 :            :                 } _sigpoll;
     242                 :            : 
     243                 :            :                 struct {
     244                 :            :                         compat_uptr_t _call_addr; /* calling user insn */
     245                 :            :                         int _syscall;   /* triggering system call number */
     246                 :            :                         unsigned int _arch;     /* AUDIT_ARCH_* of syscall */
     247                 :            :                 } _sigsys;
     248                 :            :         } _sifields;
     249                 :            : } compat_siginfo_t;
     250                 :            : 
     251                 :            : struct compat_iovec {
     252                 :            :         compat_uptr_t   iov_base;
     253                 :            :         compat_size_t   iov_len;
     254                 :            : };
     255                 :            : 
     256                 :            : struct compat_rlimit {
     257                 :            :         compat_ulong_t  rlim_cur;
     258                 :            :         compat_ulong_t  rlim_max;
     259                 :            : };
     260                 :            : 
     261                 :            : struct compat_rusage {
     262                 :            :         struct old_timeval32 ru_utime;
     263                 :            :         struct old_timeval32 ru_stime;
     264                 :            :         compat_long_t   ru_maxrss;
     265                 :            :         compat_long_t   ru_ixrss;
     266                 :            :         compat_long_t   ru_idrss;
     267                 :            :         compat_long_t   ru_isrss;
     268                 :            :         compat_long_t   ru_minflt;
     269                 :            :         compat_long_t   ru_majflt;
     270                 :            :         compat_long_t   ru_nswap;
     271                 :            :         compat_long_t   ru_inblock;
     272                 :            :         compat_long_t   ru_oublock;
     273                 :            :         compat_long_t   ru_msgsnd;
     274                 :            :         compat_long_t   ru_msgrcv;
     275                 :            :         compat_long_t   ru_nsignals;
     276                 :            :         compat_long_t   ru_nvcsw;
     277                 :            :         compat_long_t   ru_nivcsw;
     278                 :            : };
     279                 :            : 
     280                 :            : extern int put_compat_rusage(const struct rusage *,
     281                 :            :                              struct compat_rusage __user *);
     282                 :            : 
     283                 :            : struct compat_siginfo;
     284                 :            : struct __compat_aio_sigset;
     285                 :            : 
     286                 :            : struct compat_dirent {
     287                 :            :         u32             d_ino;
     288                 :            :         compat_off_t    d_off;
     289                 :            :         u16             d_reclen;
     290                 :            :         char            d_name[256];
     291                 :            : };
     292                 :            : 
     293                 :            : struct compat_ustat {
     294                 :            :         compat_daddr_t          f_tfree;
     295                 :            :         compat_ino_t            f_tinode;
     296                 :            :         char                    f_fname[6];
     297                 :            :         char                    f_fpack[6];
     298                 :            : };
     299                 :            : 
     300                 :            : #define COMPAT_SIGEV_PAD_SIZE   ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
     301                 :            : 
     302                 :            : typedef struct compat_sigevent {
     303                 :            :         compat_sigval_t sigev_value;
     304                 :            :         compat_int_t sigev_signo;
     305                 :            :         compat_int_t sigev_notify;
     306                 :            :         union {
     307                 :            :                 compat_int_t _pad[COMPAT_SIGEV_PAD_SIZE];
     308                 :            :                 compat_int_t _tid;
     309                 :            : 
     310                 :            :                 struct {
     311                 :            :                         compat_uptr_t _function;
     312                 :            :                         compat_uptr_t _attribute;
     313                 :            :                 } _sigev_thread;
     314                 :            :         } _sigev_un;
     315                 :            : } compat_sigevent_t;
     316                 :            : 
     317                 :            : struct compat_ifmap {
     318                 :            :         compat_ulong_t mem_start;
     319                 :            :         compat_ulong_t mem_end;
     320                 :            :         unsigned short base_addr;
     321                 :            :         unsigned char irq;
     322                 :            :         unsigned char dma;
     323                 :            :         unsigned char port;
     324                 :            : };
     325                 :            : 
     326                 :            : struct compat_if_settings {
     327                 :            :         unsigned int type;      /* Type of physical device or protocol */
     328                 :            :         unsigned int size;      /* Size of the data allocated by the caller */
     329                 :            :         compat_uptr_t ifs_ifsu; /* union of pointers */
     330                 :            : };
     331                 :            : 
     332                 :            : struct compat_ifreq {
     333                 :            :         union {
     334                 :            :                 char    ifrn_name[IFNAMSIZ];    /* if name, e.g. "en0" */
     335                 :            :         } ifr_ifrn;
     336                 :            :         union {
     337                 :            :                 struct  sockaddr ifru_addr;
     338                 :            :                 struct  sockaddr ifru_dstaddr;
     339                 :            :                 struct  sockaddr ifru_broadaddr;
     340                 :            :                 struct  sockaddr ifru_netmask;
     341                 :            :                 struct  sockaddr ifru_hwaddr;
     342                 :            :                 short   ifru_flags;
     343                 :            :                 compat_int_t    ifru_ivalue;
     344                 :            :                 compat_int_t    ifru_mtu;
     345                 :            :                 struct  compat_ifmap ifru_map;
     346                 :            :                 char    ifru_slave[IFNAMSIZ];   /* Just fits the size */
     347                 :            :                 char    ifru_newname[IFNAMSIZ];
     348                 :            :                 compat_caddr_t  ifru_data;
     349                 :            :                 struct  compat_if_settings ifru_settings;
     350                 :            :         } ifr_ifru;
     351                 :            : };
     352                 :            : 
     353                 :            : struct compat_ifconf {
     354                 :            :         compat_int_t    ifc_len;                /* size of buffer */
     355                 :            :         compat_caddr_t  ifcbuf;
     356                 :            : };
     357                 :            : 
     358                 :            : struct compat_robust_list {
     359                 :            :         compat_uptr_t                   next;
     360                 :            : };
     361                 :            : 
     362                 :            : struct compat_robust_list_head {
     363                 :            :         struct compat_robust_list       list;
     364                 :            :         compat_long_t                   futex_offset;
     365                 :            :         compat_uptr_t                   list_op_pending;
     366                 :            : };
     367                 :            : 
     368                 :            : #ifdef CONFIG_COMPAT_OLD_SIGACTION
     369                 :            : struct compat_old_sigaction {
     370                 :            :         compat_uptr_t                   sa_handler;
     371                 :            :         compat_old_sigset_t             sa_mask;
     372                 :            :         compat_ulong_t                  sa_flags;
     373                 :            :         compat_uptr_t                   sa_restorer;
     374                 :            : };
     375                 :            : #endif
     376                 :            : 
     377                 :            : struct compat_keyctl_kdf_params {
     378                 :            :         compat_uptr_t hashname;
     379                 :            :         compat_uptr_t otherinfo;
     380                 :            :         __u32 otherinfolen;
     381                 :            :         __u32 __spare[8];
     382                 :            : };
     383                 :            : 
     384                 :            : struct compat_statfs;
     385                 :            : struct compat_statfs64;
     386                 :            : struct compat_old_linux_dirent;
     387                 :            : struct compat_linux_dirent;
     388                 :            : struct linux_dirent64;
     389                 :            : struct compat_msghdr;
     390                 :            : struct compat_mmsghdr;
     391                 :            : struct compat_sysinfo;
     392                 :            : struct compat_sysctl_args;
     393                 :            : struct compat_kexec_segment;
     394                 :            : struct compat_mq_attr;
     395                 :            : struct compat_msgbuf;
     396                 :            : 
     397                 :            : #define BITS_PER_COMPAT_LONG    (8*sizeof(compat_long_t))
     398                 :            : 
     399                 :            : #define BITS_TO_COMPAT_LONGS(bits) DIV_ROUND_UP(bits, BITS_PER_COMPAT_LONG)
     400                 :            : 
     401                 :            : long compat_get_bitmap(unsigned long *mask, const compat_ulong_t __user *umask,
     402                 :            :                        unsigned long bitmap_size);
     403                 :            : long compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask,
     404                 :            :                        unsigned long bitmap_size);
     405                 :            : int copy_siginfo_from_user32(kernel_siginfo_t *to, const struct compat_siginfo __user *from);
     406                 :            : int copy_siginfo_to_user32(struct compat_siginfo __user *to, const kernel_siginfo_t *from);
     407                 :            : int get_compat_sigevent(struct sigevent *event,
     408                 :            :                 const struct compat_sigevent __user *u_event);
     409                 :            : 
     410                 :            : extern int get_compat_sigset(sigset_t *set, const compat_sigset_t __user *compat);
     411                 :            : 
     412                 :            : /*
     413                 :            :  * Defined inline such that size can be compile time constant, which avoids
     414                 :            :  * CONFIG_HARDENED_USERCOPY complaining about copies from task_struct
     415                 :            :  */
     416                 :            : static inline int
     417                 :          0 : put_compat_sigset(compat_sigset_t __user *compat, const sigset_t *set,
     418                 :            :                   unsigned int size)
     419                 :            : {
     420                 :            :         /* size <= sizeof(compat_sigset_t) <= sizeof(sigset_t) */
     421                 :            : #ifdef __BIG_ENDIAN
     422                 :            :         compat_sigset_t v;
     423                 :            :         switch (_NSIG_WORDS) {
     424                 :            :         case 4: v.sig[7] = (set->sig[3] >> 32); v.sig[6] = set->sig[3];
     425                 :            :                 /* fall through */
     426                 :            :         case 3: v.sig[5] = (set->sig[2] >> 32); v.sig[4] = set->sig[2];
     427                 :            :                 /* fall through */
     428                 :            :         case 2: v.sig[3] = (set->sig[1] >> 32); v.sig[2] = set->sig[1];
     429                 :            :                 /* fall through */
     430                 :            :         case 1: v.sig[1] = (set->sig[0] >> 32); v.sig[0] = set->sig[0];
     431                 :            :         }
     432                 :            :         return copy_to_user(compat, &v, size) ? -EFAULT : 0;
     433                 :            : #else
     434   [ #  #  #  # ]:          0 :         return copy_to_user(compat, set, size) ? -EFAULT : 0;
     435                 :            : #endif
     436                 :            : }
     437                 :            : 
     438                 :            : extern int compat_ptrace_request(struct task_struct *child,
     439                 :            :                                  compat_long_t request,
     440                 :            :                                  compat_ulong_t addr, compat_ulong_t data);
     441                 :            : 
     442                 :            : extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
     443                 :            :                                compat_ulong_t addr, compat_ulong_t data);
     444                 :            : 
     445                 :            : struct epoll_event;     /* fortunately, this one is fixed-layout */
     446                 :            : 
     447                 :            : extern ssize_t compat_rw_copy_check_uvector(int type,
     448                 :            :                 const struct compat_iovec __user *uvector,
     449                 :            :                 unsigned long nr_segs,
     450                 :            :                 unsigned long fast_segs, struct iovec *fast_pointer,
     451                 :            :                 struct iovec **ret_pointer);
     452                 :            : 
     453                 :            : extern void __user *compat_alloc_user_space(unsigned long len);
     454                 :            : 
     455                 :            : int compat_restore_altstack(const compat_stack_t __user *uss);
     456                 :            : int __compat_save_altstack(compat_stack_t __user *, unsigned long);
     457                 :            : #define compat_save_altstack_ex(uss, sp) do { \
     458                 :            :         compat_stack_t __user *__uss = uss; \
     459                 :            :         struct task_struct *t = current; \
     460                 :            :         put_user_ex(ptr_to_compat((void __user *)t->sas_ss_sp), &__uss->ss_sp); \
     461                 :            :         put_user_ex(t->sas_ss_flags, &__uss->ss_flags); \
     462                 :            :         put_user_ex(t->sas_ss_size, &__uss->ss_size); \
     463                 :            :         if (t->sas_ss_flags & SS_AUTODISARM) \
     464                 :            :                 sas_ss_reset(t); \
     465                 :            : } while (0);
     466                 :            : 
     467                 :            : /*
     468                 :            :  * These syscall function prototypes are kept in the same order as
     469                 :            :  * include/uapi/asm-generic/unistd.h. Deprecated or obsolete system calls
     470                 :            :  * go below.
     471                 :            :  *
     472                 :            :  * Please note that these prototypes here are only provided for information
     473                 :            :  * purposes, for static analysis, and for linking from the syscall table.
     474                 :            :  * These functions should not be called elsewhere from kernel code.
     475                 :            :  *
     476                 :            :  * As the syscall calling convention may be different from the default
     477                 :            :  * for architectures overriding the syscall calling convention, do not
     478                 :            :  * include the prototypes if CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled.
     479                 :            :  */
     480                 :            : #ifndef CONFIG_ARCH_HAS_SYSCALL_WRAPPER
     481                 :            : asmlinkage long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p);
     482                 :            : asmlinkage long compat_sys_io_submit(compat_aio_context_t ctx_id, int nr,
     483                 :            :                                      u32 __user *iocb);
     484                 :            : asmlinkage long compat_sys_io_pgetevents(compat_aio_context_t ctx_id,
     485                 :            :                                         compat_long_t min_nr,
     486                 :            :                                         compat_long_t nr,
     487                 :            :                                         struct io_event __user *events,
     488                 :            :                                         struct old_timespec32 __user *timeout,
     489                 :            :                                         const struct __compat_aio_sigset __user *usig);
     490                 :            : asmlinkage long compat_sys_io_pgetevents_time64(compat_aio_context_t ctx_id,
     491                 :            :                                         compat_long_t min_nr,
     492                 :            :                                         compat_long_t nr,
     493                 :            :                                         struct io_event __user *events,
     494                 :            :                                         struct __kernel_timespec __user *timeout,
     495                 :            :                                         const struct __compat_aio_sigset __user *usig);
     496                 :            : 
     497                 :            : /* fs/cookies.c */
     498                 :            : asmlinkage long compat_sys_lookup_dcookie(u32, u32, char __user *, compat_size_t);
     499                 :            : 
     500                 :            : /* fs/eventpoll.c */
     501                 :            : asmlinkage long compat_sys_epoll_pwait(int epfd,
     502                 :            :                         struct epoll_event __user *events,
     503                 :            :                         int maxevents, int timeout,
     504                 :            :                         const compat_sigset_t __user *sigmask,
     505                 :            :                         compat_size_t sigsetsize);
     506                 :            : 
     507                 :            : /* fs/fcntl.c */
     508                 :            : asmlinkage long compat_sys_fcntl(unsigned int fd, unsigned int cmd,
     509                 :            :                                  compat_ulong_t arg);
     510                 :            : asmlinkage long compat_sys_fcntl64(unsigned int fd, unsigned int cmd,
     511                 :            :                                    compat_ulong_t arg);
     512                 :            : 
     513                 :            : /* fs/ioctl.c */
     514                 :            : asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
     515                 :            :                                  compat_ulong_t arg);
     516                 :            : 
     517                 :            : /* fs/namespace.c */
     518                 :            : asmlinkage long compat_sys_mount(const char __user *dev_name,
     519                 :            :                                  const char __user *dir_name,
     520                 :            :                                  const char __user *type, compat_ulong_t flags,
     521                 :            :                                  const void __user *data);
     522                 :            : 
     523                 :            : /* fs/open.c */
     524                 :            : asmlinkage long compat_sys_statfs(const char __user *pathname,
     525                 :            :                                   struct compat_statfs __user *buf);
     526                 :            : asmlinkage long compat_sys_statfs64(const char __user *pathname,
     527                 :            :                                     compat_size_t sz,
     528                 :            :                                     struct compat_statfs64 __user *buf);
     529                 :            : asmlinkage long compat_sys_fstatfs(unsigned int fd,
     530                 :            :                                    struct compat_statfs __user *buf);
     531                 :            : asmlinkage long compat_sys_fstatfs64(unsigned int fd, compat_size_t sz,
     532                 :            :                                      struct compat_statfs64 __user *buf);
     533                 :            : asmlinkage long compat_sys_truncate(const char __user *, compat_off_t);
     534                 :            : asmlinkage long compat_sys_ftruncate(unsigned int, compat_ulong_t);
     535                 :            : /* No generic prototype for truncate64, ftruncate64, fallocate */
     536                 :            : asmlinkage long compat_sys_openat(int dfd, const char __user *filename,
     537                 :            :                                   int flags, umode_t mode);
     538                 :            : 
     539                 :            : /* fs/readdir.c */
     540                 :            : asmlinkage long compat_sys_getdents(unsigned int fd,
     541                 :            :                                     struct compat_linux_dirent __user *dirent,
     542                 :            :                                     unsigned int count);
     543                 :            : 
     544                 :            : /* fs/read_write.c */
     545                 :            : asmlinkage long compat_sys_lseek(unsigned int, compat_off_t, unsigned int);
     546                 :            : asmlinkage ssize_t compat_sys_readv(compat_ulong_t fd,
     547                 :            :                 const struct compat_iovec __user *vec, compat_ulong_t vlen);
     548                 :            : asmlinkage ssize_t compat_sys_writev(compat_ulong_t fd,
     549                 :            :                 const struct compat_iovec __user *vec, compat_ulong_t vlen);
     550                 :            : /* No generic prototype for pread64 and pwrite64 */
     551                 :            : asmlinkage ssize_t compat_sys_preadv(compat_ulong_t fd,
     552                 :            :                 const struct compat_iovec __user *vec,
     553                 :            :                 compat_ulong_t vlen, u32 pos_low, u32 pos_high);
     554                 :            : asmlinkage ssize_t compat_sys_pwritev(compat_ulong_t fd,
     555                 :            :                 const struct compat_iovec __user *vec,
     556                 :            :                 compat_ulong_t vlen, u32 pos_low, u32 pos_high);
     557                 :            : #ifdef __ARCH_WANT_COMPAT_SYS_PREADV64
     558                 :            : asmlinkage long compat_sys_preadv64(unsigned long fd,
     559                 :            :                 const struct compat_iovec __user *vec,
     560                 :            :                 unsigned long vlen, loff_t pos);
     561                 :            : #endif
     562                 :            : 
     563                 :            : #ifdef __ARCH_WANT_COMPAT_SYS_PWRITEV64
     564                 :            : asmlinkage long compat_sys_pwritev64(unsigned long fd,
     565                 :            :                 const struct compat_iovec __user *vec,
     566                 :            :                 unsigned long vlen, loff_t pos);
     567                 :            : #endif
     568                 :            : 
     569                 :            : /* fs/sendfile.c */
     570                 :            : asmlinkage long compat_sys_sendfile(int out_fd, int in_fd,
     571                 :            :                                     compat_off_t __user *offset, compat_size_t count);
     572                 :            : asmlinkage long compat_sys_sendfile64(int out_fd, int in_fd,
     573                 :            :                                     compat_loff_t __user *offset, compat_size_t count);
     574                 :            : 
     575                 :            : /* fs/select.c */
     576                 :            : asmlinkage long compat_sys_pselect6_time32(int n, compat_ulong_t __user *inp,
     577                 :            :                                     compat_ulong_t __user *outp,
     578                 :            :                                     compat_ulong_t __user *exp,
     579                 :            :                                     struct old_timespec32 __user *tsp,
     580                 :            :                                     void __user *sig);
     581                 :            : asmlinkage long compat_sys_pselect6_time64(int n, compat_ulong_t __user *inp,
     582                 :            :                                     compat_ulong_t __user *outp,
     583                 :            :                                     compat_ulong_t __user *exp,
     584                 :            :                                     struct __kernel_timespec __user *tsp,
     585                 :            :                                     void __user *sig);
     586                 :            : asmlinkage long compat_sys_ppoll_time32(struct pollfd __user *ufds,
     587                 :            :                                  unsigned int nfds,
     588                 :            :                                  struct old_timespec32 __user *tsp,
     589                 :            :                                  const compat_sigset_t __user *sigmask,
     590                 :            :                                  compat_size_t sigsetsize);
     591                 :            : asmlinkage long compat_sys_ppoll_time64(struct pollfd __user *ufds,
     592                 :            :                                  unsigned int nfds,
     593                 :            :                                  struct __kernel_timespec __user *tsp,
     594                 :            :                                  const compat_sigset_t __user *sigmask,
     595                 :            :                                  compat_size_t sigsetsize);
     596                 :            : 
     597                 :            : /* fs/signalfd.c */
     598                 :            : asmlinkage long compat_sys_signalfd4(int ufd,
     599                 :            :                                      const compat_sigset_t __user *sigmask,
     600                 :            :                                      compat_size_t sigsetsize, int flags);
     601                 :            : 
     602                 :            : /* fs/splice.c */
     603                 :            : asmlinkage long compat_sys_vmsplice(int fd, const struct compat_iovec __user *,
     604                 :            :                                     unsigned int nr_segs, unsigned int flags);
     605                 :            : 
     606                 :            : /* fs/stat.c */
     607                 :            : asmlinkage long compat_sys_newfstatat(unsigned int dfd,
     608                 :            :                                       const char __user *filename,
     609                 :            :                                       struct compat_stat __user *statbuf,
     610                 :            :                                       int flag);
     611                 :            : asmlinkage long compat_sys_newfstat(unsigned int fd,
     612                 :            :                                     struct compat_stat __user *statbuf);
     613                 :            : 
     614                 :            : /* fs/sync.c: No generic prototype for sync_file_range and sync_file_range2 */
     615                 :            : 
     616                 :            : /* kernel/exit.c */
     617                 :            : asmlinkage long compat_sys_waitid(int, compat_pid_t,
     618                 :            :                 struct compat_siginfo __user *, int,
     619                 :            :                 struct compat_rusage __user *);
     620                 :            : 
     621                 :            : 
     622                 :            : 
     623                 :            : /* kernel/futex.c */
     624                 :            : asmlinkage long
     625                 :            : compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
     626                 :            :                            compat_size_t len);
     627                 :            : asmlinkage long
     628                 :            : compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
     629                 :            :                            compat_size_t __user *len_ptr);
     630                 :            : 
     631                 :            : /* kernel/itimer.c */
     632                 :            : asmlinkage long compat_sys_getitimer(int which,
     633                 :            :                                      struct old_itimerval32 __user *it);
     634                 :            : asmlinkage long compat_sys_setitimer(int which,
     635                 :            :                                      struct old_itimerval32 __user *in,
     636                 :            :                                      struct old_itimerval32 __user *out);
     637                 :            : 
     638                 :            : /* kernel/kexec.c */
     639                 :            : asmlinkage long compat_sys_kexec_load(compat_ulong_t entry,
     640                 :            :                                       compat_ulong_t nr_segments,
     641                 :            :                                       struct compat_kexec_segment __user *,
     642                 :            :                                       compat_ulong_t flags);
     643                 :            : 
     644                 :            : /* kernel/posix-timers.c */
     645                 :            : asmlinkage long compat_sys_timer_create(clockid_t which_clock,
     646                 :            :                         struct compat_sigevent __user *timer_event_spec,
     647                 :            :                         timer_t __user *created_timer_id);
     648                 :            : 
     649                 :            : /* kernel/ptrace.c */
     650                 :            : asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
     651                 :            :                                   compat_long_t addr, compat_long_t data);
     652                 :            : 
     653                 :            : /* kernel/sched/core.c */
     654                 :            : asmlinkage long compat_sys_sched_setaffinity(compat_pid_t pid,
     655                 :            :                                      unsigned int len,
     656                 :            :                                      compat_ulong_t __user *user_mask_ptr);
     657                 :            : asmlinkage long compat_sys_sched_getaffinity(compat_pid_t pid,
     658                 :            :                                      unsigned int len,
     659                 :            :                                      compat_ulong_t __user *user_mask_ptr);
     660                 :            : 
     661                 :            : /* kernel/signal.c */
     662                 :            : asmlinkage long compat_sys_sigaltstack(const compat_stack_t __user *uss_ptr,
     663                 :            :                                        compat_stack_t __user *uoss_ptr);
     664                 :            : asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset,
     665                 :            :                                          compat_size_t sigsetsize);
     666                 :            : #ifndef CONFIG_ODD_RT_SIGACTION
     667                 :            : asmlinkage long compat_sys_rt_sigaction(int,
     668                 :            :                                  const struct compat_sigaction __user *,
     669                 :            :                                  struct compat_sigaction __user *,
     670                 :            :                                  compat_size_t);
     671                 :            : #endif
     672                 :            : asmlinkage long compat_sys_rt_sigprocmask(int how, compat_sigset_t __user *set,
     673                 :            :                                           compat_sigset_t __user *oset,
     674                 :            :                                           compat_size_t sigsetsize);
     675                 :            : asmlinkage long compat_sys_rt_sigpending(compat_sigset_t __user *uset,
     676                 :            :                                          compat_size_t sigsetsize);
     677                 :            : asmlinkage long compat_sys_rt_sigtimedwait_time32(compat_sigset_t __user *uthese,
     678                 :            :                 struct compat_siginfo __user *uinfo,
     679                 :            :                 struct old_timespec32 __user *uts, compat_size_t sigsetsize);
     680                 :            : asmlinkage long compat_sys_rt_sigtimedwait_time64(compat_sigset_t __user *uthese,
     681                 :            :                 struct compat_siginfo __user *uinfo,
     682                 :            :                 struct __kernel_timespec __user *uts, compat_size_t sigsetsize);
     683                 :            : asmlinkage long compat_sys_rt_sigqueueinfo(compat_pid_t pid, int sig,
     684                 :            :                                 struct compat_siginfo __user *uinfo);
     685                 :            : /* No generic prototype for rt_sigreturn */
     686                 :            : 
     687                 :            : /* kernel/sys.c */
     688                 :            : asmlinkage long compat_sys_times(struct compat_tms __user *tbuf);
     689                 :            : asmlinkage long compat_sys_getrlimit(unsigned int resource,
     690                 :            :                                      struct compat_rlimit __user *rlim);
     691                 :            : asmlinkage long compat_sys_setrlimit(unsigned int resource,
     692                 :            :                                      struct compat_rlimit __user *rlim);
     693                 :            : asmlinkage long compat_sys_getrusage(int who, struct compat_rusage __user *ru);
     694                 :            : 
     695                 :            : /* kernel/time.c */
     696                 :            : asmlinkage long compat_sys_gettimeofday(struct old_timeval32 __user *tv,
     697                 :            :                 struct timezone __user *tz);
     698                 :            : asmlinkage long compat_sys_settimeofday(struct old_timeval32 __user *tv,
     699                 :            :                 struct timezone __user *tz);
     700                 :            : 
     701                 :            : /* kernel/timer.c */
     702                 :            : asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info);
     703                 :            : 
     704                 :            : /* ipc/mqueue.c */
     705                 :            : asmlinkage long compat_sys_mq_open(const char __user *u_name,
     706                 :            :                         int oflag, compat_mode_t mode,
     707                 :            :                         struct compat_mq_attr __user *u_attr);
     708                 :            : asmlinkage long compat_sys_mq_notify(mqd_t mqdes,
     709                 :            :                         const struct compat_sigevent __user *u_notification);
     710                 :            : asmlinkage long compat_sys_mq_getsetattr(mqd_t mqdes,
     711                 :            :                         const struct compat_mq_attr __user *u_mqstat,
     712                 :            :                         struct compat_mq_attr __user *u_omqstat);
     713                 :            : 
     714                 :            : /* ipc/msg.c */
     715                 :            : asmlinkage long compat_sys_msgctl(int first, int second, void __user *uptr);
     716                 :            : asmlinkage long compat_sys_msgrcv(int msqid, compat_uptr_t msgp,
     717                 :            :                 compat_ssize_t msgsz, compat_long_t msgtyp, int msgflg);
     718                 :            : asmlinkage long compat_sys_msgsnd(int msqid, compat_uptr_t msgp,
     719                 :            :                 compat_ssize_t msgsz, int msgflg);
     720                 :            : 
     721                 :            : /* ipc/sem.c */
     722                 :            : asmlinkage long compat_sys_semctl(int semid, int semnum, int cmd, int arg);
     723                 :            : 
     724                 :            : /* ipc/shm.c */
     725                 :            : asmlinkage long compat_sys_shmctl(int first, int second, void __user *uptr);
     726                 :            : asmlinkage long compat_sys_shmat(int shmid, compat_uptr_t shmaddr, int shmflg);
     727                 :            : 
     728                 :            : /* net/socket.c */
     729                 :            : asmlinkage long compat_sys_recvfrom(int fd, void __user *buf, compat_size_t len,
     730                 :            :                             unsigned flags, struct sockaddr __user *addr,
     731                 :            :                             int __user *addrlen);
     732                 :            : asmlinkage long compat_sys_setsockopt(int fd, int level, int optname,
     733                 :            :                                       char __user *optval, unsigned int optlen);
     734                 :            : asmlinkage long compat_sys_getsockopt(int fd, int level, int optname,
     735                 :            :                                       char __user *optval, int __user *optlen);
     736                 :            : asmlinkage long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg,
     737                 :            :                                    unsigned flags);
     738                 :            : asmlinkage long compat_sys_recvmsg(int fd, struct compat_msghdr __user *msg,
     739                 :            :                                    unsigned int flags);
     740                 :            : 
     741                 :            : /* mm/filemap.c: No generic prototype for readahead */
     742                 :            : 
     743                 :            : /* security/keys/keyctl.c */
     744                 :            : asmlinkage long compat_sys_keyctl(u32 option,
     745                 :            :                               u32 arg2, u32 arg3, u32 arg4, u32 arg5);
     746                 :            : 
     747                 :            : /* arch/example/kernel/sys_example.c */
     748                 :            : asmlinkage long compat_sys_execve(const char __user *filename, const compat_uptr_t __user *argv,
     749                 :            :                      const compat_uptr_t __user *envp);
     750                 :            : 
     751                 :            : /* mm/fadvise.c: No generic prototype for fadvise64_64 */
     752                 :            : 
     753                 :            : /* mm/, CONFIG_MMU only */
     754                 :            : asmlinkage long compat_sys_mbind(compat_ulong_t start, compat_ulong_t len,
     755                 :            :                                  compat_ulong_t mode,
     756                 :            :                                  compat_ulong_t __user *nmask,
     757                 :            :                                  compat_ulong_t maxnode, compat_ulong_t flags);
     758                 :            : asmlinkage long compat_sys_get_mempolicy(int __user *policy,
     759                 :            :                                          compat_ulong_t __user *nmask,
     760                 :            :                                          compat_ulong_t maxnode,
     761                 :            :                                          compat_ulong_t addr,
     762                 :            :                                          compat_ulong_t flags);
     763                 :            : asmlinkage long compat_sys_set_mempolicy(int mode, compat_ulong_t __user *nmask,
     764                 :            :                                          compat_ulong_t maxnode);
     765                 :            : asmlinkage long compat_sys_migrate_pages(compat_pid_t pid,
     766                 :            :                 compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes,
     767                 :            :                 const compat_ulong_t __user *new_nodes);
     768                 :            : asmlinkage long compat_sys_move_pages(pid_t pid, compat_ulong_t nr_pages,
     769                 :            :                                       __u32 __user *pages,
     770                 :            :                                       const int __user *nodes,
     771                 :            :                                       int __user *status,
     772                 :            :                                       int flags);
     773                 :            : 
     774                 :            : asmlinkage long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid,
     775                 :            :                                         compat_pid_t pid, int sig,
     776                 :            :                                         struct compat_siginfo __user *uinfo);
     777                 :            : asmlinkage long compat_sys_recvmmsg_time64(int fd, struct compat_mmsghdr __user *mmsg,
     778                 :            :                                     unsigned vlen, unsigned int flags,
     779                 :            :                                     struct __kernel_timespec __user *timeout);
     780                 :            : asmlinkage long compat_sys_recvmmsg_time32(int fd, struct compat_mmsghdr __user *mmsg,
     781                 :            :                                     unsigned vlen, unsigned int flags,
     782                 :            :                                     struct old_timespec32 __user *timeout);
     783                 :            : asmlinkage long compat_sys_wait4(compat_pid_t pid,
     784                 :            :                                  compat_uint_t __user *stat_addr, int options,
     785                 :            :                                  struct compat_rusage __user *ru);
     786                 :            : asmlinkage long compat_sys_fanotify_mark(int, unsigned int, __u32, __u32,
     787                 :            :                                             int, const char __user *);
     788                 :            : asmlinkage long compat_sys_open_by_handle_at(int mountdirfd,
     789                 :            :                                              struct file_handle __user *handle,
     790                 :            :                                              int flags);
     791                 :            : asmlinkage long compat_sys_sendmmsg(int fd, struct compat_mmsghdr __user *mmsg,
     792                 :            :                                     unsigned vlen, unsigned int flags);
     793                 :            : asmlinkage ssize_t compat_sys_process_vm_readv(compat_pid_t pid,
     794                 :            :                 const struct compat_iovec __user *lvec,
     795                 :            :                 compat_ulong_t liovcnt, const struct compat_iovec __user *rvec,
     796                 :            :                 compat_ulong_t riovcnt, compat_ulong_t flags);
     797                 :            : asmlinkage ssize_t compat_sys_process_vm_writev(compat_pid_t pid,
     798                 :            :                 const struct compat_iovec __user *lvec,
     799                 :            :                 compat_ulong_t liovcnt, const struct compat_iovec __user *rvec,
     800                 :            :                 compat_ulong_t riovcnt, compat_ulong_t flags);
     801                 :            : asmlinkage long compat_sys_execveat(int dfd, const char __user *filename,
     802                 :            :                      const compat_uptr_t __user *argv,
     803                 :            :                      const compat_uptr_t __user *envp, int flags);
     804                 :            : asmlinkage ssize_t compat_sys_preadv2(compat_ulong_t fd,
     805                 :            :                 const struct compat_iovec __user *vec,
     806                 :            :                 compat_ulong_t vlen, u32 pos_low, u32 pos_high, rwf_t flags);
     807                 :            : asmlinkage ssize_t compat_sys_pwritev2(compat_ulong_t fd,
     808                 :            :                 const struct compat_iovec __user *vec,
     809                 :            :                 compat_ulong_t vlen, u32 pos_low, u32 pos_high, rwf_t flags);
     810                 :            : #ifdef __ARCH_WANT_COMPAT_SYS_PREADV64V2
     811                 :            : asmlinkage long  compat_sys_readv64v2(unsigned long fd,
     812                 :            :                 const struct compat_iovec __user *vec,
     813                 :            :                 unsigned long vlen, loff_t pos, rwf_t flags);
     814                 :            : #endif
     815                 :            : 
     816                 :            : #ifdef __ARCH_WANT_COMPAT_SYS_PWRITEV64V2
     817                 :            : asmlinkage long compat_sys_pwritev64v2(unsigned long fd,
     818                 :            :                 const struct compat_iovec __user *vec,
     819                 :            :                 unsigned long vlen, loff_t pos, rwf_t flags);
     820                 :            : #endif
     821                 :            : 
     822                 :            : 
     823                 :            : /*
     824                 :            :  * Deprecated system calls which are still defined in
     825                 :            :  * include/uapi/asm-generic/unistd.h and wanted by >= 1 arch
     826                 :            :  */
     827                 :            : 
     828                 :            : /* __ARCH_WANT_SYSCALL_NO_AT */
     829                 :            : asmlinkage long compat_sys_open(const char __user *filename, int flags,
     830                 :            :                                 umode_t mode);
     831                 :            : 
     832                 :            : /* __ARCH_WANT_SYSCALL_NO_FLAGS */
     833                 :            : asmlinkage long compat_sys_signalfd(int ufd,
     834                 :            :                                     const compat_sigset_t __user *sigmask,
     835                 :            :                                     compat_size_t sigsetsize);
     836                 :            : 
     837                 :            : /* __ARCH_WANT_SYSCALL_OFF_T */
     838                 :            : asmlinkage long compat_sys_newstat(const char __user *filename,
     839                 :            :                                    struct compat_stat __user *statbuf);
     840                 :            : asmlinkage long compat_sys_newlstat(const char __user *filename,
     841                 :            :                                     struct compat_stat __user *statbuf);
     842                 :            : 
     843                 :            : /* __ARCH_WANT_SYSCALL_DEPRECATED */
     844                 :            : asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
     845                 :            :                 compat_ulong_t __user *outp, compat_ulong_t __user *exp,
     846                 :            :                 struct old_timeval32 __user *tvp);
     847                 :            : asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32);
     848                 :            : asmlinkage long compat_sys_recv(int fd, void __user *buf, compat_size_t len,
     849                 :            :                                 unsigned flags);
     850                 :            : asmlinkage long compat_sys_sysctl(struct compat_sysctl_args __user *args);
     851                 :            : 
     852                 :            : /* obsolete: fs/readdir.c */
     853                 :            : asmlinkage long compat_sys_old_readdir(unsigned int fd,
     854                 :            :                                        struct compat_old_linux_dirent __user *,
     855                 :            :                                        unsigned int count);
     856                 :            : 
     857                 :            : /* obsolete: fs/select.c */
     858                 :            : asmlinkage long compat_sys_old_select(struct compat_sel_arg_struct __user *arg);
     859                 :            : 
     860                 :            : /* obsolete: ipc */
     861                 :            : asmlinkage long compat_sys_ipc(u32, int, int, u32, compat_uptr_t, u32);
     862                 :            : 
     863                 :            : /* obsolete: kernel/signal.c */
     864                 :            : #ifdef __ARCH_WANT_SYS_SIGPENDING
     865                 :            : asmlinkage long compat_sys_sigpending(compat_old_sigset_t __user *set);
     866                 :            : #endif
     867                 :            : 
     868                 :            : #ifdef __ARCH_WANT_SYS_SIGPROCMASK
     869                 :            : asmlinkage long compat_sys_sigprocmask(int how, compat_old_sigset_t __user *nset,
     870                 :            :                                        compat_old_sigset_t __user *oset);
     871                 :            : #endif
     872                 :            : #ifdef CONFIG_COMPAT_OLD_SIGACTION
     873                 :            : asmlinkage long compat_sys_sigaction(int sig,
     874                 :            :                                    const struct compat_old_sigaction __user *act,
     875                 :            :                                    struct compat_old_sigaction __user *oact);
     876                 :            : #endif
     877                 :            : 
     878                 :            : /* obsolete: net/socket.c */
     879                 :            : asmlinkage long compat_sys_socketcall(int call, u32 __user *args);
     880                 :            : 
     881                 :            : #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */
     882                 :            : 
     883                 :            : 
     884                 :            : /*
     885                 :            :  * For most but not all architectures, "am I in a compat syscall?" and
     886                 :            :  * "am I a compat task?" are the same question.  For architectures on which
     887                 :            :  * they aren't the same question, arch code can override in_compat_syscall.
     888                 :            :  */
     889                 :            : 
     890                 :            : #ifndef in_compat_syscall
     891                 :            : static inline bool in_compat_syscall(void) { return is_compat_task(); }
     892                 :            : #endif
     893                 :            : 
     894                 :            : /**
     895                 :            :  * ns_to_old_timeval32 - Compat version of ns_to_timeval
     896                 :            :  * @nsec:       the nanoseconds value to be converted
     897                 :            :  *
     898                 :            :  * Returns the old_timeval32 representation of the nsec parameter.
     899                 :            :  */
     900                 :          0 : static inline struct old_timeval32 ns_to_old_timeval32(s64 nsec)
     901                 :            : {
     902                 :          0 :         struct __kernel_old_timeval tv;
     903                 :          0 :         struct old_timeval32 ctv;
     904                 :            : 
     905                 :          0 :         tv = ns_to_kernel_old_timeval(nsec);
     906                 :          0 :         ctv.tv_sec = tv.tv_sec;
     907                 :          0 :         ctv.tv_usec = tv.tv_usec;
     908                 :            : 
     909                 :          0 :         return ctv;
     910                 :            : }
     911                 :            : 
     912                 :            : /*
     913                 :            :  * Kernel code should not call compat syscalls (i.e., compat_sys_xyzyyz())
     914                 :            :  * directly.  Instead, use one of the functions which work equivalently, such
     915                 :            :  * as the kcompat_sys_xyzyyz() functions prototyped below.
     916                 :            :  */
     917                 :            : 
     918                 :            : int kcompat_sys_statfs64(const char __user * pathname, compat_size_t sz,
     919                 :            :                      struct compat_statfs64 __user * buf);
     920                 :            : int kcompat_sys_fstatfs64(unsigned int fd, compat_size_t sz,
     921                 :            :                           struct compat_statfs64 __user * buf);
     922                 :            : 
     923                 :            : #else /* !CONFIG_COMPAT */
     924                 :            : 
     925                 :            : #define is_compat_task() (0)
     926                 :            : /* Ensure no one redefines in_compat_syscall() under !CONFIG_COMPAT */
     927                 :            : #define in_compat_syscall in_compat_syscall
     928                 :            : static inline bool in_compat_syscall(void) { return false; }
     929                 :            : 
     930                 :            : #endif /* CONFIG_COMPAT */
     931                 :            : 
     932                 :            : /*
     933                 :            :  * A pointer passed in from user mode. This should not
     934                 :            :  * be used for syscall parameters, just declare them
     935                 :            :  * as pointers because the syscall entry code will have
     936                 :            :  * appropriately converted them already.
     937                 :            :  */
     938                 :            : #ifndef compat_ptr
     939                 :          0 : static inline void __user *compat_ptr(compat_uptr_t uptr)
     940                 :            : {
     941   [ #  #  #  #  :          0 :         return (void __user *)(unsigned long)uptr;
          #  #  #  #  #  
                      # ]
     942                 :            : }
     943                 :            : #endif
     944                 :            : 
     945                 :          0 : static inline compat_uptr_t ptr_to_compat(void __user *uptr)
     946                 :            : {
     947                 :          0 :         return (u32)(unsigned long)uptr;
     948                 :            : }
     949                 :            : 
     950                 :            : #endif /* _LINUX_COMPAT_H */

Generated by: LCOV version 1.14