logger: fix for use-after-free in log storage 23/175223/1 accepted/tizen/unified/20180410.063705 submit/tizen/20180409.103811
authorAdrian Szyndela <adrian.s@samsung.com>
Mon, 9 Apr 2018 09:55:14 +0000 (11:55 +0200)
committerAdrian Szyndela <adrian.s@samsung.com>
Mon, 9 Apr 2018 10:00:33 +0000 (12:00 +0200)
A report from ASAN build has shown a bug while freeing a storage.

When a dumping reader was created with no available logs it
was disconnected from storage, but put into waiting_readers.

This commit changes log_storage_new_reader() in a way that
a reader is added to waiting_readers only if it is connected
to the storage.

Change-Id: Id6033fe73e86674384feb2fafb9b3814f0f0b73e

src/logger/log_storage.c

index 44aab07..a59880d 100644 (file)
@@ -189,7 +189,6 @@ log_storage_reader *log_storage_new_reader(log_storage *storage,
                reader->user_data = user_data;
                reader->current = NULL;
                reader->counter = storage->counter_begin;
-               list_add(&storage->waiting_readers, reader);
                reader->final = NULL;
 
                if (dumping) {
@@ -200,6 +199,9 @@ log_storage_reader *log_storage_new_reader(log_storage *storage,
                        // but in case there are no logs - we have nothing to do
                                reader->storage = NULL;
                }
+
+               if (NULL != reader->storage)
+                       list_add(&storage->waiting_readers, reader);
        }
        return reader;
 }