mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
new-ipc: Introduce serviceCreateNonDomainSubservice in order to avoid calling cmifQueryPointerBufferSize during response parsing and corrupting output data as a result [bug found by @SciresM]
This commit is contained in:
parent
cd9f29fc8e
commit
324a3624ac
@ -142,6 +142,20 @@ NX_INLINE void serviceCreate(Service* s, Handle h)
|
||||
cmifQueryPointerBufferSize(h, &s->pointer_buffer_size);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Creates a non-domain subservice object from a parent service.
|
||||
* @param[out] s Service object.
|
||||
* @param[in] parent Parent service.
|
||||
* @param[in] h IPC session handle for this subservice.
|
||||
*/
|
||||
NX_INLINE void serviceCreateNonDomainSubservice(Service* s, Service* parent, Handle h)
|
||||
{
|
||||
s->session = h;
|
||||
s->own_handle = 1;
|
||||
s->object_id = 0;
|
||||
s->pointer_buffer_size = parent->pointer_buffer_size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Creates a domain subservice object from a parent service.
|
||||
* @param[out] s Service object.
|
||||
@ -397,7 +411,7 @@ NX_INLINE Result serviceParseResponse(
|
||||
if (is_domain)
|
||||
serviceCreateDomainSubservice(&out_objects[i], s, cmifResponseGetObject(&res));
|
||||
else // Output objects are marshalled as move handles at the beginning of the list.
|
||||
serviceCreate(&out_objects[i], cmifResponseGetMoveHandle(&res));
|
||||
serviceCreateNonDomainSubservice(&out_objects[i], s, cmifResponseGetMoveHandle(&res));
|
||||
}
|
||||
|
||||
_serviceResponseGetHandle(&res, out_handle_attrs.attr0, &out_handles[0]);
|
||||
|
Loading…
Reference in New Issue
Block a user