~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/s390/kernel/compat_wrapper.c

Version: ~ [ linux-4.20-rc3 ] ~ [ linux-4.19.2 ] ~ [ linux-4.18.19 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.81 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.137 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.163 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.125 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.60 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.31.14 ] ~ [ linux-2.6.30.10 ] ~ [ linux-2.6.29.6 ] ~ [ linux-2.6.28.10 ] ~ [ linux-2.6.27.62 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 /*
  3  *  Compat system call wrappers.
  4  *
  5  *    Copyright IBM Corp. 2014
  6  */
  7 
  8 #include <linux/syscalls.h>
  9 #include <linux/compat.h>
 10 #include "entry.h"
 11 
 12 #define COMPAT_SYSCALL_WRAP1(name, ...) \
 13         COMPAT_SYSCALL_WRAPx(1, _##name, __VA_ARGS__)
 14 #define COMPAT_SYSCALL_WRAP2(name, ...) \
 15         COMPAT_SYSCALL_WRAPx(2, _##name, __VA_ARGS__)
 16 #define COMPAT_SYSCALL_WRAP3(name, ...) \
 17         COMPAT_SYSCALL_WRAPx(3, _##name, __VA_ARGS__)
 18 #define COMPAT_SYSCALL_WRAP4(name, ...) \
 19         COMPAT_SYSCALL_WRAPx(4, _##name, __VA_ARGS__)
 20 #define COMPAT_SYSCALL_WRAP5(name, ...) \
 21         COMPAT_SYSCALL_WRAPx(5, _##name, __VA_ARGS__)
 22 #define COMPAT_SYSCALL_WRAP6(name, ...) \
 23         COMPAT_SYSCALL_WRAPx(6, _##name, __VA_ARGS__)
 24 
 25 #define __SC_COMPAT_TYPE(t, a) \
 26         __typeof(__builtin_choose_expr(sizeof(t) > 4, 0L, (t)0)) a
 27 
 28 #define __SC_COMPAT_CAST(t, a)                                          \
 29 ({                                                                      \
 30         long __ReS = a;                                                 \
 31                                                                         \
 32         BUILD_BUG_ON((sizeof(t) > 4) && !__TYPE_IS_L(t) &&              \
 33                      !__TYPE_IS_UL(t) && !__TYPE_IS_PTR(t));            \
 34         if (__TYPE_IS_L(t))                                             \
 35                 __ReS = (s32)a;                                         \
 36         if (__TYPE_IS_UL(t))                                            \
 37                 __ReS = (u32)a;                                         \
 38         if (__TYPE_IS_PTR(t))                                           \
 39                 __ReS = a & 0x7fffffff;                                 \
 40         (t)__ReS;                                                       \
 41 })
 42 
 43 /*
 44  * The COMPAT_SYSCALL_WRAP macro generates system call wrappers to be used by
 45  * compat tasks. These wrappers will only be used for system calls where only
 46  * the system call arguments need sign or zero extension or zeroing of the upper
 47  * 33 bits of pointers.
 48  * Note: since the wrapper function will afterwards call a system call which
 49  * again performs zero and sign extension for all system call arguments with
 50  * a size of less than eight bytes, these compat wrappers only touch those
 51  * system call arguments with a size of eight bytes ((unsigned) long and
 52  * pointers). Zero and sign extension for e.g. int parameters will be done by
 53  * the regular system call wrappers.
 54  */
 55 #define COMPAT_SYSCALL_WRAPx(x, name, ...)                                      \
 56 asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));                      \
 57 asmlinkage long notrace compat_sys##name(__MAP(x,__SC_COMPAT_TYPE,__VA_ARGS__));\
 58 asmlinkage long notrace compat_sys##name(__MAP(x,__SC_COMPAT_TYPE,__VA_ARGS__)) \
 59 {                                                                               \
 60         return sys##name(__MAP(x,__SC_COMPAT_CAST,__VA_ARGS__));                \
 61 }
 62 
 63 COMPAT_SYSCALL_WRAP2(creat, const char __user *, pathname, umode_t, mode);
 64 COMPAT_SYSCALL_WRAP2(link, const char __user *, oldname, const char __user *, newname);
 65 COMPAT_SYSCALL_WRAP1(unlink, const char __user *, pathname);
 66 COMPAT_SYSCALL_WRAP1(chdir, const char __user *, filename);
 67 COMPAT_SYSCALL_WRAP3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev);
 68 COMPAT_SYSCALL_WRAP2(chmod, const char __user *, filename, umode_t, mode);
 69 COMPAT_SYSCALL_WRAP1(oldumount, char __user *, name);
 70 COMPAT_SYSCALL_WRAP2(access, const char __user *, filename, int, mode);
 71 COMPAT_SYSCALL_WRAP2(rename, const char __user *, oldname, const char __user *, newname);
 72 COMPAT_SYSCALL_WRAP2(mkdir, const char __user *, pathname, umode_t, mode);
 73 COMPAT_SYSCALL_WRAP1(rmdir, const char __user *, pathname);
 74 COMPAT_SYSCALL_WRAP1(pipe, int __user *, fildes);
 75 COMPAT_SYSCALL_WRAP1(brk, unsigned long, brk);
 76 COMPAT_SYSCALL_WRAP2(signal, int, sig, __sighandler_t, handler);
 77 COMPAT_SYSCALL_WRAP1(acct, const char __user *, name);
 78 COMPAT_SYSCALL_WRAP2(umount, char __user *, name, int, flags);
 79 COMPAT_SYSCALL_WRAP1(chroot, const char __user *, filename);
 80 COMPAT_SYSCALL_WRAP3(sigsuspend, int, unused1, int, unused2, old_sigset_t, mask);
 81 COMPAT_SYSCALL_WRAP2(sethostname, char __user *, name, int, len);
 82 COMPAT_SYSCALL_WRAP2(symlink, const char __user *, old, const char __user *, new);
 83 COMPAT_SYSCALL_WRAP3(readlink, const char __user *, path, char __user *, buf, int, bufsiz);
 84 COMPAT_SYSCALL_WRAP1(uselib, const char __user *, library);
 85 COMPAT_SYSCALL_WRAP2(swapon, const char __user *, specialfile, int, swap_flags);
 86 COMPAT_SYSCALL_WRAP4(reboot, int, magic1, int, magic2, unsigned int, cmd, void __user *, arg);
 87 COMPAT_SYSCALL_WRAP2(munmap, unsigned long, addr, size_t, len);
 88 COMPAT_SYSCALL_WRAP3(syslog, int, type, char __user *, buf, int, len);
 89 COMPAT_SYSCALL_WRAP1(swapoff, const char __user *, specialfile);
 90 COMPAT_SYSCALL_WRAP2(setdomainname, char __user *, name, int, len);
 91 COMPAT_SYSCALL_WRAP1(newuname, struct new_utsname __user *, name);
 92 COMPAT_SYSCALL_WRAP3(mprotect, unsigned long, start, size_t, len, unsigned long, prot);
 93 COMPAT_SYSCALL_WRAP3(init_module, void __user *, umod, unsigned long, len, const char __user *, uargs);
 94 COMPAT_SYSCALL_WRAP2(delete_module, const char __user *, name_user, unsigned int, flags);
 95 COMPAT_SYSCALL_WRAP4(quotactl, unsigned int, cmd, const char __user *, special, qid_t, id, void __user *, addr);
 96 COMPAT_SYSCALL_WRAP2(bdflush, int, func, long, data);
 97 COMPAT_SYSCALL_WRAP3(sysfs, int, option, unsigned long, arg1, unsigned long, arg2);
 98 COMPAT_SYSCALL_WRAP5(llseek, unsigned int, fd, unsigned long, high, unsigned long, low, loff_t __user *, result, unsigned int, whence);
 99 COMPAT_SYSCALL_WRAP3(msync, unsigned long, start, size_t, len, int, flags);
100 COMPAT_SYSCALL_WRAP2(mlock, unsigned long, start, size_t, len);
101 COMPAT_SYSCALL_WRAP2(munlock, unsigned long, start, size_t, len);
102 COMPAT_SYSCALL_WRAP2(sched_setparam, pid_t, pid, struct sched_param __user *, param);
103 COMPAT_SYSCALL_WRAP2(sched_getparam, pid_t, pid, struct sched_param __user *, param);
104 COMPAT_SYSCALL_WRAP3(sched_setscheduler, pid_t, pid, int, policy, struct sched_param __user *, param);
105 COMPAT_SYSCALL_WRAP5(mremap, unsigned long, addr, unsigned long, old_len, unsigned long, new_len, unsigned long, flags, unsigned long, new_addr);
106 COMPAT_SYSCALL_WRAP3(poll, struct pollfd __user *, ufds, unsigned int, nfds, int, timeout);
107 COMPAT_SYSCALL_WRAP5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, unsigned long, arg4, unsigned long, arg5);
108 COMPAT_SYSCALL_WRAP2(getcwd, char __user *, buf, unsigned long, size);
109 COMPAT_SYSCALL_WRAP2(capget, cap_user_header_t, header, cap_user_data_t, dataptr);
110 COMPAT_SYSCALL_WRAP2(capset, cap_user_header_t, header, const cap_user_data_t, data);
111 COMPAT_SYSCALL_WRAP3(lchown, const char __user *, filename, uid_t, user, gid_t, group);
112 COMPAT_SYSCALL_WRAP2(getgroups, int, gidsetsize, gid_t __user *, grouplist);
113 COMPAT_SYSCALL_WRAP2(setgroups, int, gidsetsize, gid_t __user *, grouplist);
114 COMPAT_SYSCALL_WRAP3(getresuid, uid_t __user *, ruid, uid_t __user *, euid, uid_t __user *, suid);
115 COMPAT_SYSCALL_WRAP3(getresgid, gid_t __user *, rgid, gid_t __user *, egid, gid_t __user *, sgid);
116 COMPAT_SYSCALL_WRAP3(chown, const char __user *, filename, uid_t, user, gid_t, group);
117 COMPAT_SYSCALL_WRAP2(pivot_root, const char __user *, new_root, const char __user *, put_old);
118 COMPAT_SYSCALL_WRAP3(mincore, unsigned long, start, size_t, len, unsigned char __user *, vec);
119 COMPAT_SYSCALL_WRAP3(madvise, unsigned long, start, size_t, len, int, behavior);
120 COMPAT_SYSCALL_WRAP5(setxattr, const char __user *, path, const char __user *, name, const void __user *, value, size_t, size, int, flags);
121 COMPAT_SYSCALL_WRAP5(lsetxattr, const char __user *, path, const char __user *, name, const void __user *, value, size_t, size, int, flags);
122 COMPAT_SYSCALL_WRAP5(fsetxattr, int, fd, const char __user *, name, const void __user *, value, size_t, size, int, flags);
123 COMPAT_SYSCALL_WRAP3(getdents64, unsigned int, fd, struct linux_dirent64 __user *, dirent, unsigned int, count);
124 COMPAT_SYSCALL_WRAP4(getxattr, const char __user *, path, const char __user *, name, void __user *, value, size_t, size);
125 COMPAT_SYSCALL_WRAP4(lgetxattr, const char __user *, path, const char __user *, name, void __user *, value, size_t, size);
126 COMPAT_SYSCALL_WRAP4(fgetxattr, int, fd, const char __user *, name, void __user *, value, size_t, size);
127 COMPAT_SYSCALL_WRAP3(listxattr, const char __user *, path, char __user *, list, size_t, size);
128 COMPAT_SYSCALL_WRAP3(llistxattr, const char __user *, path, char __user *, list, size_t, size);
129 COMPAT_SYSCALL_WRAP3(flistxattr, int, fd, char __user *, list, size_t, size);
130 COMPAT_SYSCALL_WRAP2(removexattr, const char __user *, path, const char __user *, name);
131 COMPAT_SYSCALL_WRAP2(lremovexattr, const char __user *, path, const char __user *, name);
132 COMPAT_SYSCALL_WRAP2(fremovexattr, int, fd, const char __user *, name);
133 COMPAT_SYSCALL_WRAP1(set_tid_address, int __user *, tidptr);
134 COMPAT_SYSCALL_WRAP4(epoll_ctl, int, epfd, int, op, int, fd, struct epoll_event __user *, event);
135 COMPAT_SYSCALL_WRAP4(epoll_wait, int, epfd, struct epoll_event __user *, events, int, maxevents, int, timeout);
136 COMPAT_SYSCALL_WRAP1(io_destroy, aio_context_t, ctx);
137 COMPAT_SYSCALL_WRAP3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb, struct io_event __user *, result);
138 COMPAT_SYSCALL_WRAP1(mq_unlink, const char __user *, name);
139 COMPAT_SYSCALL_WRAP5(add_key, const char __user *, tp, const char __user *, dsc, const void __user *, pld, size_t, len, key_serial_t, id);
140 COMPAT_SYSCALL_WRAP4(request_key, const char __user *, tp, const char __user *, dsc, const char __user *, info, key_serial_t, id);
141 COMPAT_SYSCALL_WRAP5(remap_file_pages, unsigned long, start, unsigned long, size, unsigned long, prot, unsigned long, pgoff, unsigned long, flags);
142 COMPAT_SYSCALL_WRAP3(inotify_add_watch, int, fd, const char __user *, path, u32, mask);
143 COMPAT_SYSCALL_WRAP3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode);
144 COMPAT_SYSCALL_WRAP4(mknodat, int, dfd, const char __user *, filename, umode_t, mode, unsigned, dev);
145 COMPAT_SYSCALL_WRAP5(fchownat, int, dfd, const char __user *, filename, uid_t, user, gid_t, group, int, flag);
146 COMPAT_SYSCALL_WRAP3(unlinkat, int, dfd, const char __user *, pathname, int, flag);
147 COMPAT_SYSCALL_WRAP4(renameat, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname);
148 COMPAT_SYSCALL_WRAP5(linkat, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname, int, flags);
149 COMPAT_SYSCALL_WRAP3(symlinkat, const char __user *, oldname, int, newdfd, const char __user *, newname);
150 COMPAT_SYSCALL_WRAP4(readlinkat, int, dfd, const char __user *, path, char __user *, buf, int, bufsiz);
151 COMPAT_SYSCALL_WRAP3(fchmodat, int, dfd, const char __user *, filename, umode_t, mode);
152 COMPAT_SYSCALL_WRAP3(faccessat, int, dfd, const char __user *, filename, int, mode);
153 COMPAT_SYSCALL_WRAP1(unshare, unsigned long, unshare_flags);
154 COMPAT_SYSCALL_WRAP6(splice, int, fd_in, loff_t __user *, off_in, int, fd_out, loff_t __user *, off_out, size_t, len, unsigned int, flags);
155 COMPAT_SYSCALL_WRAP4(tee, int, fdin, int, fdout, size_t, len, unsigned int, flags);
156 COMPAT_SYSCALL_WRAP3(getcpu, unsigned __user *, cpu, unsigned __user *, node, struct getcpu_cache __user *, cache);
157 COMPAT_SYSCALL_WRAP2(pipe2, int __user *, fildes, int, flags);
158 COMPAT_SYSCALL_WRAP5(perf_event_open, struct perf_event_attr __user *, attr_uptr, pid_t, pid, int, cpu, int, group_fd, unsigned long, flags);
159 COMPAT_SYSCALL_WRAP5(clone, unsigned long, newsp, unsigned long, clone_flags, int __user *, parent_tidptr, int __user *, child_tidptr, unsigned long, tls);
160 COMPAT_SYSCALL_WRAP4(prlimit64, pid_t, pid, unsigned int, resource, const struct rlimit64 __user *, new_rlim, struct rlimit64 __user *, old_rlim);
161 COMPAT_SYSCALL_WRAP5(name_to_handle_at, int, dfd, const char __user *, name, struct file_handle __user *, handle, int __user *, mnt_id, int, flag);
162 COMPAT_SYSCALL_WRAP5(kcmp, pid_t, pid1, pid_t, pid2, int, type, unsigned long, idx1, unsigned long, idx2);
163 COMPAT_SYSCALL_WRAP3(finit_module, int, fd, const char __user *, uargs, int, flags);
164 COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags);
165 COMPAT_SYSCALL_WRAP4(sched_getattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, size, unsigned int, flags);
166 COMPAT_SYSCALL_WRAP5(renameat2, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname, unsigned int, flags);
167 COMPAT_SYSCALL_WRAP3(seccomp, unsigned int, op, unsigned int, flags, const char __user *, uargs)
168 COMPAT_SYSCALL_WRAP3(getrandom, char __user *, buf, size_t, count, unsigned int, flags)
169 COMPAT_SYSCALL_WRAP2(memfd_create, const char __user *, uname, unsigned int, flags)
170 COMPAT_SYSCALL_WRAP3(bpf, int, cmd, union bpf_attr *, attr, unsigned int, size);
171 COMPAT_SYSCALL_WRAP3(s390_pci_mmio_write, const unsigned long, mmio_addr, const void __user *, user_buffer, const size_t, length);
172 COMPAT_SYSCALL_WRAP3(s390_pci_mmio_read, const unsigned long, mmio_addr, void __user *, user_buffer, const size_t, length);
173 COMPAT_SYSCALL_WRAP4(socketpair, int, family, int, type, int, protocol, int __user *, usockvec);
174 COMPAT_SYSCALL_WRAP3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen);
175 COMPAT_SYSCALL_WRAP3(connect, int, fd, struct sockaddr __user *, uservaddr, int, addrlen);
176 COMPAT_SYSCALL_WRAP4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, int __user *, upeer_addrlen, int, flags);
177 COMPAT_SYSCALL_WRAP3(getsockname, int, fd, struct sockaddr __user *, usockaddr, int __user *, usockaddr_len);
178 COMPAT_SYSCALL_WRAP3(getpeername, int, fd, struct sockaddr __user *, usockaddr, int __user *, usockaddr_len);
179 COMPAT_SYSCALL_WRAP6(sendto, int, fd, void __user *, buff, size_t, len, unsigned int, flags, struct sockaddr __user *, addr, int, addr_len);
180 COMPAT_SYSCALL_WRAP3(mlock2, unsigned long, start, size_t, len, int, flags);
181 COMPAT_SYSCALL_WRAP6(copy_file_range, int, fd_in, loff_t __user *, off_in, int, fd_out, loff_t __user *, off_out, size_t, len, unsigned int, flags);
182 COMPAT_SYSCALL_WRAP2(s390_guarded_storage, int, command, struct gs_cb *, gs_cb);
183 COMPAT_SYSCALL_WRAP5(statx, int, dfd, const char __user *, path, unsigned, flags, unsigned, mask, struct statx __user *, buffer);
184 COMPAT_SYSCALL_WRAP4(s390_sthyi, unsigned long, code, void __user *, info, u64 __user *, rc, unsigned long, flags);
185 COMPAT_SYSCALL_WRAP5(kexec_file_load, int, kernel_fd, int, initrd_fd, unsigned long, cmdline_len, const char __user *, cmdline_ptr, unsigned long, flags)
186 COMPAT_SYSCALL_WRAP4(rseq, struct rseq __user *, rseq, u32, rseq_len, int, flags, u32, sig)
187 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp