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-next>] [day] [month] [year] [list]
Message-ID: <Y5H9k52WWXBmWuwZ@alley>
Date:   Thu, 8 Dec 2022 16:06:59 +0100
From:   Petr Mladek <pmladek@...e.com>
To:     Linus Torvalds <torvalds@...ux-foundation.org>
Cc:     Sergey Senozhatsky <senozhatsky@...omium.org>,
        Steven Rostedt <rostedt@...dmis.org>,
        John Ogness <john.ogness@...utronix.de>,
        Andy Shevchenko <andriy.shevchenko@...ux.intel.com>,
        Rasmus Villemoes <linux@...musvillemoes.dk>,
        Sebastian Andrzej Siewior <bigeasy@...utronix.de>,
        Thomas Gleixner <tglx@...utronix.de>, Jan Kara <jack@...e.cz>,
        "Paul E. McKenney" <paulmck@...nel.org>, rcu@...r.kernel.org,
        Peter Zijlstra <peterz@...radead.org>,
        linux-kernel@...r.kernel.org
Subject: [GIT PULL] printk for 6.2

Hi Linus,

  git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git tags/printk-for-6.2

========================================

- Add NMI-safe SRCU reader API. It uses atomic_inc() instead of
  this_cpu_inc() on strong load-store architectures.

- Introduce new console_list_lock to synchronize a manipulation of the list
  of registered consoles and their flags.

  It is a first step in removing the big-kernel-lock-like behavior of
  console_lock(). This semaphore still serializes console->write()
  calbacks against:

    - each other. It primary prevents potential races between early and
      proper console drivers using the same device.

   - suspend()/resume() callbacks and init() operations in some drivers.

   - various other operations in the tty/vt and framebufer susbsystems.
     It is likely that console_lock() serializes even operations that are
     not directly conflicting with the console->write() callbacks here.
     This is the most complicated big-kernel-lock aspect of
     the console_lock() that will be hard to untangle.

- Introduce new console_srcu lock that is used to safely iterate and
  access the registered console drivers under SRCU read lock.

  It is a prerequisite for introducing atomic console drivers and console
  kthreads. It will reduce the complexity of serialization against normal
  consoles and console_lock(). Also it should remove the risk of deadlock
  during critical situations, like Oops or panic, when only atomic consoles
  are registered.

- Check whether the console is registered instead of enabled on many
  locations. It was a historical leftover.

- Cleanly force a preferred console in xenfb code instead of a dirty hack.

- A lot of code and comment clean ups and improvements.

=========================================

Notes:

1. The NMI-safe SRCU read API code is merged from Paul's RCU tree.
   It is going to be part of Paul's pull request as well.

2. The major changes reached linux-next at Oct 22. The branch
   rework/console-list-lock has been rebased two times last
   week to get follow up fixes from RCU tree. They fixed issues
   with non-standard configurations.


IMHO, the biggest risk of these changes would be in introducing new
races or deadlocks because of the new locks.

Anyway, it should be step in the right direction. The big-kernel-lock
behavior of console_lock() is a constant source of problems. The SRCU
lock allows to iterate the list of consoles safely anytime. Also there
are many new lockdep asserts that would allow to catch and nail down
potential problems.

----------------------------------------------------------------
Andy Shevchenko (1):
      test_printf: Refactor fwnode_pointer() to make it more readable

Frederic Weisbecker (3):
      srcu: Warn when NMI-unsafe API is used in NMI
      srcu: Explain the reason behind the read side critical section on GP start
      srcu: Debug NMI safety even on archs that don't require it

John Ogness (40):
      rcu: Implement lockdep_rcu_enabled for !CONFIG_DEBUG_LOCK_ALLOC
      printk: Prepare for SRCU console list protection
      printk: register_console: use "registered" for variable names
      printk: move @seq initialization to helper
      printk: fix setting first seq for consoles
      um: kmsg_dump: only dump when no output console available
      tty: serial: kgdboc: document console_lock usage
      tty: tty_io: document console_lock usage
      proc: consoles: document console_lock usage
      printk: introduce console_list_lock
      console: introduce wrappers to read/write console flags
      um: kmsg_dumper: use srcu console list iterator
      kdb: use srcu console list iterator
      printk: console_flush_all: use srcu console list iterator
      printk: __pr_flush: use srcu console list iterator
      printk: console_is_usable: use console_srcu_read_flags
      printk: console_unblank: use srcu console list iterator
      printk: console_flush_on_panic: use srcu console list iterator
      printk: console_device: use srcu console list iterator
      console: introduce console_is_registered()
      serial_core: replace uart_console_enabled() with uart_console_registered()
      tty: nfcon: use console_is_registered()
      efi: earlycon: use console_is_registered()
      tty: hvc: use console_is_registered()
      tty: serial: earlycon: use console_is_registered()
      tty: serial: pic32_uart: use console_is_registered()
      tty: serial: samsung_tty: use console_is_registered()
      tty: serial: xilinx_uartps: use console_is_registered()
      usb: early: xhci-dbc: use console_is_registered()
      netconsole: avoid CON_ENABLED misuse to track registration
      printk, xen: fbfront: create/use safe function for forcing preferred
      tty: tty_io: use console_list_lock for list synchronization
      proc: consoles: use console_list_lock for list iteration
      tty: serial: kgdboc: use srcu console list iterator
      tty: serial: kgdboc: use console_list_lock for list traversal
      tty: serial: kgdboc: synchronize tty_find_polling_driver() and register_console()
      tty: serial: kgdboc: use console_list_lock to trap exit
      printk: relieve console_lock of list synchronization duties
      tty: serial: sh-sci: use setup() callback for early console
      printk: htmldocs: add missing description

Paul E. McKenney (9):
      srcu: Convert ->srcu_lock_count and ->srcu_unlock_count to atomic
      srcu: Create an srcu_read_lock_nmisafe() and srcu_read_unlock_nmisafe()
      srcu: Check for consistent per-CPU per-srcu_struct NMI safety
      srcu: Check for consistent global per-srcu_struct NMI safety
      arch/x86: Add ARCH_HAS_NMI_SAFE_THIS_CPU_OPS Kconfig option
      arch/arm64: Add ARCH_HAS_NMI_SAFE_THIS_CPU_OPS Kconfig option
      arch/loongarch: Add ARCH_HAS_NMI_SAFE_THIS_CPU_OPS Kconfig option
      arch/s390: Add ARCH_HAS_NMI_SAFE_THIS_CPU_OPS Kconfig option
      rcu: Make SRCU mandatory

Petr Mladek (1):
      Merge branch 'rework/console-list-lock' into for-linus

Thomas Gleixner (2):
      serial: kgdboc: Lock console list in probe function
      printk: Convert console_drivers list to hlist

Wang Honghui (1):
      printk: fix a typo of comment

Xu Panda (1):
      printk: use strscpy() to instead of strlcpy()

Zqiang (1):
      srcu: Make Tiny synchronize_srcu() check for readers

ye xingchen (1):
      vsprintf: replace in_irq() with in_hardirq()

 .clang-format                       |   1 +
 arch/Kconfig                        |   3 +
 arch/arm64/Kconfig                  |   1 +
 arch/loongarch/Kconfig              |   1 +
 arch/m68k/emu/nfcon.c               |   9 +-
 arch/s390/Kconfig                   |   1 +
 arch/um/kernel/kmsg_dump.c          |  24 +-
 arch/x86/Kconfig                    |   1 +
 drivers/firmware/efi/earlycon.c     |   8 +-
 drivers/net/netconsole.c            |  21 +-
 drivers/tty/hvc/hvc_console.c       |   4 +-
 drivers/tty/serial/8250/8250_core.c |   2 +-
 drivers/tty/serial/earlycon.c       |   4 +-
 drivers/tty/serial/kgdboc.c         |  46 +++-
 drivers/tty/serial/pic32_uart.c     |   4 +-
 drivers/tty/serial/samsung_tty.c    |   2 +-
 drivers/tty/serial/serial_core.c    |  14 +-
 drivers/tty/serial/sh-sci.c         |  20 +-
 drivers/tty/serial/xilinx_uartps.c  |   2 +-
 drivers/tty/tty_io.c                |  18 +-
 drivers/usb/early/xhci-dbc.c        |   2 +-
 drivers/video/fbdev/xen-fbfront.c   |  12 +-
 fs/proc/consoles.c                  |  21 +-
 include/linux/console.h             | 129 +++++++++-
 include/linux/rcupdate.h            |   5 +
 include/linux/rcutiny.h             |   4 -
 include/linux/serial_core.h         |  10 +-
 include/linux/srcu.h                |  72 +++++-
 include/linux/srcutree.h            |   5 +-
 kernel/debug/kdb/kdb_io.c           |  18 +-
 kernel/printk/printk.c              | 498 ++++++++++++++++++++++++++++--------
 kernel/printk/printk_ringbuffer.c   |   2 +-
 kernel/rcu/Kconfig                  |  14 +-
 kernel/rcu/Kconfig.debug            |   3 -
 kernel/rcu/rcu.h                    |   8 +-
 kernel/rcu/rcutorture.c             |  11 +-
 kernel/rcu/srcutiny.c               |  10 +
 kernel/rcu/srcutree.c               | 100 ++++++--
 kernel/rcu/update.c                 |  18 +-
 lib/test_printf.c                   |  26 +-
 lib/vsprintf.c                      |   2 +-
 41 files changed, 899 insertions(+), 257 deletions(-)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ