PRE_REG_READ4(int, "stat_extended", char *, file_name, struct stat *, buf,
void *, fsacl, vki_size_t *, fsacl_size);
PRE_MEM_RASCIIZ( "stat_extended(file_name)", ARG1 );
- PRE_MEM_READ( "stat_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
PRE_MEM_WRITE( "stat_extended(buf)", ARG2, sizeof(struct vki_stat) );
+ if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+ PRE_MEM_WRITE("stat_extended(fsacl)", ARG3, *(vki_size_t *)ARG4 );
+ PRE_MEM_READ( "stat_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
PRE_MEM_WRITE( "stat_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
- PRE_MEM_WRITE( "stat_extended(fsacl)", ARG3, *(vki_size_t *)ARG4 );
}
POST(stat_extended)
{
POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) );
+ if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+ POST_MEM_WRITE( ARG3, *(vki_size_t *)ARG4 );
+ POST_MEM_WRITE( ARG4, sizeof(vki_size_t) );
+}
+
+
+PRE(lstat_extended)
+{
+ PRINT("lstat_extended( %#lx(%s), %#lx, %#lx, %#lx )",
+ ARG1, (char *)ARG1, ARG2, ARG3, ARG4);
+ PRE_REG_READ4(int, "lstat_extended", char *, file_name, struct stat *, buf,
+ void *, fsacl, vki_size_t *, fsacl_size);
+ PRE_MEM_RASCIIZ( "lstat_extended(file_name)", ARG1 );
+ PRE_MEM_WRITE( "lstat_extended(buf)", ARG2, sizeof(struct vki_stat) );
+ if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+ PRE_MEM_WRITE("lstat_extended(fsacl)", ARG3, *(vki_size_t *)ARG4 );
+ PRE_MEM_READ( "lstat_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
+ PRE_MEM_WRITE( "lstat_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
+}
+POST(lstat_extended)
+{
+ POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) );
+ if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+ POST_MEM_WRITE( ARG3, *(vki_size_t *)ARG4 );
+ POST_MEM_WRITE( ARG4, sizeof(vki_size_t) );
+}
+
+
+PRE(stat64_extended)
+{
+ PRINT("stat64_extended( %#lx(%s), %#lx, %#lx, %#lx )",
+ ARG1, (char *)ARG1, ARG2, ARG3, ARG4);
+ PRE_REG_READ4(int, "stat64_extended", char *, file_name, struct stat64 *, buf,
+ void *, fsacl, vki_size_t *, fsacl_size);
+ PRE_MEM_RASCIIZ( "stat64_extended(file_name)", ARG1 );
+ PRE_MEM_WRITE( "stat64_extended(buf)", ARG2, sizeof(struct vki_stat64) );
+ if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+ PRE_MEM_WRITE("stat64_extended(fsacl)", ARG3, *(vki_size_t *)ARG4 );
+ PRE_MEM_READ( "stat64_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
+ PRE_MEM_WRITE( "stat64_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
+}
+POST(stat64_extended)
+{
+ POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
+ if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+ POST_MEM_WRITE( ARG3, *(vki_size_t *)ARG4 );
+ POST_MEM_WRITE( ARG4, sizeof(vki_size_t) );
+}
+
+
+PRE(lstat64_extended)
+{
+ PRINT("lstat64_extended( %#lx(%s), %#lx, %#lx, %#lx )",
+ ARG1, (char *)ARG1, ARG2, ARG3, ARG4);
+ PRE_REG_READ4(int, "lstat64_extended", char *, file_name, struct stat64 *, buf,
+ void *, fsacl, vki_size_t *, fsacl_size);
+ PRE_MEM_RASCIIZ( "lstat64_extended(file_name)", ARG1 );
+ PRE_MEM_WRITE( "lstat64_extended(buf)", ARG2, sizeof(struct vki_stat64) );
+ if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+ PRE_MEM_WRITE( "lstat64_extended(fsacl)", ARG3, *(vki_size_t *)ARG4 );
+ PRE_MEM_READ( "lstat64_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
+ PRE_MEM_WRITE( "lstat64_extended(fsacl_size)", ARG4, sizeof(vki_size_t) );
+}
+POST(lstat64_extended)
+{
+ POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
+ if (ML_(safe_to_deref)( (void*)ARG4, sizeof(vki_size_t) ))
+ POST_MEM_WRITE( ARG3, *(vki_size_t *)ARG4 );
POST_MEM_WRITE( ARG4, sizeof(vki_size_t) );
- POST_MEM_WRITE( ARG3, *(vki_size_t *)ARG4 );
}
PRE(fchmod_extended)
{
- /* Note: this is not really correct. Handling of
+ /* DDD: Note: this is not really correct. Handling of
chmod_extended is broken in the same way. */
PRINT("fchmod_extended ( %ld, %ld, %ld, %ld, %#lx )",
ARG1, ARG2, ARG3, ARG4, ARG5);
gid_t, gid,
vki_mode_t, mode,
void* /*really,user_addr_t*/, xsecurity);
- /* relative to the xnu sources (kauth_copyinfilesec), this
+ /* DDD: relative to the xnu sources (kauth_copyinfilesec), this
is just way wrong. */
PRE_MEM_READ( "fchmod_extended(xsecurity)", ARG5,
sizeof(struct kauth_filesec) );
PRE(chmod_extended)
{
- /* Note: this is not really correct. Handling of
+ /* DDD: Note: this is not really correct. Handling of
fchmod_extended is broken in the same way. */
PRINT("chmod_extended ( %#lx(%s), %ld, %ld, %ld, %#lx )",
ARG1, ARG1 ? (HChar*)ARG1 : "(null)", ARG2, ARG3, ARG4, ARG5);
vki_mode_t, mode,
void* /*really,user_addr_t*/, xsecurity);
PRE_MEM_RASCIIZ("chmod_extended(path)", ARG1);
- /* relative to the xnu sources (kauth_copyinfilesec), this
+ /* DDD: relative to the xnu sources (kauth_copyinfilesec), this
is just way wrong. */
PRE_MEM_READ( "chmod_extended(xsecurity)", ARG5,
sizeof(struct kauth_filesec) );
// _____(__NR_open_extended),
// _____(__NR_umask_extended),
MACXY(__NR_stat_extended, stat_extended),
-// _____(__NR_lstat_extended), // 280
+ MACXY(__NR_lstat_extended, lstat_extended), // 280
// _____(__NR_fstat_extended),
MACX_(__NR_chmod_extended, chmod_extended),
MACX_(__NR_fchmod_extended, fchmod_extended),
MACXY(__NR_stat64, stat64),
MACXY(__NR_fstat64, fstat64),
MACXY(__NR_lstat64, lstat64), // 340
-// _____(__NR_stat64_extended),
-// _____(__NR_lstat64_extended),
+ MACXY(__NR_stat64_extended, stat64_extended),
+ MACXY(__NR_lstat64_extended, lstat64_extended),
// _____(__NR_fstat64_extended),
MACXY(__NR_getdirentries64, getdirentries64),
MACXY(__NR_statfs64, statfs64),
// __NR_open_extended 277
// __NR_umask_extended 278
+
// __NR_stat_extended 279
+ {
+ size_t one = 1;
+ GO(__NR_stat_extended, "4s 4m");
+ SY(__NR_stat_extended, x0, x0, x0, x0); FAIL;
+ // Go again to get a complaint about where the 3rd arg points; it
+ // requires the 4th arg to point to a valid value.
+ SY(__NR_stat_extended, 0, 0, 0, &one); FAIL;
+
// __NR_lstat_extended 280
+ GO(__NR_lstat_extended, "4s 4m");
+ SY(__NR_lstat_extended, x0, x0, x0, x0); FAIL;
+ // Go again to get a complaint about where the 3rd arg points; it
+ // requires the 4th arg to point to a valid value.
+ SY(__NR_lstat_extended, 0, 0, 0, &one); FAIL;
+ }
+
// __NR_fstat_extended 281
// __NR_chmod_extended 282
// __NR_fchmod_extended 283
// __NR_fstat64 339
// __NR_lstat64 340
// __NR_stat64_extended 341
+
// __NR_lstat64_extended 342
+ {
+ size_t one = 1;
+ GO(__NR_stat64_extended, "4s 4m");
+ SY(__NR_stat64_extended, x0, x0, x0, x0); FAIL;
+ // Go again to get a complaint about where the 3rd arg points; it
+ // requires the 4th arg to point to a valid value.
+ SY(__NR_stat64_extended, 0, 0, 0, &one); FAIL;
+
// __NR_fstat64_extended 343
+ GO(__NR_lstat64_extended, "4s 4m");
+ SY(__NR_lstat64_extended, x0, x0, x0, x0); FAIL;
+ // Go again to get a complaint about where the 3rd arg points; it
+ // requires the 4th arg to point to a valid value.
+ SY(__NR_lstat64_extended, 0, 0, 0, &one); FAIL;
+ }
+
// __NR_getdirentries64 344
// __NR_statfs64 345
// __NR_fstatfs64 346
...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
-----------------------------------------------------
+x2000117(279): __NR_stat_extended 4s 4m
+-----------------------------------------------------
+
+Syscall param stat_extended(file_name) contains uninitialised byte(s)
+ ...
+
+Syscall param stat_extended(buf) contains uninitialised byte(s)
+ ...
+
+Syscall param stat_extended(fsacl) contains uninitialised byte(s)
+ ...
+
+Syscall param stat_extended(fsacl_size) contains uninitialised byte(s)
+ ...
+
+Syscall param stat_extended(file_name) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param stat_extended(buf) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param stat_extended(fsacl_size) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param stat_extended(fsacl) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+-----------------------------------------------------
+x2000118(280): __NR_lstat_extended 4s 4m
+-----------------------------------------------------
+
+Syscall param lstat_extended(file_name) contains uninitialised byte(s)
+ ...
+
+Syscall param lstat_extended(buf) contains uninitialised byte(s)
+ ...
+
+Syscall param lstat_extended(fsacl) contains uninitialised byte(s)
+ ...
+
+Syscall param lstat_extended(fsacl_size) contains uninitialised byte(s)
+ ...
+
+Syscall param lstat_extended(file_name) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lstat_extended(buf) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lstat_extended(fsacl_size) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lstat_extended(fsacl) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+-----------------------------------------------------
+x2000155(341):__NR_stat64_extended 4s 4m
+-----------------------------------------------------
+
+Syscall param stat64_extended(file_name) contains uninitialised byte(s)
+ ...
+
+Syscall param stat64_extended(buf) contains uninitialised byte(s)
+ ...
+
+Syscall param stat64_extended(fsacl) contains uninitialised byte(s)
+ ...
+
+Syscall param stat64_extended(fsacl_size) contains uninitialised byte(s)
+ ...
+
+Syscall param stat64_extended(file_name) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param stat64_extended(buf) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param stat64_extended(fsacl_size) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param stat64_extended(fsacl) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+-----------------------------------------------------
+x2000156(342):__NR_lstat64_extended 4s 4m
+-----------------------------------------------------
+
+Syscall param lstat64_extended(file_name) contains uninitialised byte(s)
+ ...
+
+Syscall param lstat64_extended(buf) contains uninitialised byte(s)
+ ...
+
+Syscall param lstat64_extended(fsacl) contains uninitialised byte(s)
+ ...
+
+Syscall param lstat64_extended(fsacl_size) contains uninitialised byte(s)
+ ...
+
+Syscall param lstat64_extended(file_name) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lstat64_extended(buf) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lstat64_extended(fsacl_size) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lstat64_extended(fsacl) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+-----------------------------------------------------
x20001a4(420):__NR_sem_wait_nocancel 0s* 0m
-----------------------------------------------------
-----------------------------------------------------