X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fmessages.c;h=32e579b3a9d50704edd60cd35e08eb46a146b8db;hb=2d83a99f3202f0e4688b58405f67604a24420861;hp=93cf6ca4065560f7316decd5f0fa9165e0a605dc;hpb=f119d0e5b18b7286d04fc536a94e0f96e3c51714;p=tpg%2Facess2.git diff --git a/Kernel/messages.c b/Kernel/messages.c index 93cf6ca4..32e579b3 100644 --- a/Kernel/messages.c +++ b/Kernel/messages.c @@ -2,8 +2,8 @@ * AcessOS Microkernel Version * messages.c */ -#include -#include +#include +#include #include // === CODE === @@ -12,6 +12,8 @@ * \brief Send an IPC message * \param Err Pointer to the errno variable * \param Dest Destination Thread + * \param Length Length of the message + * \param Data Message data */ int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) { @@ -63,6 +65,9 @@ int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) /** * \fn int Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer) * \brief Gets a message + * \param Err Pointer to \a errno + * \param Source Where to put the source TID + * \param Buffer Buffer to place the message data (set to NULL to just get message length) */ int Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer) { @@ -89,12 +94,20 @@ int Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer) // Get message if(Buffer != GETMSG_IGNORE) + { + if( !CheckMem( Buffer, cur->Messages->Length ) ) + { + *Err = -EINVAL; + RELEASE( &cur->IsLocked ); + return -1; + } memcpy(Buffer, cur->Messages->Data, cur->Messages->Length); + } ret = cur->Messages->Length; // Remove from list tmp = cur->Messages->Next; - free(cur->Messages); + free( (void*)cur->Messages ); cur->Messages = tmp; RELEASE( &cur->IsLocked );