Remove a TOCTTOU issue 12/299612/2
authorMichal Bloch <m.bloch@samsung.com>
Thu, 5 Oct 2023 07:21:48 +0000 (09:21 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Thu, 5 Oct 2023 09:15:23 +0000 (11:15 +0200)
Change-Id: I4c546d8e3479b7498c9ed2def85b7f710672b078

src/logger/reader_pipe.c

index f20066c..c724132 100644 (file)
@@ -120,12 +120,13 @@ static int print_out_logs(struct reader_common *_reader, struct now_t _time)
                                continue;
 
                        any_reader_exists = true;
-                       if (!log_storage_reader_is_new_entry_available(lsr))
-                               continue;
 
-                       const bool extraction_ok = log_storage_reader_get_new_entry(lsr, &reader->peek_cache[i].header);
-                       assert(extraction_ok);
+                       log_storage_reader_get_new_entry(lsr, &reader->peek_cache[i].header);
 
+                       /* Note, the reader can become finished even if we didn't extract an entry,
+                        * due to actions of other threads (our last logs got overwritten by new
+                        * logs, since the buffer is cyclic). So we need to check regardless of the
+                        * success of the above call. */
                        if (log_storage_reader_is_finished(lsr)) {
                                log_storage_release_reader(lsr);
                                reader->log_storage_reader_ptrs[i] = NULL;