Difference between revisions of "SceSblSsSmComm"

From Vita Development Wiki
Jump to navigation Jump to search
Line 7: Line 7:
 
! Version !! World !! Privilege
 
! Version !! World !! Privilege
 
|-
 
|-
| 0.931-3.60 || Non-secure || Kernel
+
| 0.931.010-3.740.011 || Non-secure || Kernel
 
|}
 
|}
  
Line 18: Line 18:
 
! Version !! Name !! World !! Visibility !! NID
 
! Version !! Name !! World !! Visibility !! NID
 
|-
 
|-
| 0.931-3.60 || [[SceSblSsSmComm#SceSblSmCommForKernel|SceSblSmCommForKernel]] || Non-secure || Kernel || 0xCD3C89B6
+
| 0.931.010-3.740.011 || [[SceSblSsSmComm#SceSblSmCommForKernel|SceSblSmCommForKernel]] || Non-secure || Kernel || 0xCD3C89B6
 
|-
 
|-
| 0.931-1.69 || [[SceSblSsSmComm#SceSblSsSmComm|SceSblSsSmComm]] || Non-secure || User || 0xD8DC7847
+
| 0.931.010-1.692.000 || [[SceSblSsSmComm#SceSblSsSmComm|SceSblSsSmComm]] || Non-secure || User || 0xD8DC7847
 +
|-
 +
| 1.800.071-3.740.011 || [[SceSblSsSmComm#SceSblSsSmComm|SceSblSsSmComm]] || Non-secure || User || not present
 
|}
 
|}
  
Line 69: Line 71:
 
== SceSblSmCommForKernel ==
 
== SceSblSmCommForKernel ==
  
=== sceSblSmCommStopSmForKernel ===
+
=== sceSblSmCommCallFunc_ForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x0631F8ED
+
| 0.931.010 || 0x4960DF9E
 +
|-
 +
| 1.692.000-3.740.011 || not present
 
|}
 
|}
  
This function calls [[SceSblSsSmComm#sceSblSmCommCallFuncForKernel|sceSblSmCommCallFuncForKernel]] with <code>-1 (0xFFFFFFFF)</code> as <code>func_id</code> and then calls [[SceSblSmschedProxy#sceSblSmSchedProxyWaitForKernel|sceSblSmSchedProxyWaitForKernel]].
+
This function is just a 4-argument wrapper for [[#sceSblSmCommCallFuncForKernel]].
 +
 
 +
<source lang="c">
 +
typedef struct sceSblSmCommCallFunc_Param {
 +
    void *pData;
 +
    SceSize dataSize;
 +
} sceSblSmCommCallFunc_Param;
  
<source lang="c">int sceSblSmCommStopSmForKernel(SceSmSchedRequestId req_id, status_handler *pStatusHandler);</source>
+
int sceSblSmCommCallFunc_ForKernel(SceSmSchedRequestId req_id, SceUInt32 func_id, SceUInt32 *pResponse, sceSblSmCommCallFunc_Param *pParam);
 +
</source>
  
=== sceSblSmCommStartSmFromDataForKernel ===
+
=== sceSblSmCommStopCommForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x039C73B1
+
| 0.931.010 || 0xC35FB95A
 +
|-
 +
| 1.692.000-3.740.011 || not present
 
|}
 
|}
  
<source lang="c">int sceSblSmCommStartSmFromDataForKernel(SceBool priority, const void *sm_self, SceSize sm_self_size, int cmd_id, SceSblSmCommContext130 *ctx_130, SceSmSchedRequestId *req_id);</source>
+
<source lang="C">int sceSblSmCommStopCommForKernel(SceSmSchedRequestId req_id);</source>
  
 
=== sceSblSmCommStartSmForKernel ===
 
=== sceSblSmCommStartSmForKernel ===
Line 96: Line 109:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x7863A0CC
+
| 0.931.010 || 0x7863A0CC
 
|-
 
|-
| 1.810.021 || not present
+
| 1.692.000-1.810.021 || not present
 +
|-
 +
| 3.600.011-3.740.011 || 0x7863A0CC
 
|}
 
|}
  
Priority is binary: 1 = low, 0 = high. Running a high priority SM while a low priority one is currently running will [[F00D Processor|suspend]] the low one.
+
Priority is binary: 1 = low, 0 = high. Running a high priority SM while a low priority one is currently running will [[CMeP#Protocol|suspend]] the low one.
  
 
The following conditions must be met in order for this function to be called successfully:
 
The following conditions must be met in order for this function to be called successfully:
Line 109: Line 124:
 
Calling a function without satisfying the conditions freezes the system.
 
Calling a function without satisfying the conditions freezes the system.
  
<source lang="c">int sceSblSmCommStartSmForKernel(SceBool priority, const char *sm_self_path, SceSblSmCommContext130* ctx_130, SceSmSchedRequestId *req_id);</source>
+
<source lang="c">int sceSblSmCommStartSmForKernel(SceBool priority, const char *sm_self_path, SceSblSmCommContext130 *ctx_130, SceSmSchedRequestId *req_id);</source>
  
 
=== sceSblSmCommStartSm_ForKernel ===
 
=== sceSblSmCommStartSm_ForKernel ===
Line 116: Line 131:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-1.69 || 0x992BB9DB
+
| 0.931.010-1.800.071 || 0x992BB9DB
 +
|-
 +
| 3.600.011-3.740.011 || not present
 
|}
 
|}
  
 
<source lang="c">int sceSblSmCommStartSm_ForKernel(SceBool priority, const char *path, SceBool some_bool, int unk_a4, int unk_a5, int unk_a6, SceSblSmCommContext130 *pCtx, SceSmSchedRequestId *pReqId);</source>
 
<source lang="c">int sceSblSmCommStartSm_ForKernel(SceBool priority, const char *path, SceBool some_bool, int unk_a4, int unk_a5, int unk_a6, SceSblSmCommContext130 *pCtx, SceSmSchedRequestId *pReqId);</source>
  
=== sceSblSmCommCallFuncForKernel ===
+
=== sceSblSmCommStartSmFromDataForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xDB9FC204
+
| 0.931.010-1.800.071 || not present
 +
|-
 +
| 3.600.011-3.740.011 || 0x039C73B1
 
|}
 
|}
  
<source lang="c">int sceSblSmCommCallFuncForKernel(SceSmSchedRequestId req_id, SceUInt32 func_id, SceUInt32 *pResponse, void *pData, SceSize dataSize);</source>
+
<source lang="c">int sceSblSmCommStartSmFromDataForKernel(SceBool priority, const void *sm_self, SceSize sm_self_size, int cmd_id, SceSblSmCommContext130 *ctx_130, SceSmSchedRequestId *req_id);</source>
  
=== sceSblSmCommCallFunc_ForKernel ===
+
=== sceSblSmCommCallFuncForKernel ===
 
{| class="wikitable"
 
{| class="wikitable"
|-
 
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x4960DF9E
+
| 0.931.010-3.740.011 || 0xDB9FC204
 
|}
 
|}
  
<source lang="c">
+
<source lang="c">int sceSblSmCommCallFuncForKernel(SceSmSchedRequestId req_id, SceUInt32 func_id, SceUInt32 *pResponse, void *pData, SceSize dataSize);</source>
typedef struct sceSblSmCommCallFunc_Param {
 
    void *pData;
 
    SceSize dataSize;
 
} sceSblSmCommCallFunc_Param;
 
  
int sceSblSmCommCallFunc_ForKernel(SceSmSchedRequestId req_id, SceUInt32 func_id, SceUInt32 *pResponse, sceSblSmCommCallFunc_Param *pParam);
+
=== sceSblSmCommStopSmForKernel ===
</source>
 
 
 
=== sceSblSmCommStopCommForKernel ===
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xC35FB95A
+
| 0.931.010-3.740.011 || 0x0631F8ED
 
|}
 
|}
  
<source lang="C">int sceSblSmCommStopCommForKernel(SceSmSchedRequestId req_id);</source>
+
This function calls [[SceSblSsSmComm#sceSblSmCommCallFuncForKernel|sceSblSmCommCallFuncForKernel]] with <code>-1 (0xFFFFFFFF)</code> as <code>func_id</code> and then calls [[SceSblSmschedProxy#sceSblSmSchedProxyWaitForKernel|sceSblSmSchedProxyWaitForKernel]].
 +
 
 +
<source lang="c">int sceSblSmCommStopSmForKernel(SceSmSchedRequestId req_id, status_handler *pStatusHandler);</source>
  
 
== SceSblSsSmComm ==
 
== SceSblSsSmComm ==
  
This library is present on 1.69 but is not present on 3.60.
+
This library is present up to and including System Software version 1.692.000, then removed since System Software version 1.800.071 for security reasons.
  
=== sceSblSmCommStopSm ===
+
=== sceSblSmCommStartSm ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-1.69 || 0x0631F8ED
+
| 0.931.010 || 0x7863A0CC
 +
|-
 +
| 1.692.000-3.740.011 || not present
 
|}
 
|}
  
=== sceSblSmCommStartSm ===
+
Alias for [[#sceSblSmCommStartSmForKernel]].
 +
 
 +
=== sceSblSmCommCallFunc_ ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0x7863A0CC
+
| 0.931.010 || 0x4960DF9E
 +
|-
 +
| 1.692.000-3.740.011 || 0x4960DF9E
 
|}
 
|}
  
=== sceSblSmCommStartSm_ ===
+
Alias for [[#sceSblSmCommCallFunc_ForKernel]].
 +
 
 +
=== sceSblSmCommStopComm ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-1.69 || 0x992BB9DB
+
| 0.931.010 || 0xC35FB95A
 +
|-
 +
| 1.692.000-3.740.011 || not present
 
|}
 
|}
  
=== sceSblSmCommCallFunc ===
+
Alias for [[#sceSblSmCommStopCommForKernel]].
 +
 
 +
=== sceSblSmCommStartSm_ ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xDB9FC204
+
| 0.931.010-1.692.000 || 0x992BB9DB
 +
|-
 +
| 1.800.071-3.740.011 || not present
 
|}
 
|}
  
=== sceSblSmCommCallFunc_ ===
+
Alias for [[#sceSblSmCommStartSm_ForKernel]].
 +
 
 +
=== sceSblSmCommCallFunc ===
 
{| class="wikitable"
 
{| class="wikitable"
 +
! Version !! NID
 
|-
 
|-
! Version !! NID
+
| 0.931.010-1.692.000 || 0xDB9FC204
 
|-
 
|-
| 0.931-1.69 || 0x4960DF9E
+
| 1.800.071-3.740.011 || not present
 
|}
 
|}
  
=== sceSblSmCommStopComm ===
+
Alias for [[#sceSblSmCommCallFuncForKernel]].
 +
 
 +
=== sceSblSmCommStopSm ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931 || 0xC35FB95A
+
| 0.931.010-1.692.000 || 0x0631F8ED
 +
|-
 +
| 1.800.071-3.740.011 || not present
 
|}
 
|}
 +
 +
Alias for [[#sceSblSmCommStopSmForKernel]].
  
  
 
[[Category:Modules]]
 
[[Category:Modules]]
 
[[Category:Kernel]]
 
[[Category:Kernel]]

Revision as of 13:32, 10 March 2023

SceSblSsSmComm is a kernel module that is primarily responsible for calling SM functions.

Module

Version World Privilege
0.931.010-3.740.011 Non-secure Kernel

Libraries

Known NIDs

Version Name World Visibility NID
0.931.010-3.740.011 SceSblSmCommForKernel Non-secure Kernel 0xCD3C89B6
0.931.010-1.692.000 SceSblSsSmComm Non-secure User 0xD8DC7847
1.800.071-3.740.011 SceSblSsSmComm Non-secure User not present

Types

/* example of spawner_self_auth_info
char data[0x90] =
{
   0x01,0x00,0x00,0x00, 0x00,0x00,0x08,0x28, // KBL program-authority-id
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
   0x80,0x00,0x00,0x00, 0xC0,0x00,0xF0,0x00, // KBL capability
   0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF,
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
   0x80,0x09,0x80,0x03, 0x00,0x00,0xC3,0x00, // KBL attribute
   0x00,0x00,0x80,0x09, 0x80,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF,
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, // KBL shared secret
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
}; */

typedef struct SceSelfAuthInfo { // size is 0x90 on FWs 0.931.010-3.740.011
   SceUInt64 program_authority_id;
   uint8_t padding[8];
   uint8_t capability[0x20];
   uint8_t attribute[0x20];
   SceSharedSecret shared_secret; // current hypothesis of SceSharedSecret is full (0x40 bytes) shared_secret overwritten with klicensee at offset 0x10
} SceSelfAuthInfo;

typedef struct SceSblSmCommContext130 { // size is 0x130 on FWs 0.931.010-3.740.011 (as its name indicates)
   SceUInt32 unk_0;
   SceUInt32 self_type; // kernel = 0, user = 1, SM = 2, 0x10, 0x100, ?0x10001 main user process?
   SceSelfAuthInfo spawner_self_auth_info; // can be obtained with sceKernelGetSelfAuthInfoForKernel
   SceSelfAuthInfo spawned_self_auth_info; // set by secure_kernel in response SceSblSmCommContext130
   SceUInt32 media_type; // can be obtained with sceSblACMgrGetMediaTypeForKernel or sceIoGetMediaTypeForDriver
   SceUInt32 unk_0x12C; // if (kbl_param->boot_type_indicator_1????? & 0x40) == 1, then set unk_0x12C to 1, else set to 10, ?mistook with media_type?
} SceSblSmCommContext130;

SceSblSmCommForKernel

sceSblSmCommCallFunc_ForKernel

Version NID
0.931.010 0x4960DF9E
1.692.000-3.740.011 not present

This function is just a 4-argument wrapper for #sceSblSmCommCallFuncForKernel.

typedef struct sceSblSmCommCallFunc_Param {
    void *pData;
    SceSize dataSize;
} sceSblSmCommCallFunc_Param;

int sceSblSmCommCallFunc_ForKernel(SceSmSchedRequestId req_id, SceUInt32 func_id, SceUInt32 *pResponse, sceSblSmCommCallFunc_Param *pParam);

sceSblSmCommStopCommForKernel

Version NID
0.931.010 0xC35FB95A
1.692.000-3.740.011 not present
int sceSblSmCommStopCommForKernel(SceSmSchedRequestId req_id);

sceSblSmCommStartSmForKernel

Version NID
0.931.010 0x7863A0CC
1.692.000-1.810.021 not present
3.600.011-3.740.011 0x7863A0CC

Priority is binary: 1 = low, 0 = high. Running a high priority SM while a low priority one is currently running will suspend the low one.

The following conditions must be met in order for this function to be called successfully: - In kernel thread. - In kernel context.

Calling a function without satisfying the conditions freezes the system.

int sceSblSmCommStartSmForKernel(SceBool priority, const char *sm_self_path, SceSblSmCommContext130 *ctx_130, SceSmSchedRequestId *req_id);

sceSblSmCommStartSm_ForKernel

Version NID
0.931.010-1.800.071 0x992BB9DB
3.600.011-3.740.011 not present
int sceSblSmCommStartSm_ForKernel(SceBool priority, const char *path, SceBool some_bool, int unk_a4, int unk_a5, int unk_a6, SceSblSmCommContext130 *pCtx, SceSmSchedRequestId *pReqId);

sceSblSmCommStartSmFromDataForKernel

Version NID
0.931.010-1.800.071 not present
3.600.011-3.740.011 0x039C73B1
int sceSblSmCommStartSmFromDataForKernel(SceBool priority, const void *sm_self, SceSize sm_self_size, int cmd_id, SceSblSmCommContext130 *ctx_130, SceSmSchedRequestId *req_id);

sceSblSmCommCallFuncForKernel

Version NID
0.931.010-3.740.011 0xDB9FC204
int sceSblSmCommCallFuncForKernel(SceSmSchedRequestId req_id, SceUInt32 func_id, SceUInt32 *pResponse, void *pData, SceSize dataSize);

sceSblSmCommStopSmForKernel

Version NID
0.931.010-3.740.011 0x0631F8ED

This function calls sceSblSmCommCallFuncForKernel with -1 (0xFFFFFFFF) as func_id and then calls sceSblSmSchedProxyWaitForKernel.

int sceSblSmCommStopSmForKernel(SceSmSchedRequestId req_id, status_handler *pStatusHandler);

SceSblSsSmComm

This library is present up to and including System Software version 1.692.000, then removed since System Software version 1.800.071 for security reasons.

sceSblSmCommStartSm

Version NID
0.931.010 0x7863A0CC
1.692.000-3.740.011 not present

Alias for #sceSblSmCommStartSmForKernel.

sceSblSmCommCallFunc_

Version NID
0.931.010 0x4960DF9E
1.692.000-3.740.011 0x4960DF9E

Alias for #sceSblSmCommCallFunc_ForKernel.

sceSblSmCommStopComm

Version NID
0.931.010 0xC35FB95A
1.692.000-3.740.011 not present

Alias for #sceSblSmCommStopCommForKernel.

sceSblSmCommStartSm_

Version NID
0.931.010-1.692.000 0x992BB9DB
1.800.071-3.740.011 not present

Alias for #sceSblSmCommStartSm_ForKernel.

sceSblSmCommCallFunc

Version NID
0.931.010-1.692.000 0xDB9FC204
1.800.071-3.740.011 not present

Alias for #sceSblSmCommCallFuncForKernel.

sceSblSmCommStopSm

Version NID
0.931.010-1.692.000 0x0631F8ED
1.800.071-3.740.011 not present

Alias for #sceSblSmCommStopSmForKernel.