lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87v8nfjn0d.fsf@jogness.linutronix.de>
Date:   Wed, 16 Nov 2022 10:02:34 +0106
From:   John Ogness <john.ogness@...utronix.de>
To:     Petr Mladek <pmladek@...e.com>
Cc:     Sergey Senozhatsky <senozhatsky@...omium.org>,
        Steven Rostedt <rostedt@...dmis.org>,
        Thomas Gleixner <tglx@...utronix.de>,
        linux-kernel@...r.kernel.org
Subject: Re: replay log: Re: [PATCH printk v4 38/39] printk: relieve
 console_lock of list synchronization duties

Hi,

I forgot to re-lock the console... See below.

On 2022-11-16, John Ogness <john.ogness@...utronix.de> wrote:
> 	if (newcon->flags & (CON_PRINTBUFFER | CON_BOOT)) {
> 		/* Get a consistent copy of @syslog_seq. */
> 		mutex_lock(&syslog_lock);
> 		newcon->seq = syslog_seq;
> 		mutex_unlock(&syslog_lock);
> 	} else {
> 		/* Begin with next message added to ringbuffer. */
> 		newcon->seq = prb_next_seq(prb);
>
> 		/*
> 		 * If any enabled boot consoles are due to be unregistered
> 		 * shortly, some may not be caught up and may be the same
> 		 * device as @newcon. Since it is not known which boot console
> 		 * is the same device, flush all consoles and, if necessary,
> 		 * start with the message of the enabled boot console that is
> 		 * the furthest behind.
> 		 */
> 		if (bootcon_registered && !keep_bootcon) {
> 			bool handover;
>
> 			/*
> 			 * Hold the console_lock to guarantee safe access to
> 			 * console->seq.
> 			 */
> 			console_lock();
>
> 			/*
> 			 * Flush all consoles and set the console to start at
> 			 * the next unprinted sequence number.
> 			 */
> 			if (!console_flush_all(true, &newcon->seq, &handover)) {
> 				/*
> 				 * Flushing failed. Just choose the lowest
> 				 * sequence of the enabled boot consoles.
> 				 */

Sorry. Here we lost the console_lock. Another acquire is needed here.

				console_lock();

> 				newcon->seq = prb_next_seq(prb);
> 				for_each_console(con) {
> 					if ((con->flags & CON_BOOT) &&
> 					    (con->flags & CON_ENABLED) &&
> 					    con->seq < newcon->seq) {
> 						newcon->seq = con->seq;
> 					}
> 				}
> 			}
>
> 			console_unlock();
> 		}
> 	}

John Ogness

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ