1 # Copyright 2018 syzkaller project authors. All rights reserved. 2 # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 include <uapi/linux/ioctl.h> 5 include <uapi/linux/fcntl.h> 6 include <uapi/linux/userfaultfd.h> 7 8 resource fd_uffd[fd] 9 10 userfaultfd(flags flags[userfaultfd_flags]) fd_uffd 11 12 ioctl$UFFDIO_API(fd fd_uffd, cmd const[UFFDIO_API], arg ptr[in, uffdio_api]) 13 ioctl$UFFDIO_REGISTER(fd fd_uffd, cmd const[UFFDIO_REGISTER], arg ptr[in, uffdio_register]) 14 ioctl$UFFDIO_UNREGISTER(fd fd_uffd, cmd const[UFFDIO_UNREGISTER], arg ptr[in, uffdio_range]) 15 ioctl$UFFDIO_WAKE(fd fd_uffd, cmd const[UFFDIO_WAKE], arg ptr[in, uffdio_range]) 16 ioctl$UFFDIO_COPY(fd fd_uffd, cmd const[UFFDIO_COPY], arg ptr[in, uffdio_copy]) 17 ioctl$UFFDIO_ZEROPAGE(fd fd_uffd, cmd const[UFFDIO_ZEROPAGE], arg ptr[in, uffdio_zeropage]) 18 19 userfaultfd_flags = O_NONBLOCK, O_CLOEXEC 20 uffdio_register_mode = UFFDIO_REGISTER_MODE_MISSING, UFFDIO_REGISTER_MODE_WP 21 uffdio_copy_mode = UFFDIO_COPY_MODE_DONTWAKE 22 uffdio_zero_mode = UFFDIO_ZEROPAGE_MODE_DONTWAKE 23 uffdio_features = UFFD_FEATURE_PAGEFAULT_FLAG_WP, UFFD_FEATURE_EVENT_FORK, UFFD_FEATURE_EVENT_REMAP, UFFD_FEATURE_EVENT_REMOVE, UFFD_FEATURE_MISSING_HUGETLBFS, UFFD_FEATURE_MISSING_SHMEM, UFFD_FEATURE_EVENT_UNMAP 24 25 uffdio_api { 26 api const[UFFD_API, int64] 27 featur flags[uffdio_features, int64] 28 ioctls const[0, int64] 29 } 30 31 uffdio_range { 32 start vma 33 len len[start, int64] 34 } 35 36 uffdio_register { 37 range uffdio_range 38 mode flags[uffdio_register_mode, int64] 39 ioctls const[0, int64] 40 } 41 42 uffdio_copy { 43 dst vma 44 src vma 45 len len[dst, int64] 46 mode flags[uffdio_copy_mode, int64] 47 copy const[0, int64] 48 } 49 50 uffdio_zeropage { 51 range uffdio_range 52 mode flags[uffdio_zero_mode, int64] 53 zeropg const[0, int64] 54 } 55