Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[sanitizer] __NR_newfstatat not defined in linux kernel headers in aarch64 #100098

Open
trcrsired opened this issue Jul 23, 2024 · 3 comments
Open

Comments

@trcrsired
Copy link

trcrsired commented Jul 23, 2024

/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_syscall_linux_aarch64.inc:13:23: error: '__NR_newfstatat' was not declared in this scope
   13 | #define SYSCALL(name) __NR_ ## name
      |                       ^~~~~
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_syscall_linux_aarch64.inc:80:24: note: in definition of macro '__internal_syscall4'
   80 |   (__internal_syscall)(n, (u64)(a1), (long)(a2), (long)(a3), (long)(a4))
      |                        ^
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_syscall_linux_aarch64.inc:127:31: note: in expansion of macro '__SYSCALL_DISP'
  127 | #define internal_syscall(...) __SYSCALL_DISP(__internal_syscall, __VA_ARGS__)
      |                               ^~~~~~~~~~~~~~
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_linux.cpp:420:10: note: in expansion of macro 'internal_syscall'
  420 |   return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path, (uptr)buf,
      |          ^~~~~~~~~~~~~~~~
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_linux.cpp:420:27: note: in expansion of macro 'SYSCALL'
  420 |   return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path, (uptr)buf,
      |                           ^~~~~~~

# elif (SANITIZER_WORDSIZE == 64 || SANITIZER_X32 || \

I propose to add checks for defined(__NR_newfstatat)

#    elif (defined(_LP64) || SANITIZER_X32 ||              \
           (defined(__mips__) && _MIPS_SIM == _ABIN32)) && \
        !SANITIZER_SPARC && defined(__NR_newfstatat)
  return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path, (uptr)buf,
                          AT_SYMLINK_NOFOLLOW);

another one:

/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_syscall_linux_aarch64.inc:13:23: error: '__NR_fstatat64' was not declared in this scope; did you mean 'fstatat64'?
   13 | #define SYSCALL(name) __NR_ ## name
      |                       ^~~~~
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_syscall_linux_aarch64.inc:80:24: note: in definition of macro '__internal_syscall4'
   80 |   (__internal_syscall)(n, (u64)(a1), (long)(a2), (long)(a3), (long)(a4))
      |                        ^
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_syscall_linux_aarch64.inc:127:31: note: in expansion of macro '__SYSCALL_DISP'
  127 | #define internal_syscall(...) __SYSCALL_DISP(__internal_syscall, __VA_ARGS__)
      |                               ^~~~~~~~~~~~~~
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_linux.cpp:424:13: note: in expansion of macro 'internal_syscall'
  424 |   int res = internal_syscall(SYSCALL(fstatat64), AT_FDCWD, (uptr)path,
      |             ^~~~~~~~~~~~~~~~
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_linux.cpp:424:30: note: in expansion of macro 'SYSCALL'
  424 |   int res = internal_syscall(SYSCALL(fstatat64), AT_FDCWD, (uptr)path,
      |                              ^~~~~~~
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_linux.cpp:426:3: error: 'stat64_to_stat' was not declared in this scope
  426 |   stat64_to_stat(&buf64, (struct stat *)buf);
      |   ^~~~~~~~~~~~~~
      ```
@trcrsired trcrsired changed the title __NR_newfstatat not defined in linux kernel headers in aarch64 [sanitizer] __NR_newfstatat not defined in linux kernel headers in aarch64 Jul 23, 2024
@trcrsired
Copy link
Author

riscv also has this issue. You really should first detect _NR##name macros before using them

libtool: compile:  /home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/targetbuild/riscv64-linux-gnu/gcc_phase2/./gcc/xgcc -shared-libgcc -B/home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/targetbuild/riscv64-linux-gnu/gcc_phase2/./gcc -nostdinc++ -L/home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/targetbuild/riscv64-linux-gnu/gcc_phase2/riscv64-linux-gnu/libstdc++-v3/src -L/home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/targetbuild/riscv64-linux-gnu/gcc_phase2/riscv64-linux-gnu/libstdc++-v3/src/.libs -L/home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/targetbuild/riscv64-linux-gnu/gcc_phase2/riscv64-linux-gnu/libstdc++-v3/libsupc++/.libs -B/home/cqwrteur/toolchains/x86_64-generic-linux-gnu/riscv64-linux-gnu/riscv64-linux-gnu/bin/ -B/home/cqwrteur/toolchains/x86_64-generic-linux-gnu/riscv64-linux-gnu/riscv64-linux-gnu/lib/ -isystem /home/cqwrteur/toolchains/x86_64-generic-linux-gnu/riscv64-linux-gnu/riscv64-linux-gnu/include -isystem /home/cqwrteur/toolchains/x86_64-generic-linux-gnu/riscv64-linux-gnu/riscv64-linux-gnu/sys-include --sysroot=/home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/install/sysroot -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAVE_RPC_XDR_H=0 -DHAVE_TIRPC_RPC_XDR_H=0 -DHAVE_AS_SYM_ASSIGN=1 -I. -I/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common -I.. -I /home/cqwrteur/toolchains_build/gcc/libsanitizer/include -I /home/cqwrteur/toolchains_build/gcc/libsanitizer -isystem /home/cqwrteur/toolchains_build/gcc/libsanitizer/include/system -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros -I../../libstdc++-v3/include -I../../libstdc++-v3/include/riscv64-linux-gnu -I/home/cqwrteur/toolchains_build/gcc/libsanitizer/../libstdc++-v3/libsupc++ -std=gnu++14 -DSANITIZER_LIBBACKTRACE -DSANITIZER_CP_DEMANGLE -I /home/cqwrteur/toolchains_build/gcc/libsanitizer/../libbacktrace -I ../libbacktrace -I /home/cqwrteur/toolchains_build/gcc/libsanitizer/../include -include /home/cqwrteur/toolchains_build/gcc/libsanitizer/libbacktrace/backtrace-rename.h -g -O2 -D_GNU_SOURCE -MT sanitizer_platform_limits_solaris.lo -MD -MP -MF .deps/sanitizer_platform_limits_solaris.Tpo -c /home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_platform_limits_solaris.cpp  -fPIC -DPIC -o .libs/sanitizer_platform_limits_solaris.o
libtool: compile:  /home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/targetbuild/riscv64-linux-gnu/gcc_phase2/./gcc/xgcc -shared-libgcc -B/home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/targetbuild/riscv64-linux-gnu/gcc_phase2/./gcc -nostdinc++ -L/home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/targetbuild/riscv64-linux-gnu/gcc_phase2/riscv64-linux-gnu/libstdc++-v3/src -L/home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/targetbuild/riscv64-linux-gnu/gcc_phase2/riscv64-linux-gnu/libstdc++-v3/src/.libs -L/home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/targetbuild/riscv64-linux-gnu/gcc_phase2/riscv64-linux-gnu/libstdc++-v3/libsupc++/.libs -B/home/cqwrteur/toolchains/x86_64-generic-linux-gnu/riscv64-linux-gnu/riscv64-linux-gnu/bin/ -B/home/cqwrteur/toolchains/x86_64-generic-linux-gnu/riscv64-linux-gnu/riscv64-linux-gnu/lib/ -isystem /home/cqwrteur/toolchains/x86_64-generic-linux-gnu/riscv64-linux-gnu/riscv64-linux-gnu/include -isystem /home/cqwrteur/toolchains/x86_64-generic-linux-gnu/riscv64-linux-gnu/riscv64-linux-gnu/sys-include --sysroot=/home/cqwrteur/toolchains_build/toolchainbuildscripts/gccbuild/x86_64-w64-mingw32/.gnuartifacts/riscv64-linux-gnu/install/sysroot -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DHAVE_RPC_XDR_H=0 -DHAVE_TIRPC_RPC_XDR_H=0 -DHAVE_AS_SYM_ASSIGN=1 -I. -I/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common -I.. -I /home/cqwrteur/toolchains_build/gcc/libsanitizer/include -I /home/cqwrteur/toolchains_build/gcc/libsanitizer -isystem /home/cqwrteur/toolchains_build/gcc/libsanitizer/include/system -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros -I../../libstdc++-v3/include -I../../libstdc++-v3/include/riscv64-linux-gnu -I/home/cqwrteur/toolchains_build/gcc/libsanitizer/../libstdc++-v3/libsupc++ -std=gnu++14 -DSANITIZER_LIBBACKTRACE -DSANITIZER_CP_DEMANGLE -I /home/cqwrteur/toolchains_build/gcc/libsanitizer/../libbacktrace -I ../libbacktrace -I /home/cqwrteur/toolchains_build/gcc/libsanitizer/../include -include /home/cqwrteur/toolchains_build/gcc/libsanitizer/libbacktrace/backtrace-rename.h -g -O2 -D_GNU_SOURCE -MT sanitizer_posix.lo -MD -MP -MF .deps/sanitizer_posix.Tpo -c /home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_posix.cpp  -fPIC -DPIC -o .libs/sanitizer_posix.o
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_linux.cpp: In function '__sanitizer::uptr __sanitizer::internal_lstat(const char*, void*)':
/home/cqwrteur/toolchains_build/gcc/libsanitizer/sanitizer_common/sanitizer_syscall_linux_riscv64.inc:29:23: error: '__NR_newfstatat' was not declared in this scope
   29 | #define SYSCALL(name) __NR_##name
      |                       ^~~~~

@nikic
Copy link
Contributor

nikic commented Aug 1, 2024

I believe that this is a bug in the upcoming 6.11 kernel, see https://bugzilla.redhat.com/show_bug.cgi?id=2301919. The syscall constants are defined in previous versions.

@fweimer-rh
Copy link
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants