Merge tag 'landlock_v34' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 2 May 2021 01:50:44 +0000 (18:50 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 2 May 2021 01:50:44 +0000 (18:50 -0700)
Pull Landlock LSM from James Morris:
 "Add Landlock, a new LSM from Mickaël Salaün.

  Briefly, Landlock provides for unprivileged application sandboxing.

  From Mickaël's cover letter:
    "The goal of Landlock is to enable to restrict ambient rights (e.g.
     global filesystem access) for a set of processes. Because Landlock
     is a stackable LSM [1], it makes possible to create safe security
     sandboxes as new security layers in addition to the existing
     system-wide access-controls. This kind of sandbox is expected to
     help mitigate the security impact of bugs or unexpected/malicious
     behaviors in user-space applications. Landlock empowers any
     process, including unprivileged ones, to securely restrict
     themselves.

     Landlock is inspired by seccomp-bpf but instead of filtering
     syscalls and their raw arguments, a Landlock rule can restrict the
     use of kernel objects like file hierarchies, according to the
     kernel semantic. Landlock also takes inspiration from other OS
     sandbox mechanisms: XNU Sandbox, FreeBSD Capsicum or OpenBSD
     Pledge/Unveil.

     In this current form, Landlock misses some access-control features.
     This enables to minimize this patch series and ease review. This
     series still addresses multiple use cases, especially with the
     combined use of seccomp-bpf: applications with built-in sandboxing,
     init systems, security sandbox tools and security-oriented APIs [2]"

  The cover letter and v34 posting is here:

      https://lore.kernel.org/linux-security-module/20210422154123.13086-1-mic@digikod.net/

  See also:

      https://landlock.io/

  This code has had extensive design discussion and review over several
  years"

Link: https://lore.kernel.org/lkml/50db058a-7dde-441b-a7f9-f6837fe8b69f@schaufler-ca.com/
Link: https://lore.kernel.org/lkml/f646e1c7-33cf-333f-070c-0a40ad0468cd@digikod.net/
* tag 'landlock_v34' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security:
  landlock: Enable user space to infer supported features
  landlock: Add user and kernel documentation
  samples/landlock: Add a sandbox manager example
  selftests/landlock: Add user space tests
  landlock: Add syscall implementations
  arch: Wire up Landlock syscalls
  fs,security: Add sb_delete hook
  landlock: Support filesystem access-control
  LSM: Infrastructure management of the superblock
  landlock: Add ptrace restrictions
  landlock: Set up the security framework and manage credentials
  landlock: Add ruleset and domain management
  landlock: Add object management

31 files changed:
1  2 
Documentation/userspace-api/index.rst
MAINTAINERS
arch/Kconfig
arch/alpha/kernel/syscalls/syscall.tbl
arch/arm/tools/syscall.tbl
arch/arm64/include/asm/unistd32.h
arch/ia64/kernel/syscalls/syscall.tbl
arch/m68k/kernel/syscalls/syscall.tbl
arch/microblaze/kernel/syscalls/syscall.tbl
arch/mips/kernel/syscalls/syscall_n32.tbl
arch/mips/kernel/syscalls/syscall_n64.tbl
arch/mips/kernel/syscalls/syscall_o32.tbl
arch/parisc/kernel/syscalls/syscall.tbl
arch/powerpc/kernel/syscalls/syscall.tbl
arch/s390/kernel/syscalls/syscall.tbl
arch/sh/kernel/syscalls/syscall.tbl
arch/sparc/kernel/syscalls/syscall.tbl
arch/x86/entry/syscalls/syscall_32.tbl
arch/x86/entry/syscalls/syscall_64.tbl
arch/xtensa/kernel/syscalls/syscall.tbl
include/linux/lsm_hook_defs.h
include/linux/lsm_hooks.h
include/linux/security.h
include/linux/syscalls.h
include/uapi/asm-generic/unistd.h
kernel/sys_ni.c
security/security.c
security/selinux/hooks.c
security/selinux/ss/services.c
security/smack/smack.h
security/smack/smack_lsm.c

@@@ -18,10 -18,10 +18,11 @@@ place where this information is gathere
  
     no_new_privs
     seccomp_filter
+    landlock
     unshare
     spec_ctrl
     accelerators/ocxl
 +   ebpf/index
     ioctl/index
     iommu
     media/index
diff --combined MAINTAINERS
@@@ -300,6 -300,7 +300,6 @@@ M: Syed Nayyar Waris <syednwaris@gmail.
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-counter-104-quad-8
 -F:    Documentation/ABI/testing/sysfs-bus-iio-counter-104-quad-8
  F:    drivers/counter/104-quad-8.c
  
  ACCES PCI-IDIO-16 GPIO DRIVER
@@@ -572,12 -573,6 +572,12 @@@ S:       Maintaine
  F:    Documentation/scsi/advansys.rst
  F:    drivers/scsi/advansys.c
  
 +ADVANTECH SWBTN DRIVER
 +M:    Andrea Ho <Andrea.Ho@advantech.com.tw>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/adv_swbutton.c
 +
  ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346)
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
@@@ -702,11 -697,6 +702,11 @@@ S:       Maintaine
  F:    Documentation/i2c/busses/i2c-ali1563.rst
  F:    drivers/i2c/busses/i2c-ali1563.c
  
 +ALIENWARE WMI DRIVER
 +L:    Dell.Client.Kernel@dell.com
 +S:    Maintained
 +F:    drivers/platform/x86/dell/alienware-wmi.c
 +
  ALL SENSORS DLH SERIES PRESSURE SENSORS DRIVER
  M:    Tomislav Denis <tomislav.denis@avl.com>
  L:    linux-iio@vger.kernel.org
@@@ -880,6 -870,13 +880,6 @@@ S:        Supporte
  T:    git git://people.freedesktop.org/~agd5f/linux
  F:    drivers/gpu/drm/amd/display/
  
 -AMD ENERGY DRIVER
 -M:    Naveen Krishna Chatradhi <nchatrad@amd.com>
 -L:    linux-hwmon@vger.kernel.org
 -S:    Maintained
 -F:    Documentation/hwmon/amd_energy.rst
 -F:    drivers/hwmon/amd_energy.c
 -
  AMD FAM15H PROCESSOR POWER MONITORING DRIVER
  M:    Huang Rui <ray.huang@amd.com>
  L:    linux-hwmon@vger.kernel.org
@@@ -1145,7 -1142,7 +1145,7 @@@ W:      http://ez.analog.com/community/linux
  F:    Documentation/ABI/testing/sysfs-bus-iio-frequency-ad9523
  F:    Documentation/ABI/testing/sysfs-bus-iio-frequency-adf4350
  F:    Documentation/devicetree/bindings/iio/*/adi,*
 -F:    Documentation/devicetree/bindings/iio/dac/ad5758.txt
 +F:    Documentation/devicetree/bindings/iio/dac/adi,ad5758.yaml
  F:    drivers/iio/*/ad*
  F:    drivers/iio/adc/ltc249*
  F:    drivers/iio/amplifiers/hmc425a.c
@@@ -1184,7 -1181,7 +1184,7 @@@ M:      Joel Fernandes <joel@joelfernandes.o
  M:    Christian Brauner <christian@brauner.io>
  M:    Hridya Valsaraju <hridya@google.com>
  M:    Suren Baghdasaryan <surenb@google.com>
 -L:    devel@driverdev.osuosl.org
 +L:    linux-kernel@vger.kernel.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
  F:    drivers/android/
@@@ -1326,7 -1323,7 +1326,7 @@@ ARC PGU DRM DRIVE
  M:    Alexey Brodkin <abrodkin@synopsys.com>
  S:    Supported
  F:    Documentation/devicetree/bindings/display/snps,arcpgu.txt
 -F:    drivers/gpu/drm/arc/
 +F:    drivers/gpu/drm/tiny/arcpgu.c
  
  ARCNET NETWORK LAYER
  M:    Michael Grzeschik <m.grzeschik@pengutronix.de>
@@@ -1533,7 -1530,6 +1533,7 @@@ F:      Documentation/devicetree/bindings/dm
  F:    Documentation/devicetree/bindings/i2c/i2c-owl.yaml
  F:    Documentation/devicetree/bindings/interrupt-controller/actions,owl-sirq.yaml
  F:    Documentation/devicetree/bindings/mmc/owl-mmc.yaml
 +F:    Documentation/devicetree/bindings/net/actions,owl-emac.yaml
  F:    Documentation/devicetree/bindings/pinctrl/actions,*
  F:    Documentation/devicetree/bindings/power/actions,owl-sps.txt
  F:    Documentation/devicetree/bindings/timer/actions,owl-timer.txt
@@@ -1546,7 -1542,6 +1546,7 @@@ F:      drivers/dma/owl-dma.
  F:    drivers/i2c/busses/i2c-owl.c
  F:    drivers/irqchip/irq-owl-sirq.c
  F:    drivers/mmc/host/owl-mmc.c
 +F:    drivers/net/ethernet/actions/
  F:    drivers/pinctrl/actions/*
  F:    drivers/soc/actions/
  F:    include/dt-bindings/power/owl-*
@@@ -1581,13 -1576,11 +1581,13 @@@ R:   Jernej Skrabec <jernej.skrabec@siol.
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git
 +L:    linux-sunxi@lists.linux.dev
  F:    arch/arm/mach-sunxi/
  F:    arch/arm64/boot/dts/allwinner/
  F:    drivers/clk/sunxi-ng/
  F:    drivers/pinctrl/sunxi/
  F:    drivers/soc/sunxi/
 +N:    allwinner
  N:    sun[x456789]i
  N:    sun50i
  
@@@ -1644,20 -1637,6 +1644,20 @@@ F:    arch/arm/mach-alpine
  F:    arch/arm64/boot/dts/amazon/
  F:    drivers/*/*alpine*
  
 +ARM/APPLE MACHINE SUPPORT
 +M:    Hector Martin <marcan@marcan.st>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +W:    https://asahilinux.org
 +B:    https://github.com/AsahiLinux/linux/issues
 +C:    irc://chat.freenode.net/asahi-dev
 +T:    git https://github.com/AsahiLinux/linux.git
 +F:    Documentation/devicetree/bindings/arm/apple.yaml
 +F:    Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
 +F:    arch/arm64/boot/dts/apple/
 +F:    drivers/irqchip/irq-apple-aic.c
 +F:    include/dt-bindings/interrupt-controller/apple-aic.h
 +
  ARM/ARTPEC MACHINE SUPPORT
  M:    Jesper Nilsson <jesper.nilsson@axis.com>
  M:    Lars Persson <lars.persson@axis.com>
@@@ -1782,12 -1761,9 +1782,12 @@@ F:    Documentation/ABI/testing/sysfs-bus-
  F:    Documentation/devicetree/bindings/arm/coresight-cpu-debug.txt
  F:    Documentation/devicetree/bindings/arm/coresight-cti.yaml
  F:    Documentation/devicetree/bindings/arm/coresight.txt
 +F:    Documentation/devicetree/bindings/arm/ete.yaml
 +F:    Documentation/devicetree/bindings/arm/trbe.yaml
  F:    Documentation/trace/coresight/*
  F:    drivers/hwtracing/coresight/*
  F:    include/dt-bindings/arm/coresight-cti-dt.h
 +F:    include/linux/coresight*
  F:    tools/perf/arch/arm/util/auxtrace.c
  F:    tools/perf/arch/arm/util/cs-etm.c
  F:    tools/perf/arch/arm/util/cs-etm.h
@@@ -1814,26 -1790,19 +1814,26 @@@ F:   drivers/net/ethernet/cortina
  F:    drivers/pinctrl/pinctrl-gemini.c
  F:    drivers/rtc/rtc-ftrtc010.c
  
 -ARM/CZ.NIC TURRIS MOX SUPPORT
 -M:    Marek Behun <marek.behun@nic.cz>
 +ARM/CZ.NIC TURRIS SUPPORT
 +M:    Marek Behun <kabel@kernel.org>
  S:    Maintained
 -W:    http://mox.turris.cz
 +W:    https://www.turris.cz/
  F:    Documentation/ABI/testing/debugfs-moxtet
  F:    Documentation/ABI/testing/sysfs-bus-moxtet-devices
  F:    Documentation/ABI/testing/sysfs-firmware-turris-mox-rwtm
  F:    Documentation/devicetree/bindings/bus/moxtet.txt
  F:    Documentation/devicetree/bindings/firmware/cznic,turris-mox-rwtm.txt
  F:    Documentation/devicetree/bindings/gpio/gpio-moxtet.txt
 +F:    Documentation/devicetree/bindings/leds/cznic,turris-omnia-leds.yaml
 +F:    Documentation/devicetree/bindings/watchdog/armada-37xx-wdt.txt
  F:    drivers/bus/moxtet.c
  F:    drivers/firmware/turris-mox-rwtm.c
 +F:    drivers/leds/leds-turris-omnia.c
 +F:    drivers/mailbox/armada-37xx-rwtm-mailbox.c
  F:    drivers/gpio/gpio-moxtet.c
 +F:    drivers/watchdog/armada_37xx_wdt.c
 +F:    include/dt-bindings/bus/moxtet.h
 +F:    include/linux/armada-37xx-rwtm-mailbox.h
  F:    include/linux/moxtet.h
  
  ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
@@@ -2225,15 -2194,6 +2225,15 @@@ F:    drivers/*/*npcm
  F:    drivers/*/*/*npcm*
  F:    include/dt-bindings/clock/nuvoton,npcm7xx-clock.h
  
 +ARM/NUVOTON WPCM450 ARCHITECTURE
 +M:    Jonathan Neuschäfer <j.neuschaefer@gmx.net>
 +L:    openbmc@lists.ozlabs.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/*/*wpcm*
 +F:    arch/arm/boot/dts/nuvoton-wpcm450*
 +F:    arch/arm/mach-npcm/wpcm450.c
 +F:    drivers/*/*wpcm*
 +
  ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
  L:    openmoko-kernel@lists.openmoko.org (subscribers-only)
  S:    Orphan
@@@ -2336,7 -2296,6 +2336,7 @@@ F:      drivers/tty/serial/msm_serial.
  F:    drivers/usb/dwc3/dwc3-qcom.c
  F:    include/dt-bindings/*/qcom*
  F:    include/linux/*/qcom*
 +F:    include/linux/soc/qcom/
  
  ARM/RADISYS ENP2611 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
@@@ -2416,7 -2375,7 +2416,7 @@@ F:      sound/soc/rockchip
  N:    rockchip
  
  ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
@@@ -2530,7 -2489,7 +2530,7 @@@ N:      sc27x
  N:    sc2731
  
  ARM/STI ARCHITECTURE
 -M:    Patrice Chotard <patrice.chotard@st.com>
 +M:    Patrice Chotard <patrice.chotard@foss.st.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  W:    http://www.stlinux.com
@@@ -2563,7 -2522,7 +2563,7 @@@ F:      include/linux/remoteproc/st_slim_rpr
  
  ARM/STM32 ARCHITECTURE
  M:    Maxime Coquelin <mcoquelin.stm32@gmail.com>
 -M:    Alexandre Torgue <alexandre.torgue@st.com>
 +M:    Alexandre Torgue <alexandre.torgue@foss.st.com>
  L:    linux-stm32@st-md-mailman.stormreply.com (moderated for non-subscribers)
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -2672,10 -2631,8 +2672,10 @@@ F:    drivers/watchdog/visconti_wdt.
  N:    visconti
  
  ARM/UNIPHIER ARCHITECTURE
 +M:    Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
 +M:    Masami Hiramatsu <mhiramat@kernel.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Orphan
 +S:    Maintained
  F:    Documentation/devicetree/bindings/arm/socionext/uniphier.yaml
  F:    Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml
  F:    Documentation/devicetree/bindings/pinctrl/socionext,uniphier-pinctrl.yaml
@@@ -2760,6 -2717,7 +2760,6 @@@ F:      Documentation/devicetree/bindings/i2
  F:    Documentation/devicetree/bindings/i2c/xlnx,xps-iic-2.00.a.yaml
  F:    Documentation/devicetree/bindings/spi/xlnx,zynq-qspi.yaml
  F:    arch/arm/mach-zynq/
 -F:    drivers/block/xsysace.c
  F:    drivers/clocksource/timer-cadence-ttc.c
  F:    drivers/cpuidle/cpuidle-zynq.c
  F:    drivers/edac/synopsys_edac.c
@@@ -2898,18 -2856,6 +2898,18 @@@ W:    http://www.openaoe.org
  F:    Documentation/admin-guide/aoe/
  F:    drivers/block/aoe/
  
 +ATC260X PMIC MFD DRIVER
 +M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
 +M:    Cristian Ciocaltea <cristian.ciocaltea@gmail.com>
 +L:    linux-actions@lists.infradead.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/mfd/actions,atc260x.yaml
 +F:    drivers/input/misc/atc260x-onkey.c
 +F:    drivers/mfd/atc260*
 +F:    drivers/power/reset/atc260x-poweroff.c
 +F:    drivers/regulator/atc260x-regulator.c
 +F:    include/linux/mfd/atc260x/*
 +
  ATHEROS 71XX/9XXX GPIO DRIVER
  M:    Alban Bedel <albeu@free.fr>
  S:    Maintained
@@@ -3033,11 -2979,9 +3033,11 @@@ L:    linux-audit@redhat.com (moderated fo
  S:    Supported
  W:    https://github.com/linux-audit
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git
 +F:    include/asm-generic/audit_*.h
  F:    include/linux/audit.h
  F:    include/uapi/linux/audit.h
  F:    kernel/audit*
 +F:    lib/*audit.c
  
  AUXILIARY DISPLAY DRIVERS
  M:    Miguel Ojeda <ojeda@kernel.org>
@@@ -3171,7 -3115,7 +3171,7 @@@ C:      irc://irc.oftc.net/bcach
  F:    drivers/md/bcache/
  
  BDISP ST MEDIA DRIVER
 -M:    Fabien Dessenne <fabien.dessenne@st.com>
 +M:    Fabien Dessenne <fabien.dessenne@foss.st.com>
  L:    linux-media@vger.kernel.org
  S:    Supported
  W:    https://linuxtv.org
@@@ -3289,7 -3233,6 +3289,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git
  F:    Documentation/bpf/
  F:    Documentation/networking/filter.rst
 +F:    Documentation/userspace-api/ebpf/
  F:    arch/*/net/*
  F:    include/linux/bpf*
  F:    include/linux/filter.h
@@@ -3304,7 -3247,6 +3304,7 @@@ F:      net/core/filter.
  F:    net/sched/act_bpf.c
  F:    net/sched/cls_bpf.c
  F:    samples/bpf/
 +F:    scripts/bpf_doc.py
  F:    tools/bpf/
  F:    tools/lib/bpf/
  F:    tools/testing/selftests/bpf/
@@@ -3427,7 -3369,7 +3427,7 @@@ F:      include/linux/dsa/brcm.
  F:    include/linux/platform_data/b53.h
  
  BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE
 -M:    Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
 +M:    Nicolas Saenz Julienne <nsaenz@kernel.org>
  L:    bcm-kernel-feedback-list@broadcom.com
  L:    linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -3616,14 -3558,6 +3616,14 @@@ S:    Supporte
  F:    Documentation/devicetree/bindings/i2c/brcm,brcmstb-i2c.yaml
  F:    drivers/i2c/busses/i2c-brcmstb.c
  
 +BROADCOM BRCMSTB UART DRIVER
 +M:    Al Cooper <alcooperx@gmail.com>
 +L:    linux-serial@vger.kernel.org
 +L:    bcm-kernel-feedback-list@broadcom.com
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/serial/brcm,bcm7271-uart.yaml
 +F:    drivers/tty/serial/8250/8250_bcm7271.c
 +
  BROADCOM BRCMSTB USB EHCI DRIVER
  M:    Al Cooper <alcooperx@gmail.com>
  L:    linux-usb@vger.kernel.org
@@@ -3741,7 -3675,7 +3741,7 @@@ M:      bcm-kernel-feedback-list@broadcom.co
  L:    linux-pm@vger.kernel.org
  S:    Maintained
  T:    git git://github.com/broadcom/stblinux.git
 -F:    drivers/soc/bcm/bcm-pmb.c
 +F:    drivers/soc/bcm/bcm63xx/bcm-pmb.c
  F:    include/dt-bindings/soc/bcm-pmb.h
  
  BROADCOM SPECIFIC AMBA DRIVER (BCMA)
@@@ -3755,7 -3689,7 +3755,7 @@@ BROADCOM SPI DRIVE
  M:    Kamal Dasu <kdasu.kdev@gmail.com>
  M:    bcm-kernel-feedback-list@broadcom.com
  S:    Maintained
 -F:    Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.txt
 +F:    Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.yaml
  F:    drivers/spi/spi-bcm-qspi.*
  F:    drivers/spi/spi-brcmstb-qspi.c
  F:    drivers/spi/spi-iproc-qspi.c
@@@ -4247,20 -4181,13 +4247,20 @@@ X:   drivers/char/tpm
  CHECKPATCH
  M:    Andy Whitcroft <apw@canonical.com>
  M:    Joe Perches <joe@perches.com>
 +R:    Dwaipayan Ray <dwaipayanray1@gmail.com>
 +R:    Lukas Bulwahn <lukas.bulwahn@gmail.com>
  S:    Maintained
  F:    scripts/checkpatch.pl
  
 +CHECKPATCH DOCUMENTATION
 +M:    Dwaipayan Ray <dwaipayanray1@gmail.com>
 +M:    Lukas Bulwahn <lukas.bulwahn@gmail.com>
 +R:    Joe Perches <joe@perches.com>
 +S:    Maintained
 +F:    Documentation/dev-tools/checkpatch.rst
 +
  CHINESE DOCUMENTATION
 -M:    Harry Wei <harryxiyou@gmail.com>
 -M:    Alex Shi <alex.shi@linux.alibaba.com>
 -L:    xiyoulinuxkernelgroup@googlegroups.com (subscribers-only)
 +M:    Alex Shi <alexs@kernel.org>
  S:    Maintained
  F:    Documentation/translations/zh_CN/
  
@@@ -4493,12 -4420,6 +4493,12 @@@ S:    Supporte
  F:    Documentation/process/code-of-conduct-interpretation.rst
  F:    Documentation/process/code-of-conduct.rst
  
 +COMEDI DRIVERS
 +M:    Ian Abbott <abbotti@mev.co.uk>
 +M:    H Hartley Sweeten <hsweeten@visionengravers.com>
 +S:    Odd Fixes
 +F:    drivers/comedi/
 +
  COMMON CLK FRAMEWORK
  M:    Michael Turquette <mturquette@baylibre.com>
  M:    Stephen Boyd <sboyd@kernel.org>
@@@ -4664,11 -4585,6 +4664,11 @@@ F:    drivers/counter
  F:    include/linux/counter.h
  F:    include/linux/counter_enum.h
  
 +CP2615 I2C DRIVER
 +M:    Bence Csókás <bence98@sch.bme.hu>
 +S:    Maintained
 +F:    drivers/i2c/busses/i2c-cp2615.c
 +
  CPMAC ETHERNET DRIVER
  M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    netdev@vger.kernel.org
@@@ -4960,8 -4876,16 +4960,8 @@@ S:     Maintaine
  W:    http://www.armlinux.org.uk/
  F:    drivers/video/fbdev/cyber2000fb.*
  
 -CYCLADES ASYNC MUX DRIVER
 -S:    Orphan
 -W:    http://www.cyclades.com/
 -F:    drivers/tty/cyclades.c
 -F:    include/linux/cyclades.h
 -F:    include/uapi/linux/cyclades.h
 -
  CYCLADES PC300 DRIVER
  S:    Orphan
 -W:    http://www.cyclades.com/
  F:    drivers/net/wan/pc300*
  
  CYPRESS_FIRMWARE MEDIA DRIVER
@@@ -5110,19 -5034,19 +5110,19 @@@ F:   drivers/platform/x86/dell/dell_rbu.
  
  DELL SMBIOS DRIVER
  M:    Pali Rohár <pali@kernel.org>
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios.*
  
  DELL SMBIOS SMM DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios-smm.c
  
  DELL SMBIOS WMI DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios-wmi.c
@@@ -5136,14 -5060,14 +5136,14 @@@ F:   Documentation/driver-api/dcdbas.rs
  F:    drivers/platform/x86/dell/dcdbas.*
  
  DELL WMI DESCRIPTOR DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-wmi-descriptor.c
  
  DELL WMI SYSMAN DRIVER
  M:    Divya Bharathi <divya.bharathi@dell.com>
 -M:    Mario Limonciello <mario.limonciello@dell.com>
  M:    Prasanth Ksr <prasanth.ksr@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-class-firmware-attributes
@@@ -5156,7 -5080,7 +5156,7 @@@ S:      Maintaine
  F:    drivers/platform/x86/dell/dell-wmi.c
  
  DELTA ST MEDIA DRIVER
 -M:    Hugues Fruchet <hugues.fruchet@st.com>
 +M:    Hugues Fruchet <hugues.fruchet@foss.st.com>
  L:    linux-media@vger.kernel.org
  S:    Supported
  W:    https://linuxtv.org
@@@ -5175,13 -5099,6 +5175,13 @@@ S:    Maintaine
  F:    drivers/dma/dw-edma/
  F:    include/linux/dma/edma.h
  
 +DESIGNWARE XDATA IP DRIVER
 +M:    Gustavo Pimentel <gustavo.pimentel@synopsys.com>
 +L:    linux-pci@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/misc-devices/dw-xdata-pcie.rst
 +F:    drivers/misc/dw-xdata-pcie.c
 +
  DESIGNWARE USB2 DRD IP DRIVER
  M:    Minas Harutyunyan <hminas@synopsys.com>
  L:    linux-usb@vger.kernel.org
@@@ -5252,12 -5169,6 +5252,12 @@@ M:    Torben Mathiasen <device@lanana.org
  S:    Maintained
  W:    http://lanana.org/docs/device-list/index.html
  
 +DEVICE RESOURCE MANAGEMENT HELPERS
 +M:    Hans de Goede <hdegoede@redhat.com>
 +R:    Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
 +S:    Maintained
 +F:    include/linux/devm-helpers.h
 +
  DEVICE-MAPPER  (LVM)
  M:    Alasdair Kergon <agk@redhat.com>
  M:    Mike Snitzer <snitzer@redhat.com>
@@@ -5467,7 -5378,7 +5467,7 @@@ F:      drivers/hwmon/dme1737.
  DMI/SMBIOS SUPPORT
  M:    Jean Delvare <jdelvare@suse.com>
  S:    Maintained
 -T:    quilt http://jdelvare.nerim.net/devel/linux/jdelvare-dmi/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging.git dmi-for-next
  F:    Documentation/ABI/testing/sysfs-firmware-dmi-tables
  F:    drivers/firmware/dmi-id.c
  F:    drivers/firmware/dmi_scan.c
@@@ -5493,12 -5404,6 +5493,12 @@@ X:    Documentation/power
  X:    Documentation/spi/
  X:    Documentation/userspace-api/media/
  
 +DOCUMENTATION REPORTING ISSUES
 +M:    Thorsten Leemhuis <linux@leemhuis.info>
 +L:    linux-doc@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/admin-guide/reporting-issues.rst
 +
  DOCUMENTATION SCRIPTS
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-doc@vger.kernel.org
@@@ -5566,11 -5471,11 +5566,11 @@@ F:   drivers/net/ethernet/freescale/dpaa2
  F:    drivers/net/ethernet/freescale/dpaa2/dpni*
  
  DPAA2 ETHERNET SWITCH DRIVER
 -M:    Ioana Radulescu <ruxandra.radulescu@nxp.com>
  M:    Ioana Ciornei <ioana.ciornei@nxp.com>
 -L:    linux-kernel@vger.kernel.org
 +L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/staging/fsl-dpaa2/ethsw
 +F:    drivers/net/ethernet/freescale/dpaa2/dpaa2-switch*
 +F:    drivers/net/ethernet/freescale/dpaa2/dpsw*
  
  DPT_I2O SCSI RAID DRIVER
  M:    Adaptec OEM Raid Solutions <aacraid@microsemi.com>
@@@ -5663,12 -5568,6 +5663,12 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/display/panel/boe,himax8279d.yaml
  F:    drivers/gpu/drm/panel/panel-boe-himax8279d.c
  
 +DRM DRIVER FOR CHIPONE ICN6211 MIPI-DSI to RGB CONVERTER BRIDGE
 +M:    Jagan Teki <jagan@amarulasolutions.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/display/bridge/chipone,icn6211.yaml
 +F:    drivers/gpu/drm/bridge/chipone-icn6211.c
 +
  DRM DRIVER FOR FARADAY TVE200 TV ENCODER
  M:    Linus Walleij <linus.walleij@linaro.org>
  S:    Maintained
@@@ -5687,14 -5586,6 +5687,14 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/display/panel/feiyang,fy07024di26a30d.yaml
  F:    drivers/gpu/drm/panel/panel-feiyang-fy07024di26a30d.c
  
 +DRM DRIVER FOR GENERIC USB DISPLAY
 +M:    Noralf Trønnes <noralf@tronnes.org>
 +S:    Maintained
 +W:    https://github.com/notro/gud/wiki
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    drivers/gpu/drm/gud/
 +F:    include/drm/gud.h
 +
  DRM DRIVER FOR GRAIN MEDIA GM12U320 PROJECTORS
  M:    Hans de Goede <hdegoede@redhat.com>
  S:    Maintained
@@@ -5888,7 -5779,7 +5888,7 @@@ DRM DRIVER FOR ST-ERICSSON MCD
  M:    Linus Walleij <linus.walleij@linaro.org>
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/display/ste,mcde.txt
 +F:    Documentation/devicetree/bindings/display/ste,mcde.yaml
  F:    drivers/gpu/drm/mcde/
  
  DRM DRIVER FOR TDFX VIDEO CARDS
@@@ -6003,7 -5894,6 +6003,7 @@@ F:      drivers/gpu/drm/atmel-hlcdc
  DRM DRIVERS FOR BRIDGE CHIPS
  M:    Andrzej Hajda <a.hajda@samsung.com>
  M:    Neil Armstrong <narmstrong@baylibre.com>
 +M:    Robert Foss <robert.foss@linaro.org>
  R:    Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
  R:    Jonas Karlman <jonas@kwiboo.se>
  R:    Jernej Skrabec <jernej.skrabec@siol.net>
@@@ -6073,7 -5963,6 +6073,7 @@@ DRM DRIVERS FOR MEDIATE
  M:    Chun-Kuang Hu <chunkuang.hu@kernel.org>
  M:    Philipp Zabel <p.zabel@pengutronix.de>
  L:    dri-devel@lists.freedesktop.org
 +L:    linux-mediatek@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/display/mediatek/
  F:    drivers/gpu/drm/mediatek/
@@@ -6099,9 -5988,9 +6099,9 @@@ L:      dri-devel@lists.freedesktop.or
  L:    linux-renesas-soc@vger.kernel.org
  S:    Supported
  T:    git git://linuxtv.org/pinchartl/media drm/du/next
 -F:    Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.txt
 +F:    Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.yaml
  F:    Documentation/devicetree/bindings/display/bridge/renesas,lvds.yaml
 -F:    Documentation/devicetree/bindings/display/renesas,du.txt
 +F:    Documentation/devicetree/bindings/display/renesas,du.yaml
  F:    drivers/gpu/drm/rcar-du/
  F:    drivers/gpu/drm/shmobile/
  F:    include/linux/platform_data/shmob_drm.h
@@@ -6117,6 -6006,7 +6117,6 @@@ F:      drivers/gpu/drm/rockchip
  
  DRM DRIVERS FOR STI
  M:    Benjamin Gaignard <benjamin.gaignard@linaro.org>
 -M:    Vincent Abriou <vincent.abriou@st.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -6124,9 -6014,10 +6124,9 @@@ F:     Documentation/devicetree/bindings/di
  F:    drivers/gpu/drm/sti
  
  DRM DRIVERS FOR STM
 -M:    Yannick Fertre <yannick.fertre@st.com>
 -M:    Philippe Cornu <philippe.cornu@st.com>
 +M:    Yannick Fertre <yannick.fertre@foss.st.com>
 +M:    Philippe Cornu <philippe.cornu@foss.st.com>
  M:    Benjamin Gaignard <benjamin.gaignard@linaro.org>
 -M:    Vincent Abriou <vincent.abriou@st.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -6163,7 -6054,7 +6163,7 @@@ DRM DRIVERS FOR V3
  M:    Eric Anholt <eric@anholt.net>
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/gpu/brcm,bcm-v3d.txt
 +F:    Documentation/devicetree/bindings/gpu/brcm,bcm-v3d.yaml
  F:    drivers/gpu/drm/v3d/
  F:    include/uapi/drm/v3d_drm.h
  
@@@ -7101,7 -6992,6 +7101,7 @@@ S:      Maintaine
  F:    Documentation/ABI/testing/sysfs-bus-dfl*
  F:    Documentation/fpga/dfl.rst
  F:    drivers/fpga/dfl*
 +F:    drivers/uio/uio_dfl.c
  F:    include/linux/dfl.h
  F:    include/uapi/linux/fpga-dfl.h
  
@@@ -7201,7 -7091,7 +7201,7 @@@ S:      Maintaine
  F:    drivers/i2c/busses/i2c-cpm.c
  
  FREESCALE IMX / MXC FEC DRIVER
 -M:    Fugang Duan <fugang.duan@nxp.com>
 +M:    Joakim Zhang <qiangqing.zhang@nxp.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/net/fsl-fec.txt
@@@ -7242,13 -7132,6 +7242,13 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/i2c/i2c-imx-lpi2c.yaml
  F:    drivers/i2c/busses/i2c-imx-lpi2c.c
  
 +FREESCALE MPC I2C DRIVER
 +M:    Chris Packham <chris.packham@alliedtelesis.co.nz>
 +L:    linux-i2c@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-mpc.yaml
 +F:    drivers/i2c/busses/i2c-mpc.c
 +
  FREESCALE QORIQ DPAA ETHERNET DRIVER
  M:    Madalin Bucur <madalin.bucur@nxp.com>
  L:    netdev@vger.kernel.org
@@@ -7278,7 -7161,6 +7278,7 @@@ FREESCALE QUAD SPI DRIVE
  M:    Han Xu <han.xu@nxp.com>
  L:    linux-spi@vger.kernel.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/spi/fsl,spi-fsl-qspi.yaml
  F:    drivers/spi/spi-fsl-qspi.c
  
  FREESCALE QUICC ENGINE LIBRARY
@@@ -7314,7 -7196,7 +7314,7 @@@ M:      Li Yang <leoyang.li@nxp.com
  L:    linuxppc-dev@lists.ozlabs.org
  L:    linux-arm-kernel@lists.infradead.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/misc/fsl,dpaa2-console.txt
 +F:    Documentation/devicetree/bindings/misc/fsl,dpaa2-console.yaml
  F:    Documentation/devicetree/bindings/soc/fsl/
  F:    drivers/soc/fsl/
  F:    include/linux/fsl/
@@@ -7446,13 -7328,6 +7446,13 @@@ F:    fs/verity
  F:    include/linux/fsverity.h
  F:    include/uapi/linux/fsverity.h
  
 +FT260 FTDI USB-HID TO I2C BRIDGE DRIVER
 +M:    Michael Zaidman <michael.zaidman@gmail.com>
 +L:    linux-i2c@vger.kernel.org
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hid/hid-ft260.c
 +
  FUJITSU LAPTOP EXTRAS
  M:    Jonathan Woithe <jwoithe@just42.net>
  L:    platform-driver-x86@vger.kernel.org
@@@ -7488,7 -7363,6 +7488,7 @@@ M:      Thomas Gleixner <tglx@linutronix.de
  M:    Ingo Molnar <mingo@redhat.com>
  R:    Peter Zijlstra <peterz@infradead.org>
  R:    Darren Hart <dvhart@infradead.org>
 +R:    Davidlohr Bueso <dave@stgolabs.net>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core
@@@ -7511,6 -7385,14 +7511,6 @@@ F:     Documentation/hwmon/gsc-hwmon.rs
  F:    drivers/hwmon/gsc-hwmon.c
  F:    include/linux/platform_data/gsc_hwmon.h
  
 -GASKET DRIVER FRAMEWORK
 -M:    Rob Springer <rspringer@google.com>
 -M:    Todd Poynor <toddpoynor@google.com>
 -M:    Ben Chan <benchan@chromium.org>
 -M:    Richard Yeh <rcy@google.com>
 -S:    Maintained
 -F:    drivers/staging/gasket/
 -
  GCC PLUGINS
  M:    Kees Cook <keescook@chromium.org>
  L:    linux-hardening@vger.kernel.org
@@@ -7594,9 -7476,8 +7594,9 @@@ F:      include/uapi/asm-generic
  GENERIC PHY FRAMEWORK
  M:    Kishon Vijay Abraham I <kishon@ti.com>
  M:    Vinod Koul <vkoul@kernel.org>
 -L:    linux-kernel@vger.kernel.org
 +L:    linux-phy@lists.infradead.org
  S:    Supported
 +Q:    https://patchwork.kernel.org/project/linux-phy/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy.git
  F:    Documentation/devicetree/bindings/phy/
  F:    drivers/phy/
@@@ -7662,12 -7543,6 +7662,12 @@@ F:    Documentation/filesystems/gfs2
  F:    fs/gfs2/
  F:    include/uapi/linux/gfs2_ondisk.h
  
 +GIGABYTE WMI DRIVER
 +M:    Thomas Weißschuh <thomas@weissschuh.net>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/gigabyte-wmi.c
 +
  GNSS SUBSYSTEM
  M:    Johan Hovold <johan@kernel.org>
  S:    Maintained
@@@ -7976,7 -7851,6 +7976,7 @@@ F:      Documentation/hwmon
  F:    drivers/hwmon/
  F:    include/linux/hwmon*.h
  F:    include/trace/events/hwmon*.h
 +K:    (devm_)?hwmon_device_(un)?register(|_with_groups|_with_info)
  
  HARDWARE RANDOM NUMBER GENERATOR CORE
  M:    Matt Mackall <mpm@selenic.com>
@@@ -8018,11 -7892,6 +8018,11 @@@ W:    https://linuxtv.or
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/usb/hdpvr/
  
 +HEWLETT PACKARD ENTERPRISE ILO CHIF DRIVER
 +M:    Matt Hsiao <matt.hsiao@hpe.com>
 +S:    Supported
 +F:    drivers/misc/hpilo.[ch]
 +
  HEWLETT PACKARD ENTERPRISE ILO NMI WATCHDOG DRIVER
  M:    Jerry Hoemann <jerry.hoemann@hpe.com>
  S:    Supported
@@@ -8171,13 -8040,6 +8171,13 @@@ F:    drivers/crypto/hisilicon/hpre/hpre.
  F:    drivers/crypto/hisilicon/hpre/hpre_crypto.c
  F:    drivers/crypto/hisilicon/hpre/hpre_main.c
  
 +HISILICON I2C CONTROLLER DRIVER
 +M:    Yicong Yang <yangyicong@hisilicon.com>
 +L:    linux-i2c@vger.kernel.org
 +S:    Maintained
 +W:    https://www.hisilicon.com
 +F:    drivers/i2c/busses/i2c-hisi.c
 +
  HISILICON LPC BUS DRIVER
  M:    john.garry@huawei.com
  S:    Maintained
@@@ -8228,6 -8090,7 +8228,6 @@@ F:      drivers/crypto/hisilicon/zip
  
  HISILICON ROCE DRIVER
  M:    Lijun Ou <oulijun@huawei.com>
 -M:    Wei Hu(Xavier) <huwei87@hisilicon.com>
  M:    Weihang Li <liweihang@huawei.com>
  L:    linux-rdma@vger.kernel.org
  S:    Maintained
@@@ -8251,15 -8114,9 +8251,15 @@@ F:    drivers/crypto/hisilicon/sec2/sec_cr
  F:    drivers/crypto/hisilicon/sec2/sec_crypto.h
  F:    drivers/crypto/hisilicon/sec2/sec_main.c
  
 +HISILICON SPI Controller DRIVER FOR KUNPENG SOCS
 +M:    Jay Fang <f.fangjian@huawei.com>
 +L:    linux-spi@vger.kernel.org
 +S:    Maintained
 +W:    http://www.hisilicon.com
 +F:    drivers/spi/spi-hisi-kunpeng.c
 +
  HISILICON STAGING DRIVERS FOR HIKEY 960/970
  M:    Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
 -L:    devel@driverdev.osuosl.org
  S:    Maintained
  F:    drivers/staging/hikey9xx/
  
@@@ -8352,7 -8209,7 +8352,7 @@@ M:      Lorenzo Bianconi <lorenzo.bianconi83
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  W:    http://www.st.com/
 -F:    Documentation/devicetree/bindings/iio/humidity/hts221.txt
 +F:    Documentation/devicetree/bindings/iio/humidity/st,hts221.yaml
  F:    drivers/iio/humidity/hts221*
  
  HUAWEI ETHERNET DRIVER
@@@ -8374,7 -8231,7 +8374,7 @@@ F:      include/linux/hugetlb.
  F:    mm/hugetlb.c
  
  HVA ST MEDIA DRIVER
 -M:    Jean-Christophe Trotin <jean-christophe.trotin@st.com>
 +M:    Jean-Christophe Trotin <jean-christophe.trotin@foss.st.com>
  L:    linux-media@vger.kernel.org
  S:    Supported
  W:    https://linuxtv.org
@@@ -8401,12 -8258,11 +8401,12 @@@ S:   Maintaine
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/i2c/hi556.c
  
 -Hyper-V CORE AND DRIVERS
 +Hyper-V/Azure CORE AND DRIVERS
  M:    "K. Y. Srinivasan" <kys@microsoft.com>
  M:    Haiyang Zhang <haiyangz@microsoft.com>
  M:    Stephen Hemminger <sthemmin@microsoft.com>
  M:    Wei Liu <wei.liu@kernel.org>
 +M:    Dexuan Cui <decui@microsoft.com>
  L:    linux-hyperv@vger.kernel.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git
@@@ -8423,7 -8279,6 +8423,7 @@@ F:      drivers/hid/hid-hyperv.
  F:    drivers/hv/
  F:    drivers/input/serio/hyperv-keyboard.c
  F:    drivers/iommu/hyperv-iommu.c
 +F:    drivers/net/ethernet/microsoft/
  F:    drivers/net/hyperv/
  F:    drivers/pci/controller/pci-hyperv-intf.c
  F:    drivers/pci/controller/pci-hyperv.c
@@@ -8664,8 -8519,8 +8664,8 @@@ F:      drivers/pci/hotplug/rpaphp
  
  IBM Power SRIOV Virtual NIC Device Driver
  M:    Dany Madden <drt@linux.ibm.com>
 -M:    Lijun Pan <ljp@linux.ibm.com>
  M:    Sukadev Bhattiprolu <sukadev@linux.ibm.com>
 +R:    Thomas Falcon <tlfalcon@linux.ibm.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/ibm/ibmvnic.*
@@@ -8691,8 -8546,7 +8691,8 @@@ S:      Supporte
  F:    drivers/scsi/ibmvscsi/ibmvfc*
  
  IBM Power Virtual Management Channel Driver
 -M:    Steven Royer <seroyer@linux.ibm.com>
 +M:    Brad Warrum <bwarrum@linux.ibm.com>
 +M:    Ritu Agarwal <rituagar@linux.ibm.com>
  S:    Supported
  F:    drivers/misc/ibmvmc.*
  
@@@ -8750,8 -8604,9 +8750,8 @@@ F:      drivers/ide
  F:    include/linux/ide.h
  
  IDE/ATAPI DRIVERS
 -M:    Borislav Petkov <bp@alien8.de>
  L:    linux-ide@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/cdrom/ide-cd.rst
  F:    drivers/ide/ide-cd*
  
@@@ -8819,7 -8674,7 +8819,7 @@@ M:      Peter Rosin <peda@axentia.se
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-iio-dac-dpot-dac
 -F:    Documentation/devicetree/bindings/iio/dac/dpot-dac.txt
 +F:    Documentation/devicetree/bindings/iio/dac/dpot-dac.yaml
  F:    drivers/iio/dac/dpot-dac.c
  
  IIO ENVELOPE DETECTOR
@@@ -8827,7 -8682,7 +8827,7 @@@ M:      Peter Rosin <peda@axentia.se
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-iio-adc-envelope-detector
 -F:    Documentation/devicetree/bindings/iio/adc/envelope-detector.txt
 +F:    Documentation/devicetree/bindings/iio/adc/envelope-detector.yaml
  F:    drivers/iio/adc/envelope-detector.c
  
  IIO MULTIPLEXER
@@@ -8837,15 -8692,10 +8837,15 @@@ S:   Maintaine
  F:    Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt
  F:    drivers/iio/multiplexer/iio-mux.c
  
 +IIO SCMI BASED DRIVER
 +M:    Jyoti Bhayana <jbhayana@google.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/iio/common/scmi_sensors/scmi_iio.c
 +
  IIO SUBSYSTEM AND DRIVERS
  M:    Jonathan Cameron <jic23@kernel.org>
  R:    Lars-Peter Clausen <lars@metafoo.de>
 -R:    Peter Meerwald-Stadler <pmeerw@pmeerw.net>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git
@@@ -8861,9 -8711,9 +8861,9 @@@ IIO UNIT CONVERTE
  M:    Peter Rosin <peda@axentia.se>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/afe/current-sense-amplifier.txt
 -F:    Documentation/devicetree/bindings/iio/afe/current-sense-shunt.txt
 -F:    Documentation/devicetree/bindings/iio/afe/voltage-divider.txt
 +F:    Documentation/devicetree/bindings/iio/afe/current-sense-amplifier.yaml
 +F:    Documentation/devicetree/bindings/iio/afe/current-sense-shunt.yaml
 +F:    Documentation/devicetree/bindings/iio/afe/voltage-divider.yaml
  F:    drivers/iio/afe/iio-rescale.c
  
  IKANOS/ADI EAGLE ADSL USB DRIVER
@@@ -9265,26 -9115,6 +9265,26 @@@ F:    include/linux/mei_cl_bus.
  F:    include/uapi/linux/mei.h
  F:    samples/mei/*
  
 +INTEL MAX 10 BMC MFD DRIVER
 +M:    Xu Yilun <yilun.xu@intel.com>
 +R:    Tom Rix <trix@redhat.com>
 +S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
 +F:    Documentation/hwmon/intel-m10-bmc-hwmon.rst
 +F:    drivers/hwmon/intel-m10-bmc-hwmon.c
 +F:    drivers/mfd/intel-m10-bmc.c
 +F:    include/linux/mfd/intel-m10-bmc.h
 +
 +INTEL MAX 10 BMC MFD DRIVER
 +M:    Xu Yilun <yilun.xu@intel.com>
 +R:    Tom Rix <trix@redhat.com>
 +S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
 +F:    Documentation/hwmon/intel-m10-bmc-hwmon.rst
 +F:    drivers/hwmon/intel-m10-bmc-hwmon.c
 +F:    drivers/mfd/intel-m10-bmc.c
 +F:    include/linux/mfd/intel-m10-bmc.h
 +
  INTEL MENLOW THERMAL DRIVER
  M:    Sujith Thomas <sujith.thomas@intel.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -9304,7 -9134,6 +9304,7 @@@ M:      Rajneesh Bhardwaj <irenic.rajneesh@g
  M:    David E Box <david.e.box@intel.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-platform-intel-pmc
  F:    drivers/platform/x86/intel_pmc_core*
  
  INTEL PMIC GPIO DRIVERS
@@@ -9415,7 -9244,7 +9415,7 @@@ W:      https://slimbootloader.github.io/sec
  F:    drivers/platform/x86/intel-wmi-sbl-fw-update.c
  
  INTEL WMI THUNDERBOLT FORCE POWER DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  S:    Maintained
  F:    drivers/platform/x86/intel-wmi-thunderbolt.c
  
@@@ -9445,7 -9274,6 +9445,7 @@@ Q:      https://patchwork.kernel.org/project
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/sgx
  F:    Documentation/x86/sgx.rst
  F:    arch/x86/entry/vdso/vsgx.S
 +F:    arch/x86/include/asm/sgx.h
  F:    arch/x86/include/uapi/asm/sgx.h
  F:    arch/x86/kernel/cpu/sgx/*
  F:    tools/testing/selftests/sgx/*
@@@ -9455,7 -9283,6 +9455,7 @@@ INTERCONNECT AP
  M:    Georgi Djakov <djakov@kernel.org>
  L:    linux-pm@vger.kernel.org
  S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/djakov/icc.git
  F:    Documentation/devicetree/bindings/interconnect/
  F:    Documentation/driver-api/interconnect.rst
  F:    drivers/interconnect/
@@@ -9463,13 -9290,6 +9463,13 @@@ F:    include/dt-bindings/interconnect
  F:    include/linux/interconnect-provider.h
  F:    include/linux/interconnect.h
  
 +INTERRUPT COUNTER DRIVER
 +M:    Oleksij Rempel <o.rempel@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
 +L:    linux-iio@vger.kernel.org
 +F:    Documentation/devicetree/bindings/counter/interrupt-counter.yaml
 +F:    drivers/counter/interrupt-cnt.c
 +
  INVENSENSE ICM-426xx IMU DRIVER
  M:    Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
  L:    linux-iio@vger.kernel.org
@@@ -9482,7 -9302,7 +9482,7 @@@ INVENSENSE MPU-3050 GYROSCOPE DRIVE
  M:    Linus Walleij <linus.walleij@linaro.org>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/gyroscope/invensense,mpu3050.txt
 +F:    Documentation/devicetree/bindings/iio/gyroscope/invensense,mpu3050.yaml
  F:    drivers/iio/gyro/mpu3050*
  
  IOC3 ETHERNET DRIVER
@@@ -9871,7 -9691,6 +9871,7 @@@ F:      scripts/*vmlinux
  F:    scripts/Kbuild*
  F:    scripts/Makefile*
  F:    scripts/basic/
 +F:    scripts/dummy-tools/
  F:    scripts/mk*
  F:    scripts/mod/
  F:    scripts/package/
@@@ -9898,11 -9717,6 +9898,11 @@@ F:    include/uapi/linux/sunrpc
  F:    net/sunrpc/
  F:    Documentation/filesystems/nfs/
  
 +KERNEL REGRESSIONS
 +M:    Thorsten Leemhuis <linux@leemhuis.info>
 +L:    regressions@lists.linux.dev
 +S:    Supported
 +
  KERNEL SELFTEST FRAMEWORK
  M:    Shuah Khan <shuah@kernel.org>
  M:    Shuah Khan <skhan@linuxfoundation.org>
@@@ -9951,10 -9765,10 +9951,10 @@@ F:   virt/kvm/
  KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64)
  M:    Marc Zyngier <maz@kernel.org>
  R:    James Morse <james.morse@arm.com>
 -R:    Julien Thierry <julien.thierry.kdev@gmail.com>
 +R:    Alexandru Elisei <alexandru.elisei@arm.com>
  R:    Suzuki K Poulose <suzuki.poulose@arm.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -L:    kvmarm@lists.cs.columbia.edu
 +L:    kvmarm@lists.cs.columbia.edu (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git
  F:    arch/arm64/include/asm/kvm*
@@@ -10065,14 -9879,6 +10065,14 @@@ F:  include/keys/trusted-type.
  F:    include/keys/trusted_tpm.h
  F:    security/keys/trusted-keys/
  
 +KEYS-TRUSTED-TEE
 +M:    Sumit Garg <sumit.garg@linaro.org>
 +L:    linux-integrity@vger.kernel.org
 +L:    keyrings@vger.kernel.org
 +S:    Supported
 +F:    include/keys/trusted_tee.h
 +F:    security/keys/trusted-keys/trusted_tee.c
 +
  KEYS/KEYRINGS
  M:    David Howells <dhowells@redhat.com>
  M:    Jarkko Sakkinen <jarkko@kernel.org>
@@@ -10191,6 -9997,21 +10191,21 @@@ F:  net/core/sock_map.
  F:    net/ipv4/tcp_bpf.c
  F:    net/ipv4/udp_bpf.c
  
+ LANDLOCK SECURITY MODULE
+ M:    Mickaël Salaün <mic@digikod.net>
+ L:    linux-security-module@vger.kernel.org
+ S:    Supported
+ W:    https://landlock.io
+ T:    git https://github.com/landlock-lsm/linux.git
+ F:    Documentation/security/landlock.rst
+ F:    Documentation/userspace-api/landlock.rst
+ F:    include/uapi/linux/landlock.h
+ F:    samples/landlock/
+ F:    security/landlock/
+ F:    tools/testing/selftests/landlock/
+ K:    landlock
+ K:    LANDLOCK
  LANTIQ / INTEL Ethernet drivers
  M:    Hauke Mehrtens <hauke@hauke-m.de>
  L:    netdev@vger.kernel.org
@@@ -10224,6 -10045,7 +10239,6 @@@ F:   scripts/leaking_addresses.p
  
  LED SUBSYSTEM
  M:    Pavel Machek <pavel@ucw.cz>
 -R:    Dan Murphy <dmurphy@ti.com>
  L:    linux-leds@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds.git
@@@ -10240,7 -10062,7 +10255,7 @@@ F:   drivers/misc/eeprom/eeprom.
  LEGO MINDSTORMS EV3
  R:    David Lechner <david@lechnology.com>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/power/supply/lego_ev3_battery.txt
 +F:    Documentation/devicetree/bindings/power/supply/lego,ev3-battery.yaml
  F:    arch/arm/boot/dts/da850-lego-ev3.dts
  F:    drivers/power/supply/lego_ev3_battery.c
  
@@@ -10653,12 -10475,6 +10668,12 @@@ S: Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
  F:    drivers/hid/hid-lg-g15.c
  
 +LONTIUM LT8912B MIPI TO HDMI BRIDGE
 +M:    Adrien Grassein <adrien.grassein@gmail.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/display/bridge/lontium,lt8912b.yaml
 +F:    drivers/gpu/drm/bridge/lontium-lt8912b.c
 +
  LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
  M:    Sathya Prakash <sathya.prakash@broadcom.com>
  M:    Sreekanth Reddy <sreekanth.reddy@broadcom.com>
@@@ -10805,7 -10621,6 +10820,7 @@@ S:   Maintaine
  F:    drivers/mailbox/
  F:    include/linux/mailbox_client.h
  F:    include/linux/mailbox_controller.h
 +F:    Documentation/devicetree/bindings/mailbox/
  
  MAILBOX ARM MHUv2
  M:    Viresh Kumar <viresh.kumar@linaro.org>
@@@ -10891,7 -10706,6 +10906,7 @@@ F:   include/linux/mv643xx.
  
  MARVELL MV88X3310 PHY DRIVER
  M:    Russell King <linux@armlinux.org.uk>
 +M:    Marek Behun <marek.behun@nic.cz>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/phy/marvell10g.c
@@@ -10991,13 -10805,6 +11006,13 @@@ S: Orpha
  F:    drivers/video/fbdev/matrox/matroxfb_*
  F:    include/uapi/linux/matroxfb.h
  
 +MAX15301 DRIVER
 +M:    Daniel Nilsson <daniel.nilsson@flex.com>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/hwmon/max15301.rst
 +F:    drivers/hwmon/pmbus/max15301.c
 +
  MAX16065 HARDWARE MONITOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
@@@ -11077,7 -10884,7 +11092,7 @@@ F:   drivers/regulator/max77802-regulator
  F:    include/dt-bindings/*/*max77802.h
  
  MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-pm@vger.kernel.org
  S:    Supported
@@@ -11086,7 -10893,7 +11101,7 @@@ F:   drivers/power/supply/max77693_charge
  
  MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
  M:    Chanwoo Choi <cw00.choi@samsung.com>
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  S:    Supported
@@@ -11114,7 -10921,8 +11129,7 @@@ T:   git git://linuxtv.org/media_tree.gi
  F:    drivers/media/radio/radio-maxiradio*
  
  MCAN MMIO DEVICE DRIVER
 -M:    Dan Murphy <dmurphy@ti.com>
 -M:    Pankaj Sharma <pankj.sharma@samsung.com>
 +M:    Chandrasekar Ramakrishnan <rcsekar@samsung.com>
  L:    linux-can@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/net/can/bosch,m_can.yaml
@@@ -11312,12 -11120,12 +11327,12 @@@ F:        drivers/media/platform/renesas-ceu.
  F:    include/media/drv-intf/renesas-ceu.h
  
  MEDIA DRIVERS FOR RENESAS - DRIF
 -M:    Ramesh Shanmugasundaram <rashanmu@gmail.com>
 +M:    Fabrizio Castro <fabrizio.castro.jz@renesas.com>
  L:    linux-media@vger.kernel.org
  L:    linux-renesas-soc@vger.kernel.org
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
 -F:    Documentation/devicetree/bindings/media/renesas,drif.txt
 +F:    Documentation/devicetree/bindings/media/renesas,drif.yaml
  F:    drivers/media/platform/rcar_drif.c
  
  MEDIA DRIVERS FOR RENESAS - FCP
@@@ -11374,7 -11182,7 +11389,7 @@@ T:   git git://linuxtv.org/media_tree.gi
  F:    drivers/media/dvb-frontends/stv6111*
  
  MEDIA DRIVERS FOR STM32 - DCMI
 -M:    Hugues Fruchet <hugues.fruchet@st.com>
 +M:    Hugues Fruchet <hugues.fruchet@foss.st.com>
  L:    linux-media@vger.kernel.org
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
@@@ -11486,7 -11294,7 +11501,7 @@@ F:   drivers/media/platform/mtk-vpu
  MEDIATEK MMC/SD/SDIO DRIVER
  M:    Chaotian Jing <chaotian.jing@mediatek.com>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/mmc/mtk-sd.txt
 +F:    Documentation/devicetree/bindings/mmc/mtk-sd.yaml
  F:    drivers/mmc/host/mtk-sd.c
  
  MEDIATEK MT76 WIRELESS LAN DRIVER
@@@ -11503,12 -11311,6 +11518,12 @@@ L: linux-wireless@vger.kernel.or
  S:    Maintained
  F:    drivers/net/wireless/mediatek/mt7601u/
  
 +MEDIATEK MT7621 CLOCK DRIVER
 +M:    Sergio Paracuellos <sergio.paracuellos@gmail.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/clock/mediatek,mt7621-sysc.yaml
 +F:    drivers/clk/ralink/clk-mt7621.c
 +
  MEDIATEK MT7621/28/88 I2C DRIVER
  M:    Stefan Roese <sr@denx.de>
  L:    linux-i2c@vger.kernel.org
@@@ -11651,8 -11453,8 +11666,8 @@@ Q:   https://patchwork.kernel.org/project
  F:    drivers/net/ethernet/mellanox/mlxfw/
  
  MELLANOX HARDWARE PLATFORM SUPPORT
 -M:    Andy Shevchenko <andy@infradead.org>
 -M:    Darren Hart <dvhart@infradead.org>
 +M:    Hans de Goede <hdegoede@redhat.com>
 +M:    Mark Gross <mgross@linux.intel.com>
  M:    Vadim Pasternak <vadimp@nvidia.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Supported
@@@ -11743,7 -11545,7 +11758,7 @@@ F:   include/linux/memblock.
  F:    mm/memblock.c
  
  MEMORY CONTROLLER DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git
@@@ -11771,7 -11573,6 +11786,7 @@@ F:   include/linux/gfp.
  F:    include/linux/memory_hotplug.h
  F:    include/linux/mm.h
  F:    include/linux/mmzone.h
 +F:    include/linux/pagewalk.h
  F:    include/linux/vmalloc.h
  F:    mm/
  
@@@ -12012,7 -11813,7 +12027,7 @@@ MICROCHIP SAMA5D2-COMPATIBLE ADC DRIVE
  M:    Eugen Hristev <eugen.hristev@microchip.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/iio/adc/at91-sama5d2_adc.txt
 +F:    Documentation/devicetree/bindings/iio/adc/atmel,sama5d2-adc.yaml
  F:    drivers/iio/adc/at91-sama5d2_adc.c
  F:    include/dt-bindings/iio/adc/at91-sama5d2_adc.h
  
@@@ -12076,22 -11877,6 +12091,22 @@@ F: drivers/scsi/smartpqi/smartpqi*.[ch
  F:    include/linux/cciss*.h
  F:    include/uapi/linux/cciss*.h
  
 +MICROSOFT SURFACE BATTERY AND AC DRIVERS
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    linux-pm@vger.kernel.org
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/power/supply/surface_battery.c
 +F:    drivers/power/supply/surface_charger.c
 +
 +MICROSOFT SURFACE DTX DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/driver-api/surface_aggregator/clients/dtx.rst
 +F:    drivers/platform/surface/surface_dtx.c
 +F:    include/uapi/linux/surface_aggregator/dtx.h
 +
  MICROSOFT SURFACE GPE LID SUPPORT DRIVER
  M:    Maximilian Luz <luzmaximilian@gmail.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -12107,25 -11892,12 +12122,25 @@@ S:        Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git
  F:    drivers/platform/surface/
  
 +MICROSOFT SURFACE HID TRANSPORT DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    linux-input@vger.kernel.org
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hid/surface-hid/
 +
  MICROSOFT SURFACE HOT-PLUG DRIVER
  M:    Maximilian Luz <luzmaximilian@gmail.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/surface/surface_hotplug.c
  
 +MICROSOFT SURFACE PLATFORM PROFILE DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/surface/surface_platform_profile.c
 +
  MICROSOFT SURFACE PRO 3 BUTTON DRIVER
  M:    Chen Yu <yu.c.chen@intel.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -12141,7 -11913,6 +12156,7 @@@ F:   Documentation/driver-api/surface_agg
  F:    drivers/platform/surface/aggregator/
  F:    drivers/platform/surface/surface_acpi_notify.c
  F:    drivers/platform/surface/surface_aggregator_cdev.c
 +F:    drivers/platform/surface/surface_aggregator_registry.c
  F:    include/linux/surface_acpi_notify.h
  F:    include/linux/surface_aggregator/
  F:    include/uapi/linux/surface_aggregator/
@@@ -12333,7 -12104,8 +12348,7 @@@ F:   drivers/media/pci/meye
  F:    include/uapi/linux/meye.h
  
  MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD
 -M:    Jiri Slaby <jirislaby@kernel.org>
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/driver-api/serial/moxa-smartio.rst
  F:    drivers/tty/mxser.*
  
@@@ -12477,6 -12249,11 +12492,6 @@@ F:  drivers/mux
  F:    include/dt-bindings/mux/
  F:    include/linux/mux/
  
 -MULTITECH MULTIPORT CARD (ISICOM)
 -S:    Orphan
 -F:    drivers/tty/isicom.c
 -F:    include/linux/isicom.h
 -
  MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
  M:    Bin Liu <b-liu@ti.com>
  L:    linux-usb@vger.kernel.org
@@@ -12505,7 -12282,7 +12520,7 @@@ M:   Stefan Agner <stefan@agner.ch
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/display/mxsfb.txt
 +F:    Documentation/devicetree/bindings/display/fsl,lcdif.yaml
  F:    drivers/gpu/drm/mxsfb/
  
  MYLEX DAC960 PCI RAID Controller
@@@ -12624,15 -12401,6 +12639,15 @@@ F: include/net/netrom.
  F:    include/uapi/linux/netrom.h
  F:    net/netrom/
  
 +NETRONIX EMBEDDED CONTROLLER
 +M:    Jonathan Neuschäfer <j.neuschaefer@gmx.net>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
 +F:    drivers/mfd/ntxec.c
 +F:    drivers/pwm/pwm-ntxec.c
 +F:    drivers/rtc/rtc-ntxec.c
 +F:    include/linux/mfd/ntxec.h
 +
  NETRONOME ETHERNET DRIVERS
  M:    Simon Horman <simon.horman@netronome.com>
  R:    Jakub Kicinski <kuba@kernel.org>
@@@ -12785,13 -12553,12 +12800,13 @@@ NETWORKING [MPTCP
  M:    Mat Martineau <mathew.j.martineau@linux.intel.com>
  M:    Matthieu Baerts <matthieu.baerts@tessares.net>
  L:    netdev@vger.kernel.org
 -L:    mptcp@lists.01.org
 +L:    mptcp@lists.linux.dev
  S:    Maintained
  W:    https://github.com/multipath-tcp/mptcp_net-next/wiki
  B:    https://github.com/multipath-tcp/mptcp_net-next/issues
  F:    Documentation/networking/mptcp-sysctl.rst
  F:    include/net/mptcp.h
 +F:    include/trace/events/mptcp.h
  F:    include/uapi/linux/mptcp.h
  F:    net/mptcp/
  F:    tools/testing/selftests/net/mptcp/
@@@ -13076,12 -12843,6 +13091,12 @@@ F: drivers/nvmem
  F:    include/linux/nvmem-consumer.h
  F:    include/linux/nvmem-provider.h
  
 +NXP C45 TJA11XX PHY DRIVER
 +M:    Radu Pirea <radu-nicolae.pirea@oss.nxp.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/phy/nxp-c45-tja11xx.c
 +
  NXP FSPI DRIVER
  M:    Ashish Kumar <ashish.kumar@nxp.com>
  R:    Yogesh Gaur <yogeshgaur.83@gmail.com>
@@@ -13122,7 -12883,7 +13137,7 @@@ F:   Documentation/devicetree/bindings/re
  F:    drivers/regulator/pf8x00-regulator.c
  
  NXP PTN5150A CC LOGIC AND EXTCON DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/extcon/extcon-ptn5150.yaml
@@@ -13165,21 -12926,6 +13180,21 @@@ L: linux-nfc@lists.01.org (moderated fo
  S:    Supported
  F:    drivers/nfc/nxp-nci
  
 +NXP i.MX 8QXP/8QM JPEG V4L2 DRIVER
 +M:    Mirela Rabulea <mirela.rabulea@nxp.com>
 +R:    NXP Linux Team <linux-imx@nxp.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/imx8-jpeg.yaml
 +F:    drivers/media/platform/imx-jpeg
 +
 +NZXT-KRAKEN2 HARDWARE MONITORING DRIVER
 +M:    Jonas Malaco <jonas@protocubo.io>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/hwmon/nzxt-kraken2.rst
 +F:    drivers/hwmon/nzxt-kraken2.c
 +
  OBJAGG
  M:    Jiri Pirko <jiri@nvidia.com>
  L:    netdev@vger.kernel.org
@@@ -13454,7 -13200,7 +13469,7 @@@ M:   Rui Miguel Silva <rmfrfs@gmail.com
  L:    linux-media@vger.kernel.org
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
 -F:    Documentation/devicetree/bindings/media/i2c/ov2680.yaml
 +F:    Documentation/devicetree/bindings/media/i2c/ovti,ov2680.yaml
  F:    drivers/media/i2c/ov2680.c
  
  OMNIVISION OV2685 SENSOR DRIVER
@@@ -14290,10 -14036,8 +14305,10 @@@ R: Mark Rutland <mark.rutland@arm.com
  R:    Alexander Shishkin <alexander.shishkin@linux.intel.com>
  R:    Jiri Olsa <jolsa@redhat.com>
  R:    Namhyung Kim <namhyung@kernel.org>
 +L:    linux-perf-users@vger.kernel.org
  L:    linux-kernel@vger.kernel.org
  S:    Supported
 +W:    https://perf.wiki.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
  F:    arch/*/events/*
  F:    arch/*/events/*/*
@@@ -14375,7 -14119,7 +14390,7 @@@ L:   linux-gpio@vger.kernel.or
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
  F:    Documentation/devicetree/bindings/pinctrl/
 -F:    Documentation/driver-api/pinctl.rst
 +F:    Documentation/driver-api/pin-control.rst
  F:    drivers/pinctrl/
  F:    include/linux/pinctrl/
  
@@@ -14430,7 -14174,7 +14445,7 @@@ F:   drivers/pinctrl/renesas
  
  PIN CONTROLLER - SAMSUNG
  M:    Tomasz Figa <tomasz.figa@gmail.com>
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org
@@@ -14551,7 -14295,7 +14566,7 @@@ PNI RM3100 IIO DRIVE
  M:    Song Qiang <songqiang1304521@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/magnetometer/pni,rm3100.txt
 +F:    Documentation/devicetree/bindings/iio/magnetometer/pni,rm3100.yaml
  F:    drivers/iio/magnetometer/rm3100*
  
  PNP SUPPORT
@@@ -14586,15 -14330,6 +14601,15 @@@ F: include/linux/pm_
  F:    include/linux/powercap.h
  F:    kernel/configs/nopm.config
  
 +DYNAMIC THERMAL POWER MANAGEMENT (DTPM)
 +M:    Daniel Lezcano <daniel.lezcano@kernel.org>
 +L:    linux-pm@vger.kernel.org
 +S:    Supported
 +B:    https://bugzilla.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
 +F:    drivers/powercap/dtpm*
 +F:    include/linux/dtpm.h
 +
  POWER STATE COORDINATION INTERFACE (PSCI)
  M:    Mark Rutland <mark.rutland@arm.com>
  M:    Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
@@@ -14672,7 -14407,7 +14687,7 @@@ F:   kernel/sched/psi.
  
  PRINTK
  M:    Petr Mladek <pmladek@suse.com>
 -M:    Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
 +M:    Sergey Senozhatsky <senozhatsky@chromium.org>
  R:    Steven Rostedt <rostedt@goodmis.org>
  R:    John Ogness <john.ogness@linutronix.de>
  S:    Maintained
@@@ -14989,11 -14724,15 +15004,11 @@@ F:        drivers/net/ethernet/qlogic/qlcnic
  QLOGIC QLGE 10Gb ETHERNET DRIVER
  M:    Manish Chopra <manishc@marvell.com>
  M:    GR-Linux-NIC-Dev@marvell.com
 -L:    netdev@vger.kernel.org
 -S:    Supported
 -F:    drivers/staging/qlge/
 -
 -QLOGIC QLGE 10Gb ETHERNET DRIVER
  M:    Coiby Xu <coiby.xu@gmail.com>
  L:    netdev@vger.kernel.org
 -S:    Maintained
 +S:    Supported
  F:    Documentation/networking/device_drivers/qlogic/qlge.rst
 +F:    drivers/staging/qlge/
  
  QM1D1B0004 MEDIA DRIVER
  M:    Akihiro Tsukada <tskd08@gmail.com>
@@@ -15064,7 -14803,7 +15079,7 @@@ M:   Todor Tomov <todor.too@gmail.com
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    Documentation/admin-guide/media/qcom_camss.rst
 -F:    Documentation/devicetree/bindings/media/qcom,camss.txt
 +F:    Documentation/devicetree/bindings/media/*camss*
  F:    drivers/media/platform/qcom/camss/
  
  QUALCOMM CORE POWER REDUCTION (CPR) AVS DRIVER
@@@ -15133,14 -14872,6 +15148,14 @@@ L: linux-arm-msm@vger.kernel.or
  S:    Maintained
  F:    drivers/iommu/arm/arm-smmu/qcom_iommu.c
  
 +QUALCOMM IPC ROUTER (QRTR) DRIVER
 +M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
 +L:    linux-arm-msm@vger.kernel.org
 +S:    Maintained
 +F:    include/trace/events/qrtr.h
 +F:    include/uapi/linux/qrtr.h
 +F:    net/qrtr/
 +
  QUALCOMM IPCC MAILBOX DRIVER
  M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
  L:    linux-arm-msm@vger.kernel.org
@@@ -15363,7 -15094,7 +15378,7 @@@ M:   Laurent Pinchart <laurent.pinchart+r
  M:    Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/media/i2c/rdacm2x-gmsl.yaml
 +F:    Documentation/devicetree/bindings/media/i2c/imi,rdacm2x-gmsl.yaml
  F:    drivers/media/i2c/max9271.c
  F:    drivers/media/i2c/max9271.h
  F:    drivers/media/i2c/rdacm21.c
@@@ -15490,7 -15221,6 +15505,7 @@@ F:   fs/reiserfs
  REMOTE PROCESSOR (REMOTEPROC) SUBSYSTEM
  M:    Ohad Ben-Cohen <ohad@wizery.com>
  M:    Bjorn Andersson <bjorn.andersson@linaro.org>
 +M:    Mathieu Poirier <mathieu.poirier@linaro.org>
  L:    linux-remoteproc@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git rproc-next
@@@ -15504,7 -15234,6 +15519,7 @@@ F:   include/linux/remoteproc
  REMOTE PROCESSOR MESSAGING (RPMSG) SUBSYSTEM
  M:    Ohad Ben-Cohen <ohad@wizery.com>
  M:    Bjorn Andersson <bjorn.andersson@linaro.org>
 +M:    Mathieu Poirier <mathieu.poirier@linaro.org>
  L:    linux-remoteproc@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git rpmsg-next
@@@ -15542,7 -15271,7 +15557,7 @@@ RENESAS R-CAR GYROADC DRIVE
  M:    Marek Vasut <marek.vasut@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/iio/adc/renesas,gyroadc.txt
 +F:    Documentation/devicetree/bindings/iio/adc/renesas,rcar-gyroadc.yaml
  F:    drivers/iio/adc/rcar-gyroadc.c
  
  RENESAS R-CAR I2C DRIVERS
@@@ -15646,8 -15375,8 +15661,8 @@@ N:   risc
  K:    riscv
  
  RNBD BLOCK DRIVERS
 -M:    Danil Kipnis <danil.kipnis@cloud.ionos.com>
 -M:    Jack Wang <jinpu.wang@cloud.ionos.com>
 +M:    Md. Haris Iqbal <haris.iqbal@ionos.com>
 +M:    Jack Wang <jinpu.wang@ionos.com>
  L:    linux-block@vger.kernel.org
  S:    Maintained
  F:    drivers/block/rnbd/
@@@ -15695,6 -15424,12 +15710,6 @@@ L:  netdev@vger.kernel.or
  S:    Supported
  F:    drivers/net/ethernet/rocker/
  
 -ROCKETPORT DRIVER
 -S:    Maintained
 -W:    http://www.comtrol.com
 -F:    Documentation/driver-api/serial/rocket.rst
 -F:    drivers/tty/rocket*
 -
  ROCKETPORT EXPRESS/INFINITY DRIVER
  M:    Kevin Cernekee <cernekee@gmail.com>
  L:    linux-serial@vger.kernel.org
@@@ -15733,27 -15468,20 +15748,27 @@@ F:        Documentation/devicetree/bindings/mf
  F:    Documentation/devicetree/bindings/regulator/rohm,bd70528-regulator.txt
  F:    drivers/clk/clk-bd718x7.c
  F:    drivers/gpio/gpio-bd70528.c
 +F:    drivers/gpio/gpio-bd71815.c
  F:    drivers/gpio/gpio-bd71828.c
  F:    drivers/mfd/rohm-bd70528.c
  F:    drivers/mfd/rohm-bd71828.c
  F:    drivers/mfd/rohm-bd718x7.c
 +F:    drivers/mfd/rohm-bd9576.c
  F:    drivers/power/supply/bd70528-charger.c
  F:    drivers/regulator/bd70528-regulator.c
 +F:    drivers/regulator/bd71815-regulator.c
  F:    drivers/regulator/bd71828-regulator.c
  F:    drivers/regulator/bd718x7-regulator.c
 +F:    drivers/regulator/bd9576-regulator.c
  F:    drivers/regulator/rohm-regulator.c
  F:    drivers/rtc/rtc-bd70528.c
  F:    drivers/watchdog/bd70528_wdt.c
 +F:    drivers/watchdog/bd9576_wdt.c
  F:    include/linux/mfd/rohm-bd70528.h
 +F:    include/linux/mfd/rohm-bd71815.h
  F:    include/linux/mfd/rohm-bd71828.h
  F:    include/linux/mfd/rohm-bd718x7.h
 +F:    include/linux/mfd/rohm-bd957x.h
  F:    include/linux/mfd/rohm-generic.h
  F:    include/linux/mfd/rohm-shared.h
  
@@@ -15829,8 -15557,8 +15844,8 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    drivers/net/wireless/realtek/rtl8xxxu/
  
  RTRS TRANSPORT DRIVERS
 -M:    Danil Kipnis <danil.kipnis@cloud.ionos.com>
 -M:    Jack Wang <jinpu.wang@cloud.ionos.com>
 +M:    Md. Haris Iqbal <haris.iqbal@ionos.com>
 +M:    Jack Wang <jinpu.wang@ionos.com>
  L:    linux-rdma@vger.kernel.org
  S:    Maintained
  F:    drivers/infiniband/ulp/rtrs/
@@@ -15922,8 -15650,8 +15937,8 @@@ F:   Documentation/s390/pci.rs
  
  S390 VFIO AP DRIVER
  M:    Tony Krowiak <akrowiak@linux.ibm.com>
 -M:    Pierre Morel <pmorel@linux.ibm.com>
  M:    Halil Pasic <pasic@linux.ibm.com>
 +M:    Jason Herne <jjherne@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  S:    Supported
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -15935,7 -15663,6 +15950,7 @@@ F:   drivers/s390/crypto/vfio_ap_private.
  S390 VFIO-CCW DRIVER
  M:    Cornelia Huck <cohuck@redhat.com>
  M:    Eric Farman <farman@linux.ibm.com>
 +M:    Matthew Rosato <mjrosato@linux.ibm.com>
  R:    Halil Pasic <pasic@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  L:    kvm@vger.kernel.org
@@@ -15946,7 -15673,6 +15961,7 @@@ F:   include/uapi/linux/vfio_ccw.
  
  S390 VFIO-PCI DRIVER
  M:    Matthew Rosato <mjrosato@linux.ibm.com>
 +M:    Eric Farman <farman@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  L:    kvm@vger.kernel.org
  S:    Supported
@@@ -15968,13 -15694,6 +15983,13 @@@ S: Supporte
  W:    http://www.ibm.com/developerworks/linux/linux390/
  F:    drivers/s390/scsi/zfcp_*
  
 +S3C ADC BATTERY DRIVER
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +L:    linux-samsung-soc@vger.kernel.org
 +S:    Odd Fixes
 +F:    drivers/power/supply/s3c_adc_battery.c
 +F:    include/linux/s3c_adc_battery.h
 +
  S3C24XX SD/MMC Driver
  M:    Ben Dooks <ben-linux@fluff.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -16014,7 -15733,7 +16029,7 @@@ F:   Documentation/admin-guide/LSM/SafeSe
  F:    security/safesetid/
  
  SAMSUNG AUDIO (ASoC) DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
@@@ -16022,7 -15741,7 +16037,7 @@@ F:   Documentation/devicetree/bindings/so
  F:    sound/soc/samsung/
  
  SAMSUNG EXYNOS PSEUDO RANDOM NUMBER GENERATOR (RNG) DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
@@@ -16057,7 -15776,7 +16072,7 @@@ S:   Maintaine
  F:    drivers/platform/x86/samsung-laptop.c
  
  SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -16082,7 -15801,7 +16097,7 @@@ F:   drivers/media/platform/s3c-camif
  F:    include/media/drv-intf/s3c_camif.h
  
  SAMSUNG S3FWRN5 NFC DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Krzysztof Opasiak <k.opasiak@samsung.com>
  L:    linux-nfc@lists.01.org (moderated for non-subscribers)
  S:    Maintained
@@@ -16102,7 -15821,7 +16117,7 @@@ S:   Supporte
  F:    drivers/media/i2c/s5k5baf.c
  
  SAMSUNG S5P Security SubSystem (SSS) DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Vladimir Zapolskiy <vz@mleia.com>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -16134,7 -15853,7 +16149,7 @@@ F:   include/linux/clk/samsung.
  F:    include/linux/platform_data/clk-s3c2410.h
  
  SAMSUNG SPI DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Andi Shyti <andi@etezian.org>
  L:    linux-spi@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -16897,13 -16616,6 +16912,13 @@@ F: drivers/firmware/arm_sdei.
  F:    include/linux/arm_sdei.h
  F:    include/uapi/linux/arm_sdei.h
  
 +SOFTWARE NODES
 +R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 +R:    Heikki Krogerus <heikki.krogerus@linux.intel.com>
 +L:    linux-acpi@vger.kernel.org
 +S:    Maintained
 +F:    drivers/base/swnode.c
 +
  SOFTWARE RAID (Multiple Disks) SUPPORT
  M:    Song Liu <song@kernel.org>
  L:    linux-raid@vger.kernel.org
@@@ -17166,8 -16878,6 +17181,8 @@@ F:   arch/arm/mach-spear
  
  SPI NOR SUBSYSTEM
  M:    Tudor Ambarus <tudor.ambarus@microchip.com>
 +R:    Michael Walle <michael@walle.cc>
 +R:    Pratyush Yadav <p.yadav@ti.com>
  L:    linux-mtd@lists.infradead.org
  S:    Maintained
  W:    http://www.linux-mtd.infradead.org/
@@@ -17192,10 -16902,8 +17207,10 @@@ F: tools/spi
  
  SPIDERNET NETWORK DRIVER for CELL
  M:    Ishizaki Kou <kou.ishizaki@toshiba.co.jp>
 +M:    Geoff Levand <geoff@infradead.org>
  L:    netdev@vger.kernel.org
 -S:    Supported
 +L:    linuxppc-dev@lists.ozlabs.org
 +S:    Maintained
  F:    Documentation/networking/device_drivers/ethernet/toshiba/spider_net.rst
  F:    drivers/net/ethernet/toshiba/spider_net*
  
@@@ -17237,7 -16945,7 +17252,7 @@@ M:   Lorenzo Bianconi <lorenzo.bianconi83
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  W:    http://www.st.com/
 -F:    Documentation/devicetree/bindings/iio/imu/st_lsm6dsx.txt
 +F:    Documentation/devicetree/bindings/iio/imu/st,lsm6dsx.yaml
  F:    drivers/iio/imu/st_lsm6dsx/
  
  ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER
@@@ -17249,24 -16957,16 +17264,24 @@@ F:        Documentation/devicetree/bindings/me
  F:    drivers/media/i2c/st-mipid02.c
  
  ST STM32 I2C/SMBUS DRIVER
 -M:    Pierre-Yves MORDRET <pierre-yves.mordret@st.com>
 +M:    Pierre-Yves MORDRET <pierre-yves.mordret@foss.st.com>
 +M:    Alain Volmat <alain.volmat@foss.st.com>
  L:    linux-i2c@vger.kernel.org
  S:    Maintained
  F:    drivers/i2c/busses/i2c-stm32*
  
 +ST STPDDC60 DRIVER
 +M:    Daniel Nilsson <daniel.nilsson@flex.com>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/hwmon/stpddc60.rst
 +F:    drivers/hwmon/pmbus/stpddc60.c
 +
  ST VL53L0X ToF RANGER(I2C) IIO DRIVER
  M:    Song Qiang <songqiang1304521@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/proximity/vl53l0x.txt
 +F:    Documentation/devicetree/bindings/iio/proximity/st,vl53l0x.yaml
  F:    drivers/iio/proximity/vl53l0x-i2c.c
  
  STABLE BRANCH
@@@ -17283,6 -16983,12 +17298,6 @@@ L:  linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/staging/media/atomisp/
  
 -STAGING - COMEDI
 -M:    Ian Abbott <abbotti@mev.co.uk>
 -M:    H Hartley Sweeten <hsweeten@visionengravers.com>
 -S:    Odd Fixes
 -F:    drivers/staging/comedi/
 -
  STAGING - FIELDBUS SUBSYSTEM
  M:    Sven Van Asbroeck <TheSven73@gmail.com>
  S:    Maintained
@@@ -17349,7 -17055,7 +17364,7 @@@ F:   drivers/staging/vt665?
  
  STAGING SUBSYSTEM
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 -L:    devel@driverdev.osuosl.org
 +L:    linux-staging@lists.linux.dev
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
  F:    drivers/staging/
@@@ -17376,7 -17082,7 +17391,7 @@@ F:   kernel/jump_label.
  F:    kernel/static_call.c
  
  STI AUDIO (ASoC) DRIVERS
 -M:    Arnaud Pouliquen <arnaud.pouliquen@st.com>
 +M:    Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Maintained
  F:    Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt
@@@ -17396,15 -17102,15 +17411,15 @@@ T:        git git://linuxtv.org/media_tree.gi
  F:    drivers/media/usb/stk1160/
  
  STM32 AUDIO (ASoC) DRIVERS
 -M:    Olivier Moysan <olivier.moysan@st.com>
 -M:    Arnaud Pouliquen <arnaud.pouliquen@st.com>
 +M:    Olivier Moysan <olivier.moysan@foss.st.com>
 +M:    Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Maintained
  F:    Documentation/devicetree/bindings/iio/adc/st,stm32-*.yaml
  F:    sound/soc/stm/
  
  STM32 TIMER/LPTIMER DRIVERS
 -M:    Fabrice Gasnier <fabrice.gasnier@st.com>
 +M:    Fabrice Gasnier <fabrice.gasnier@foss.st.com>
  S:    Maintained
  F:    Documentation/ABI/testing/*timer-stm32
  F:    Documentation/devicetree/bindings/*/*stm32-*timer*
@@@ -17414,7 -17120,7 +17429,7 @@@ F:   include/linux/*/stm32-*tim
  
  STMMAC ETHERNET DRIVER
  M:    Giuseppe Cavallaro <peppe.cavallaro@st.com>
 -M:    Alexandre Torgue <alexandre.torgue@st.com>
 +M:    Alexandre Torgue <alexandre.torgue@foss.st.com>
  M:    Jose Abreu <joabreu@synopsys.com>
  L:    netdev@vger.kernel.org
  S:    Supported
@@@ -17580,7 -17286,7 +17595,7 @@@ F:   drivers/spi/spi-dw
  SYNOPSYS DESIGNWARE AXI DMAC DRIVER
  M:    Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/dma/snps,dw-axi-dmac.txt
 +F:    Documentation/devicetree/bindings/dma/snps,dw-axi-dmac.yaml
  F:    drivers/dma/dw-axi-dmac/
  
  SYNOPSYS DESIGNWARE DMAC DRIVER
@@@ -17996,7 -17702,7 +18011,7 @@@ TEXAS INSTRUMENTS' DAC7612 DAC DRIVE
  M:    Ricardo Ribalda <ribalda@kernel.org>
  L:    linux-iio@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/iio/dac/ti,dac7612.txt
 +F:    Documentation/devicetree/bindings/iio/dac/ti,dac7612.yaml
  F:    drivers/iio/dac/ti-dac7612.c
  
  TEXAS INSTRUMENTS DMA DRIVERS
@@@ -18138,13 -17844,6 +18153,13 @@@ M: Robert Richter <rric@kernel.org
  S:    Odd Fixes
  F:    drivers/gpio/gpio-thunderx.c
  
 +TI ADS131E0X ADC SERIES DRIVER
 +M:    Tomislav Denis <tomislav.denis@avl.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/adc/ti,ads131e08.yaml
 +F:    drivers/iio/adc/ti-ads131e08.c
 +
  TI AM437X VPFE DRIVER
  M:    "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
  L:    linux-media@vger.kernel.org
@@@ -18163,6 -17862,7 +18178,6 @@@ S:   Maintaine
  F:    drivers/thermal/ti-soc-thermal/
  
  TI BQ27XXX POWER SUPPLY DRIVER
 -R:    Dan Murphy <dmurphy@ti.com>
  F:    drivers/power/supply/bq27xxx_battery.c
  F:    drivers/power/supply/bq27xxx_battery_i2c.c
  F:    include/linux/power/bq27xxx_battery.h
@@@ -18253,6 -17953,29 +18268,6 @@@ S:  Maintaine
  F:    sound/soc/codecs/isabelle*
  F:    sound/soc/codecs/lm49453*
  
 -TI LP855x BACKLIGHT DRIVER
 -M:    Milo Kim <milo.kim@ti.com>
 -S:    Maintained
 -F:    Documentation/driver-api/backlight/lp855x-driver.rst
 -F:    drivers/video/backlight/lp855x_bl.c
 -F:    include/linux/platform_data/lp855x.h
 -
 -TI LP8727 CHARGER DRIVER
 -M:    Milo Kim <milo.kim@ti.com>
 -S:    Maintained
 -F:    drivers/power/supply/lp8727_charger.c
 -F:    include/linux/platform_data/lp8727.h
 -
 -TI LP8788 MFD DRIVER
 -M:    Milo Kim <milo.kim@ti.com>
 -S:    Maintained
 -F:    drivers/iio/adc/lp8788_adc.c
 -F:    drivers/leds/leds-lp8788.c
 -F:    drivers/mfd/lp8788*.c
 -F:    drivers/power/supply/lp8788-charger.c
 -F:    drivers/regulator/lp8788-*.c
 -F:    include/linux/mfd/lp8788*.h
 -
  TI NETCP ETHERNET DRIVER
  M:    Wingman Kwok <w-kwok2@ti.com>
  M:    Murali Karicheri <m-karicheri2@ti.com>
@@@ -18273,6 -17996,13 +18288,6 @@@ L:  alsa-devel@alsa-project.org (moderat
  S:    Odd Fixes
  F:    sound/soc/codecs/tas571x*
  
 -TI TCAN4X5X DEVICE DRIVER
 -M:    Dan Murphy <dmurphy@ti.com>
 -L:    linux-can@vger.kernel.org
 -S:    Maintained
 -F:    Documentation/devicetree/bindings/net/can/tcan4x5x.txt
 -F:    drivers/net/can/m_can/tcan4x5x*
 -
  TI TRF7970A NFC DRIVER
  M:    Mark Greer <mgreer@animalcreek.com>
  L:    linux-wireless@vger.kernel.org
@@@ -19372,15 -19102,6 +19387,15 @@@ W: https://virtio-mem.gitlab.io
  F:    drivers/virtio/virtio_mem.c
  F:    include/uapi/linux/virtio_mem.h
  
 +VIRTIO SOUND DRIVER
 +M:    Anton Yakovlev <anton.yakovlev@opensynergy.com>
 +M:    "Michael S. Tsirkin" <mst@redhat.com>
 +L:    virtualization@lists.linux-foundation.org
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    include/uapi/linux/virtio_snd.h
 +F:    sound/virtio/*
 +
  VIRTUAL BOX GUEST DEVICE DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  M:    Arnd Bergmann <arnd@arndb.de>
@@@ -19429,7 -19150,7 +19444,7 @@@ VME SUBSYSTE
  M:    Martyn Welch <martyn@welchs.me.uk>
  M:    Manohar Vanga <manohar.vanga@gmail.com>
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 -L:    devel@driverdev.osuosl.org
 +L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
  F:    Documentation/driver-api/vme.rst
@@@ -19519,7 -19240,7 +19534,7 @@@ F:   drivers/net/vrf.
  VSPRINTF
  M:    Petr Mladek <pmladek@suse.com>
  M:    Steven Rostedt <rostedt@goodmis.org>
 -M:    Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
 +M:    Sergey Senozhatsky <senozhatsky@chromium.org>
  R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  R:    Rasmus Villemoes <linux@rasmusvillemoes.dk>
  S:    Maintained
@@@ -19673,6 -19394,7 +19688,6 @@@ F:   Documentation/devicetree/bindings/so
  F:    Documentation/hwmon/wm83??.rst
  F:    arch/arm/mach-s3c/mach-crag6410*
  F:    drivers/clk/clk-wm83*.c
 -F:    drivers/extcon/extcon-arizona.c
  F:    drivers/gpio/gpio-*wm*.c
  F:    drivers/gpio/gpio-arizona.c
  F:    drivers/hwmon/wm83??-hwmon.c
@@@ -19696,7 -19418,7 +19711,7 @@@ F:   include/linux/mfd/wm8400
  F:    include/linux/regulator/arizona*
  F:    include/linux/wm97xx.h
  F:    include/sound/wm????.h
 -F:    sound/soc/codecs/arizona.?
 +F:    sound/soc/codecs/arizona*
  F:    sound/soc/codecs/cs47l24*
  F:    sound/soc/codecs/wm*
  
@@@ -20169,7 -19891,7 +20184,7 @@@ F:   drivers/staging/media/zoran
  ZRAM COMPRESSED RAM BLOCK DEVICE DRVIER
  M:    Minchan Kim <minchan@kernel.org>
  M:    Nitin Gupta <ngupta@vflare.org>
 -R:    Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
 +R:    Sergey Senozhatsky <senozhatsky@chromium.org>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/admin-guide/blockdev/zram.rst
@@@ -20183,7 -19905,7 +20198,7 @@@ F:   drivers/tty/serial/zs.
  ZSMALLOC COMPRESSED SLAB MEMORY ALLOCATOR
  M:    Minchan Kim <minchan@kernel.org>
  M:    Nitin Gupta <ngupta@vflare.org>
 -R:    Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
 +R:    Sergey Senozhatsky <senozhatsky@chromium.org>
  L:    linux-mm@kvack.org
  S:    Maintained
  F:    Documentation/vm/zsmalloc.rst
diff --combined arch/Kconfig
@@@ -631,7 -631,8 +631,7 @@@ config ARCH_SUPPORTS_LTO_CLANG_THI
  config HAS_LTO_CLANG
        def_bool y
        # Clang >= 11: https://github.com/ClangBuiltLinux/linux/issues/510
 -      depends on CC_IS_CLANG && CLANG_VERSION >= 110000 && LD_IS_LLD
 -      depends on $(success,test $(LLVM_IAS) -eq 1)
 +      depends on CC_IS_CLANG && CLANG_VERSION >= 110000 && LD_IS_LLD && AS_IS_LLVM
        depends on $(success,$(NM) --help | head -n 1 | grep -qi llvm)
        depends on $(success,$(AR) --help | head -n 1 | grep -qi llvm)
        depends on ARCH_SUPPORTS_LTO_CLANG
@@@ -691,51 -692,6 +691,51 @@@ config LTO_CLANG_THI
          If unsure, say Y.
  endchoice
  
 +config ARCH_SUPPORTS_CFI_CLANG
 +      bool
 +      help
 +        An architecture should select this option if it can support Clang's
 +        Control-Flow Integrity (CFI) checking.
 +
 +config CFI_CLANG
 +      bool "Use Clang's Control Flow Integrity (CFI)"
 +      depends on LTO_CLANG && ARCH_SUPPORTS_CFI_CLANG
 +      # Clang >= 12:
 +      # - https://bugs.llvm.org/show_bug.cgi?id=46258
 +      # - https://bugs.llvm.org/show_bug.cgi?id=47479
 +      depends on CLANG_VERSION >= 120000
 +      select KALLSYMS
 +      help
 +        This option enables Clang’s forward-edge Control Flow Integrity
 +        (CFI) checking, where the compiler injects a runtime check to each
 +        indirect function call to ensure the target is a valid function with
 +        the correct static type. This restricts possible call targets and
 +        makes it more difficult for an attacker to exploit bugs that allow
 +        the modification of stored function pointers. More information can be
 +        found from Clang's documentation:
 +
 +          https://clang.llvm.org/docs/ControlFlowIntegrity.html
 +
 +config CFI_CLANG_SHADOW
 +      bool "Use CFI shadow to speed up cross-module checks"
 +      default y
 +      depends on CFI_CLANG && MODULES
 +      help
 +        If you select this option, the kernel builds a fast look-up table of
 +        CFI check functions in loaded modules to reduce performance overhead.
 +
 +        If unsure, say Y.
 +
 +config CFI_PERMISSIVE
 +      bool "Use CFI in permissive mode"
 +      depends on CFI_CLANG
 +      help
 +        When selected, Control Flow Integrity (CFI) violations result in a
 +        warning instead of a kernel panic. This option should only be used
 +        for finding indirect call type mismatches during development.
 +
 +        If unsure, say N.
 +
  config HAVE_ARCH_WITHIN_STACK_FRAMES
        bool
        help
@@@ -829,17 -785,6 +829,17 @@@ config HAVE_ARCH_TRANSPARENT_HUGEPAGE_P
  config HAVE_ARCH_HUGE_VMAP
        bool
  
 +#
 +#  Archs that select this would be capable of PMD-sized vmaps (i.e.,
 +#  arch_vmap_pmd_supported() returns true), and they must make no assumptions
 +#  that vmalloc memory is mapped with PAGE_SIZE ptes. The VM_NO_HUGE_VMAP flag
 +#  can be used to prohibit arch-specific allocations from using hugepages to
 +#  help with this (e.g., modules may require it).
 +#
 +config HAVE_ARCH_HUGE_VMALLOC
 +      depends on HAVE_ARCH_HUGE_VMAP
 +      bool
 +
  config ARCH_WANT_HUGE_PMD_SHARE
        bool
  
@@@ -1068,6 -1013,13 +1068,13 @@@ config COMPAT_32BIT_TIM
  config ARCH_NO_PREEMPT
        bool
  
+ config ARCH_EPHEMERAL_INODES
+       def_bool n
+       help
+         An arch should select this symbol if it doesn't keep track of inode
+         instances on its own, but instead relies on something else (e.g. the
+         host kernel for an UML kernel).
  config ARCH_SUPPORTS_RT
        bool
  
@@@ -1109,29 -1061,6 +1116,29 @@@ config VMAP_STAC
          backing virtual mappings with real shadow memory, and KASAN_VMALLOC
          must be enabled.
  
 +config HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET
 +      def_bool n
 +      help
 +        An arch should select this symbol if it can support kernel stack
 +        offset randomization with calls to add_random_kstack_offset()
 +        during syscall entry and choose_random_kstack_offset() during
 +        syscall exit. Careful removal of -fstack-protector-strong and
 +        -fstack-protector should also be applied to the entry code and
 +        closely examined, as the artificial stack bump looks like an array
 +        to the compiler, so it will attempt to add canary checks regardless
 +        of the static branch state.
 +
 +config RANDOMIZE_KSTACK_OFFSET_DEFAULT
 +      bool "Randomize kernel stack offset on syscall entry"
 +      depends on HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET
 +      help
 +        The kernel stack offset can be randomized (after pt_regs) by
 +        roughly 5 bits of entropy, frustrating memory corruption
 +        attacks that depend on stack address determinism or
 +        cross-syscall address exposures. This feature is controlled
 +        by kernel boot param "randomize_kstack_offset=on/off", and this
 +        config chooses the default boot state.
 +
  config ARCH_OPTIONAL_KERNEL_RWX
        def_bool n
  
  550   common  process_madvise                 sys_process_madvise
  551   common  epoll_pwait2                    sys_epoll_pwait2
  552   common  mount_setattr                   sys_mount_setattr
 +553   common  quotactl_path                   sys_quotactl_path
+ 554   common  landlock_create_ruleset         sys_landlock_create_ruleset
+ 555   common  landlock_add_rule               sys_landlock_add_rule
+ 556   common  landlock_restrict_self          sys_landlock_restrict_self
  440   common  process_madvise                 sys_process_madvise
  441   common  epoll_pwait2                    sys_epoll_pwait2
  442   common  mount_setattr                   sys_mount_setattr
 +443   common  quotactl_path                   sys_quotactl_path
+ 444   common  landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   common  landlock_add_rule               sys_landlock_add_rule
+ 446   common  landlock_restrict_self          sys_landlock_restrict_self
@@@ -893,8 -893,12 +893,14 @@@ __SYSCALL(__NR_process_madvise, sys_pro
  __SYSCALL(__NR_epoll_pwait2, compat_sys_epoll_pwait2)
  #define __NR_mount_setattr 442
  __SYSCALL(__NR_mount_setattr, sys_mount_setattr)
 +#define __NR_quotactl_path 443
 +__SYSCALL(__NR_quotactl_path, sys_quotactl_path)
+ #define __NR_landlock_create_ruleset 444
+ __SYSCALL(__NR_landlock_create_ruleset, sys_landlock_create_ruleset)
+ #define __NR_landlock_add_rule 445
+ __SYSCALL(__NR_landlock_add_rule, sys_landlock_add_rule)
+ #define __NR_landlock_restrict_self 446
+ __SYSCALL(__NR_landlock_restrict_self, sys_landlock_restrict_self)
  
  /*
   * Please add new compat syscalls above this comment and update
  440   common  process_madvise                 sys_process_madvise
  441   common  epoll_pwait2                    sys_epoll_pwait2
  442   common  mount_setattr                   sys_mount_setattr
 +443   common  quotactl_path                   sys_quotactl_path
+ 444   common  landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   common  landlock_add_rule               sys_landlock_add_rule
+ 446   common  landlock_restrict_self          sys_landlock_restrict_self
  440   common  process_madvise                 sys_process_madvise
  441   common  epoll_pwait2                    sys_epoll_pwait2
  442   common  mount_setattr                   sys_mount_setattr
 +443   common  quotactl_path                   sys_quotactl_path
+ 444   common  landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   common  landlock_add_rule               sys_landlock_add_rule
+ 446   common  landlock_restrict_self          sys_landlock_restrict_self
  440   common  process_madvise                 sys_process_madvise
  441   common  epoll_pwait2                    sys_epoll_pwait2
  442   common  mount_setattr                   sys_mount_setattr
 +443   common  quotactl_path                   sys_quotactl_path
+ 444   common  landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   common  landlock_add_rule               sys_landlock_add_rule
+ 446   common  landlock_restrict_self          sys_landlock_restrict_self
  440   n32     process_madvise                 sys_process_madvise
  441   n32     epoll_pwait2                    compat_sys_epoll_pwait2
  442   n32     mount_setattr                   sys_mount_setattr
 +443   n32     quotactl_path                   sys_quotactl_path
+ 444   n32     landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   n32     landlock_add_rule               sys_landlock_add_rule
+ 446   n32     landlock_restrict_self          sys_landlock_restrict_self
  440   n64     process_madvise                 sys_process_madvise
  441   n64     epoll_pwait2                    sys_epoll_pwait2
  442   n64     mount_setattr                   sys_mount_setattr
 +443   n64     quotactl_path                   sys_quotactl_path
+ 444   n64     landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   n64     landlock_add_rule               sys_landlock_add_rule
+ 446   n64     landlock_restrict_self          sys_landlock_restrict_self
  440   o32     process_madvise                 sys_process_madvise
  441   o32     epoll_pwait2                    sys_epoll_pwait2                compat_sys_epoll_pwait2
  442   o32     mount_setattr                   sys_mount_setattr
 +443   o32     quotactl_path                   sys_quotactl_path
+ 444   o32     landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   o32     landlock_add_rule               sys_landlock_add_rule
+ 446   o32     landlock_restrict_self          sys_landlock_restrict_self
  440   common  process_madvise                 sys_process_madvise
  441   common  epoll_pwait2                    sys_epoll_pwait2                compat_sys_epoll_pwait2
  442   common  mount_setattr                   sys_mount_setattr
 +443   common  quotactl_path                   sys_quotactl_path
+ 444   common  landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   common  landlock_add_rule               sys_landlock_add_rule
+ 446   common  landlock_restrict_self          sys_landlock_restrict_self
  440   common  process_madvise                 sys_process_madvise
  441   common  epoll_pwait2                    sys_epoll_pwait2                compat_sys_epoll_pwait2
  442   common  mount_setattr                   sys_mount_setattr
 +443   common  quotactl_path                   sys_quotactl_path
+ 444   common  landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   common  landlock_add_rule               sys_landlock_add_rule
+ 446   common  landlock_restrict_self          sys_landlock_restrict_self
  440  common   process_madvise         sys_process_madvise             sys_process_madvise
  441  common   epoll_pwait2            sys_epoll_pwait2                compat_sys_epoll_pwait2
  442  common   mount_setattr           sys_mount_setattr               sys_mount_setattr
 +443  common   quotactl_path           sys_quotactl_path               sys_quotactl_path
+ 444  common   landlock_create_ruleset sys_landlock_create_ruleset     sys_landlock_create_ruleset
+ 445  common   landlock_add_rule       sys_landlock_add_rule           sys_landlock_add_rule
+ 446  common   landlock_restrict_self  sys_landlock_restrict_self      sys_landlock_restrict_self
  440   common  process_madvise                 sys_process_madvise
  441   common  epoll_pwait2                    sys_epoll_pwait2
  442   common  mount_setattr                   sys_mount_setattr
 +443   common  quotactl_path                   sys_quotactl_path
+ 444   common  landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   common  landlock_add_rule               sys_landlock_add_rule
+ 446   common  landlock_restrict_self          sys_landlock_restrict_self
  440   common  process_madvise                 sys_process_madvise
  441   common  epoll_pwait2                    sys_epoll_pwait2                compat_sys_epoll_pwait2
  442   common  mount_setattr                   sys_mount_setattr
 +443   common  quotactl_path                   sys_quotactl_path
+ 444   common  landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   common  landlock_add_rule               sys_landlock_add_rule
+ 446   common  landlock_restrict_self          sys_landlock_restrict_self
  440   i386    process_madvise         sys_process_madvise
  441   i386    epoll_pwait2            sys_epoll_pwait2                compat_sys_epoll_pwait2
  442   i386    mount_setattr           sys_mount_setattr
 +443   i386    quotactl_path           sys_quotactl_path
+ 444   i386    landlock_create_ruleset sys_landlock_create_ruleset
+ 445   i386    landlock_add_rule       sys_landlock_add_rule
+ 446   i386    landlock_restrict_self  sys_landlock_restrict_self
  440   common  process_madvise         sys_process_madvise
  441   common  epoll_pwait2            sys_epoll_pwait2
  442   common  mount_setattr           sys_mount_setattr
 +443   common  quotactl_path           sys_quotactl_path
+ 444   common  landlock_create_ruleset sys_landlock_create_ruleset
+ 445   common  landlock_add_rule       sys_landlock_add_rule
+ 446   common  landlock_restrict_self  sys_landlock_restrict_self
  
  #
  # Due to a historical design error, certain syscalls are numbered differently
  440   common  process_madvise                 sys_process_madvise
  441   common  epoll_pwait2                    sys_epoll_pwait2
  442   common  mount_setattr                   sys_mount_setattr
 +443   common  quotactl_path                   sys_quotactl_path
+ 444   common  landlock_create_ruleset         sys_landlock_create_ruleset
+ 445   common  landlock_add_rule               sys_landlock_add_rule
+ 446   common  landlock_restrict_self          sys_landlock_restrict_self
@@@ -59,10 -59,10 +59,11 @@@ LSM_HOOK(int, 0, fs_context_dup, struc
  LSM_HOOK(int, -ENOPARAM, fs_context_parse_param, struct fs_context *fc,
         struct fs_parameter *param)
  LSM_HOOK(int, 0, sb_alloc_security, struct super_block *sb)
+ LSM_HOOK(void, LSM_RET_VOID, sb_delete, struct super_block *sb)
  LSM_HOOK(void, LSM_RET_VOID, sb_free_security, struct super_block *sb)
  LSM_HOOK(void, LSM_RET_VOID, sb_free_mnt_opts, void *mnt_opts)
  LSM_HOOK(int, 0, sb_eat_lsm_opts, char *orig, void **mnt_opts)
 +LSM_HOOK(int, 0, sb_mnt_opts_compat, struct super_block *sb, void *mnt_opts)
  LSM_HOOK(int, 0, sb_remount, struct super_block *sb, void *mnt_opts)
  LSM_HOOK(int, 0, sb_kern_mount, struct super_block *sb)
  LSM_HOOK(int, 0, sb_show_options, struct seq_file *m, struct super_block *sb)
@@@ -204,10 -204,7 +205,10 @@@ LSM_HOOK(int, 0, task_fix_setgid, struc
  LSM_HOOK(int, 0, task_setpgid, struct task_struct *p, pid_t pgid)
  LSM_HOOK(int, 0, task_getpgid, struct task_struct *p)
  LSM_HOOK(int, 0, task_getsid, struct task_struct *p)
 -LSM_HOOK(void, LSM_RET_VOID, task_getsecid, struct task_struct *p, u32 *secid)
 +LSM_HOOK(void, LSM_RET_VOID, task_getsecid_subj,
 +       struct task_struct *p, u32 *secid)
 +LSM_HOOK(void, LSM_RET_VOID, task_getsecid_obj,
 +       struct task_struct *p, u32 *secid)
  LSM_HOOK(int, 0, task_setnice, struct task_struct *p, int nice)
  LSM_HOOK(int, 0, task_setioprio, struct task_struct *p, int ioprio)
  LSM_HOOK(int, 0, task_getioprio, struct task_struct *p)
   *    allocated.
   *    @sb contains the super_block structure to be modified.
   *    Return 0 if operation was successful.
+  * @sb_delete:
+  *    Release objects tied to a superblock (e.g. inodes).
+  *    @sb contains the super_block structure being released.
   * @sb_free_security:
   *    Deallocate and clear the sb->s_security field.
   *    @sb contains the super_block structure to be modified.
   *    @orig the original mount data copied from userspace.
   *    @copy copied data which will be passed to the security module.
   *    Returns 0 if the copy was successful.
 + * @sb_mnt_opts_compat:
 + *    Determine if the new mount options in @mnt_opts are allowed given
 + *    the existing mounted filesystem at @sb.
 + *    @sb superblock being compared
 + *    @mnt_opts new mount options
 + *    Return 0 if options are compatible.
   * @sb_remount:
   *    Extracts security system specific mount options and verifies no changes
   *    are being made to those options.
   *    @p.
   *    @p contains the task_struct for the process.
   *    Return 0 if permission is granted.
 - * @task_getsecid:
 - *    Retrieve the security identifier of the process @p.
 - *    @p contains the task_struct for the process and place is into @secid.
 + * @task_getsecid_subj:
 + *    Retrieve the subjective security identifier of the task_struct in @p
 + *    and return it in @secid.  Special care must be taken to ensure that @p
 + *    is the either the "current" task, or the caller has exclusive access
 + *    to @p.
 + *    In case of failure, @secid will be set to zero.
 + * @task_getsecid_obj:
 + *    Retrieve the objective security identifier of the task_struct in @p
 + *    and return it in @secid.
   *    In case of failure, @secid will be set to zero.
   *
   * @task_setnice:
@@@ -1585,6 -1576,7 +1588,7 @@@ struct lsm_blob_sizes 
        int     lbs_cred;
        int     lbs_file;
        int     lbs_inode;
+       int     lbs_superblock;
        int     lbs_ipc;
        int     lbs_msg_msg;
        int     lbs_task;
diff --combined include/linux/security.h
@@@ -291,10 -291,10 +291,11 @@@ void security_bprm_committed_creds(stru
  int security_fs_context_dup(struct fs_context *fc, struct fs_context *src_fc);
  int security_fs_context_parse_param(struct fs_context *fc, struct fs_parameter *param);
  int security_sb_alloc(struct super_block *sb);
+ void security_sb_delete(struct super_block *sb);
  void security_sb_free(struct super_block *sb);
  void security_free_mnt_opts(void **mnt_opts);
  int security_sb_eat_lsm_opts(char *options, void **mnt_opts);
 +int security_sb_mnt_opts_compat(struct super_block *sb, void *mnt_opts);
  int security_sb_remount(struct super_block *sb, void *mnt_opts);
  int security_sb_kern_mount(struct super_block *sb);
  int security_sb_show_options(struct seq_file *m, struct super_block *sb);
@@@ -415,8 -415,7 +416,8 @@@ int security_task_fix_setgid(struct cre
  int security_task_setpgid(struct task_struct *p, pid_t pgid);
  int security_task_getpgid(struct task_struct *p);
  int security_task_getsid(struct task_struct *p);
 -void security_task_getsecid(struct task_struct *p, u32 *secid);
 +void security_task_getsecid_subj(struct task_struct *p, u32 *secid);
 +void security_task_getsecid_obj(struct task_struct *p, u32 *secid);
  int security_task_setnice(struct task_struct *p, int nice);
  int security_task_setioprio(struct task_struct *p, int ioprio);
  int security_task_getioprio(struct task_struct *p);
@@@ -633,6 -632,9 +634,9 @@@ static inline int security_sb_alloc(str
        return 0;
  }
  
+ static inline void security_sb_delete(struct super_block *sb)
+ { }
  static inline void security_sb_free(struct super_block *sb)
  { }
  
@@@ -648,13 -650,6 +652,13 @@@ static inline int security_sb_remount(s
        return 0;
  }
  
 +static inline int security_sb_mnt_opts_compat(struct super_block *sb,
 +                                            void *mnt_opts)
 +{
 +      return 0;
 +}
 +
 +
  static inline int security_sb_kern_mount(struct super_block *sb)
  {
        return 0;
@@@ -1107,12 -1102,7 +1111,12 @@@ static inline int security_task_getsid(
        return 0;
  }
  
 -static inline void security_task_getsecid(struct task_struct *p, u32 *secid)
 +static inline void security_task_getsecid_subj(struct task_struct *p, u32 *secid)
 +{
 +      *secid = 0;
 +}
 +
 +static inline void security_task_getsecid_obj(struct task_struct *p, u32 *secid)
  {
        *secid = 0;
  }
diff --combined include/linux/syscalls.h
@@@ -69,6 -69,8 +69,8 @@@ struct io_uring_params
  struct clone_args;
  struct open_how;
  struct mount_attr;
+ struct landlock_ruleset_attr;
+ enum landlock_rule_type;
  
  #include <linux/types.h>
  #include <linux/aio_abi.h>
@@@ -483,8 -485,6 +485,8 @@@ asmlinkage long sys_pipe2(int __user *f
  /* fs/quota.c */
  asmlinkage long sys_quotactl(unsigned int cmd, const char __user *special,
                                qid_t id, void __user *addr);
 +asmlinkage long sys_quotactl_path(unsigned int cmd, const char __user *mountpoint,
 +                                qid_t id, void __user *addr);
  
  /* fs/readdir.c */
  asmlinkage long sys_getdents64(unsigned int fd,
@@@ -1043,6 -1043,11 +1045,11 @@@ asmlinkage long sys_pidfd_send_signal(i
                                       siginfo_t __user *info,
                                       unsigned int flags);
  asmlinkage long sys_pidfd_getfd(int pidfd, int fd, unsigned int flags);
+ asmlinkage long sys_landlock_create_ruleset(const struct landlock_ruleset_attr __user *attr,
+               size_t size, __u32 flags);
+ asmlinkage long sys_landlock_add_rule(int ruleset_fd, enum landlock_rule_type rule_type,
+               const void __user *rule_attr, __u32 flags);
+ asmlinkage long sys_landlock_restrict_self(int ruleset_fd, __u32 flags);
  
  /*
   * Architecture-specific system calls
@@@ -863,11 -863,15 +863,18 @@@ __SYSCALL(__NR_process_madvise, sys_pro
  __SC_COMP(__NR_epoll_pwait2, sys_epoll_pwait2, compat_sys_epoll_pwait2)
  #define __NR_mount_setattr 442
  __SYSCALL(__NR_mount_setattr, sys_mount_setattr)
 +#define __NR_quotactl_path 443
 +__SYSCALL(__NR_quotactl_path, sys_quotactl_path)
 +
+ #define __NR_landlock_create_ruleset 444
+ __SYSCALL(__NR_landlock_create_ruleset, sys_landlock_create_ruleset)
+ #define __NR_landlock_add_rule 445
+ __SYSCALL(__NR_landlock_add_rule, sys_landlock_add_rule)
+ #define __NR_landlock_restrict_self 446
+ __SYSCALL(__NR_landlock_restrict_self, sys_landlock_restrict_self)
  #undef __NR_syscalls
- #define __NR_syscalls 444
+ #define __NR_syscalls 447
  
  /*
   * 32 bit systems traditionally used different
diff --combined kernel/sys_ni.c
@@@ -99,7 -99,6 +99,7 @@@ COND_SYSCALL(flock)
  
  /* fs/quota.c */
  COND_SYSCALL(quotactl);
 +COND_SYSCALL(quotactl_path);
  
  /* fs/readdir.c */
  
@@@ -267,6 -266,11 +267,11 @@@ COND_SYSCALL(request_key)
  COND_SYSCALL(keyctl);
  COND_SYSCALL_COMPAT(keyctl);
  
+ /* security/landlock/syscalls.c */
+ COND_SYSCALL(landlock_create_ruleset);
+ COND_SYSCALL(landlock_add_rule);
+ COND_SYSCALL(landlock_restrict_self);
  /* arch/example/kernel/sys_example.c */
  
  /* mm/fadvise.c */
diff --combined security/security.c
@@@ -203,6 -203,7 +203,7 @@@ static void __init lsm_set_blob_sizes(s
        lsm_set_blob_size(&needed->lbs_inode, &blob_sizes.lbs_inode);
        lsm_set_blob_size(&needed->lbs_ipc, &blob_sizes.lbs_ipc);
        lsm_set_blob_size(&needed->lbs_msg_msg, &blob_sizes.lbs_msg_msg);
+       lsm_set_blob_size(&needed->lbs_superblock, &blob_sizes.lbs_superblock);
        lsm_set_blob_size(&needed->lbs_task, &blob_sizes.lbs_task);
  }
  
@@@ -333,12 -334,13 +334,13 @@@ static void __init ordered_lsm_init(voi
        for (lsm = ordered_lsms; *lsm; lsm++)
                prepare_lsm(*lsm);
  
-       init_debug("cred blob size     = %d\n", blob_sizes.lbs_cred);
-       init_debug("file blob size     = %d\n", blob_sizes.lbs_file);
-       init_debug("inode blob size    = %d\n", blob_sizes.lbs_inode);
-       init_debug("ipc blob size      = %d\n", blob_sizes.lbs_ipc);
-       init_debug("msg_msg blob size  = %d\n", blob_sizes.lbs_msg_msg);
-       init_debug("task blob size     = %d\n", blob_sizes.lbs_task);
+       init_debug("cred blob size       = %d\n", blob_sizes.lbs_cred);
+       init_debug("file blob size       = %d\n", blob_sizes.lbs_file);
+       init_debug("inode blob size      = %d\n", blob_sizes.lbs_inode);
+       init_debug("ipc blob size        = %d\n", blob_sizes.lbs_ipc);
+       init_debug("msg_msg blob size    = %d\n", blob_sizes.lbs_msg_msg);
+       init_debug("superblock blob size = %d\n", blob_sizes.lbs_superblock);
+       init_debug("task blob size       = %d\n", blob_sizes.lbs_task);
  
        /*
         * Create any kmem_caches needed for blobs
@@@ -670,6 -672,27 +672,27 @@@ static void __init lsm_early_task(struc
                panic("%s: Early task alloc failed.\n", __func__);
  }
  
+ /**
+  * lsm_superblock_alloc - allocate a composite superblock blob
+  * @sb: the superblock that needs a blob
+  *
+  * Allocate the superblock blob for all the modules
+  *
+  * Returns 0, or -ENOMEM if memory can't be allocated.
+  */
+ static int lsm_superblock_alloc(struct super_block *sb)
+ {
+       if (blob_sizes.lbs_superblock == 0) {
+               sb->s_security = NULL;
+               return 0;
+       }
+       sb->s_security = kzalloc(blob_sizes.lbs_superblock, GFP_KERNEL);
+       if (sb->s_security == NULL)
+               return -ENOMEM;
+       return 0;
+ }
  /*
   * The default value of the LSM hook is defined in linux/lsm_hook_defs.h and
   * can be accessed with:
@@@ -867,12 -890,26 +890,26 @@@ int security_fs_context_parse_param(str
  
  int security_sb_alloc(struct super_block *sb)
  {
-       return call_int_hook(sb_alloc_security, 0, sb);
+       int rc = lsm_superblock_alloc(sb);
+       if (unlikely(rc))
+               return rc;
+       rc = call_int_hook(sb_alloc_security, 0, sb);
+       if (unlikely(rc))
+               security_sb_free(sb);
+       return rc;
+ }
+ void security_sb_delete(struct super_block *sb)
+ {
+       call_void_hook(sb_delete, sb);
  }
  
  void security_sb_free(struct super_block *sb)
  {
        call_void_hook(sb_free_security, sb);
+       kfree(sb->s_security);
+       sb->s_security = NULL;
  }
  
  void security_free_mnt_opts(void **mnt_opts)
@@@ -890,13 -927,6 +927,13 @@@ int security_sb_eat_lsm_opts(char *opti
  }
  EXPORT_SYMBOL(security_sb_eat_lsm_opts);
  
 +int security_sb_mnt_opts_compat(struct super_block *sb,
 +                              void *mnt_opts)
 +{
 +      return call_int_hook(sb_mnt_opts_compat, 0, sb, mnt_opts);
 +}
 +EXPORT_SYMBOL(security_sb_mnt_opts_compat);
 +
  int security_sb_remount(struct super_block *sb,
                        void *mnt_opts)
  {
@@@ -1769,19 -1799,12 +1806,19 @@@ int security_task_getsid(struct task_st
        return call_int_hook(task_getsid, 0, p);
  }
  
 -void security_task_getsecid(struct task_struct *p, u32 *secid)
 +void security_task_getsecid_subj(struct task_struct *p, u32 *secid)
 +{
 +      *secid = 0;
 +      call_void_hook(task_getsecid_subj, p, secid);
 +}
 +EXPORT_SYMBOL(security_task_getsecid_subj);
 +
 +void security_task_getsecid_obj(struct task_struct *p, u32 *secid)
  {
        *secid = 0;
 -      call_void_hook(task_getsecid, p, secid);
 +      call_void_hook(task_getsecid_obj, p, secid);
  }
 -EXPORT_SYMBOL(security_task_getsecid);
 +EXPORT_SYMBOL(security_task_getsecid_obj);
  
  int security_task_setnice(struct task_struct *p, int nice)
  {
diff --combined security/selinux/hooks.c
@@@ -229,23 -229,10 +229,23 @@@ static inline u32 cred_sid(const struc
        return tsec->sid;
  }
  
 +/*
 + * get the subjective security ID of a task
 + */
 +static inline u32 task_sid_subj(const struct task_struct *task)
 +{
 +      u32 sid;
 +
 +      rcu_read_lock();
 +      sid = cred_sid(rcu_dereference(task->cred));
 +      rcu_read_unlock();
 +      return sid;
 +}
 +
  /*
   * get the objective security ID of a task
   */
 -static inline u32 task_sid(const struct task_struct *task)
 +static inline u32 task_sid_obj(const struct task_struct *task)
  {
        u32 sid;
  
        return sid;
  }
  
 +/*
 + * get the security ID of a task for use with binder
 + */
 +static inline u32 task_sid_binder(const struct task_struct *task)
 +{
 +      /*
 +       * In many case where this function is used we should be using the
 +       * task's subjective SID, but we can't reliably access the subjective
 +       * creds of a task other than our own so we must use the objective
 +       * creds/SID, which are safe to access.  The downside is that if a task
 +       * is temporarily overriding it's creds it will not be reflected here;
 +       * however, it isn't clear that binder would handle that case well
 +       * anyway.
 +       *
 +       * If this ever changes and we can safely reference the subjective
 +       * creds/SID of another task, this function will make it easier to
 +       * identify the various places where we make use of the task SIDs in
 +       * the binder code.  It is also likely that we will need to adjust
 +       * the main drivers/android binder code as well.
 +       */
 +      return task_sid_obj(task);
 +}
 +
  static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dentry);
  
  /*
@@@ -358,7 -322,7 +358,7 @@@ static void inode_free_security(struct 
  
        if (!isec)
                return;
-       sbsec = inode->i_sb->s_security;
+       sbsec = selinux_superblock(inode->i_sb);
        /*
         * As not all inode security structures are in a list, we check for
         * empty list outside of the lock to make sure that we won't waste
        }
  }
  
- static void superblock_free_security(struct super_block *sb)
- {
-       struct superblock_security_struct *sbsec = sb->s_security;
-       sb->s_security = NULL;
-       kfree(sbsec);
- }
  struct selinux_mnt_opts {
        const char *fscontext, *context, *rootcontext, *defcontext;
  };
@@@ -494,7 -451,7 +487,7 @@@ static int selinux_is_genfs_special_han
  
  static int selinux_is_sblabel_mnt(struct super_block *sb)
  {
-       struct superblock_security_struct *sbsec = sb->s_security;
+       struct superblock_security_struct *sbsec = selinux_superblock(sb);
  
        /*
         * IMPORTANT: Double-check logic in this function when adding a new
@@@ -571,7 -528,7 +564,7 @@@ fallback
  
  static int sb_finish_set_opts(struct super_block *sb)
  {
-       struct superblock_security_struct *sbsec = sb->s_security;
+       struct superblock_security_struct *sbsec = selinux_superblock(sb);
        struct dentry *root = sb->s_root;
        struct inode *root_inode = d_backing_inode(root);
        int rc = 0;
@@@ -662,7 -619,7 +655,7 @@@ static int selinux_set_mnt_opts(struct 
                                unsigned long *set_kern_flags)
  {
        const struct cred *cred = current_cred();
-       struct superblock_security_struct *sbsec = sb->s_security;
+       struct superblock_security_struct *sbsec = selinux_superblock(sb);
        struct dentry *root = sb->s_root;
        struct selinux_mnt_opts *opts = mnt_opts;
        struct inode_security_struct *root_isec;
        if (sb->s_user_ns != &init_user_ns &&
            strcmp(sb->s_type->name, "tmpfs") &&
            strcmp(sb->s_type->name, "ramfs") &&
 -          strcmp(sb->s_type->name, "devpts")) {
 +          strcmp(sb->s_type->name, "devpts") &&
 +          strcmp(sb->s_type->name, "overlay")) {
                if (context_sid || fscontext_sid || rootcontext_sid ||
                    defcontext_sid) {
                        rc = -EACCES;
@@@ -900,8 -856,8 +893,8 @@@ out_double_mount
  static int selinux_cmp_sb_context(const struct super_block *oldsb,
                                    const struct super_block *newsb)
  {
-       struct superblock_security_struct *old = oldsb->s_security;
-       struct superblock_security_struct *new = newsb->s_security;
+       struct superblock_security_struct *old = selinux_superblock(oldsb);
+       struct superblock_security_struct *new = selinux_superblock(newsb);
        char oldflags = old->flags & SE_MNTMASK;
        char newflags = new->flags & SE_MNTMASK;
  
@@@ -933,8 -889,9 +926,9 @@@ static int selinux_sb_clone_mnt_opts(co
                                        unsigned long *set_kern_flags)
  {
        int rc = 0;
-       const struct superblock_security_struct *oldsbsec = oldsb->s_security;
-       struct superblock_security_struct *newsbsec = newsb->s_security;
+       const struct superblock_security_struct *oldsbsec =
+                                               selinux_superblock(oldsb);
+       struct superblock_security_struct *newsbsec = selinux_superblock(newsb);
  
        int set_fscontext =     (oldsbsec->flags & FSCONTEXT_MNT);
        int set_context =       (oldsbsec->flags & CONTEXT_MNT);
@@@ -1113,7 -1070,7 +1107,7 @@@ static int show_sid(struct seq_file *m
  
  static int selinux_sb_show_options(struct seq_file *m, struct super_block *sb)
  {
-       struct superblock_security_struct *sbsec = sb->s_security;
+       struct superblock_security_struct *sbsec = selinux_superblock(sb);
        int rc;
  
        if (!(sbsec->flags & SE_SBINITIALIZED))
@@@ -1464,7 -1421,7 +1458,7 @@@ static int inode_doinit_with_dentry(str
        if (isec->sclass == SECCLASS_FILE)
                isec->sclass = inode_mode_to_security_class(inode->i_mode);
  
-       sbsec = inode->i_sb->s_security;
+       sbsec = selinux_superblock(inode->i_sb);
        if (!(sbsec->flags & SE_SBINITIALIZED)) {
                /* Defer initialization until selinux_complete_init,
                   after the initial policy is loaded and the security
@@@ -1815,7 -1772,8 +1809,8 @@@ selinux_determine_inode_label(const str
                                 const struct qstr *name, u16 tclass,
                                 u32 *_new_isid)
  {
-       const struct superblock_security_struct *sbsec = dir->i_sb->s_security;
+       const struct superblock_security_struct *sbsec =
+                                               selinux_superblock(dir->i_sb);
  
        if ((sbsec->flags & SE_SBINITIALIZED) &&
            (sbsec->behavior == SECURITY_FS_USE_MNTPOINT)) {
@@@ -1846,7 -1804,7 +1841,7 @@@ static int may_create(struct inode *dir
        int rc;
  
        dsec = inode_security(dir);
-       sbsec = dir->i_sb->s_security;
+       sbsec = selinux_superblock(dir->i_sb);
  
        sid = tsec->sid;
  
@@@ -1995,7 -1953,7 +1990,7 @@@ static int superblock_has_perm(const st
        struct superblock_security_struct *sbsec;
        u32 sid = cred_sid(cred);
  
-       sbsec = sb->s_security;
+       sbsec = selinux_superblock(sb);
        return avc_has_perm(&selinux_state,
                            sid, sbsec->sid, SECCLASS_FILESYSTEM, perms, ad);
  }
@@@ -2071,8 -2029,11 +2066,8 @@@ static inline u32 open_file_to_av(struc
  
  static int selinux_binder_set_context_mgr(struct task_struct *mgr)
  {
 -      u32 mysid = current_sid();
 -      u32 mgrsid = task_sid(mgr);
 -
        return avc_has_perm(&selinux_state,
 -                          mysid, mgrsid, SECCLASS_BINDER,
 +                          current_sid(), task_sid_binder(mgr), SECCLASS_BINDER,
                            BINDER__SET_CONTEXT_MGR, NULL);
  }
  
@@@ -2080,7 -2041,8 +2075,7 @@@ static int selinux_binder_transaction(s
                                      struct task_struct *to)
  {
        u32 mysid = current_sid();
 -      u32 fromsid = task_sid(from);
 -      u32 tosid = task_sid(to);
 +      u32 fromsid = task_sid_binder(from);
        int rc;
  
        if (mysid != fromsid) {
                        return rc;
        }
  
 -      return avc_has_perm(&selinux_state,
 -                          fromsid, tosid, SECCLASS_BINDER, BINDER__CALL,
 -                          NULL);
 +      return avc_has_perm(&selinux_state, fromsid, task_sid_binder(to),
 +                          SECCLASS_BINDER, BINDER__CALL, NULL);
  }
  
  static int selinux_binder_transfer_binder(struct task_struct *from,
                                          struct task_struct *to)
  {
 -      u32 fromsid = task_sid(from);
 -      u32 tosid = task_sid(to);
 -
        return avc_has_perm(&selinux_state,
 -                          fromsid, tosid, SECCLASS_BINDER, BINDER__TRANSFER,
 +                          task_sid_binder(from), task_sid_binder(to),
 +                          SECCLASS_BINDER, BINDER__TRANSFER,
                            NULL);
  }
  
@@@ -2108,7 -2073,7 +2103,7 @@@ static int selinux_binder_transfer_file
                                        struct task_struct *to,
                                        struct file *file)
  {
 -      u32 sid = task_sid(to);
 +      u32 sid = task_sid_binder(to);
        struct file_security_struct *fsec = selinux_file(file);
        struct dentry *dentry = file->f_path.dentry;
        struct inode_security_struct *isec;
  }
  
  static int selinux_ptrace_access_check(struct task_struct *child,
 -                                   unsigned int mode)
 +                                     unsigned int mode)
  {
        u32 sid = current_sid();
 -      u32 csid = task_sid(child);
 +      u32 csid = task_sid_obj(child);
  
        if (mode & PTRACE_MODE_READ)
                return avc_has_perm(&selinux_state,
  static int selinux_ptrace_traceme(struct task_struct *parent)
  {
        return avc_has_perm(&selinux_state,
 -                          task_sid(parent), current_sid(), SECCLASS_PROCESS,
 -                          PROCESS__PTRACE, NULL);
 +                          task_sid_subj(parent), task_sid_obj(current),
 +                          SECCLASS_PROCESS, PROCESS__PTRACE, NULL);
  }
  
  static int selinux_capget(struct task_struct *target, kernel_cap_t *effective,
                          kernel_cap_t *inheritable, kernel_cap_t *permitted)
  {
        return avc_has_perm(&selinux_state,
 -                          current_sid(), task_sid(target), SECCLASS_PROCESS,
 +                          current_sid(), task_sid_obj(target), SECCLASS_PROCESS,
                            PROCESS__GETCAP, NULL);
  }
  
@@@ -2293,7 -2258,7 +2288,7 @@@ static u32 ptrace_parent_sid(void
        rcu_read_lock();
        tracer = ptrace_parent(current);
        if (tracer)
 -              sid = task_sid(tracer);
 +              sid = task_sid_obj(tracer);
        rcu_read_unlock();
  
        return sid;
@@@ -2617,11 -2582,7 +2612,7 @@@ static void selinux_bprm_committed_cred
  
  static int selinux_sb_alloc_security(struct super_block *sb)
  {
-       struct superblock_security_struct *sbsec;
-       sbsec = kzalloc(sizeof(struct superblock_security_struct), GFP_KERNEL);
-       if (!sbsec)
-               return -ENOMEM;
+       struct superblock_security_struct *sbsec = selinux_superblock(sb);
  
        mutex_init(&sbsec->lock);
        INIT_LIST_HEAD(&sbsec->isec_head);
        sbsec->sid = SECINITSID_UNLABELED;
        sbsec->def_sid = SECINITSID_FILE;
        sbsec->mntpoint_sid = SECINITSID_UNLABELED;
-       sb->s_security = sbsec;
  
        return 0;
  }
  
- static void selinux_sb_free_security(struct super_block *sb)
- {
-       superblock_free_security(sb);
- }
  static inline int opt_len(const char *s)
  {
        bool open_quote = false;
@@@ -2714,65 -2669,10 +2699,65 @@@ free_opt
        return rc;
  }
  
 +static int selinux_sb_mnt_opts_compat(struct super_block *sb, void *mnt_opts)
 +{
 +      struct selinux_mnt_opts *opts = mnt_opts;
 +      struct superblock_security_struct *sbsec = sb->s_security;
 +      u32 sid;
 +      int rc;
 +
 +      /*
 +       * Superblock not initialized (i.e. no options) - reject if any
 +       * options specified, otherwise accept.
 +       */
 +      if (!(sbsec->flags & SE_SBINITIALIZED))
 +              return opts ? 1 : 0;
 +
 +      /*
 +       * Superblock initialized and no options specified - reject if
 +       * superblock has any options set, otherwise accept.
 +       */
 +      if (!opts)
 +              return (sbsec->flags & SE_MNTMASK) ? 1 : 0;
 +
 +      if (opts->fscontext) {
 +              rc = parse_sid(sb, opts->fscontext, &sid);
 +              if (rc)
 +                      return 1;
 +              if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid, sid))
 +                      return 1;
 +      }
 +      if (opts->context) {
 +              rc = parse_sid(sb, opts->context, &sid);
 +              if (rc)
 +                      return 1;
 +              if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid, sid))
 +                      return 1;
 +      }
 +      if (opts->rootcontext) {
 +              struct inode_security_struct *root_isec;
 +
 +              root_isec = backing_inode_security(sb->s_root);
 +              rc = parse_sid(sb, opts->rootcontext, &sid);
 +              if (rc)
 +                      return 1;
 +              if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid, sid))
 +                      return 1;
 +      }
 +      if (opts->defcontext) {
 +              rc = parse_sid(sb, opts->defcontext, &sid);
 +              if (rc)
 +                      return 1;
 +              if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid, sid))
 +                      return 1;
 +      }
 +      return 0;
 +}
 +
  static int selinux_sb_remount(struct super_block *sb, void *mnt_opts)
  {
        struct selinux_mnt_opts *opts = mnt_opts;
-       struct superblock_security_struct *sbsec = sb->s_security;
+       struct superblock_security_struct *sbsec = selinux_superblock(sb);
        u32 sid;
        int rc;
  
@@@ -3010,7 -2910,7 +2995,7 @@@ static int selinux_inode_init_security(
        int rc;
        char *context;
  
-       sbsec = dir->i_sb->s_security;
+       sbsec = selinux_superblock(dir->i_sb);
  
        newsid = tsec->create_sid;
  
@@@ -3312,7 -3212,7 +3297,7 @@@ static int selinux_inode_setxattr(struc
        if (!selinux_initialized(&selinux_state))
                return (inode_owner_or_capable(mnt_userns, inode) ? 0 : -EPERM);
  
-       sbsec = inode->i_sb->s_security;
+       sbsec = selinux_superblock(inode->i_sb);
        if (!(sbsec->flags & SBLABEL_MNT))
                return -EOPNOTSUPP;
  
@@@ -3557,13 -3457,14 +3542,14 @@@ static int selinux_inode_setsecurity(st
                                     const void *value, size_t size, int flags)
  {
        struct inode_security_struct *isec = inode_security_novalidate(inode);
-       struct superblock_security_struct *sbsec = inode->i_sb->s_security;
+       struct superblock_security_struct *sbsec;
        u32 newsid;
        int rc;
  
        if (strcmp(name, XATTR_SELINUX_SUFFIX))
                return -EOPNOTSUPP;
  
+       sbsec = selinux_superblock(inode->i_sb);
        if (!(sbsec->flags & SBLABEL_MNT))
                return -EOPNOTSUPP;
  
@@@ -4005,7 -3906,7 +3991,7 @@@ static int selinux_file_send_sigiotask(
                                       struct fown_struct *fown, int signum)
  {
        struct file *file;
 -      u32 sid = task_sid(tsk);
 +      u32 sid = task_sid_obj(tsk);
        u32 perm;
        struct file_security_struct *fsec;
  
@@@ -4224,52 -4125,47 +4210,52 @@@ static int selinux_kernel_load_data(enu
  static int selinux_task_setpgid(struct task_struct *p, pid_t pgid)
  {
        return avc_has_perm(&selinux_state,
 -                          current_sid(), task_sid(p), SECCLASS_PROCESS,
 +                          current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
                            PROCESS__SETPGID, NULL);
  }
  
  static int selinux_task_getpgid(struct task_struct *p)
  {
        return avc_has_perm(&selinux_state,
 -                          current_sid(), task_sid(p), SECCLASS_PROCESS,
 +                          current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
                            PROCESS__GETPGID, NULL);
  }
  
  static int selinux_task_getsid(struct task_struct *p)
  {
        return avc_has_perm(&selinux_state,
 -                          current_sid(), task_sid(p), SECCLASS_PROCESS,
 +                          current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
                            PROCESS__GETSESSION, NULL);
  }
  
 -static void selinux_task_getsecid(struct task_struct *p, u32 *secid)
 +static void selinux_task_getsecid_subj(struct task_struct *p, u32 *secid)
 +{
 +      *secid = task_sid_subj(p);
 +}
 +
 +static void selinux_task_getsecid_obj(struct task_struct *p, u32 *secid)
  {
 -      *secid = task_sid(p);
 +      *secid = task_sid_obj(p);
  }
  
  static int selinux_task_setnice(struct task_struct *p, int nice)
  {
        return avc_has_perm(&selinux_state,
 -                          current_sid(), task_sid(p), SECCLASS_PROCESS,
 +                          current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
                            PROCESS__SETSCHED, NULL);
  }
  
  static int selinux_task_setioprio(struct task_struct *p, int ioprio)
  {
        return avc_has_perm(&selinux_state,
 -                          current_sid(), task_sid(p), SECCLASS_PROCESS,
 +                          current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
                            PROCESS__SETSCHED, NULL);
  }
  
  static int selinux_task_getioprio(struct task_struct *p)
  {
        return avc_has_perm(&selinux_state,
 -                          current_sid(), task_sid(p), SECCLASS_PROCESS,
 +                          current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
                            PROCESS__GETSCHED, NULL);
  }
  
@@@ -4300,7 -4196,7 +4286,7 @@@ static int selinux_task_setrlimit(struc
           upon context transitions.  See selinux_bprm_committing_creds. */
        if (old_rlim->rlim_max != new_rlim->rlim_max)
                return avc_has_perm(&selinux_state,
 -                                  current_sid(), task_sid(p),
 +                                  current_sid(), task_sid_obj(p),
                                    SECCLASS_PROCESS, PROCESS__SETRLIMIT, NULL);
  
        return 0;
  static int selinux_task_setscheduler(struct task_struct *p)
  {
        return avc_has_perm(&selinux_state,
 -                          current_sid(), task_sid(p), SECCLASS_PROCESS,
 +                          current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
                            PROCESS__SETSCHED, NULL);
  }
  
  static int selinux_task_getscheduler(struct task_struct *p)
  {
        return avc_has_perm(&selinux_state,
 -                          current_sid(), task_sid(p), SECCLASS_PROCESS,
 +                          current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
                            PROCESS__GETSCHED, NULL);
  }
  
  static int selinux_task_movememory(struct task_struct *p)
  {
        return avc_has_perm(&selinux_state,
 -                          current_sid(), task_sid(p), SECCLASS_PROCESS,
 +                          current_sid(), task_sid_obj(p), SECCLASS_PROCESS,
                            PROCESS__SETSCHED, NULL);
  }
  
@@@ -4342,14 -4238,14 +4328,14 @@@ static int selinux_task_kill(struct tas
        else
                secid = cred_sid(cred);
        return avc_has_perm(&selinux_state,
 -                          secid, task_sid(p), SECCLASS_PROCESS, perm, NULL);
 +                          secid, task_sid_obj(p), SECCLASS_PROCESS, perm, NULL);
  }
  
  static void selinux_task_to_inode(struct task_struct *p,
                                  struct inode *inode)
  {
        struct inode_security_struct *isec = selinux_inode(inode);
 -      u32 sid = task_sid(p);
 +      u32 sid = task_sid_obj(p);
  
        spin_lock(&isec->lock);
        isec->sclass = inode_mode_to_security_class(inode->i_mode);
@@@ -6242,7 -6138,7 +6228,7 @@@ static int selinux_msg_queue_msgrcv(str
        struct ipc_security_struct *isec;
        struct msg_security_struct *msec;
        struct common_audit_data ad;
 -      u32 sid = task_sid(target);
 +      u32 sid = task_sid_subj(target);
        int rc;
  
        isec = selinux_ipc(msq);
@@@ -7065,6 -6961,7 +7051,7 @@@ struct lsm_blob_sizes selinux_blob_size
        .lbs_inode = sizeof(struct inode_security_struct),
        .lbs_ipc = sizeof(struct ipc_security_struct),
        .lbs_msg_msg = sizeof(struct msg_security_struct),
+       .lbs_superblock = sizeof(struct superblock_security_struct),
  };
  
  #ifdef CONFIG_PERF_EVENTS
@@@ -7165,9 -7062,7 +7152,8 @@@ static struct security_hook_list selinu
        LSM_HOOK_INIT(bprm_committing_creds, selinux_bprm_committing_creds),
        LSM_HOOK_INIT(bprm_committed_creds, selinux_bprm_committed_creds),
  
-       LSM_HOOK_INIT(sb_free_security, selinux_sb_free_security),
        LSM_HOOK_INIT(sb_free_mnt_opts, selinux_free_mnt_opts),
 +      LSM_HOOK_INIT(sb_mnt_opts_compat, selinux_sb_mnt_opts_compat),
        LSM_HOOK_INIT(sb_remount, selinux_sb_remount),
        LSM_HOOK_INIT(sb_kern_mount, selinux_sb_kern_mount),
        LSM_HOOK_INIT(sb_show_options, selinux_sb_show_options),
        LSM_HOOK_INIT(task_setpgid, selinux_task_setpgid),
        LSM_HOOK_INIT(task_getpgid, selinux_task_getpgid),
        LSM_HOOK_INIT(task_getsid, selinux_task_getsid),
 -      LSM_HOOK_INIT(task_getsecid, selinux_task_getsecid),
 +      LSM_HOOK_INIT(task_getsecid_subj, selinux_task_getsecid_subj),
 +      LSM_HOOK_INIT(task_getsecid_obj, selinux_task_getsecid_obj),
        LSM_HOOK_INIT(task_setnice, selinux_task_setnice),
        LSM_HOOK_INIT(task_setioprio, selinux_task_setioprio),
        LSM_HOOK_INIT(task_getioprio, selinux_task_getioprio),
@@@ -47,6 -47,7 +47,7 @@@
  #include <linux/sched.h>
  #include <linux/audit.h>
  #include <linux/vmalloc.h>
+ #include <linux/lsm_hooks.h>
  #include <net/netlabel.h>
  
  #include "flask.h"
  #include "policycap_names.h"
  #include "ima.h"
  
 +struct convert_context_args {
 +      struct selinux_state *state;
 +      struct policydb *oldp;
 +      struct policydb *newp;
 +};
 +
 +struct selinux_policy_convert_data {
 +      struct convert_context_args args;
 +      struct sidtab_convert_params sidtab_params;
 +};
 +
  /* Forward declaration. */
  static int context_struct_to_string(struct policydb *policydb,
                                    struct context *context,
@@@ -1552,7 -1542,6 +1553,7 @@@ static int security_context_to_sid_core
                if (!str)
                        goto out;
        }
 +retry:
        rcu_read_lock();
        policy = rcu_dereference(state->policy);
        policydb = &policy->policydb;
        } else if (rc)
                goto out_unlock;
        rc = sidtab_context_to_sid(sidtab, &context, sid);
 +      if (rc == -ESTALE) {
 +              rcu_read_unlock();
 +              if (context.str) {
 +                      str = context.str;
 +                      context.str = NULL;
 +              }
 +              context_destroy(&context);
 +              goto retry;
 +      }
        context_destroy(&context);
  out_unlock:
        rcu_read_unlock();
@@@ -1724,7 -1704,7 +1725,7 @@@ static int security_compute_sid(struct 
        struct selinux_policy *policy;
        struct policydb *policydb;
        struct sidtab *sidtab;
 -      struct class_datum *cladatum = NULL;
 +      struct class_datum *cladatum;
        struct context *scontext, *tcontext, newcontext;
        struct sidtab_entry *sentry, *tentry;
        struct avtab_key avkey;
                goto out;
        }
  
 +retry:
 +      cladatum = NULL;
        context_init(&newcontext);
  
        rcu_read_lock();
        }
        /* Obtain the sid for the context. */
        rc = sidtab_context_to_sid(sidtab, &newcontext, out_sid);
 +      if (rc == -ESTALE) {
 +              rcu_read_unlock();
 +              context_destroy(&newcontext);
 +              goto retry;
 +      }
  out_unlock:
        rcu_read_unlock();
        context_destroy(&newcontext);
@@@ -2002,6 -1975,12 +2003,6 @@@ static inline int convert_context_handl
        return 0;
  }
  
 -struct convert_context_args {
 -      struct selinux_state *state;
 -      struct policydb *oldp;
 -      struct policydb *newp;
 -};
 -
  /*
   * Convert the values in the security context
   * structure `oldc' from the values specified
@@@ -2181,7 -2160,7 +2182,7 @@@ static void selinux_policy_cond_free(st
  }
  
  void selinux_policy_cancel(struct selinux_state *state,
 -                      struct selinux_policy *policy)
 +                         struct selinux_load_state *load_state)
  {
        struct selinux_policy *oldpolicy;
  
                                        lockdep_is_held(&state->policy_mutex));
  
        sidtab_cancel_convert(oldpolicy->sidtab);
 -      selinux_policy_free(policy);
 +      selinux_policy_free(load_state->policy);
 +      kfree(load_state->convert_data);
  }
  
  static void selinux_notify_policy_change(struct selinux_state *state,
        selinux_status_update_policyload(state, seqno);
        selinux_netlbl_cache_invalidate();
        selinux_xfrm_notify_policyload();
 -      selinux_ima_measure_state(state);
 +      selinux_ima_measure_state_locked(state);
  }
  
  void selinux_policy_commit(struct selinux_state *state,
 -                      struct selinux_policy *newpolicy)
 +                         struct selinux_load_state *load_state)
  {
 -      struct selinux_policy *oldpolicy;
 +      struct selinux_policy *oldpolicy, *newpolicy = load_state->policy;
 +      unsigned long flags;
        u32 seqno;
  
        oldpolicy = rcu_dereference_protected(state->policy,
        seqno = newpolicy->latest_granting;
  
        /* Install the new policy. */
 -      rcu_assign_pointer(state->policy, newpolicy);
 +      if (oldpolicy) {
 +              sidtab_freeze_begin(oldpolicy->sidtab, &flags);
 +              rcu_assign_pointer(state->policy, newpolicy);
 +              sidtab_freeze_end(oldpolicy->sidtab, &flags);
 +      } else {
 +              rcu_assign_pointer(state->policy, newpolicy);
 +      }
  
        /* Load the policycaps from the new policy */
        security_load_policycaps(state, newpolicy);
        /* Free the old policy */
        synchronize_rcu();
        selinux_policy_free(oldpolicy);
 +      kfree(load_state->convert_data);
  
        /* Notify others of the policy change */
        selinux_notify_policy_change(state, seqno);
   * loading the new policy.
   */
  int security_load_policy(struct selinux_state *state, void *data, size_t len,
 -                      struct selinux_policy **newpolicyp)
 +                       struct selinux_load_state *load_state)
  {
        struct selinux_policy *newpolicy, *oldpolicy;
 -      struct sidtab_convert_params convert_params;
 -      struct convert_context_args args;
 +      struct selinux_policy_convert_data *convert_data;
        int rc = 0;
        struct policy_file file = { data, len }, *fp = &file;
  
                goto err_mapping;
        }
  
 -
        if (!selinux_initialized(state)) {
                /* First policy load, so no need to preserve state from old policy */
 -              *newpolicyp = newpolicy;
 +              load_state->policy = newpolicy;
 +              load_state->convert_data = NULL;
                return 0;
        }
  
                goto err_free_isids;
        }
  
 +      convert_data = kmalloc(sizeof(*convert_data), GFP_KERNEL);
 +      if (!convert_data) {
 +              rc = -ENOMEM;
 +              goto err_free_isids;
 +      }
 +
        /*
         * Convert the internal representations of contexts
         * in the new SID table.
         */
 -      args.state = state;
 -      args.oldp = &oldpolicy->policydb;
 -      args.newp = &newpolicy->policydb;
 +      convert_data->args.state = state;
 +      convert_data->args.oldp = &oldpolicy->policydb;
 +      convert_data->args.newp = &newpolicy->policydb;
  
 -      convert_params.func = convert_context;
 -      convert_params.args = &args;
 -      convert_params.target = newpolicy->sidtab;
 +      convert_data->sidtab_params.func = convert_context;
 +      convert_data->sidtab_params.args = &convert_data->args;
 +      convert_data->sidtab_params.target = newpolicy->sidtab;
  
 -      rc = sidtab_convert(oldpolicy->sidtab, &convert_params);
 +      rc = sidtab_convert(oldpolicy->sidtab, &convert_data->sidtab_params);
        if (rc) {
                pr_err("SELinux:  unable to convert the internal"
                        " representation of contexts in the new SID"
                        " table\n");
 -              goto err_free_isids;
 +              goto err_free_convert_data;
        }
  
 -      *newpolicyp = newpolicy;
 +      load_state->policy = newpolicy;
 +      load_state->convert_data = convert_data;
        return 0;
  
 +err_free_convert_data:
 +      kfree(convert_data);
  err_free_isids:
        sidtab_destroy(newpolicy->sidtab);
  err_mapping:
@@@ -2381,15 -2343,13 +2382,15 @@@ int security_port_sid(struct selinux_st
        struct policydb *policydb;
        struct sidtab *sidtab;
        struct ocontext *c;
 -      int rc = 0;
 +      int rc;
  
        if (!selinux_initialized(state)) {
                *out_sid = SECINITSID_PORT;
                return 0;
        }
  
 +retry:
 +      rc = 0;
        rcu_read_lock();
        policy = rcu_dereference(state->policy);
        policydb = &policy->policydb;
                if (!c->sid[0]) {
                        rc = sidtab_context_to_sid(sidtab, &c->context[0],
                                                   &c->sid[0]);
 +                      if (rc == -ESTALE) {
 +                              rcu_read_unlock();
 +                              goto retry;
 +                      }
                        if (rc)
                                goto out;
                }
@@@ -2438,15 -2394,13 +2439,15 @@@ int security_ib_pkey_sid(struct selinux
        struct policydb *policydb;
        struct sidtab *sidtab;
        struct ocontext *c;
 -      int rc = 0;
 +      int rc;
  
        if (!selinux_initialized(state)) {
                *out_sid = SECINITSID_UNLABELED;
                return 0;
        }
  
 +retry:
 +      rc = 0;
        rcu_read_lock();
        policy = rcu_dereference(state->policy);
        policydb = &policy->policydb;
                        rc = sidtab_context_to_sid(sidtab,
                                                   &c->context[0],
                                                   &c->sid[0]);
 +                      if (rc == -ESTALE) {
 +                              rcu_read_unlock();
 +                              goto retry;
 +                      }
                        if (rc)
                                goto out;
                }
@@@ -2496,15 -2446,13 +2497,15 @@@ int security_ib_endport_sid(struct seli
        struct policydb *policydb;
        struct sidtab *sidtab;
        struct ocontext *c;
 -      int rc = 0;
 +      int rc;
  
        if (!selinux_initialized(state)) {
                *out_sid = SECINITSID_UNLABELED;
                return 0;
        }
  
 +retry:
 +      rc = 0;
        rcu_read_lock();
        policy = rcu_dereference(state->policy);
        policydb = &policy->policydb;
                if (!c->sid[0]) {
                        rc = sidtab_context_to_sid(sidtab, &c->context[0],
                                                   &c->sid[0]);
 +                      if (rc == -ESTALE) {
 +                              rcu_read_unlock();
 +                              goto retry;
 +                      }
                        if (rc)
                                goto out;
                }
@@@ -2552,7 -2496,7 +2553,7 @@@ int security_netif_sid(struct selinux_s
        struct selinux_policy *policy;
        struct policydb *policydb;
        struct sidtab *sidtab;
 -      int rc = 0;
 +      int rc;
        struct ocontext *c;
  
        if (!selinux_initialized(state)) {
                return 0;
        }
  
 +retry:
 +      rc = 0;
        rcu_read_lock();
        policy = rcu_dereference(state->policy);
        policydb = &policy->policydb;
                if (!c->sid[0] || !c->sid[1]) {
                        rc = sidtab_context_to_sid(sidtab, &c->context[0],
                                                   &c->sid[0]);
 +                      if (rc == -ESTALE) {
 +                              rcu_read_unlock();
 +                              goto retry;
 +                      }
                        if (rc)
                                goto out;
                        rc = sidtab_context_to_sid(sidtab, &c->context[1],
                                                   &c->sid[1]);
 +                      if (rc == -ESTALE) {
 +                              rcu_read_unlock();
 +                              goto retry;
 +                      }
                        if (rc)
                                goto out;
                }
@@@ -2639,7 -2573,6 +2640,7 @@@ int security_node_sid(struct selinux_st
                return 0;
        }
  
 +retry:
        rcu_read_lock();
        policy = rcu_dereference(state->policy);
        policydb = &policy->policydb;
                        rc = sidtab_context_to_sid(sidtab,
                                                   &c->context[0],
                                                   &c->sid[0]);
 +                      if (rc == -ESTALE) {
 +                              rcu_read_unlock();
 +                              goto retry;
 +                      }
                        if (rc)
                                goto out;
                }
@@@ -2733,24 -2662,18 +2734,24 @@@ int security_get_user_sids(struct selin
        struct sidtab *sidtab;
        struct context *fromcon, usercon;
        u32 *mysids = NULL, *mysids2, sid;
 -      u32 mynel = 0, maxnel = SIDS_NEL;
 +      u32 i, j, mynel, maxnel = SIDS_NEL;
        struct user_datum *user;
        struct role_datum *role;
        struct ebitmap_node *rnode, *tnode;
 -      int rc = 0, i, j;
 +      int rc;
  
        *sids = NULL;
        *nel = 0;
  
        if (!selinux_initialized(state))
 -              goto out;
 +              return 0;
 +
 +      mysids = kcalloc(maxnel, sizeof(*mysids), GFP_KERNEL);
 +      if (!mysids)
 +              return -ENOMEM;
  
 +retry:
 +      mynel = 0;
        rcu_read_lock();
        policy = rcu_dereference(state->policy);
        policydb = &policy->policydb;
  
        usercon.user = user->value;
  
 -      rc = -ENOMEM;
 -      mysids = kcalloc(maxnel, sizeof(*mysids), GFP_ATOMIC);
 -      if (!mysids)
 -              goto out_unlock;
 -
        ebitmap_for_each_positive_bit(&user->roles, rnode, i) {
                role = policydb->role_val_to_struct[i];
                usercon.role = i + 1;
                                continue;
  
                        rc = sidtab_context_to_sid(sidtab, &usercon, &sid);
 +                      if (rc == -ESTALE) {
 +                              rcu_read_unlock();
 +                              goto retry;
 +                      }
                        if (rc)
                                goto out_unlock;
                        if (mynel < maxnel) {
@@@ -2807,14 -2731,14 +2808,14 @@@ out_unlock
        rcu_read_unlock();
        if (rc || !mynel) {
                kfree(mysids);
 -              goto out;
 +              return rc;
        }
  
        rc = -ENOMEM;
        mysids2 = kcalloc(mynel, sizeof(*mysids2), GFP_KERNEL);
        if (!mysids2) {
                kfree(mysids);
 -              goto out;
 +              return rc;
        }
        for (i = 0, j = 0; i < mynel; i++) {
                struct av_decision dummy_avd;
                        mysids2[j++] = mysids[i];
                cond_resched();
        }
 -      rc = 0;
        kfree(mysids);
        *sids = mysids2;
        *nel = j;
 -out:
 -      return rc;
 +      return 0;
  }
  
  /**
   * Obtain a SID to use for a file in a filesystem that
   * cannot support xattr or use a fixed labeling behavior like
   * transition SIDs or task SIDs.
 + *
 + * WARNING: This function may return -ESTALE, indicating that the caller
 + * must retry the operation after re-acquiring the policy pointer!
   */
  static inline int __security_genfs_sid(struct selinux_policy *policy,
                                       const char *fstype,
@@@ -2924,13 -2847,11 +2925,13 @@@ int security_genfs_sid(struct selinux_s
                return 0;
        }
  
 -      rcu_read_lock();
 -      policy = rcu_dereference(state->policy);
 -      retval = __security_genfs_sid(policy,
 -                              fstype, path, orig_sclass, sid);
 -      rcu_read_unlock();
 +      do {
 +              rcu_read_lock();
 +              policy = rcu_dereference(state->policy);
 +              retval = __security_genfs_sid(policy, fstype, path,
 +                                            orig_sclass, sid);
 +              rcu_read_unlock();
 +      } while (retval == -ESTALE);
        return retval;
  }
  
@@@ -2953,9 -2874,9 +2954,9 @@@ int security_fs_use(struct selinux_stat
        struct selinux_policy *policy;
        struct policydb *policydb;
        struct sidtab *sidtab;
 -      int rc = 0;
 +      int rc;
        struct ocontext *c;
-       struct superblock_security_struct *sbsec = sb->s_security;
+       struct superblock_security_struct *sbsec = selinux_superblock(sb);
        const char *fstype = sb->s_type->name;
  
        if (!selinux_initialized(state)) {
                return 0;
        }
  
 +retry:
 +      rc = 0;
        rcu_read_lock();
        policy = rcu_dereference(state->policy);
        policydb = &policy->policydb;
                if (!c->sid[0]) {
                        rc = sidtab_context_to_sid(sidtab, &c->context[0],
                                                   &c->sid[0]);
 +                      if (rc == -ESTALE) {
 +                              rcu_read_unlock();
 +                              goto retry;
 +                      }
                        if (rc)
                                goto out;
                }
        } else {
                rc = __security_genfs_sid(policy, fstype, "/",
                                        SECCLASS_DIR, &sbsec->sid);
 +              if (rc == -ESTALE) {
 +                      rcu_read_unlock();
 +                      goto retry;
 +              }
                if (rc) {
                        sbsec->behavior = SECURITY_FS_USE_NONE;
                        rc = 0;
@@@ -3207,13 -3118,12 +3208,13 @@@ int security_sid_mls_copy(struct selinu
        u32 len;
        int rc;
  
 -      rc = 0;
        if (!selinux_initialized(state)) {
                *new_sid = sid;
 -              goto out;
 +              return 0;
        }
  
 +retry:
 +      rc = 0;
        context_init(&newcon);
  
        rcu_read_lock();
                }
        }
        rc = sidtab_context_to_sid(sidtab, &newcon, new_sid);
 +      if (rc == -ESTALE) {
 +              rcu_read_unlock();
 +              context_destroy(&newcon);
 +              goto retry;
 +      }
  out_unlock:
        rcu_read_unlock();
        context_destroy(&newcon);
 -out:
        return rc;
  }
  
@@@ -3872,8 -3778,6 +3873,8 @@@ int security_netlbl_secattr_to_sid(stru
                return 0;
        }
  
 +retry:
 +      rc = 0;
        rcu_read_lock();
        policy = rcu_dereference(state->policy);
        policydb = &policy->policydb;
                                goto out;
                }
                rc = -EIDRM;
 -              if (!mls_context_isvalid(policydb, &ctx_new))
 -                      goto out_free;
 +              if (!mls_context_isvalid(policydb, &ctx_new)) {
 +                      ebitmap_destroy(&ctx_new.range.level[0].cat);
 +                      goto out;
 +              }
  
                rc = sidtab_context_to_sid(sidtab, &ctx_new, sid);
 +              ebitmap_destroy(&ctx_new.range.level[0].cat);
 +              if (rc == -ESTALE) {
 +                      rcu_read_unlock();
 +                      goto retry;
 +              }
                if (rc)
 -                      goto out_free;
 +                      goto out;
  
                security_netlbl_cache_add(secattr, *sid);
 -
 -              ebitmap_destroy(&ctx_new.range.level[0].cat);
        } else
                *sid = SECSID_NULL;
  
 -      rcu_read_unlock();
 -      return 0;
 -out_free:
 -      ebitmap_destroy(&ctx_new.range.level[0].cat);
  out:
        rcu_read_unlock();
        return rc;
diff --combined security/smack/smack.h
@@@ -357,6 -357,12 +357,12 @@@ static inline struct smack_known **smac
        return ipc->security + smack_blob_sizes.lbs_ipc;
  }
  
+ static inline struct superblock_smack *smack_superblock(
+                                       const struct super_block *superblock)
+ {
+       return superblock->s_security + smack_blob_sizes.lbs_superblock;
+ }
  /*
   * Is the directory transmuting?
   */
@@@ -383,23 -389,7 +389,23 @@@ static inline struct smack_known *smk_o
        return tsp->smk_task;
  }
  
 -static inline struct smack_known *smk_of_task_struct(
 +static inline struct smack_known *smk_of_task_struct_subj(
 +                                              const struct task_struct *t)
 +{
 +      struct smack_known *skp;
 +      const struct cred *cred;
 +
 +      rcu_read_lock();
 +
 +      cred = rcu_dereference(t->cred);
 +      skp = smk_of_task(smack_cred(cred));
 +
 +      rcu_read_unlock();
 +
 +      return skp;
 +}
 +
 +static inline struct smack_known *smk_of_task_struct_obj(
                                                const struct task_struct *t)
  {
        struct smack_known *skp;
@@@ -159,7 -159,7 +159,7 @@@ static int smk_bu_current(char *note, s
  static int smk_bu_task(struct task_struct *otp, int mode, int rc)
  {
        struct task_smack *tsp = smack_cred(current_cred());
 -      struct smack_known *smk_task = smk_of_task_struct(otp);
 +      struct smack_known *smk_task = smk_of_task_struct_obj(otp);
        char acc[SMK_NUM_ACCESS_TYPE + 1];
  
        if (rc <= 0)
@@@ -479,7 -479,7 +479,7 @@@ static int smack_ptrace_access_check(st
  {
        struct smack_known *skp;
  
 -      skp = smk_of_task_struct(ctp);
 +      skp = smk_of_task_struct_obj(ctp);
  
        return smk_ptrace_rule_check(current, skp, mode, __func__);
  }
@@@ -535,12 -535,7 +535,7 @@@ static int smack_syslog(int typefrom_fi
   */
  static int smack_sb_alloc_security(struct super_block *sb)
  {
-       struct superblock_smack *sbsp;
-       sbsp = kzalloc(sizeof(struct superblock_smack), GFP_KERNEL);
-       if (sbsp == NULL)
-               return -ENOMEM;
+       struct superblock_smack *sbsp = smack_superblock(sb);
  
        sbsp->smk_root = &smack_known_floor;
        sbsp->smk_default = &smack_known_floor;
        /*
         * SMK_SB_INITIALIZED will be zero from kzalloc.
         */
-       sb->s_security = sbsp;
  
        return 0;
  }
  
- /**
-  * smack_sb_free_security - free a superblock blob
-  * @sb: the superblock getting the blob
-  *
-  */
- static void smack_sb_free_security(struct super_block *sb)
- {
-       kfree(sb->s_security);
-       sb->s_security = NULL;
- }
  struct smack_mnt_opts {
        const char *fsdefault, *fsfloor, *fshat, *fsroot, *fstransmute;
  };
@@@ -772,7 -755,7 +755,7 @@@ static int smack_set_mnt_opts(struct su
  {
        struct dentry *root = sb->s_root;
        struct inode *inode = d_backing_inode(root);
-       struct superblock_smack *sp = sb->s_security;
+       struct superblock_smack *sp = smack_superblock(sb);
        struct inode_smack *isp;
        struct smack_known *skp;
        struct smack_mnt_opts *opts = mnt_opts;
   */
  static int smack_sb_statfs(struct dentry *dentry)
  {
-       struct superblock_smack *sbp = dentry->d_sb->s_security;
+       struct superblock_smack *sbp = smack_superblock(dentry->d_sb);
        int rc;
        struct smk_audit_info ad;
  
@@@ -905,7 -888,7 +888,7 @@@ static int smack_bprm_creds_for_exec(st
        if (isp->smk_task == NULL || isp->smk_task == bsp->smk_task)
                return 0;
  
-       sbsp = inode->i_sb->s_security;
+       sbsp = smack_superblock(inode->i_sb);
        if ((sbsp->smk_flags & SMK_SB_UNTRUSTED) &&
            isp->smk_task != sbsp->smk_root)
                return 0;
@@@ -1157,7 -1140,7 +1140,7 @@@ static int smack_inode_rename(struct in
   */
  static int smack_inode_permission(struct inode *inode, int mask)
  {
-       struct superblock_smack *sbsp = inode->i_sb->s_security;
+       struct superblock_smack *sbsp = smack_superblock(inode->i_sb);
        struct smk_audit_info ad;
        int no_block = mask & MAY_NOT_BLOCK;
        int rc;
@@@ -1400,7 -1383,7 +1383,7 @@@ static int smack_inode_removexattr(stru
         */
        if (strcmp(name, XATTR_NAME_SMACK) == 0) {
                struct super_block *sbp = dentry->d_sb;
-               struct superblock_smack *sbsp = sbp->s_security;
+               struct superblock_smack *sbsp = smack_superblock(sbp);
  
                isp->smk_inode = sbsp->smk_default;
        } else if (strcmp(name, XATTR_NAME_SMACKEXEC) == 0)
@@@ -1670,7 -1653,7 +1653,7 @@@ static int smack_mmap_file(struct file 
        isp = smack_inode(file_inode(file));
        if (isp->smk_mmap == NULL)
                return 0;
-       sbsp = file_inode(file)->i_sb->s_security;
+       sbsp = smack_superblock(file_inode(file)->i_sb);
        if (sbsp->smk_flags & SMK_SB_UNTRUSTED &&
            isp->smk_mmap != sbsp->smk_root)
                return -EACCES;
@@@ -2033,7 -2016,7 +2016,7 @@@ static int smk_curacc_on_task(struct ta
                                const char *caller)
  {
        struct smk_audit_info ad;
 -      struct smack_known *skp = smk_of_task_struct(p);
 +      struct smack_known *skp = smk_of_task_struct_subj(p);
        int rc;
  
        smk_ad_init(&ad, caller, LSM_AUDIT_DATA_TASK);
@@@ -2078,29 -2061,15 +2061,29 @@@ static int smack_task_getsid(struct tas
  }
  
  /**
 - * smack_task_getsecid - get the secid of the task
 - * @p: the object task
 + * smack_task_getsecid_subj - get the subjective secid of the task
 + * @p: the task
   * @secid: where to put the result
   *
 - * Sets the secid to contain a u32 version of the smack label.
 + * Sets the secid to contain a u32 version of the task's subjective smack label.
 + */
 +static void smack_task_getsecid_subj(struct task_struct *p, u32 *secid)
 +{
 +      struct smack_known *skp = smk_of_task_struct_subj(p);
 +
 +      *secid = skp->smk_secid;
 +}
 +
 +/**
 + * smack_task_getsecid_obj - get the objective secid of the task
 + * @p: the task
 + * @secid: where to put the result
 + *
 + * Sets the secid to contain a u32 version of the task's objective smack label.
   */
 -static void smack_task_getsecid(struct task_struct *p, u32 *secid)
 +static void smack_task_getsecid_obj(struct task_struct *p, u32 *secid)
  {
 -      struct smack_known *skp = smk_of_task_struct(p);
 +      struct smack_known *skp = smk_of_task_struct_obj(p);
  
        *secid = skp->smk_secid;
  }
@@@ -2188,7 -2157,7 +2171,7 @@@ static int smack_task_kill(struct task_
  {
        struct smk_audit_info ad;
        struct smack_known *skp;
 -      struct smack_known *tkp = smk_of_task_struct(p);
 +      struct smack_known *tkp = smk_of_task_struct_obj(p);
        int rc;
  
        if (!sig)
  static void smack_task_to_inode(struct task_struct *p, struct inode *inode)
  {
        struct inode_smack *isp = smack_inode(inode);
 -      struct smack_known *skp = smk_of_task_struct(p);
 +      struct smack_known *skp = smk_of_task_struct_obj(p);
  
        isp->smk_inode = skp;
        isp->smk_flags |= SMK_INODE_INSTANT;
@@@ -3299,7 -3268,7 +3282,7 @@@ static void smack_d_instantiate(struct 
                return;
  
        sbp = inode->i_sb;
-       sbsp = sbp->s_security;
+       sbsp = smack_superblock(sbp);
        /*
         * We're going to use the superblock default label
         * if there's no label on the file.
   */
  static int smack_getprocattr(struct task_struct *p, char *name, char **value)
  {
 -      struct smack_known *skp = smk_of_task_struct(p);
 +      struct smack_known *skp = smk_of_task_struct_subj(p);
        char *cp;
        int slen;
  
@@@ -4714,6 -4683,7 +4697,7 @@@ struct lsm_blob_sizes smack_blob_sizes 
        .lbs_inode = sizeof(struct inode_smack),
        .lbs_ipc = sizeof(struct smack_known *),
        .lbs_msg_msg = sizeof(struct smack_known *),
+       .lbs_superblock = sizeof(struct superblock_smack),
  };
  
  static struct security_hook_list smack_hooks[] __lsm_ro_after_init = {
        LSM_HOOK_INIT(fs_context_parse_param, smack_fs_context_parse_param),
  
        LSM_HOOK_INIT(sb_alloc_security, smack_sb_alloc_security),
-       LSM_HOOK_INIT(sb_free_security, smack_sb_free_security),
        LSM_HOOK_INIT(sb_free_mnt_opts, smack_free_mnt_opts),
        LSM_HOOK_INIT(sb_eat_lsm_opts, smack_sb_eat_lsm_opts),
        LSM_HOOK_INIT(sb_statfs, smack_sb_statfs),
        LSM_HOOK_INIT(task_setpgid, smack_task_setpgid),
        LSM_HOOK_INIT(task_getpgid, smack_task_getpgid),
        LSM_HOOK_INIT(task_getsid, smack_task_getsid),
 -      LSM_HOOK_INIT(task_getsecid, smack_task_getsecid),
 +      LSM_HOOK_INIT(task_getsecid_subj, smack_task_getsecid_subj),
 +      LSM_HOOK_INIT(task_getsecid_obj, smack_task_getsecid_obj),
        LSM_HOOK_INIT(task_setnice, smack_task_setnice),
        LSM_HOOK_INIT(task_setioprio, smack_task_setioprio),
        LSM_HOOK_INIT(task_getioprio, smack_task_getioprio),