`kdb_msg_write` operates on a global `struct kgdb_io *` called `dbg_io_ops`. It's initialized in `debug_core.c` and checked throughout the debug flow. There's a null check in `kdb_msg_write` which triggers static analyzers and gives the (almost entirely wrong) impression that it can be null. Coverity scanner caught this as CID 1465042. I have removed the unnecessary null check and eliminated false-positive forward null dereference warning.
Showing the changes to kernel/debug (1 of 1 file). Show all
Unified · Split
| @@ -545,18 +545,18 @@ static int kdb_search_string(char *searched, char *searchfor) · 544 unmodified lines | |||
| 545 | static void kdb_msg_write(const char *msg, int msg_len) | 545 | static void kdb_msg_write(const char *msg, int msg_len) |
| 546 | { | 546 | { |
| 547 | struct console *c; | 547 | struct console *c; |
| 548 | const char *cp; | ||
| 549 | int len; | ||
| 548 | 550 | ||
| 549 | if (msg_len == 0) | 551 | if (msg_len == 0) |
| 550 | return; | 552 | return; |
| 551 | 553 | ||
| 552 | if (dbg_io_ops) { | 554 | cp = msg; |
| 553 | const char *cp = msg; | 555 | len = msg_len; |
| 554 | int len = msg_len; | ||
| 555 | 556 | ||
| 556 | while (len--) { | 557 | while (len--) { |
| 557 | dbg_io_ops->write_char(*cp); | 558 | dbg_io_ops->write_char(*cp); |
| 558 | cp++; | 559 | cp++; |
| 559 | } | ||
| 560 | } | 560 | } |
| 561 | 561 | ||
| 562 | for_each_console(c) { | 562 | for_each_console(c) { |