506795 Better report which clone flags are problematic
506910 openat2 with RESOLVE_NO_MAGICLINKS succeeds on /proc/self/exe
506928 Wrap (deprecated) linux specific ustat syscall
+506929 Wrap (deprecated) linux sysfs syscall
506930 valgrind allows SIGKILL being reset to SIG_DFL
506967 Implement and override mallinfo2
506970 mmap needs an EBADF fd_allowed check
DECL_TEMPLATE(linux, sys_readahead);
DECL_TEMPLATE(linux, sys_move_pages);
DECL_TEMPLATE(linux, sys_cachestat);
+DECL_TEMPLATE(linux, sys_sysfs);
// clone is similar enough between linux variants to have a generic
// version, but which will call an extern defined in syswrap-<platform>-linux.c
LINXY(__NR_ustat, sys_ustat), // 136
GENXY(__NR_statfs, sys_statfs), // 137
GENXY(__NR_fstatfs, sys_fstatfs), // 138
- // (__NR_sysfs, sys_sysfs), // 139
+ LINXY(__NR_sysfs, sys_sysfs), // 139
GENX_(__NR_getpriority, sys_getpriority), // 140
GENX_(__NR_setpriority, sys_setpriority), // 141
GENX_(__NR_fchdir, sys_fchdir), // 133
//zz // (__NR_bdflush, sys_bdflush), // 134 */Linux
//zz
-//zz // (__NR_sysfs, sys_sysfs), // 135 SVr4
+ LINXY(__NR_sysfs, sys_sysfs), // 135 SVr4
LINX_(__NR_personality, sys_personality), // 136
// GENX_(__NR_afs_syscall, sys_ni_syscall), // 137
LINX_(__NR_setfsuid, sys_setfsuid16), // 138
PRE_REG_READ1(long, "syncfs", unsigned int, fd);
}
+PRE(sys_sysfs)
+{
+ FUSE_COMPATIBLE_MAY_BLOCK();
+ switch (ARG1) {
+ case 1:
+ PRINT("sys_sysfs ( %lu, %lu )", ARG1, ARG2);
+ PRE_REG_READ2(long, "sysfs", int, flags, const void *, path);
+ PRE_MEM_RASCIIZ("sysfs(path)", ARG2);
+ break;
+ case 2:
+ PRINT("sys_sysfs ( %lu, %lu, %#" FMT_REGWORD "x )",
+ ARG1, ARG2, ARG3);
+ PRE_REG_READ3(long, "sysfs", int, flags, int, desc, void *, path);
+ PRE_MEM_WRITE("sysfs(path)", ARG3, 1);
+ break;
+ case 3:
+ PRINT("sys_sysfs ( %lu )", ARG1);
+ PRE_REG_READ1(long, "sysfs", int, flags);
+ break;
+ default:
+ if (VG_(clo_verbosity) >= 1) {
+ VG_(message)(Vg_DebugMsg,
+ "WARNING: unhandled sysfs option %lu\n", ARG1);
+ }
+ break;
+ }
+}
+
+POST(sys_sysfs)
+{
+ if (ARG1 == 2) {
+ // For option 2, getting the fsname, there is no way to know how big the buffer needs to be.
+ POST_MEM_WRITE(ARG3, VG_(strlen)((void *)ARG3));
+ }
+}
+
PRE(sys_statx)
{
FUSE_COMPATIBLE_MAY_BLOCK();
GENX_ (__NR_getpgid, sys_getpgid), // 132
GENX_ (__NR_fchdir, sys_fchdir), // 133
//.. // (__NR_bdflush, sys_bdflush), // 134
- //.. // (__NR_sysfs, sys_sysfs), // 135
+ LINXY (__NR_sysfs, sys_sysfs), // 135
LINX_ (__NR_personality, sys_personality), // 136
//.. GENX_(__NR_afs_syscall, sys_ni_syscall), // 137
LINX_ (__NR_setfsuid, sys_setfsuid), // 138
DECL_TEMPLATE (mips_linux, sys_set_thread_area);
DECL_TEMPLATE (mips_linux, sys_vmsplice);
-DECL_TEMPLATE (mips_linux, sys_sysfs);
DECL_TEMPLATE (mips_linux, sys_swapon);
DECL_TEMPLATE (mips_linux, sys_swapoff);
DECL_TEMPLATE (mips_linux, sys_setdomainname);
PRE_REG_READ1(long, "swapoff", const void *, path);
}
-PRE(sys_sysfs)
-{
- PRINT("sys_sysfs ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
- SARG1, ARG2, ARG3);
- PRE_REG_READ3(long, "sysfs", int, flags, int, desc, const void *, path);
-}
-
/* Very much MIPS specific */
PRE(sys_cacheflush)
{
LINXY (__NR_ustat, sys_ustat),
GENXY (__NR_statfs, sys_statfs),
GENXY (__NR_fstatfs, sys_fstatfs),
- PLAX_ (__NR_sysfs, sys_sysfs),
+ LINXY (__NR_sysfs, sys_sysfs),
GENX_ (__NR_getpriority, sys_getpriority),
GENX_ (__NR_setpriority, sys_setpriority),
LINXY (__NR_sched_setparam, sys_sched_setparam),
GENX_(__NR_fchdir, sys_fchdir), // 133
//.. // (__NR_bdflush, sys_bdflush), // 134 */Linux
//..
-//.. // (__NR_sysfs, sys_sysfs), // 135 SVr4
+ LINXY(__NR_sysfs, sys_sysfs), // 135 SVr4
LINX_(__NR_personality, sys_personality), // 136
//.. GENX_(__NR_afs_syscall, sys_ni_syscall), // 137
LINX_(__NR_setfsuid, sys_setfsuid), // 138
GENX_(__NR_fchdir, sys_fchdir), // 133
// _____(__NR_bdflush, sys_bdflush), // 134
-// _____(__NR_sysfs, sys_sysfs), // 135
+ LINXY(__NR_sysfs, sys_sysfs), // 135
LINX_(__NR_personality, sys_personality), // 136
// _____(__NR_afs_syscall, sys_afs_syscall), // 137
LINX_(__NR_setfsuid, sys_setfsuid), // 138
GENX_(__NR_fchdir, sys_fchdir), // 133
// ?????(__NR_bdflush, ), // 134
-// ?????(__NR_sysfs, ), // 135
+ LINXY(__NR_sysfs, sys_sysfs), // 135
LINX_(__NR_personality, sys_personality), // 136
GENX_(137, sys_ni_syscall), /* unimplemented (by the kernel) */ // 137
GENX_(138, sys_ni_syscall), /* unimplemented (by the kernel) */ // 138
GENX_(__NR_fchdir, sys_fchdir), // 133
//zz // (__NR_bdflush, sys_bdflush), // 134 */Linux
//zz
-//zz // (__NR_sysfs, sys_sysfs), // 135 SVr4
+ LINXY(__NR_sysfs, sys_sysfs), // 135 SVr4
LINX_(__NR_personality, sys_personality), // 136
GENX_(__NR_afs_syscall, sys_ni_syscall), // 137
LINX_(__NR_setfsuid, sys_setfsuid16), // 138