linux-rt-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 5.15-rt] printk: ignore consoles without write() callback
@ 2023-02-16 10:39 John Ogness
  2023-02-16 16:54 ` Sebastian Siewior
  2025-04-23 10:10 ` [PATCH 5.15-rt] " Krishanth Jagaduri
  0 siblings, 2 replies; 10+ messages in thread
From: John Ogness @ 2023-02-16 10:39 UTC (permalink / raw)
  To: Clark Williams
  Cc: Petr Mladek, Sergey Senozhatsky, Steven Rostedt,
	Michael Thalmeier, Vincent Whitchurch, Sebastian Siewior,
	linux-kernel, linux-rt-users

The ttynull driver does not provide an implementation for the write()
callback. This leads to a NULL pointer dereference in the related
printing kthread, which assumes it can call that callback.

Do not create kthreads for consoles that do not implement the write()
callback. Also, for pr_flush(), ignore consoles that do not implement
write() or write_atomic() since there is no way those consoles can
flush their output.

Link: https://lore.kernel.org/lkml/878rgy37f5.fsf@jogness.linutronix.de
Fixes: 8782b1ef4125 ("printk: move console printing to kthreads")
Reported-by: Michael Thalmeier <michael.thalmeier@hale.at>
Signed-off-by: John Ogness <john.ogness@linutronix.de>
---
 This is only a problem for the PREEMPT_RT tree. Mainline does not have
 this problem.

 kernel/printk/printk.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 7f27cfee283e..752afe88b5b4 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -2343,6 +2343,10 @@ static int printk_kthread_func(void *data)
 /* Must be called within console_lock(). */
 static void start_printk_kthread(struct console *con)
 {
+	/* No need to start a printing thread if the console cannot print. */
+	if (!con->write)
+		return;
+
 	con->thread = kthread_run(printk_kthread_func, con,
 				  "pr/%s%d", con->name, con->index);
 	if (IS_ERR(con->thread)) {
@@ -3737,6 +3741,8 @@ bool pr_flush(int timeout_ms, bool reset_on_progress)
 		for_each_console(con) {
 			if (!(con->flags & CON_ENABLED))
 				continue;
+			if (!con->write && !con->write_atomic)
+				continue;
 			printk_seq = read_console_seq(con);
 			if (printk_seq < seq)
 				diff += seq - printk_seq;
-- 
2.30.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2025-05-23  5:07 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-16 10:39 [PATCH 5.15-rt] printk: ignore consoles without write() callback John Ogness
2023-02-16 16:54 ` Sebastian Siewior
2023-02-17  8:45   ` John Ogness
2023-02-17  8:47     ` [PATCH 5.10-rt] " John Ogness
2023-02-17 11:55       ` Luis Claudio R. Goncalves
2025-04-23 10:10 ` [PATCH 5.15-rt] " Krishanth Jagaduri
2025-04-28 14:45   ` [External] : " Joseph Salisbury
2025-05-21 12:30     ` Krishanth Jagaduri
2025-05-21 15:32       ` Joseph Salisbury
2025-05-23  5:05         ` Krishanth Jagaduri

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).