X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FIPStack%2Fbuffer.c;h=3fe8b895c072bbe591574ed69c26e4cc3b6c8312;hb=8a3c7218fb65c46c0876b7033b732188be91ae03;hp=b3c8093ee24f9de51dc8df28f2021bf134d6513a;hpb=326d03e0dc49158f24ab14c92b7245d860ecf7ed;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/IPStack/buffer.c b/KernelLand/Modules/IPStack/buffer.c index b3c8093e..3fe8b895 100644 --- a/KernelLand/Modules/IPStack/buffer.c +++ b/KernelLand/Modules/IPStack/buffer.c @@ -5,6 +5,7 @@ * buffer.c * - Scatter-gather handling */ +#define DEBUG 0 #include "ipstack.h" #include "include/buffer.h" @@ -23,7 +24,6 @@ struct sIPStackBuffer size_t PostLength; tIPStackBufferCb Cb; void *CbArg; - // TODO: Callbacks? } SubBuffers[]; }; @@ -63,6 +63,7 @@ void IPStack_Buffer_ClearBuffer(tIPStackBuffer *Buffer) void IPStack_Buffer_DestroyBuffer(tIPStackBuffer *Buffer) { + LOG("Called with %p by %p", Buffer, __builtin_return_address(0)); ASSERT(Buffer); IPStack_Buffer_ClearBuffer(Buffer); Buffer->MaxSubBufffers = 0; @@ -119,6 +120,13 @@ size_t IPStack_Buffer_GetData(tIPStackBuffer *Buffer, void *Dest, size_t MaxByte for( int i = Buffer->nSubBuffers; i -- && rem_space != 0; ) { len = MIN(Buffer->SubBuffers[i].PreLength, rem_space); + #if !DISABLE_ASSERTS + if( !CheckMem(Buffer->SubBuffers[i].Data, len) ) { + Log_Error("IPStack", "Buffer pre %i invalid (%p+0x%x)", + i, Buffer->SubBuffers[i].Data, len); + return 0; + } + #endif memcpy(dest, Buffer->SubBuffers[i].Data, len @@ -132,10 +140,9 @@ size_t IPStack_Buffer_GetData(tIPStackBuffer *Buffer, void *Dest, size_t MaxByte continue ; len = MIN(Buffer->SubBuffers[i].PostLength, rem_space); - memcpy(dest, - (Uint8*)Buffer->SubBuffers[i].Data + Buffer->SubBuffers[i].PreLength, - len - ); + void *ptr = (Uint8*)Buffer->SubBuffers[i].Data + Buffer->SubBuffers[i].PreLength; + ASSERT( CheckMem(ptr, len) ); + memcpy(dest, ptr, len); dest += len; rem_space -= len; }