summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2011-11-23 08:21:51 +0100
committerAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2011-11-23 08:21:51 +0100
commitc35685d34d5c87c03d2be100989a829268d6d946 (patch)
treedad84fe3e653b5d94b497359cedd72921eb8ae67 /src
parentacb5ebc5a8a9cdf6ee0bdd47d544be7238a3e0f6 (diff)
downloadDLT-daemon-c35685d34d5c87c03d2be100989a829268d6d946.tar.gz
Fixed buffer overflow problem in buffer library.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/shared/dlt_common.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/shared/dlt_common.c b/src/shared/dlt_common.c
index 8e2b6d4..1ebc696 100755
--- a/src/shared/dlt_common.c
+++ b/src/shared/dlt_common.c
@@ -2547,7 +2547,7 @@ int dlt_buffer_push(DltBuffer *buf,const unsigned char *data,unsigned int size)
int dlt_buffer_push3(DltBuffer *buf,const unsigned char *data1,unsigned int size1,const unsigned char *data2,unsigned int size2,const unsigned char *data3,unsigned int size3)
{
int free_size;
- int write, read;
+ int write, read, count;
DltBufferBlockHead head;
if(!buf->mem) {
@@ -2559,6 +2559,7 @@ int dlt_buffer_push3(DltBuffer *buf,const unsigned char *data1,unsigned int size
// get current write pointer
write = ((int*)(buf->shm))[0];
read = ((int*)(buf->shm))[1];
+ count = ((int*)(buf->shm))[2];
// check pointers
if((read>buf->size) || (write>buf->size))
@@ -2571,6 +2572,8 @@ int dlt_buffer_push3(DltBuffer *buf,const unsigned char *data1,unsigned int size
// calculate free size
if(read>write)
free_size = read - write;
+ else if(count && (write == read))
+ free_size = 0;
else
free_size = buf->size - write + read;