diff --git a/executer/user/mcexec.c b/executer/user/mcexec.c index 927f1585..0efb16d9 100644 --- a/executer/user/mcexec.c +++ b/executer/user/mcexec.c @@ -3169,7 +3169,7 @@ int overlay_blacklist(const char *path) * returns path to use *with dirfd* if it was provided. */ const char * -overlay_path(int dirfd, const char *in, char *buf) +overlay_path(int dirfd, const char *in, char *buf, int *resolvelinks) { const char *path = in; char *linkpath, *tmppath; @@ -3179,6 +3179,10 @@ overlay_path(int dirfd, const char *in, char *buf) ssize_t n; int rc; + if (resolvelinks) { + *resolvelinks = 0; + } + __dprintf("considering fd %d path %s\n", dirfd, in); if (dirfd != AT_FDCWD && in[0] != '/') { @@ -3316,6 +3320,10 @@ checkexist_resolvelinks: if (n >= PATH_MAX) return in; } + + if (resolvelinks) { + *resolvelinks = 1; + } } linkpath[0] = '/'; linkpath++; @@ -3864,7 +3872,8 @@ int main_loop(struct thread_data_s *my_thread) __dprintf("openat: %d, %s,tid=%d\n", (int)w.sr.args[0], pathbuf, my_thread->remote_tid); - fn = overlay_path((int)w.sr.args[0], pathbuf, tmpbuf); + fn = overlay_path((int)w.sr.args[0], + pathbuf, tmpbuf, NULL); ret = openat(w.sr.args[0], fn, w.sr.args[2], w.sr.args[3]); @@ -4474,7 +4483,8 @@ return_execve2: pathbuf[ret] = 0; __dprintf("readlinkat: %d, %s\n", (int)w.sr.args[0], pathbuf); - fn = overlay_path((int)w.sr.args[0], pathbuf, tmpbuf); + fn = overlay_path((int)w.sr.args[0], + pathbuf, tmpbuf, NULL); ret = readlinkat(w.sr.args[0], fn, (char *)w.sr.args[2], w.sr.args[3]); @@ -4494,7 +4504,7 @@ return_execve2: break; } - fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf); + fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf, NULL); ret = readlink(fn, (char *)w.sr.args[1], w.sr.args[2]); SET_ERR(ret); @@ -4515,7 +4525,8 @@ return_execve2: } pathbuf[ret] = 0; - fn = overlay_path((int)w.sr.args[0], pathbuf, tmpbuf); + fn = overlay_path((int)w.sr.args[0], + pathbuf, tmpbuf, NULL); ret = fstatat((int)w.sr.args[0], fn, @@ -4539,7 +4550,7 @@ return_execve2: break; } - fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf); + fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf, NULL); ret = stat(fn, (struct stat *)w.sr.args[1]); SET_ERR(ret); @@ -4548,7 +4559,9 @@ return_execve2: break; #endif /* __NR_stat */ - case __NR_faccessat: + case __NR_faccessat: { + int resolvelinks = 0; + ret = do_strncpy_from_user(fd, pathbuf, (void *)w.sr.args[1], PATH_MAX); if (ret >= PATH_MAX) { @@ -4560,14 +4573,16 @@ return_execve2: } pathbuf[ret] = 0; - fn = overlay_path((int)w.sr.args[0], pathbuf, tmpbuf); + fn = overlay_path((int)w.sr.args[0], + pathbuf, tmpbuf, &resolvelinks); /* the syscall doesn't take flags argument, link * resolution happened first so don't do it again */ ret = faccessat((int)w.sr.args[0], fn, (int)w.sr.args[2], - AT_SYMLINK_NOFOLLOW); + resolvelinks == 0 ? + 0 : AT_SYMLINK_NOFOLLOW); SET_ERR(ret); __dprintf("faccessat: dirfd=%d, pathname=%s, mode=%d, ret=%ld\n", (int)w.sr.args[0], fn, (int)w.sr.args[2], @@ -4575,7 +4590,7 @@ return_execve2: do_syscall_return(fd, cpu, ret, 0, 0, 0, 0); break; - + } #ifdef __NR_access case __NR_access: ret = do_strncpy_from_user(fd, pathbuf, @@ -4588,7 +4603,7 @@ return_execve2: break; } - fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf); + fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf, NULL); ret = access(fn, (int)w.sr.args[1]); SET_ERR(ret); @@ -4607,7 +4622,7 @@ return_execve2: break; } - fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf); + fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf, NULL); ret = getxattr(fn, (char *)w.sr.args[1], (void *)w.sr.args[2], @@ -4628,7 +4643,7 @@ return_execve2: break; } - fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf); + fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf, NULL); ret = lgetxattr(fn, (char *)w.sr.args[1], (void *)w.sr.args[2], @@ -4862,7 +4877,7 @@ return_linux_spawn: } __dprintf("open: %s\n", pathbuf); - fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf); + fn = overlay_path(AT_FDCWD, pathbuf, tmpbuf, NULL); ret = open(fn, w.sr.args[1], w.sr.args[2]); SET_ERR(ret); diff --git a/test/issues/1370/1370.sh b/test/issues/1370/1370.sh new file mode 100755 index 00000000..4fbffbdf --- /dev/null +++ b/test/issues/1370/1370.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# 1370.sh COPYRIGHT FUJITSU LIMITED 2020 + +. $HOME/.mck_test_config + +BOOTPARAM="-c 12-15 -m 512M@4 -O" +USELTP=1 +FAIL=0 + +. ../../common.sh + +# for access02 setting +chmod 666 /dev/mcos* + +echo "issue-1370 test run." + +ltp=("access01" "access02" "access03" "access04" "faccessat01") + +for tp in ${ltp[@]} +do + pushd ${LTPBIN} > /dev/null + ${MCEXEC} ${LTPBIN}/${tp} + if [ $? -ne 0 ]; then + FAIL=1 + fi + popd > /dev/null +done + +if [ ${FAIL} -eq 1 ]; then + echo "issue-1370 test NG." +else + echo "issue-1370 test OK." +fi + +mcstop diff --git a/test/issues/1370/README b/test/issues/1370/README new file mode 100644 index 00000000..3720e3c0 --- /dev/null +++ b/test/issues/1370/README @@ -0,0 +1,21 @@ +/* REDME COPYRIGHT FUJITSU LIMITED 2020 */ + +ltp: access04: アクセスできないはずのファイルがアクセスできる +https://postpeta.pccluster.org/redmine/issues/1370 + +テストセットREADME + +(0) 事前準備 + 1. $HOME/.mck_test_configを用意する + +(1) テスト実行方法 + 1. ./1370.sh + +(2) テスト項目詳細 + + LTPの下記項目を実行し、すべての項目でPASSになることを確認する + - access01,02,03,04 + - faccessat01 + + +以上。 diff --git a/test/issues/1370/result.log b/test/issues/1370/result.log new file mode 100644 index 00000000..1670979f --- /dev/null +++ b/test/issues/1370/result.log @@ -0,0 +1,275 @@ +mcstop+release.sh ... done +mcreboot.sh -c 12-15 -m 512M@4 -O ... done +issue-1370 test run. +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +access01.c:243: PASS: access(accessfile_rwx, F_OK) as root +access01.c:243: PASS: access(accessfile_rwx, F_OK) as nobody +access01.c:243: PASS: access(accessfile_rwx, X_OK) as root +access01.c:243: PASS: access(accessfile_rwx, X_OK) as nobody +access01.c:243: PASS: access(accessfile_rwx, W_OK) as root +access01.c:243: PASS: access(accessfile_rwx, W_OK) as nobody +access01.c:243: PASS: access(accessfile_rwx, R_OK) as root +access01.c:243: PASS: access(accessfile_rwx, R_OK) as nobody +access01.c:243: PASS: access(accessfile_rwx, R_OK|W_OK) as root +access01.c:243: PASS: access(accessfile_rwx, R_OK|W_OK) as nobody +access01.c:243: PASS: access(accessfile_rwx, R_OK|X_OK) as root +access01.c:243: PASS: access(accessfile_rwx, R_OK|X_OK) as nobody +access01.c:243: PASS: access(accessfile_rwx, W_OK|X_OK) as root +access01.c:243: PASS: access(accessfile_rwx, W_OK|X_OK) as nobody +access01.c:243: PASS: access(accessfile_rwx, R_OK|W_OK|X_OK) as root +access01.c:243: PASS: access(accessfile_rwx, R_OK|W_OK|X_OK) as nobody +access01.c:243: PASS: access(accessfile_x, X_OK) as root +access01.c:243: PASS: access(accessfile_x, X_OK) as nobody +access01.c:243: PASS: access(accessfile_w, W_OK) as root +access01.c:243: PASS: access(accessfile_w, W_OK) as nobody +access01.c:243: PASS: access(accessfile_r, R_OK) as root +access01.c:243: PASS: access(accessfile_r, R_OK) as nobody +access01.c:263: PASS: access(accessfile_r, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessfile_r, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_r, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_w, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_w, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessfile_w, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_x, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_x, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_r, W_OK|X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessfile_r, W_OK|X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_r, R_OK|X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessfile_r, R_OK|X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_r, R_OK|W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_r, R_OK|W_OK|X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessfile_r, R_OK|W_OK|X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_w, W_OK|X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessfile_w, W_OK|X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_w, R_OK|X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessfile_w, R_OK|X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_w, R_OK|W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_w, R_OK|W_OK|X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessfile_w, R_OK|W_OK|X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_x, W_OK|X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_x, R_OK|X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_x, R_OK|W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessfile_x, R_OK|W_OK|X_OK) as nobody: EACCES (13) +access01.c:243: PASS: access(accessfile_r, W_OK) as root +access01.c:243: PASS: access(accessfile_r, R_OK|W_OK) as root +access01.c:243: PASS: access(accessfile_w, R_OK) as root +access01.c:243: PASS: access(accessfile_w, R_OK|W_OK) as root +access01.c:243: PASS: access(accessfile_x, R_OK) as root +access01.c:243: PASS: access(accessfile_x, W_OK) as root +access01.c:243: PASS: access(accessfile_x, R_OK|W_OK) as root +access01.c:243: PASS: access(accessdir_r/accessfile_r, F_OK) as root +access01.c:243: PASS: access(accessdir_r/accessfile_r, R_OK) as root +access01.c:243: PASS: access(accessdir_r/accessfile_r, W_OK) as root +access01.c:243: PASS: access(accessdir_r/accessfile_w, F_OK) as root +access01.c:243: PASS: access(accessdir_r/accessfile_w, R_OK) as root +access01.c:243: PASS: access(accessdir_r/accessfile_w, W_OK) as root +access01.c:243: PASS: access(accessdir_r/accessfile_x, F_OK) as root +access01.c:243: PASS: access(accessdir_r/accessfile_x, R_OK) as root +access01.c:243: PASS: access(accessdir_r/accessfile_x, W_OK) as root +access01.c:243: PASS: access(accessdir_r/accessfile_x, X_OK) as root +access01.c:243: PASS: access(accessdir_w/accessfile_r, F_OK) as root +access01.c:243: PASS: access(accessdir_w/accessfile_r, R_OK) as root +access01.c:243: PASS: access(accessdir_w/accessfile_r, W_OK) as root +access01.c:243: PASS: access(accessdir_w/accessfile_w, F_OK) as root +access01.c:243: PASS: access(accessdir_w/accessfile_w, R_OK) as root +access01.c:243: PASS: access(accessdir_w/accessfile_w, W_OK) as root +access01.c:243: PASS: access(accessdir_w/accessfile_x, F_OK) as root +access01.c:243: PASS: access(accessdir_w/accessfile_x, R_OK) as root +access01.c:243: PASS: access(accessdir_w/accessfile_x, W_OK) as root +access01.c:243: PASS: access(accessdir_w/accessfile_x, X_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_r, F_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_r, F_OK) as nobody +access01.c:243: PASS: access(accessdir_x/accessfile_r, R_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_r, R_OK) as nobody +access01.c:243: PASS: access(accessdir_x/accessfile_r, W_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_w, F_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_w, F_OK) as nobody +access01.c:243: PASS: access(accessdir_x/accessfile_w, R_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_w, W_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_w, W_OK) as nobody +access01.c:243: PASS: access(accessdir_x/accessfile_x, F_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_x, F_OK) as nobody +access01.c:243: PASS: access(accessdir_x/accessfile_x, R_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_x, W_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_x, X_OK) as root +access01.c:243: PASS: access(accessdir_x/accessfile_x, X_OK) as nobody +access01.c:243: PASS: access(accessdir_rw/accessfile_r, F_OK) as root +access01.c:243: PASS: access(accessdir_rw/accessfile_r, R_OK) as root +access01.c:243: PASS: access(accessdir_rw/accessfile_r, W_OK) as root +access01.c:243: PASS: access(accessdir_rw/accessfile_w, F_OK) as root +access01.c:243: PASS: access(accessdir_rw/accessfile_w, R_OK) as root +access01.c:243: PASS: access(accessdir_rw/accessfile_w, W_OK) as root +access01.c:243: PASS: access(accessdir_rw/accessfile_x, F_OK) as root +access01.c:243: PASS: access(accessdir_rw/accessfile_x, R_OK) as root +access01.c:243: PASS: access(accessdir_rw/accessfile_x, W_OK) as root +access01.c:243: PASS: access(accessdir_rw/accessfile_x, X_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_r, F_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_r, F_OK) as nobody +access01.c:243: PASS: access(accessdir_rx/accessfile_r, R_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_r, R_OK) as nobody +access01.c:243: PASS: access(accessdir_rx/accessfile_r, W_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_w, F_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_w, F_OK) as nobody +access01.c:243: PASS: access(accessdir_rx/accessfile_w, R_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_w, W_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_w, W_OK) as nobody +access01.c:243: PASS: access(accessdir_rx/accessfile_x, F_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_x, F_OK) as nobody +access01.c:243: PASS: access(accessdir_rx/accessfile_x, R_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_x, W_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_x, X_OK) as root +access01.c:243: PASS: access(accessdir_rx/accessfile_x, X_OK) as nobody +access01.c:243: PASS: access(accessdir_wx/accessfile_r, F_OK) as root +access01.c:243: PASS: access(accessdir_wx/accessfile_r, F_OK) as nobody +access01.c:243: PASS: access(accessdir_wx/accessfile_r, R_OK) as root +access01.c:243: PASS: access(accessdir_wx/accessfile_r, R_OK) as nobody +access01.c:243: PASS: access(accessdir_wx/accessfile_r, W_OK) as root +access01.c:243: PASS: access(accessdir_wx/accessfile_w, F_OK) as root +access01.c:243: PASS: access(accessdir_wx/accessfile_w, F_OK) as nobody +access01.c:243: PASS: access(accessdir_wx/accessfile_w, R_OK) as root +access01.c:243: PASS: access(accessdir_wx/accessfile_w, W_OK) as root +access01.c:243: PASS: access(accessdir_wx/accessfile_w, W_OK) as nobody +access01.c:243: PASS: access(accessdir_wx/accessfile_x, F_OK) as root +access01.c:243: PASS: access(accessdir_wx/accessfile_x, F_OK) as nobody +access01.c:243: PASS: access(accessdir_wx/accessfile_x, R_OK) as root +access01.c:243: PASS: access(accessdir_wx/accessfile_x, W_OK) as root +access01.c:243: PASS: access(accessdir_wx/accessfile_x, X_OK) as root +access01.c:243: PASS: access(accessdir_wx/accessfile_x, X_OK) as nobody +access01.c:263: PASS: access(accessdir_r/accessfile_r, F_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_r, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_r, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_r, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_r, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_w, F_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_w, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_w, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_w, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_w, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_x, F_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_x, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_x, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_r/accessfile_x, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_r, F_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_r, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_r, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_r, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_r, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_w, F_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_w, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_w, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_w, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_w, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_x, F_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_x, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_x, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_w/accessfile_x, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_x/accessfile_r, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_x/accessfile_r, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_x/accessfile_r, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_x/accessfile_w, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_x/accessfile_w, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_x/accessfile_w, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_x/accessfile_x, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_x/accessfile_x, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_r, F_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_r, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_r, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_r, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_r, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_w, F_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_w, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_w, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_w, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_w, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_x, F_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_x, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_x, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rw/accessfile_x, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rx/accessfile_r, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rx/accessfile_r, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_rx/accessfile_r, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rx/accessfile_w, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rx/accessfile_w, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_rx/accessfile_w, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rx/accessfile_x, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_rx/accessfile_x, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_wx/accessfile_r, W_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_wx/accessfile_r, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_wx/accessfile_r, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_wx/accessfile_w, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_wx/accessfile_w, X_OK) as root: EACCES (13) +access01.c:263: PASS: access(accessdir_wx/accessfile_w, X_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_wx/accessfile_x, R_OK) as nobody: EACCES (13) +access01.c:263: PASS: access(accessdir_wx/accessfile_x, W_OK) as nobody: EACCES (13) + +Summary: +passed 199 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +access02.c:144: PASS: access(file_f, F_OK) as root behaviour is correct. +access02.c:144: PASS: access(file_f, F_OK) as nobody behaviour is correct. +access02.c:144: PASS: access(file_r, R_OK) as root behaviour is correct. +access02.c:144: PASS: access(file_r, R_OK) as nobody behaviour is correct. +access02.c:144: PASS: access(file_w, W_OK) as root behaviour is correct. +access02.c:144: PASS: access(file_w, W_OK) as nobody behaviour is correct. +access02.c:144: PASS: access(file_x, X_OK) as root behaviour is correct. +access02.c:144: PASS: access(file_x, X_OK) as nobody behaviour is correct. +access02.c:144: PASS: access(symlink_f, F_OK) as root behaviour is correct. +access02.c:144: PASS: access(symlink_f, F_OK) as nobody behaviour is correct. +access02.c:144: PASS: access(symlink_r, R_OK) as root behaviour is correct. +access02.c:144: PASS: access(symlink_r, R_OK) as nobody behaviour is correct. +access02.c:144: PASS: access(symlink_w, W_OK) as root behaviour is correct. +access02.c:144: PASS: access(symlink_w, W_OK) as nobody behaviour is correct. +access02.c:144: PASS: access(symlink_x, X_OK) as root behaviour is correct. +access02.c:144: PASS: access(symlink_x, X_OK) as nobody behaviour is correct. + +Summary: +passed 16 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +access03.c:47: PASS: access(0xffffffffffffffff, F_OK) as root: EFAULT (14) +access03.c:47: PASS: access(0xffffffffffffffff, F_OK) as nobody: EFAULT (14) +access03.c:47: PASS: access(0xffffffffffffffff, R_OK) as root: EFAULT (14) +access03.c:47: PASS: access(0xffffffffffffffff, R_OK) as nobody: EFAULT (14) +access03.c:47: PASS: access(0xffffffffffffffff, W_OK) as root: EFAULT (14) +access03.c:47: PASS: access(0xffffffffffffffff, W_OK) as nobody: EFAULT (14) +access03.c:47: PASS: access(0xffffffffffffffff, X_OK) as root: EFAULT (14) +access03.c:47: PASS: access(0xffffffffffffffff, X_OK) as nobody: EFAULT (14) + +Summary: +passed 8 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +access04.c:75: PASS: access as root failed expectedly: EINVAL (22) +access04.c:75: PASS: access as nobody failed expectedly: EINVAL (22) +access04.c:75: PASS: access as root failed expectedly: ENOENT (2) +access04.c:75: PASS: access as nobody failed expectedly: ENOENT (2) +access04.c:75: PASS: access as root failed expectedly: ENAMETOOLONG (36) +access04.c:75: PASS: access as nobody failed expectedly: ENAMETOOLONG (36) +access04.c:75: PASS: access as root failed expectedly: ENOTDIR (20) +access04.c:75: PASS: access as nobody failed expectedly: ENOTDIR (20) +access04.c:75: PASS: access as root failed expectedly: ELOOP (40) +access04.c:75: PASS: access as nobody failed expectedly: ELOOP (40) +access04.c:75: PASS: access as root failed expectedly: EROFS (30) +access04.c:75: PASS: access as nobody failed expectedly: EROFS (30) + +Summary: +passed 12 +failed 0 +skipped 0 +warnings 0 +overlay_path: readlink /proc/self/fd/100 failed: 2 +faccessat01 1 TPASS : faccessat() returned the expected errno 0: Success +faccessat01 2 TPASS : faccessat() returned the expected errno 0: Success +faccessat01 3 TPASS : faccessat() returned the expected errno 20: Not a directory +faccessat01 4 TPASS : faccessat() returned the expected errno 9: Bad file descriptor +faccessat01 5 TPASS : faccessat() returned the expected errno 0: Success +faccessat01 6 TPASS : faccessat() returned the expected errno 0: Success +issue-1370 test OK. +mcstop+release.sh ... done