]> www.infradead.org Git - users/mchehab/rasdaemon.git/commitdiff
ras-events: quit loop in read_ras_event when kbuf data is broken
authorhubin <hubin73@huawei.com>
Thu, 18 May 2023 08:14:41 +0000 (16:14 +0800)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Mon, 23 Oct 2023 08:43:26 +0000 (10:43 +0200)
when kbuf data is broken, kbuffer_next_event() may move kbuf->index back to
the current kbuf->index position, causing dead loop.

In this situation, rasdaemon will repeatedly parse an invalid event, and
print warning like "ug! negative record size -8!", pushing cpu utilization
rate to 100%.

when kbuf data is broken, discard current page and continue reading next page
kbuf.

Signed-off-by: hubin <hubin73@huawei.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
ras-events.c

index 2662467d76ba108f73c1014487df993427202ea8..fced7aba289a78ef39af50055168e24908bed301 100644 (file)
@@ -512,6 +512,11 @@ static int read_ras_event_all_cpus(struct pthread_data *pdata,
                                kbuffer_load_subbuffer(kbuf, page);
 
                                while ((data = kbuffer_read_event(kbuf, &time_stamp))) {
+                                       if (kbuffer_curr_size(kbuf) < 0) {
+                                               log(TERM, LOG_ERR, "invalid kbuf data, discard\n");
+                                               break;
+                                       }
+
                                        parse_ras_data(&pdata[i],
                                                       kbuf, data, time_stamp);