summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorChristian Muck <christian.muck@bmw.de>2012-03-21 09:49:13 +0100
committerChristian Muck <christian.muck@bmw.de>2012-03-21 15:37:22 +0100
commit24e50ebc858c296464c63ff7d322197291ecb020 (patch)
treec2589420792020cdf55f676cf011f5ab674446ad /src/shared
parent1e40f5848d5776d7cac298b3fec25206d713ad72 (diff)
downloadDLT-daemon-24e50ebc858c296464c63ff7d322197291ecb020.tar.gz
Fixed bug with comparinson between signed and unsigned integer and protection for a buffer overflow.
Signed-off-by: Christian Muck <christian.muck@bmw.de>
Diffstat (limited to 'src/shared')
-rwxr-xr-xsrc/shared/dlt_common.c17
-rw-r--r--src/shared/dlt_offline_trace.c2
-rwxr-xr-xsrc/shared/dlt_user_shared.c4
3 files changed, 15 insertions, 8 deletions
diff --git a/src/shared/dlt_common.c b/src/shared/dlt_common.c
index 033ea1f..2f517bc 100755
--- a/src/shared/dlt_common.c
+++ b/src/shared/dlt_common.c
@@ -2203,6 +2203,13 @@ int dlt_receiver_remove(DltReceiver *receiver,int size)
return -1;
}
+ if (size>receiver->bytesRcvd)
+ {
+ receiver->buf = receiver->buf + receiver->bytesRcvd;
+ receiver->bytesRcvd=0;
+ return -1;
+ }
+
receiver->bytesRcvd = receiver->bytesRcvd - size;
receiver->buf = receiver->buf + size;
@@ -2400,7 +2407,7 @@ int dlt_buffer_free_dynamic(DltBuffer *buf)
void dlt_buffer_write_block(DltBuffer *buf,int *write, const unsigned char *data,unsigned int size)
{
- if((*write+size) <= buf->size) {
+ if((int)(*write+size) <= buf->size) {
// write one block
memcpy(buf->mem+*write,data,size);
*write += size;
@@ -2415,7 +2422,7 @@ void dlt_buffer_write_block(DltBuffer *buf,int *write, const unsigned char *data
void dlt_buffer_read_block(DltBuffer *buf,int *read,unsigned char *data,unsigned int size)
{
- if((*read+size) <= buf->size) {
+ if((int)(*read+size) <= buf->size) {
// read one block
memcpy(data,buf->mem+*read,size);
*read += size;
@@ -2577,7 +2584,7 @@ int dlt_buffer_push3(DltBuffer *buf,const unsigned char *data1,unsigned int size
free_size = buf->size - write + read;
// check size
- if(free_size < (sizeof(DltBufferBlockHead)+size1+size2+size3)) {
+ if(free_size < (int)(sizeof(DltBufferBlockHead)+size1+size2+size3)) {
// try to increase size if possible
if(dlt_buffer_increase_size(buf)) {
/* increase size is not possible */
@@ -2651,7 +2658,7 @@ int dlt_buffer_get(DltBuffer *buf,unsigned char *data, int max_size,int delete)
used_size = buf->size - read + write;
// first check size
- if(used_size < (sizeof(DltBufferBlockHead))) {
+ if(used_size < (int)(sizeof(DltBufferBlockHead))) {
dlt_log(LOG_ERR,"Buffer: Size check 1 failed\n");
dlt_buffer_reset(buf);
return -1; // ERROR
@@ -2675,7 +2682,7 @@ int dlt_buffer_get(DltBuffer *buf,unsigned char *data, int max_size,int delete)
}
// second check size
- if(used_size < (sizeof(DltBufferBlockHead)+head.size)) {
+ if(used_size < (int)(sizeof(DltBufferBlockHead)+head.size)) {
dlt_log(LOG_ERR,"Buffer: Size check 2 failed\n");
dlt_buffer_reset(buf);
return -1; // ERROR
diff --git a/src/shared/dlt_offline_trace.c b/src/shared/dlt_offline_trace.c
index 5f7f5b5..5d4c76a 100644
--- a/src/shared/dlt_offline_trace.c
+++ b/src/shared/dlt_offline_trace.c
@@ -169,7 +169,7 @@ int dlt_offline_trace_delete_oldest_file(DltOfflineTrace *trace) {
int dlt_offline_trace_check_size(DltOfflineTrace *trace) {
/* check size of complete offline trace */
- while(dlt_offline_trace_get_total_size(trace) > (trace->maxSize-trace->fileSize))
+ while((int)dlt_offline_trace_get_total_size(trace) > (trace->maxSize-trace->fileSize))
{
/* remove oldest files as long as new file will not fit in completely into complete offline trace */
if(dlt_offline_trace_delete_oldest_file(trace)<0) {
diff --git a/src/shared/dlt_user_shared.c b/src/shared/dlt_user_shared.c
index 5afc828..e743dfc 100755
--- a/src/shared/dlt_user_shared.c
+++ b/src/shared/dlt_user_shared.c
@@ -125,7 +125,7 @@ int dlt_user_check_userheader(DltUserHeader *userheader)
DltReturnValue dlt_user_log_out2(int handle, void *ptr1, size_t len1, void* ptr2, size_t len2)
{
struct iovec iov[2];
- int bytes_written;
+ uint32_t bytes_written;
if (handle<=0)
{
@@ -151,7 +151,7 @@ DltReturnValue dlt_user_log_out2(int handle, void *ptr1, size_t len1, void* ptr2
DltReturnValue dlt_user_log_out3(int handle, void *ptr1, size_t len1, void* ptr2, size_t len2, void *ptr3, size_t len3)
{
struct iovec iov[3];
- int bytes_written;
+ uint32_t bytes_written;
if (handle<=0)
{