Made the existing Linux renameat2 wrapper generic.
error codes rather than -1 on error
517697 Implement CLRSSONSTACK and SETUJMPBUF handling on Solaris.
517748 Add ability to redirect global functions to Darwin
+518076 FreeBSD: add syscall wrapper for renameat2
To see details of a given bug, visit
https://bugs.kde.org/show_bug.cgi?id=XXXXXX
DECL_TEMPLATE(freebsd, sys_kexec_load) // 599
// generic sys_pdrfork redirect to ni_syscall 600
DECL_TEMPLATE(freebsd, sys_pdwait) // 601
+// generic renameat2 602
DECL_TEMPLATE(freebsd, sys_fake_sigreturn)
DECL_TEMPLATE(generic, sys_statfs64); // * (?)
DECL_TEMPLATE(generic, sys_fstatfs64); // * (?)
DECL_TEMPLATE(generic, sys_mlock2); // * L
+DECL_TEMPLATE(generic, sys_renameat2); // * L, F
/* ---------------------------------------------------------------------
DECL_TEMPLATE(linux, sys_newfstatat);
DECL_TEMPLATE(linux, sys_unlinkat);
DECL_TEMPLATE(linux, sys_renameat);
-DECL_TEMPLATE(linux, sys_renameat2);
DECL_TEMPLATE(linux, sys_linkat);
DECL_TEMPLATE(linux, sys_symlinkat);
DECL_TEMPLATE(linux, sys_readlinkat);
LINX_(__NR_finit_module, sys_finit_module), // 313
LINX_(__NR_sched_setattr, sys_sched_setattr), // 314
LINXY(__NR_sched_getattr, sys_sched_getattr), // 315
- LINX_(__NR_renameat2, sys_renameat2), // 316
+ GENX_(__NR_renameat2, sys_renameat2), // 316
// LIN__(__NR_seccomp, sys_ni_syscall), // 317
LINXY(__NR_getrandom, sys_getrandom), // 318
LINXY(__NR_memfd_create, sys_memfd_create), // 319
LINX_(__NR_sched_setattr, sys_sched_setattr), // 380
LINXY(__NR_sched_getattr, sys_sched_getattr), // 381
- LINX_(__NR_renameat2, sys_renameat2), // 382
+ GENX_(__NR_renameat2, sys_renameat2), // 382
LINXY(__NR_getrandom, sys_getrandom), // 384
LINXY(__NR_memfd_create, sys_memfd_create), // 385
LINX_(__NR_finit_module, sys_finit_module), // 273
LINX_(__NR_sched_setattr, sys_sched_setattr), // 274
LINXY(__NR_sched_getattr, sys_sched_getattr), // 275
- LINX_(__NR_renameat2, sys_renameat2), // 276
+ GENX_(__NR_renameat2, sys_renameat2), // 276
// (__NR_seccomp, sys_ni_syscall), // 277
LINXY(__NR_getrandom, sys_getrandom), // 278
LINXY(__NR_memfd_create, sys_memfd_create), // 279
// as not implemented for the moment
GENX_(__NR_pdrfork, sys_ni_syscall), // 600
BSDXY(__NR_pdwait, sys_pdwait), // 601
+ GENX_(__NR_renameat2, sys_renameat2), // 602
BSDX_(__NR_freebsd_fake_sigreturn, sys_fake_sigreturn), // 1000, fake sigreturn
PRE_MEM_READ( "sethostname(name)", ARG1, ARG2 );
}
+PRE(sys_renameat2)
+{
+ FUSE_COMPATIBLE_MAY_BLOCK();
+ PRINT("sys_renameat2 ( %ld, %#" FMT_REGWORD "x(%s), %ld, %#" FMT_REGWORD
+ "x(%s), %" FMT_REGWORD "u )", SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3,
+ ARG4, (HChar*)(Addr)ARG4, ARG5);
+ PRE_REG_READ5(long, "renameat2",
+ int, olddfd, const char *, oldpath,
+ int, newdfd, const char *, newpath,
+ unsigned int, flags);
+ ML_(fd_at_check_allowed)(SARG1, (const HChar*)ARG2, "renameat2(olddirfd)", tid, status);
+ ML_(fd_at_check_allowed)(SARG3, (const HChar*)ARG4, "renameat2(newdirfd)", tid, status);
+ PRE_MEM_RASCIIZ( "renameat2(oldpath)", ARG2 );
+ PRE_MEM_RASCIIZ( "renameat2(newpath)", ARG4 );
+}
+
#undef PRE
#undef POST
PRE_MEM_RASCIIZ( "renameat(newpath)", ARG4 );
}
-PRE(sys_renameat2)
-{
- FUSE_COMPATIBLE_MAY_BLOCK();
- PRINT("sys_renameat2 ( %ld, %#" FMT_REGWORD "x(%s), %ld, %#" FMT_REGWORD
- "x(%s), %" FMT_REGWORD "u )", SARG1, ARG2, (HChar*)(Addr)ARG2, SARG3,
- ARG4, (HChar*)(Addr)ARG4, ARG5);
- PRE_REG_READ5(long, "renameat2",
- int, olddfd, const char *, oldpath,
- int, newdfd, const char *, newpath,
- unsigned int, flags);
- ML_(fd_at_check_allowed)(SARG1, (const HChar*)ARG2, "renameat2(olddirfd)", tid, status);
- ML_(fd_at_check_allowed)(SARG3, (const HChar*)ARG4, "renameat2(newdirfd)", tid, status);
- PRE_MEM_RASCIIZ( "renameat2(oldpath)", ARG2 );
- PRE_MEM_RASCIIZ( "renameat2(newpath)", ARG4 );
-}
-
PRE(sys_linkat)
{
*flags |= SfMayBlock;
//..
LINX_(__NR_sched_setattr, sys_sched_setattr), // 349
LINXY(__NR_sched_getattr, sys_sched_getattr), // 350
- LINX_(__NR_renameat2, sys_renameat2), // 351
+ GENX_(__NR_renameat2, sys_renameat2), // 351
//..
LINXY (__NR_getrandom, sys_getrandom), // 353
LINXY (__NR_memfd_create, sys_memfd_create), // 354
LINX_ (__NR_process_vm_writev, sys_process_vm_writev),
LINX_ (__NR_sched_setattr, sys_sched_setattr),
LINXY (__NR_sched_getattr, sys_sched_getattr),
- LINX_ (__NR_renameat2, sys_renameat2),
+ GENX_ (__NR_renameat2, sys_renameat2),
LINXY (__NR_getrandom, sys_getrandom),
LINXY (__NR_memfd_create, sys_memfd_create),
LINX_ (__NR_execveat, sys_execveat),
LINXY (__NR_process_vm_readv, sys_process_vm_readv),
LINX_ (__NR_process_vm_writev, sys_process_vm_writev),
LINX_ (__NR_kcmp, sys_kcmp),
- LINX_ (__NR_renameat2, sys_renameat2),
+ GENX_ (__NR_renameat2, sys_renameat2),
LINX_ (__NR_sched_setattr, sys_sched_setattr),
LINXY (__NR_sched_getattr, sys_sched_getattr),
LINXY (__NR_getrandom, sys_getrandom),
LINX_(__NR_sched_setattr, sys_sched_setattr), // 355
LINXY(__NR_sched_getattr, sys_sched_getattr), // 356
- LINX_(__NR_renameat2, sys_renameat2), // 357
+ GENX_(__NR_renameat2, sys_renameat2), // 357
LINXY(__NR_getrandom, sys_getrandom), // 359
LINXY(__NR_memfd_create, sys_memfd_create), // 360
LINX_(__NR_sched_setattr, sys_sched_setattr), // 355
LINXY(__NR_sched_getattr, sys_sched_getattr), // 356
- LINX_(__NR_renameat2, sys_renameat2), // 357
+ GENX_(__NR_renameat2, sys_renameat2), // 357
LINXY(__NR_getrandom, sys_getrandom), // 359
LINXY(__NR_memfd_create, sys_memfd_create), // 360
LINX_(__NR_finit_module, sys_finit_module), /* 273 */
LINX_(__NR_sched_setattr, sys_sched_setattr), /* 274 */
LINXY(__NR_sched_getattr, sys_sched_getattr), /* 275 */
- LINX_(__NR_renameat2, sys_renameat2), /* 276 */
+ GENX_(__NR_renameat2, sys_renameat2), /* 276 */
LINXY(__NR_getrandom, sys_getrandom), /* 278 */
LINXY(__NR_memfd_create, sys_memfd_create), /* 279 */
LINXY(__NR_bpf, sys_bpf), /* 280 */
LINX_(__NR_sched_setattr, sys_sched_setattr), // 345
LINXY(__NR_sched_getattr, sys_sched_getattr), // 346
- LINX_(__NR_renameat2, sys_renameat2), // 347
+ GENX_(__NR_renameat2, sys_renameat2), // 347
// ?????(__NR_seccomp, ), // 348
LINXY(__NR_getrandom, sys_getrandom), // 349
// LIN__(__NR_finit_module, sys_ni_syscall), // 350
LINX_(__NR_sched_setattr, sys_sched_setattr), // 351
LINXY(__NR_sched_getattr, sys_sched_getattr), // 352
- LINX_(__NR_renameat2, sys_renameat2), // 353
+ GENX_(__NR_renameat2, sys_renameat2), // 353
// LIN__(__NR_seccomp, sys_ni_syscall), // 354
LINXY(__NR_getrandom, sys_getrandom), // 355
#define __NR_kexec_load 599
#define __NR_pdrfork 600
#define __NR_pdwait 601
+#define __NR_renameat2 602
#define __NR_freebsd_fake_sigreturn 1000
FAKE_SY(" ...\n");
FAKE_SY(" Address 0x........ is not stack'd, malloc'd or (recently) free'd\n");
FAKE_SY("\n");
+#endif
+
+ /* SYS_renameat2 602 */
+#if defined(SYS_renameat2)
+ GO(SYS_renameat2, "5s 2m");
+ SY(SYS_renameat2, x0+9999, x0+1, x0+9998, x0+1, x0+123456); FAIL;
+#else
+ FAKE_GO("602: SYS_renameat2 5s 2m");
+ FAKE_SY("Syscall param renameat2(olddfd) contains uninitialised byte(s)\n");
+ FAKE_SY(" ...\n");
+ FAKE_SY("\n");
+ FAKE_SY("Syscall param renameat2(oldpath) contains uninitialised byte(s)\n");
+ FAKE_SY(" ...\n");
+ FAKE_SY("\n");
+ FAKE_SY("Syscall param renameat2(newdfd) contains uninitialised byte(s)\n");
+ FAKE_SY(" ...\n");
+ FAKE_SY("\n");
+ FAKE_SY("Syscall param renameat2(newpath) contains uninitialised byte(s)\n");
+ FAKE_SY(" ...\n");
+ FAKE_SY("\n");
+ FAKE_SY("Syscall param renameat2(flags) contains uninitialised byte(s)\n");
+ FAKE_SY(" ...\n");
+ FAKE_SY("\n");
+ FAKE_SY("Syscall param renameat2(oldpath) points to unaddressable byte(s)\n");
+ FAKE_SY(" ...\n");
+ FAKE_SY(" Address 0x........ is not stack'd, malloc'd or (recently) free'd\n");
+ FAKE_SY("\n");
+ FAKE_SY("Syscall param renameat2(newpath) points to unaddressable byte(s)\n");
+ FAKE_SY(" ...\n");
+ FAKE_SY(" Address 0x........ is not stack'd, malloc'd or (recently) free'd\n");
+ FAKE_SY("\n");
+
#endif
// no such syscall...
...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
+---------------------------------------------------------
+602: SYS_renameat2 5s 2m
+---------------------------------------------------------
+Syscall param renameat2(olddfd) contains uninitialised byte(s)
+ ...
+
+Syscall param renameat2(oldpath) contains uninitialised byte(s)
+ ...
+
+Syscall param renameat2(newdfd) contains uninitialised byte(s)
+ ...
+
+Syscall param renameat2(newpath) contains uninitialised byte(s)
+ ...
+
+Syscall param renameat2(flags) contains uninitialised byte(s)
+ ...
+
+Syscall param renameat2(oldpath) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param renameat2(newpath) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
---------------------------------------------------------
9999: 9999 1e
---------------------------------------------------------
...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
+---------------------------------------------------------
+602: SYS_renameat2 5s 2m
+---------------------------------------------------------
+Syscall param renameat2(olddfd) contains uninitialised byte(s)
+ ...
+
+Syscall param renameat2(oldpath) contains uninitialised byte(s)
+ ...
+
+Syscall param renameat2(newdfd) contains uninitialised byte(s)
+ ...
+
+Syscall param renameat2(newpath) contains uninitialised byte(s)
+ ...
+
+Syscall param renameat2(flags) contains uninitialised byte(s)
+ ...
+
+Syscall param renameat2(oldpath) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param renameat2(newpath) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
---------------------------------------------------------
9999: 9999 1e
---------------------------------------------------------