Skip to content
This repository was archived by the owner on Jul 24, 2026. It is now read-only.

Commit 99a5657

Browse files
committed
fix mknodat ltp coverage
1 parent 114a14e commit 99a5657

3 files changed

Lines changed: 24 additions & 3 deletions

File tree

‎control/cli/src/rootfs/kirk.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ cmdline_pattern="$(cmdline_value seele.ltp_pattern)"
7676
suite="syscalls"
7777
[ -n "$cmdline_suite" ] && suite="$cmdline_suite"
7878
export LTP_SINGLE_FS_TYPE="${LTP_SINGLE_FS_TYPE:-ext4}"
79-
default_pattern="^(abort01|arch_prctl01|accept0[1-3]|accept4_01|access01|access02|access03|access04|acct0[1-2]|add_key0[1-5]|alarm0[23567]|bind0[1-6]|brk01|brk02|sbrk0[1-3]|capget0[1-2]|capset0[1-4]|chdir01|chdir02|chdir04|chmod01|chown01|clock_adjtime0[1-2]|clock_getres01|clock_gettime01|clock_gettime0[2-4]|clock_settime0[1-2]|clock_nanosleep01|clock_nanosleep0[2-4]|clone01|close01|close02|close_range01|close_range02|connect0[1-2]|creat0[1-9]|dup01|dup201|dup202|dup301|epoll_create101|epoll_ctl01|epoll_pwait01|epoll_pwait201|epoll_wait01|eventfd.*|exit0[12]|execve01|exit_group01|faccessat01|faccessat02|faccessat201|fchdir01|fchdir02|fchdir03|fchmod0[1-6]|fchmodat01|fchown0[1-5]|fchown0[1-5]_16|fchownat01|fcntl01|fcntl02|fcntl03|fcntl04|fcntl05|fcntl06|fcntl07|fcntl08|fcntl09|fcntl10|fcntl11|fcntl12|fcntl13|fcntl14|fcntl(1[5-9]|2[0-9]|3[0-9])(_64)?|fdatasync01|fdatasync02|fdatasync03|fgetxattr0[1-3]|flistxattr0[1-3]|fremovexattr0[1-2]|fsetxattr0[1-2]|fork01|fork02|fstat01|fstat02|fstatat01|fstatfs01|fstatfs02|fsync01|fsync02|fsync03|fsync04|ftruncate01|ftruncate01_64|ftruncate03|ftruncate03_64|ftruncate04|ftruncate04_64|getcwd01|getcwd02|getcwd03|getcwd04|getdents01|getdents64.*|getegid01|geteuid01|getgid01|getgroups01|getgroups01_16|getitimer01|getpeername01|getpid01|getpid02|getrlimit01|getrusage01|getsid01|getsockname01|getsockopt0[1-2]|gettimeofday01|getuid01|getxattr0[1-5]|ioctl01|kill01|lchown01|lgetxattr0[1-2]|link01|linkat01|listen01|listxattr0[1-4]|llistxattr0[1-3]|lseek01|lseek02|lseek03|lstat01|lstat02|lremovexattr01|lsetxattr01|madvise01|mincore01|mkdir01|mkdirat01|mlock01|mmap01|mmap02|mmap03|mmap04|mmap05|mmap06|mmap07|mmap0[8-9]|mmap1[2-5]|mmap1[7-9]|mmap2[02]|mmap21_0[12]|mmap_fixed01|mmapstress01|mount01|mprotect01|mprotect02|mprotect03|mprotect0[4-5]|mremap01|mremap0[2-7]|msync01|munlock01|munmap01|munmap02|nanosleep01|newfstatat01|newfstatat02|open01|open02|open03|open04|openat01|openat02|openat03|pipe01|pipe02|pipe201|pidfd_open0[1-3]|pidfd_send_signal0[1-2]|pivot_root01|poll01|ppoll01|pread64.*|preadv.*|prlimit64_01|pselect01|pwrite64.*|pwritev.*|read01|read02|read03|readlink01|readlinkat01|readv01|recvfrom01|removexattr0[1-2]|rename01|renameat.*|rmdir01|rt_sigaction01|rt_sigpending01|rt_sigprocmask01|select01|select02|sendto0[1-3]|setsockopt(0[1-9]|10)|sched_getaffinity01|sched_getparam0[13]|sched_get_priority_max0[12]|sched_get_priority_min0[12]|sched_getscheduler0[12]|sched_rr_get_interval0[1-3]|sched_yield01|setgroups01|setitimer01|setpgid01|setrlimit01|set_robust_list01|set_tid_address01|setxattr0[1-3]|sigaltstack01|sigsuspend01|socket0[1-2]|socketcall0[1-3]|socketpair01|stat01|stat02|statfs01|statfs02|statx01|statx02|symlink01|symlinkat01|sysinfo01|tgkill01|timer_create01|timer_gettime01|timer_settime01|timerfd_.*|tkill01|truncate01|umask01|umount01|uname01|unlink01|unlinkat01|utime01|utimensat01|utimes01|vfork01|wait401|waitid01|waitpid01|waitpid02|write01|write02|write03|writev01|unshare.*|setns.*|clone.*|clone3.*|mount.*|mount_setattr.*|open_tree.*|move_mount.*|fsopen.*|fsmount.*|fspick.*|pivot_root.*|chroot.*|execve.*|execveat.*|mkdir.*|mkdirat.*|chown.*|fchownat.*|chmod.*|fchmodat.*|statx.*|openat.*|faccessat.*|dup0[2-7]|dup20[3-7]|dup3_0[12]|epoll_create0[12]|epoll_create1_0[12]|epoll01|epoll_ctl0[2-5]|epoll_wait0[2-7]|epoll_pwait0[2-6]|getegid02|getegid02_16|geteuid02|geteuid02_16|getgid03|getgid03_16|getppid01|getppid02|getpgrp01|getpgid01|getpgid02|gettid01|gettid02|getuid03|getuid03_16|getsid02|get_robust_list01|getcpu01|getcpu02|getpagesize01|gethostid01|gethostname01|gethostname02|getdomainname01|confstr01|fpathconf01|getgroups03|getgroups03_16|getresuid0[1-3]|getresuid0[1-3]_16|getresgid0[1-3]|getresgid0[1-3]_16|getrandom0[1-5]|getpriority0[12]|getrusage0[24]|getrlimit0[23]|gettimeofday02|getitimer02)$"
79+
default_pattern="^(abort01|arch_prctl01|accept0[1-3]|accept4_01|access01|access02|access03|access04|acct0[1-2]|add_key0[1-5]|alarm0[23567]|bind0[1-6]|brk01|brk02|sbrk0[1-3]|capget0[1-2]|capset0[1-4]|chdir01|chdir02|chdir04|chmod01|chown01|clock_adjtime0[1-2]|clock_getres01|clock_gettime01|clock_gettime0[2-4]|clock_settime0[1-2]|clock_nanosleep01|clock_nanosleep0[2-4]|clone01|close01|close02|close_range01|close_range02|connect0[1-2]|creat0[1-9]|dup01|dup201|dup202|dup301|epoll_create101|epoll_ctl01|epoll_pwait01|epoll_pwait201|epoll_wait01|eventfd.*|exit0[12]|execve01|exit_group01|faccessat01|faccessat02|faccessat201|fchdir01|fchdir02|fchdir03|fchmod0[1-6]|fchmodat01|fchown0[1-5]|fchown0[1-5]_16|fchownat01|fcntl01|fcntl02|fcntl03|fcntl04|fcntl05|fcntl06|fcntl07|fcntl08|fcntl09|fcntl10|fcntl11|fcntl12|fcntl13|fcntl14|fcntl(1[5-9]|2[0-9]|3[0-9])(_64)?|fdatasync01|fdatasync02|fdatasync03|fgetxattr0[1-3]|flistxattr0[1-3]|fremovexattr0[1-2]|fsetxattr0[1-2]|fork01|fork02|fstat01|fstat02|fstatat01|fstatfs01|fstatfs02|fsync01|fsync02|fsync03|fsync04|ftruncate01|ftruncate01_64|ftruncate03|ftruncate03_64|ftruncate04|ftruncate04_64|getcwd01|getcwd02|getcwd03|getcwd04|getdents01|getdents64.*|getegid01|geteuid01|getgid01|getgroups01|getgroups01_16|getitimer01|getpeername01|getpid01|getpid02|getrlimit01|getrusage01|getsid01|getsockname01|getsockopt0[1-2]|gettimeofday01|getuid01|getxattr0[1-5]|ioctl01|kill01|lchown01|lgetxattr0[1-2]|link01|linkat01|listen01|listxattr0[1-4]|llistxattr0[1-3]|lseek01|lseek02|lseek03|lstat01|lstat02|lremovexattr01|lsetxattr01|madvise01|mincore01|mkdir01|mkdirat01|mlock01|mmap01|mmap02|mmap03|mmap04|mmap05|mmap06|mmap07|mmap0[8-9]|mmap1[2-5]|mmap1[7-9]|mmap2[02]|mmap21_0[12]|mmap_fixed01|mmapstress01|mknod0[1-9]|mknodat0[1-2]|mount01|mprotect01|mprotect02|mprotect03|mprotect0[4-5]|mremap01|mremap0[2-7]|msync01|munlock01|munmap01|munmap02|nanosleep01|newfstatat01|newfstatat02|open01|open02|open03|open04|openat01|openat02|openat03|pipe01|pipe02|pipe201|pidfd_open0[1-3]|pidfd_send_signal0[1-2]|pivot_root01|poll01|ppoll01|pread64.*|preadv.*|prlimit64_01|pselect01|pwrite64.*|pwritev.*|read01|read02|read03|readlink01|readlinkat01|readv01|recvfrom01|removexattr0[1-2]|rename01|renameat.*|rmdir01|rt_sigaction01|rt_sigpending01|rt_sigprocmask01|select01|select02|sendto0[1-3]|setsockopt(0[1-9]|10)|sched_getaffinity01|sched_getparam0[13]|sched_get_priority_max0[12]|sched_get_priority_min0[12]|sched_getscheduler0[12]|sched_rr_get_interval0[1-3]|sched_yield01|setgroups01|setitimer01|setpgid01|setrlimit01|set_robust_list01|set_tid_address01|setxattr0[1-3]|sigaltstack01|sigsuspend01|socket0[1-2]|socketcall0[1-3]|socketpair01|stat01|stat02|statfs01|statfs02|statx01|statx02|symlink01|symlinkat01|sysinfo01|tgkill01|timer_create01|timer_gettime01|timer_settime01|timerfd_.*|tkill01|truncate01|umask01|umount01|uname01|unlink01|unlinkat01|utime01|utimensat01|utimes01|vfork01|wait401|waitid01|waitpid01|waitpid02|write01|write02|write03|writev01|unshare.*|setns.*|clone.*|clone3.*|mount.*|mount_setattr.*|open_tree.*|move_mount.*|fsopen.*|fsmount.*|fspick.*|pivot_root.*|chroot.*|execve.*|execveat.*|mkdir.*|mkdirat.*|chown.*|fchownat.*|chmod.*|fchmodat.*|statx.*|openat.*|faccessat.*|dup0[2-7]|dup20[3-7]|dup3_0[12]|epoll_create0[12]|epoll_create1_0[12]|epoll01|epoll_ctl0[2-5]|epoll_wait0[2-7]|epoll_pwait0[2-6]|getegid02|getegid02_16|geteuid02|geteuid02_16|getgid03|getgid03_16|getppid01|getppid02|getpgrp01|getpgid01|getpgid02|gettid01|gettid02|getuid03|getuid03_16|getsid02|get_robust_list01|getcpu01|getcpu02|getpagesize01|gethostid01|gethostname01|gethostname02|getdomainname01|confstr01|fpathconf01|getgroups03|getgroups03_16|getresuid0[1-3]|getresuid0[1-3]_16|getresgid0[1-3]|getresgid0[1-3]_16|getrandom0[1-5]|getpriority0[12]|getrusage0[24]|getrlimit0[23]|gettimeofday02|getitimer02)$"
8080
pattern="$default_pattern"
8181
[ -n "$cmdline_pattern" ] && pattern="$cmdline_pattern"
8282
skip_tests=""

‎control/mcp/src/rootfs/kirk.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ cmdline_pattern="$(cmdline_value seele.ltp_pattern)"
124124
suite="syscalls"
125125
[ -n "$cmdline_suite" ] && suite="$cmdline_suite"
126126
export LTP_SINGLE_FS_TYPE="${LTP_SINGLE_FS_TYPE:-ext4}"
127-
default_pattern="^(abort01|arch_prctl01|accept0[1-3]|accept4_01|access01|access02|access03|access04|acct0[1-2]|add_key0[1-5]|alarm0[23567]|bind0[1-6]|brk01|brk02|sbrk0[1-3]|capget0[1-2]|capset0[1-4]|chdir01|chdir02|chdir04|chmod01|chown01|clock_adjtime0[1-2]|clock_getres01|clock_gettime01|clock_gettime0[2-4]|clock_settime0[1-2]|clock_nanosleep01|clock_nanosleep0[2-4]|clone01|close01|close02|close_range01|close_range02|connect0[1-2]|creat0[1-9]|dup01|dup201|dup202|dup301|epoll_create101|epoll_ctl01|epoll_pwait01|epoll_pwait201|epoll_wait01|eventfd.*|exit0[12]|execve01|exit_group01|faccessat01|faccessat02|faccessat201|fchdir01|fchdir02|fchdir03|fchmod0[1-6]|fchmodat01|fchown0[1-5]|fchown0[1-5]_16|fchownat01|fcntl01|fcntl02|fcntl03|fcntl04|fcntl05|fcntl06|fcntl07|fcntl08|fcntl09|fcntl10|fcntl11|fcntl12|fcntl13|fcntl14|fcntl(1[5-9]|2[0-9]|3[0-9])(_64)?|fdatasync01|fdatasync02|fdatasync03|fgetxattr0[1-3]|flistxattr0[1-3]|fremovexattr0[1-2]|fsetxattr0[1-2]|fork01|fork02|fstat01|fstat02|fstatat01|fstatfs01|fstatfs02|fsync01|fsync02|fsync03|fsync04|ftruncate01|ftruncate01_64|ftruncate03|ftruncate03_64|ftruncate04|ftruncate04_64|getcwd01|getcwd02|getcwd03|getcwd04|getdents01|getdents64.*|getegid01|geteuid01|getgid01|getgroups01|getgroups01_16|getitimer01|getpeername01|getpid01|getpid02|getrlimit01|getrusage01|getsid01|getsockname01|getsockopt0[1-2]|gettimeofday01|getuid01|getxattr0[1-5]|ioctl01|kill01|lchown01|lgetxattr0[1-2]|link01|linkat01|listen01|listxattr0[1-4]|llistxattr0[1-3]|lseek01|lseek02|lseek03|lstat01|lstat02|lremovexattr01|lsetxattr01|madvise01|mincore01|mkdir01|mkdirat01|mlock01|mmap01|mmap02|mmap03|mmap04|mmap05|mmap06|mmap07|mmap0[8-9]|mmap1[2-5]|mmap1[7-9]|mmap2[02]|mmap21_0[12]|mmap_fixed01|mmapstress01|mount01|mprotect01|mprotect02|mprotect03|mprotect0[4-5]|mremap01|mremap0[2-7]|msync01|munlock01|munmap01|munmap02|nanosleep01|newfstatat01|newfstatat02|open01|open02|open03|open04|openat01|openat02|openat03|pipe01|pipe02|pipe201|pidfd_open0[1-3]|pidfd_send_signal0[1-2]|pivot_root01|poll01|ppoll01|pread64.*|preadv.*|prlimit64_01|pselect01|pwrite64.*|pwritev.*|read01|read02|read03|readlink01|readlinkat01|readv01|recvfrom01|removexattr0[1-2]|rename01|renameat.*|rmdir01|rt_sigaction01|rt_sigpending01|rt_sigprocmask01|select01|select02|sendto0[1-3]|setsockopt(0[1-9]|10)|sched_getaffinity01|sched_getparam0[13]|sched_get_priority_max0[12]|sched_get_priority_min0[12]|sched_getscheduler0[12]|sched_rr_get_interval0[1-3]|sched_yield01|setgroups01|setitimer01|setpgid01|setrlimit01|set_robust_list01|set_tid_address01|setxattr0[1-3]|sigaltstack01|sigsuspend01|socket0[1-2]|socketcall0[1-3]|socketpair01|stat01|stat02|statfs01|statfs02|statx01|statx02|symlink01|symlinkat01|sysinfo01|tgkill01|timer_create01|timer_gettime01|timer_settime01|timerfd_.*|tkill01|truncate01|umask01|umount01|uname01|unlink01|unlinkat01|utime01|utimensat01|utimes01|vfork01|wait401|waitid01|waitpid01|waitpid02|write01|write02|write03|writev01|unshare.*|setns.*|clone.*|clone3.*|mount.*|mount_setattr.*|open_tree.*|move_mount.*|fsopen.*|fsmount.*|fspick.*|pivot_root.*|chroot.*|execve.*|execveat.*|mkdir.*|mkdirat.*|chown.*|fchownat.*|chmod.*|fchmodat.*|statx.*|openat.*|faccessat.*|dup0[2-7]|dup20[3-7]|dup3_0[12]|epoll_create0[12]|epoll_create1_0[12]|epoll01|epoll_ctl0[2-5]|epoll_wait0[2-7]|epoll_pwait0[2-6]|getegid02|getegid02_16|geteuid02|geteuid02_16|getgid03|getgid03_16|getppid01|getppid02|getpgrp01|getpgid01|getpgid02|gettid01|gettid02|getuid03|getuid03_16|getsid02|get_robust_list01|getcpu01|getcpu02|getpagesize01|gethostid01|gethostname01|gethostname02|getdomainname01|confstr01|fpathconf01|getgroups03|getgroups03_16|getresuid0[1-3]|getresuid0[1-3]_16|getresgid0[1-3]|getresgid0[1-3]_16|getrandom0[1-5]|getpriority0[12]|getrusage0[24]|getrlimit0[23]|gettimeofday02|getitimer02)$"
127+
default_pattern="^(abort01|arch_prctl01|accept0[1-3]|accept4_01|access01|access02|access03|access04|acct0[1-2]|add_key0[1-5]|alarm0[23567]|bind0[1-6]|brk01|brk02|sbrk0[1-3]|capget0[1-2]|capset0[1-4]|chdir01|chdir02|chdir04|chmod01|chown01|clock_adjtime0[1-2]|clock_getres01|clock_gettime01|clock_gettime0[2-4]|clock_settime0[1-2]|clock_nanosleep01|clock_nanosleep0[2-4]|clone01|close01|close02|close_range01|close_range02|connect0[1-2]|creat0[1-9]|dup01|dup201|dup202|dup301|epoll_create101|epoll_ctl01|epoll_pwait01|epoll_pwait201|epoll_wait01|eventfd.*|exit0[12]|execve01|exit_group01|faccessat01|faccessat02|faccessat201|fchdir01|fchdir02|fchdir03|fchmod0[1-6]|fchmodat01|fchown0[1-5]|fchown0[1-5]_16|fchownat01|fcntl01|fcntl02|fcntl03|fcntl04|fcntl05|fcntl06|fcntl07|fcntl08|fcntl09|fcntl10|fcntl11|fcntl12|fcntl13|fcntl14|fcntl(1[5-9]|2[0-9]|3[0-9])(_64)?|fdatasync01|fdatasync02|fdatasync03|fgetxattr0[1-3]|flistxattr0[1-3]|fremovexattr0[1-2]|fsetxattr0[1-2]|fork01|fork02|fstat01|fstat02|fstatat01|fstatfs01|fstatfs02|fsync01|fsync02|fsync03|fsync04|ftruncate01|ftruncate01_64|ftruncate03|ftruncate03_64|ftruncate04|ftruncate04_64|getcwd01|getcwd02|getcwd03|getcwd04|getdents01|getdents64.*|getegid01|geteuid01|getgid01|getgroups01|getgroups01_16|getitimer01|getpeername01|getpid01|getpid02|getrlimit01|getrusage01|getsid01|getsockname01|getsockopt0[1-2]|gettimeofday01|getuid01|getxattr0[1-5]|ioctl01|kill01|lchown01|lgetxattr0[1-2]|link01|linkat01|listen01|listxattr0[1-4]|llistxattr0[1-3]|lseek01|lseek02|lseek03|lstat01|lstat02|lremovexattr01|lsetxattr01|madvise01|mincore01|mkdir01|mkdirat01|mlock01|mmap01|mmap02|mmap03|mmap04|mmap05|mmap06|mmap07|mmap0[8-9]|mmap1[2-5]|mmap1[7-9]|mmap2[02]|mmap21_0[12]|mmap_fixed01|mmapstress01|mknod0[1-9]|mknodat0[1-2]|mount01|mprotect01|mprotect02|mprotect03|mprotect0[4-5]|mremap01|mremap0[2-7]|msync01|munlock01|munmap01|munmap02|nanosleep01|newfstatat01|newfstatat02|open01|open02|open03|open04|openat01|openat02|openat03|pipe01|pipe02|pipe201|pidfd_open0[1-3]|pidfd_send_signal0[1-2]|pivot_root01|poll01|ppoll01|pread64.*|preadv.*|prlimit64_01|pselect01|pwrite64.*|pwritev.*|read01|read02|read03|readlink01|readlinkat01|readv01|recvfrom01|removexattr0[1-2]|rename01|renameat.*|rmdir01|rt_sigaction01|rt_sigpending01|rt_sigprocmask01|select01|select02|sendto0[1-3]|setsockopt(0[1-9]|10)|sched_getaffinity01|sched_getparam0[13]|sched_get_priority_max0[12]|sched_get_priority_min0[12]|sched_getscheduler0[12]|sched_rr_get_interval0[1-3]|sched_yield01|setgroups01|setitimer01|setpgid01|setrlimit01|set_robust_list01|set_tid_address01|setxattr0[1-3]|sigaltstack01|sigsuspend01|socket0[1-2]|socketcall0[1-3]|socketpair01|stat01|stat02|statfs01|statfs02|statx01|statx02|symlink01|symlinkat01|sysinfo01|tgkill01|timer_create01|timer_gettime01|timer_settime01|timerfd_.*|tkill01|truncate01|umask01|umount01|uname01|unlink01|unlinkat01|utime01|utimensat01|utimes01|vfork01|wait401|waitid01|waitpid01|waitpid02|write01|write02|write03|writev01|unshare.*|setns.*|clone.*|clone3.*|mount.*|mount_setattr.*|open_tree.*|move_mount.*|fsopen.*|fsmount.*|fspick.*|pivot_root.*|chroot.*|execve.*|execveat.*|mkdir.*|mkdirat.*|chown.*|fchownat.*|chmod.*|fchmodat.*|statx.*|openat.*|faccessat.*|dup0[2-7]|dup20[3-7]|dup3_0[12]|epoll_create0[12]|epoll_create1_0[12]|epoll01|epoll_ctl0[2-5]|epoll_wait0[2-7]|epoll_pwait0[2-6]|getegid02|getegid02_16|geteuid02|geteuid02_16|getgid03|getgid03_16|getppid01|getppid02|getpgrp01|getpgid01|getpgid02|gettid01|gettid02|getuid03|getuid03_16|getsid02|get_robust_list01|getcpu01|getcpu02|getpagesize01|gethostid01|gethostname01|gethostname02|getdomainname01|confstr01|fpathconf01|getgroups03|getgroups03_16|getresuid0[1-3]|getresuid0[1-3]_16|getresgid0[1-3]|getresgid0[1-3]_16|getrandom0[1-5]|getpriority0[12]|getrusage0[24]|getrlimit0[23]|gettimeofday02|getitimer02)$"
128128
pattern="$default_pattern"
129129
[ -n "$cmdline_pattern" ] && pattern="$cmdline_pattern"
130130
skip_tests=""

‎kernel/src/systemcall/implementations/filesystem/directory.rs‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,24 @@ define_syscall!(MkdirAt, |dirfd: i32, path: CString, mode: u32| {
130130
define_syscall!(Mknodat, |dirfd: i32, path: CString, mode: u32, dev: u64| {
131131
let path = path_from_raw(path)?;
132132
let path = resolve_path_at(dirfd, &path)?;
133+
if VirtualFS
134+
.lock()
135+
.mount_metadata(path.clone())?
136+
.3
137+
.contains(MountFlags::MS_RDONLY)
138+
{
139+
return Err(SyscallError::ReadOnlyFileSystem);
140+
}
141+
if let Some(parent) = path.parent() {
142+
let credentials = fs_access_credentials();
143+
check_access_path_search_permissions(&parent, &credentials)?;
144+
check_access_permissions_for_ids_with_options(
145+
&open_path(parent)?.stat(),
146+
3,
147+
&credentials,
148+
false,
149+
)?;
150+
}
133151
let umask = {
134152
let process = get_current_process();
135153
let process = process.lock();
@@ -139,13 +157,16 @@ define_syscall!(Mknodat, |dirfd: i32, path: CString, mode: u32, dev: u64| {
139157
let create_mode = file_type | (mode & 0o7777 & !umask);
140158

141159
match file_type {
160+
S_IFCHR | S_IFBLK if get_current_process().lock().effective_uid != 0 => {
161+
Err(SyscallError::PermissionDenied)
162+
}
142163
0 | S_IFREG | S_IFIFO | S_IFCHR | S_IFBLK | S_IFSOCK => {
143164
VirtualFS
144165
.lock()
145166
.create_file_with_metadata(path.clone(), Some(create_mode), dev)?;
146167
Ok(0)
147168
}
148-
_ => Err(SyscallError::NoSyscall),
169+
_ => Err(SyscallError::InvalidArguments),
149170
}
150171
});
151172

0 commit comments

Comments
 (0)