Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 30 Jul 2016 00:38:46 +0000 (17:38 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 30 Jul 2016 00:38:46 +0000 (17:38 -0700)
Pull security subsystem updates from James Morris:
 "Highlights:

   - TPM core and driver updates/fixes
   - IPv6 security labeling (CALIPSO)
   - Lots of Apparmor fixes
   - Seccomp: remove 2-phase API, close hole where ptrace can change
     syscall #"

* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (156 commits)
  apparmor: fix SECURITY_APPARMOR_HASH_DEFAULT parameter handling
  tpm: Add TPM 2.0 support to the Nuvoton i2c driver (NPCT6xx family)
  tpm: Factor out common startup code
  tpm: use devm_add_action_or_reset
  tpm2_i2c_nuvoton: add irq validity check
  tpm: read burstcount from TPM_STS in one 32-bit transaction
  tpm: fix byte-order for the value read by tpm2_get_tpm_pt
  tpm_tis_core: convert max timeouts from msec to jiffies
  apparmor: fix arg_size computation for when setprocattr is null terminated
  apparmor: fix oops, validate buffer size in apparmor_setprocattr()
  apparmor: do not expose kernel stack
  apparmor: fix module parameters can be changed after policy is locked
  apparmor: fix oops in profile_unpack() when policy_db is not present
  apparmor: don't check for vmalloc_addr if kvzalloc() failed
  apparmor: add missing id bounds check on dfa verification
  apparmor: allow SYS_CAP_RESOURCE to be sufficient to prlimit another task
  apparmor: use list_next_entry instead of list_entry_next
  apparmor: fix refcount race when finding a child profile
  apparmor: fix ref count leak when profile sha1 hash is read
  apparmor: check that xindex is in trans_table bounds
  ...

16 files changed:
1  2 
Documentation/devicetree/bindings/i2c/trivial-devices.txt
Documentation/devicetree/bindings/vendor-prefixes.txt
MAINTAINERS
arch/arm64/kernel/ptrace.c
arch/powerpc/kernel/ptrace.c
arch/x86/entry/common.c
arch/x86/entry/vsyscall/vsyscall_64.c
include/uapi/linux/Kbuild
net/dccp/ipv6.c
net/ipv4/tcp_input.c
net/ipv6/af_inet6.c
net/ipv6/tcp_ipv6.c
net/iucv/af_iucv.c
samples/Kconfig
security/selinux/hooks.c
security/smack/smack_lsm.c

index acc5cd64711c8f322db51d17797cbfe1fa471d91,d4f654276cf91615bd6a167ad51b22fa54ecc917..a92d4f3e704482ad310f494f4525796bd8c4a8df
@@@ -56,76 -56,13 +56,77 @@@ maxim,ds1050               5 Bit Programmable, Pulse
  maxim,max1237         Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs
  maxim,max6625         9-Bit/12-Bit Temperature Sensors with I²C-Compatible Serial Interface
  mc,rv3029c2           Real Time Clock Module with I2C-Bus
 +microchip,mcp4531-502 Microchip 7-bit Single I2C Digital Potentiometer (5k)
 +microchip,mcp4531-103 Microchip 7-bit Single I2C Digital Potentiometer (10k)
 +microchip,mcp4531-503 Microchip 7-bit Single I2C Digital Potentiometer (50k)
 +microchip,mcp4531-104 Microchip 7-bit Single I2C Digital Potentiometer (100k)
 +microchip,mcp4532-502 Microchip 7-bit Single I2C Digital Potentiometer (5k)
 +microchip,mcp4532-103 Microchip 7-bit Single I2C Digital Potentiometer (10k)
 +microchip,mcp4532-503 Microchip 7-bit Single I2C Digital Potentiometer (50k)
 +microchip,mcp4532-104 Microchip 7-bit Single I2C Digital Potentiometer (100k)
 +microchip,mcp4541-502 Microchip 7-bit Single I2C Digital Potentiometer with NV Memory (5k)
 +microchip,mcp4541-103 Microchip 7-bit Single I2C Digital Potentiometer with NV Memory (10k)
 +microchip,mcp4541-503 Microchip 7-bit Single I2C Digital Potentiometer with NV Memory (50k)
 +microchip,mcp4541-104 Microchip 7-bit Single I2C Digital Potentiometer with NV Memory (100k)
 +microchip,mcp4542-502 Microchip 7-bit Single I2C Digital Potentiometer with NV Memory (5k)
 +microchip,mcp4542-103 Microchip 7-bit Single I2C Digital Potentiometer with NV Memory (10k)
 +microchip,mcp4542-503 Microchip 7-bit Single I2C Digital Potentiometer with NV Memory (50k)
 +microchip,mcp4542-104 Microchip 7-bit Single I2C Digital Potentiometer with NV Memory (100k)
 +microchip,mcp4551-502 Microchip 8-bit Single I2C Digital Potentiometer (5k)
 +microchip,mcp4551-103 Microchip 8-bit Single I2C Digital Potentiometer (10k)
 +microchip,mcp4551-503 Microchip 8-bit Single I2C Digital Potentiometer (50k)
 +microchip,mcp4551-104 Microchip 8-bit Single I2C Digital Potentiometer (100k)
 +microchip,mcp4552-502 Microchip 8-bit Single I2C Digital Potentiometer (5k)
 +microchip,mcp4552-103 Microchip 8-bit Single I2C Digital Potentiometer (10k)
 +microchip,mcp4552-503 Microchip 8-bit Single I2C Digital Potentiometer (50k)
 +microchip,mcp4552-104 Microchip 8-bit Single I2C Digital Potentiometer (100k)
 +microchip,mcp4561-502 Microchip 8-bit Single I2C Digital Potentiometer with NV Memory (5k)
 +microchip,mcp4561-103 Microchip 8-bit Single I2C Digital Potentiometer with NV Memory (10k)
 +microchip,mcp4561-503 Microchip 8-bit Single I2C Digital Potentiometer with NV Memory (50k)
 +microchip,mcp4561-104 Microchip 8-bit Single I2C Digital Potentiometer with NV Memory (100k)
 +microchip,mcp4562-502 Microchip 8-bit Single I2C Digital Potentiometer with NV Memory (5k)
 +microchip,mcp4562-103 Microchip 8-bit Single I2C Digital Potentiometer with NV Memory (10k)
 +microchip,mcp4562-503 Microchip 8-bit Single I2C Digital Potentiometer with NV Memory (50k)
 +microchip,mcp4562-104 Microchip 8-bit Single I2C Digital Potentiometer with NV Memory (100k)
 +microchip,mcp4631-502 Microchip 7-bit Dual I2C Digital Potentiometer (5k)
 +microchip,mcp4631-103 Microchip 7-bit Dual I2C Digital Potentiometer (10k)
 +microchip,mcp4631-503 Microchip 7-bit Dual I2C Digital Potentiometer (50k)
 +microchip,mcp4631-104 Microchip 7-bit Dual I2C Digital Potentiometer (100k)
 +microchip,mcp4632-502 Microchip 7-bit Dual I2C Digital Potentiometer (5k)
 +microchip,mcp4632-103 Microchip 7-bit Dual I2C Digital Potentiometer (10k)
 +microchip,mcp4632-503 Microchip 7-bit Dual I2C Digital Potentiometer (50k)
 +microchip,mcp4632-104 Microchip 7-bit Dual I2C Digital Potentiometer (100k)
 +microchip,mcp4641-502 Microchip 7-bit Dual I2C Digital Potentiometer with NV Memory (5k)
 +microchip,mcp4641-103 Microchip 7-bit Dual I2C Digital Potentiometer with NV Memory (10k)
 +microchip,mcp4641-503 Microchip 7-bit Dual I2C Digital Potentiometer with NV Memory (50k)
 +microchip,mcp4641-104 Microchip 7-bit Dual I2C Digital Potentiometer with NV Memory (100k)
 +microchip,mcp4642-502 Microchip 7-bit Dual I2C Digital Potentiometer with NV Memory (5k)
 +microchip,mcp4642-103 Microchip 7-bit Dual I2C Digital Potentiometer with NV Memory (10k)
 +microchip,mcp4642-503 Microchip 7-bit Dual I2C Digital Potentiometer with NV Memory (50k)
 +microchip,mcp4642-104 Microchip 7-bit Dual I2C Digital Potentiometer with NV Memory (100k)
 +microchip,mcp4651-502 Microchip 8-bit Dual I2C Digital Potentiometer (5k)
 +microchip,mcp4651-103 Microchip 8-bit Dual I2C Digital Potentiometer (10k)
 +microchip,mcp4651-503 Microchip 8-bit Dual I2C Digital Potentiometer (50k)
 +microchip,mcp4651-104 Microchip 8-bit Dual I2C Digital Potentiometer (100k)
 +microchip,mcp4652-502 Microchip 8-bit Dual I2C Digital Potentiometer (5k)
 +microchip,mcp4652-103 Microchip 8-bit Dual I2C Digital Potentiometer (10k)
 +microchip,mcp4652-503 Microchip 8-bit Dual I2C Digital Potentiometer (50k)
 +microchip,mcp4652-104 Microchip 8-bit Dual I2C Digital Potentiometer (100k)
 +microchip,mcp4661-502 Microchip 8-bit Dual I2C Digital Potentiometer with NV Memory (5k)
 +microchip,mcp4661-103 Microchip 8-bit Dual I2C Digital Potentiometer with NV Memory (10k)
 +microchip,mcp4661-503 Microchip 8-bit Dual I2C Digital Potentiometer with NV Memory (50k)
 +microchip,mcp4661-104 Microchip 8-bit Dual I2C Digital Potentiometer with NV Memory (100k)
 +microchip,mcp4662-502 Microchip 8-bit Dual I2C Digital Potentiometer with NV Memory (5k)
 +microchip,mcp4662-103 Microchip 8-bit Dual I2C Digital Potentiometer with NV Memory (10k)
 +microchip,mcp4662-503 Microchip 8-bit Dual I2C Digital Potentiometer with NV Memory (50k)
 +microchip,mcp4662-104 Microchip 8-bit Dual I2C Digital Potentiometer with NV Memory (100k)
  national,lm63         Temperature sensor with integrated fan control
  national,lm75         I2C TEMP SENSOR
  national,lm80         Serial Interface ACPI-Compatible Microprocessor System Hardware Monitor
  national,lm85         Temperature sensor with integrated fan control
  national,lm92         ±0.33°C Accurate, 12-Bit + Sign Temperature Sensor and Thermal Window Comparator with Two-Wire Interface
  nuvoton,npct501               i2c trusted platform module (TPM)
+ nuvoton,npct601               i2c trusted platform module (TPM2)
  nxp,pca9556           Octal SMBus and I2C registered interface
  nxp,pca9557           8-bit I2C-bus and SMBus I/O port with reset
  nxp,pcf8563           Real-time clock/calendar
index d2bce2239769a31ff7c925aba568439c6a4135e4,fe78617d20e9f2abf6eb24383c237b26ccfb42e9..b9361816fc3287073c3156501540c0a53c94178b
@@@ -128,6 -128,7 +128,7 @@@ idt        Integrated Device Technologies, Inc
  ifi   Ingenieurburo Fur Ic-Technologie (I/F/I)
  iom   Iomega Corporation
  img   Imagination Technologies Ltd.
+ infineon Infineon Technologies
  inforce       Inforce Computing
  ingenic       Ingenic Semiconductor
  innolux       Innolux Corporation
@@@ -214,7 -215,6 +215,7 @@@ raidsonic  RaidSonic Technology Gmb
  ralink        Mediatek/Ralink Technology Corp.
  ramtron       Ramtron International
  raspberrypi   Raspberry Pi Foundation
 +raydium       Raydium Semiconductor Corp.
  realtek Realtek Semiconductor Corp.
  renesas       Renesas Electronics Corporation
  richtek       Richtek Technology Corporation
@@@ -255,8 -255,8 +256,9 @@@ syna       Synaptics Inc
  synology      Synology, Inc.
  SUNW  Sun Microsystems, Inc
  tbs   TBS Technologies
 -tcl   Toby Churchill Ltd.
+ tcg   Trusted Computing Group
 +tcl   Toby Churchill Ltd.
 +technexion    TechNexion
  technologic   Technologic Systems
  thine THine Electronics, Inc.
  ti    Texas Instruments
@@@ -271,7 -271,6 +273,7 @@@ tronsmart  Tronsmar
  truly Truly Semiconductors Limited
  tyan  Tyan Computer Corporation
  upisemi       uPI Semiconductor Corp.
 +uniwest       United Western Technologies Corp (UniWest)
  urt   United Radiant Technology Corporation
  usi   Universal Scientific Industrial Co., Ltd.
  v3    V3 Semiconductor
diff --combined MAINTAINERS
index febb29c4d0ca5d6cb48c6ae278d45963656d4538,a296727b6ff2087596aae4962ce3c31c8f09020d..256f56bbb2ad26cd345be9100a3fa9b0878ecf46
@@@ -213,7 -213,7 +213,7 @@@ S: Maintaine
  F:    drivers/media/dvb-frontends/a8293*
  
  AACRAID SCSI RAID DRIVER
 -M:    Adaptec OEM Raid Solutions <aacraid@adaptec.com>
 +M:    Adaptec OEM Raid Solutions <aacraid@microsemi.com>
  L:    linux-scsi@vger.kernel.org
  W:    http://www.adaptec.com/
  S:    Supported
@@@ -288,7 -288,6 +288,7 @@@ F: include/linux/acpi.
  F:    include/acpi/
  F:    Documentation/acpi/
  F:    Documentation/ABI/testing/sysfs-bus-acpi
 +F:    Documentation/ABI/testing/configfs-acpi
  F:    drivers/pci/*acpi*
  F:    drivers/pci/*/*acpi*
  F:    drivers/pci/*/*/*acpi*
@@@ -596,10 -595,6 +596,10 @@@ S:       Odd Fixe
  L:    linux-alpha@vger.kernel.org
  F:    arch/alpha/
  
 +ALPS PS/2 TOUCHPAD DRIVER
 +R:    Pali Rohár <pali.rohar@gmail.com>
 +F:    drivers/input/mouse/alps.*
 +
  ALTERA MAILBOX DRIVER
  M:    Ley Foon Tan <lftan@altera.com>
  L:    nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
@@@ -840,9 -835,7 +840,9 @@@ M: Iyappan Subramanian <isubramanian@ap
  M:    Keyur Chudgar <kchudgar@apm.com>
  S:    Supported
  F:    drivers/net/ethernet/apm/xgene/
 +F:    drivers/net/phy/mdio-xgene.c
  F:    Documentation/devicetree/bindings/net/apm-xgene-enet.txt
 +F:    Documentation/devicetree/bindings/net/apm-xgene-mdio.txt
  
  APTINA CAMERA SENSOR PLL
  M:    Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
@@@ -1166,7 -1159,6 +1166,7 @@@ F:      arch/arm/mach-footbridge
  ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
  M:    Shawn Guo <shawnguo@kernel.org>
  M:    Sascha Hauer <kernel@pengutronix.de>
 +R:    Fabio Estevam <fabio.estevam@nxp.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
@@@ -1650,13 -1642,6 +1650,13 @@@ L:    linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/media/platform/s5p-tv/
  
 +ARM/SAMSUNG S5P SERIES HDMI CEC SUBSYSTEM SUPPORT
 +M:    Kyungmin Park <kyungmin.park@samsung.com>
 +L:    linux-arm-kernel@lists.infradead.org
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/staging/media/platform/s5p-cec/
 +
  ARM/SAMSUNG S5P SERIES JPEG CODEC SUPPORT
  M:    Andrzej Pietrasiewicz <andrzej.p@samsung.com>
  M:    Jacek Anaszewski <j.anaszewski@samsung.com>
@@@ -1679,6 -1664,7 +1679,6 @@@ F:      arch/arm/boot/dts/sh
  F:    arch/arm/configs/shmobile_defconfig
  F:    arch/arm/include/debug/renesas-scif.S
  F:    arch/arm/mach-shmobile/
 -F:    drivers/sh/
  F:    drivers/soc/renesas/
  F:    include/linux/soc/renesas/
  
@@@ -1703,6 -1689,8 +1703,6 @@@ S:      Maintaine
  F:    drivers/edac/altera_edac.
  
  ARM/STI ARCHITECTURE
 -M:    Srinivas Kandagatla <srinivas.kandagatla@gmail.com>
 -M:    Maxime Coquelin <maxime.coquelin@st.com>
  M:    Patrice Chotard <patrice.chotard@st.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    kernel@stlinux.com
@@@ -1735,7 -1723,6 +1735,7 @@@ F:      drivers/ata/ahci_st.
  
  ARM/STM32 ARCHITECTURE
  M:    Maxime Coquelin <mcoquelin.stm32@gmail.com>
 +M:    Alexandre Torgue <alexandre.torgue@st.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mcoquelin/stm32.git
@@@ -2255,8 -2242,7 +2255,8 @@@ F:      include/net/ax25.
  F:    net/ax25/
  
  AZ6007 DVB DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -2305,7 -2291,6 +2305,7 @@@ S:      Maintaine
  F:    Documentation/ABI/testing/sysfs-class-net-batman-adv
  F:    Documentation/ABI/testing/sysfs-class-net-mesh
  F:    Documentation/networking/batman-adv.txt
 +F:    include/uapi/linux/batman_adv.h
  F:    net/batman-adv/
  
  BAYCOM/HDLCDRV DRIVERS FOR AX.25
@@@ -2469,14 -2454,6 +2469,14 @@@ L:    netdev@vger.kernel.or
  S:    Supported
  F:    drivers/net/ethernet/broadcom/b44.*
  
 +BROADCOM B53 ETHERNET SWITCH DRIVER
 +M:    Florian Fainelli <f.fainelli@gmail.com>
 +L:    netdev@vger.kernel.org
 +L:    openwrt-devel@lists.openwrt.org (subscribers-only)
 +S:    Supported
 +F:    drivers/net/dsa/b53/*
 +F:    include/linux/platform_data/b53.h
 +
  BROADCOM GENET ETHERNET DRIVER
  M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    netdev@vger.kernel.org
@@@ -2593,11 -2570,12 +2593,11 @@@ S:   Supporte
  F:    drivers/net/ethernet/broadcom/tg3.*
  
  BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
 -M:    Brett Rudley <brudley@broadcom.com>
 -M:    Arend van Spriel <arend@broadcom.com>
 -M:    Franky (Zhenhui) Lin <frankyl@broadcom.com>
 -M:    Hante Meuleman <meuleman@broadcom.com>
 +M:    Arend van Spriel <arend.vanspriel@broadcom.com>
 +M:    Franky Lin <franky.lin@broadcom.com>
 +M:    Hante Meuleman <hante.meuleman@broadcom.com>
  L:    linux-wireless@vger.kernel.org
 -L:    brcm80211-dev-list@broadcom.com
 +L:    brcm80211-dev-list.pdl@broadcom.com
  S:    Supported
  F:    drivers/net/wireless/broadcom/brcm80211/
  
@@@ -2731,8 -2709,7 +2731,8 @@@ F:      Documentation/filesystems/btrfs.tx
  F:    fs/btrfs/
  
  BTTV VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -2796,9 -2773,9 +2796,9 @@@ F:      include/net/caif
  F:    net/caif/
  
  CALGARY x86-64 IOMMU
 -M:    Muli Ben-Yehuda <muli@il.ibm.com>
 -M:    "Jon D. Mason" <jdmason@kudzu.us>
 -L:    discuss@x86-64.org
 +M:    Muli Ben-Yehuda <mulix@mulix.org>
 +M:    Jon Mason <jdmason@kudzu.us>
 +L:    iommu@lists.linux-foundation.org
  S:    Maintained
  F:    arch/x86/kernel/pci-calgary_64.c
  F:    arch/x86/kernel/tce_64.c
@@@ -2829,7 -2806,6 +2829,7 @@@ W:      https://github.com/linux-ca
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/net/can/
  F:    drivers/net/can/
  F:    include/linux/can/dev.h
  F:    include/linux/can/platform/
@@@ -2837,7 -2813,7 +2837,7 @@@ F:      include/uapi/linux/can/error.
  F:    include/uapi/linux/can/netlink.h
  
  CAPABILITIES
- M:    Serge Hallyn <serge.hallyn@canonical.com>
+ M:    Serge Hallyn <serge@hallyn.com>
  L:    linux-security-module@vger.kernel.org
  S:    Supported
  F:    include/linux/capability.h
@@@ -2869,22 -2845,6 +2869,22 @@@ F:    drivers/net/ieee802154/cc2520.
  F:    include/linux/spi/cc2520.h
  F:    Documentation/devicetree/bindings/net/ieee802154/cc2520.txt
  
 +CEC DRIVER
 +M:    Hans Verkuil <hans.verkuil@cisco.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +W:    http://linuxtv.org
 +S:    Supported
 +F:    Documentation/cec.txt
 +F:    Documentation/DocBook/media/v4l/cec*
 +F:    drivers/staging/media/cec/
 +F:    drivers/media/cec-edid.c
 +F:    drivers/media/rc/keymaps/rc-cec.c
 +F:    include/media/cec.h
 +F:    include/media/cec-edid.h
 +F:    include/linux/cec.h
 +F:    include/linux/cec-funcs.h
 +
  CELL BROADBAND ENGINE ARCHITECTURE
  M:    Arnd Bergmann <arnd@arndb.de>
  L:    linuxppc-dev@lists.ozlabs.org
@@@ -3126,7 -3086,6 +3126,7 @@@ M:      Stephen Boyd <sboyd@codeaurora.org
  L:    linux-clk@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/clock/
  F:    drivers/clk/
  X:    drivers/clk/clkdev.c
  F:    include/linux/clk-pr*
@@@ -3321,7 -3280,6 +3321,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git
  S:    Maintained
  F:    Documentation/crypto/
 +F:    Documentation/devicetree/bindings/crypto/
  F:    Documentation/DocBook/crypto-API.tmpl
  F:    arch/*/crypto/
  F:    crypto/
@@@ -3385,8 -3343,7 +3385,8 @@@ S:      Maintaine
  F:    drivers/media/dvb-frontends/cx24120*
  
  CX88 VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -3816,7 -3773,6 +3816,7 @@@ Q:      https://patchwork.kernel.org/project
  S:    Maintained
  F:    drivers/dma/
  F:    include/linux/dmaengine.h
 +F:    Documentation/devicetree/bindings/dma/
  F:    Documentation/dmaengine/
  T:    git git://git.infradead.org/users/vkoul/slave-dma.git
  
@@@ -4334,8 -4290,7 +4334,8 @@@ F:      fs/ecryptfs
  EDAC-CORE
  M:    Doug Thompson <dougthompson@xmission.com>
  M:    Borislav Petkov <bp@alien8.de>
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp.git for-next
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac.git linux_next
@@@ -4380,8 -4335,7 +4380,8 @@@ S:      Maintaine
  F:    drivers/edac/e7xxx_edac.c
  
  EDAC-GHES
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/ghes_edac.c
@@@ -4405,22 -4359,19 +4405,22 @@@ S:   Maintaine
  F:    drivers/edac/i5000_edac.c
  
  EDAC-I5400
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/i5400_edac.c
  
  EDAC-I7300
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/i7300_edac.c
  
  EDAC-I7CORE
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/i7core_edac.c
@@@ -4457,8 -4408,7 +4457,8 @@@ S:      Maintaine
  F:    drivers/edac/r82600_edac.c
  
  EDAC-SBRIDGE
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/sb_edac.c
@@@ -4511,14 -4461,13 +4511,14 @@@ S:   Orpha
  F:    fs/efs/
  
  EHEA (IBM pSeries eHEA 10Gb ethernet adapter) DRIVER
 -M:    Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
 +M:    Douglas Miller <dougmill@linux.vnet.ibm.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/ethernet/ibm/ehea/
  
  EM28XX VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -4699,7 -4648,7 +4699,7 @@@ S:      Maintaine
  F:    drivers/staging/fbtft/
  
  FCOE SUBSYSTEM (libfc, libfcoe, fcoe)
 -M:    Vasu Dev <vasu.dev@intel.com>
 +M:    Johannes Thumshirn <jth@kernel.org>
  L:    fcoe-devel@open-fcoe.org
  W:    www.Open-FCoE.org
  S:    Supported
@@@ -4921,13 -4870,6 +4921,13 @@@ F:    drivers/net/ethernet/freescale/gianf
  X:    drivers/net/ethernet/freescale/gianfar_ptp.c
  F:    Documentation/devicetree/bindings/net/fsl-tsec-phy.txt
  
 +FREESCALE QUICC ENGINE UCC HDLC DRIVER
 +M:    Zhao Qiang <qiang.zhao@nxp.com>
 +L:    netdev@vger.kernel.org
 +L:    linuxppc-dev@lists.ozlabs.org
 +S:    Maintained
 +F:    drivers/net/wan/fsl_ucc_hdlc*
 +
  FREESCALE QUICC ENGINE UCC UART DRIVER
  M:    Timur Tabi <timur@tabi.org>
  L:    linuxppc-dev@lists.ozlabs.org
@@@ -4983,13 -4925,6 +4983,13 @@@ F:    Documentation/filesystems/caching
  F:    fs/fscache/
  F:    include/linux/fscache*.h
  
 +FS-CRYPTO: FILE SYSTEM LEVEL ENCRYPTION SUPPORT
 +M:    Theodore Y. Ts'o <tytso@mit.edu>
 +M:    Jaegeuk Kim <jaegeuk@kernel.org>
 +S:    Supported
 +F:    fs/crypto/
 +F:    include/linux/fscrypto.h
 +
  F2FS FILE SYSTEM
  M:    Jaegeuk Kim <jaegeuk@kernel.org>
  M:    Changman Lee <cm224.lee@samsung.com>
@@@ -5218,10 -5153,10 +5218,10 @@@ S:   Maintaine
  F:    drivers/media/usb/gspca/m5602/
  
  GSPCA PAC207 SONIXB SUBDRIVER
 -M:    Hans de Goede <hdegoede@redhat.com>
 +M:    Hans Verkuil <hverkuil@xs4all.nl>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/media/usb/gspca/pac207.c
  
  GSPCA SN9C20X SUBDRIVER
@@@ -5239,10 -5174,10 +5239,10 @@@ S:   Maintaine
  F:    drivers/media/usb/gspca/t613.c
  
  GSPCA USB WEBCAM DRIVER
 -M:    Hans de Goede <hdegoede@redhat.com>
 +M:    Hans Verkuil <hverkuil@xs4all.nl>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/media/usb/gspca/
  
  GUID PARTITION TABLE (GPT)
@@@ -5323,7 -5258,6 +5323,7 @@@ M:      Matt Mackall <mpm@selenic.com
  M:    Herbert Xu <herbert@gondor.apana.org.au>
  L:    linux-crypto@vger.kernel.org
  S:    Odd fixes
 +F:    Documentation/devicetree/bindings/rng/
  F:    Documentation/hw_random.txt
  F:    drivers/char/hw_random/
  F:    include/linux/hw_random.h
@@@ -5334,9 -5268,8 +5334,9 @@@ M:      Bjorn Andersson <bjorn.andersson@lin
  L:    linux-remoteproc@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ohad/hwspinlock.git
 +F:    Documentation/devicetree/bindings/hwlock/
  F:    Documentation/hwspinlock.txt
 -F:    drivers/hwspinlock/hwspinlock_*
 +F:    drivers/hwspinlock/
  F:    include/linux/hwspinlock.h
  
  HARMONY SOUND DRIVER
@@@ -5472,15 -5405,6 +5472,15 @@@ F:    include/uapi/linux/if_hippi.
  F:    net/802/hippi.c
  F:    drivers/net/hippi/
  
 +HISILICON NETWORK SUBSYSTEM DRIVER
 +M:    Yisen Zhuang <yisen.zhuang@huawei.com>
 +M:    Salil Mehta <salil.mehta@huawei.com>
 +L:    netdev@vger.kernel.org
 +W:    http://www.hisilicon.com
 +S:    Maintained
 +F:    drivers/net/ethernet/hisilicon/
 +F:    Documentation/devicetree/bindings/net/hisilicon*.txt
 +
  HISILICON SAS Controller
  M:    John Garry <john.garry@huawei.com>
  W:    http://www.hisilicon.com
@@@ -5848,9 -5772,7 +5848,9 @@@ R:      Hartmut Knaack <knaack.h@gmx.de
  R:    Lars-Peter Clausen <lars@metafoo.de>
  R:    Peter Meerwald-Stadler <pmeerw@pmeerw.net>
  L:    linux-iio@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/
  F:    drivers/iio/
  F:    drivers/staging/iio/
  F:    include/linux/iio/
@@@ -5980,12 -5902,6 +5980,12 @@@ L:    platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/intel-hid.c
  
 +INTEL VIRTUAL BUTTON DRIVER
 +M:    AceLan Kao <acelan.kao@canonical.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/intel-vbtn.c
 +
  INTEL IDLE DRIVER
  M:    Len Brown <lenb@kernel.org>
  L:    linux-pm@vger.kernel.org
@@@ -6088,12 -6004,6 +6088,12 @@@ L:     linux-rdma@vger.kernel.or
  S:     Supported
  F:     drivers/infiniband/hw/i40iw/
  
 +INTEL MERRIFIELD GPIO DRIVER
 +M:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 +L:    linux-gpio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/gpio/gpio-merrifield.c
 +
  INTEL-MID GPIO DRIVER
  M:    David Cohen <david.a.cohen@linux.intel.com>
  L:    linux-gpio@vger.kernel.org
@@@ -6308,6 -6218,7 +6308,6 @@@ F:      Documentation/devicetree/bindings/in
  F:    drivers/irqchip/
  
  IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY)
 -M:    Jiang Liu <jiang.liu@linux.intel.com>
  M:    Marc Zyngier <marc.zyngier@arm.com>
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
@@@ -6575,7 -6486,6 +6575,7 @@@ F:      include/uapi/linux/sunrpc
  
  KERNEL SELFTEST FRAMEWORK
  M:    Shuah Khan <shuahkh@osg.samsung.com>
 +M:    Shuah Khan <shuah@kernel.org>
  L:    linux-kselftest@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/shuah/linux-kselftest
  S:    Maintained
@@@ -6784,7 -6694,6 +6784,7 @@@ M:      Jacek Anaszewski <j.anaszewski@samsu
  L:    linux-leds@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/leds/
  F:    drivers/leds/
  F:    include/linux/leds.h
  
@@@ -6840,7 -6749,6 +6840,7 @@@ S:      Maintaine
  F:    drivers/ata/
  F:    include/linux/ata.h
  F:    include/linux/libata.h
 +F:    Documentation/devicetree/bindings/ata/
  
  LIBATA PATA ARASAN COMPACT FLASH CONTROLLER
  M:    Viresh Kumar <vireshk@kernel.org>
@@@ -7045,7 -6953,7 +7045,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  LINUX KERNEL DUMP TEST MODULE (LKDTM)
  M:    Kees Cook <keescook@chromium.org>
  S:    Maintained
 -F:    drivers/misc/lkdtm.c
 +F:    drivers/misc/lkdtm*
  
  LLC (802.2)
  M:    Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
@@@ -7098,23 -7006,15 +7098,23 @@@ Q:   http://patchwork.linuxtv.org/project
  S:    Maintained
  F:    drivers/media/usb/dvb-usb-v2/lmedm04*
  
 -LOCKDEP AND LOCKSTAT
 +LOCKING PRIMITIVES
  M:    Peter Zijlstra <peterz@infradead.org>
  M:    Ingo Molnar <mingo@redhat.com>
  L:    linux-kernel@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core
  S:    Maintained
 -F:    Documentation/locking/lockdep*.txt
 -F:    Documentation/locking/lockstat.txt
 +F:    Documentation/locking/
  F:    include/linux/lockdep.h
 +F:    include/linux/spinlock*.h
 +F:    arch/*/include/asm/spinlock*.h
 +F:    include/linux/rwlock*.h
 +F:    include/linux/mutex*.h
 +F:    arch/*/include/asm/mutex*.h
 +F:    include/linux/rwsem*.h
 +F:    arch/*/include/asm/rwsem.h
 +F:    include/linux/seqlock.h
 +F:    lib/locking*.[ch]
  F:    kernel/locking/
  
  LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP/Vista Dynamic Disks)
@@@ -7255,12 -7155,6 +7255,12 @@@ W:    http://www.kernel.org/doc/man-page
  L:    linux-man@vger.kernel.org
  S:    Maintained
  
 +MARVELL 88E6XXX ETHERNET SWITCH FABRIC DRIVER
 +M:    Andrew Lunn <andrew@lunn.ch>
 +M:    Vivien Didelot <vivien.didelot@savoirfairelinux.com>
 +S:    Maintained
 +F:    drivers/net/dsa/mv88e6xxx/
 +
  MARVELL ARMADA DRM SUPPORT
  M:    Russell King <rmk+kernel@armlinux.org.uk>
  S:    Maintained
@@@ -7268,6 -7162,11 +7268,6 @@@ F:     drivers/gpu/drm/armada
  F:    include/uapi/drm/armada_drm.h
  F:    Documentation/devicetree/bindings/display/armada/
  
 -MARVELL 88E6352 DSA support
 -M:    Guenter Roeck <linux@roeck-us.net>
 -S:    Maintained
 -F:    drivers/net/dsa/mv88e6352.c
 -
  MARVELL CRYPTO DRIVER
  M:    Boris Brezillon <boris.brezillon@free-electrons.com>
  M:    Arnaud Ebalard <arno@natisbad.org>
@@@ -7403,16 -7302,6 +7403,16 @@@ L:    linux-iio@vger.kernel.or
  S:    Maintained
  F:    drivers/iio/potentiometer/mcp4531.c
  
 +MEDIA DRIVERS FOR RENESAS - FCP
 +M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 +L:    linux-media@vger.kernel.org
 +L:    linux-renesas-soc@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Supported
 +F:    Documentation/devicetree/bindings/media/renesas,fcp.txt
 +F:    drivers/media/platform/rcar-fcp.c
 +F:    include/media/rcar-fcp.h
 +
  MEDIA DRIVERS FOR RENESAS - VSP1
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
  L:    linux-media@vger.kernel.org
@@@ -7422,18 -7311,8 +7422,18 @@@ S:    Supporte
  F:    Documentation/devicetree/bindings/media/renesas,vsp1.txt
  F:    drivers/media/platform/vsp1/
  
 +MEDIA DRIVERS FOR HELENE
 +M:    Abylay Ospan <aospan@netup.ru>
 +L:    linux-media@vger.kernel.org
 +W:    https://linuxtv.org
 +W:    http://netup.tv/
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Supported
 +F:    drivers/media/dvb-frontends/helene*
 +
  MEDIA DRIVERS FOR ASCOT2E
  M:    Sergey Kozlov <serjk@netup.ru>
 +M:    Abylay Ospan <aospan@netup.ru>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  W:    http://netup.tv/
@@@ -7443,7 -7322,6 +7443,7 @@@ F:      drivers/media/dvb-frontends/ascot2e
  
  MEDIA DRIVERS FOR CXD2841ER
  M:    Sergey Kozlov <serjk@netup.ru>
 +M:    Abylay Ospan <aospan@netup.ru>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  W:    http://netup.tv/
@@@ -7453,7 -7331,6 +7453,7 @@@ F:      drivers/media/dvb-frontends/cxd2841e
  
  MEDIA DRIVERS FOR HORUS3A
  M:    Sergey Kozlov <serjk@netup.ru>
 +M:    Abylay Ospan <aospan@netup.ru>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  W:    http://netup.tv/
@@@ -7463,7 -7340,6 +7463,7 @@@ F:      drivers/media/dvb-frontends/horus3a
  
  MEDIA DRIVERS FOR LNBH25
  M:    Sergey Kozlov <serjk@netup.ru>
 +M:    Abylay Ospan <aospan@netup.ru>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  W:    http://netup.tv/
@@@ -7473,7 -7349,6 +7473,7 @@@ F:      drivers/media/dvb-frontends/lnbh25
  
  MEDIA DRIVERS FOR NETUP PCI UNIVERSAL DVB devices
  M:    Sergey Kozlov <serjk@netup.ru>
 +M:    Abylay Ospan <aospan@netup.ru>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  W:    http://netup.tv/
@@@ -7482,8 -7357,7 +7482,8 @@@ S:      Supporte
  F:    drivers/media/pci/netup_unidvb/*
  
  MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  P:    LinuxTV.org Project
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
@@@ -7531,7 -7405,7 +7531,7 @@@ F:      drivers/scsi/megaraid.
  F:    drivers/scsi/megaraid/
  
  MELLANOX ETHERNET DRIVER (mlx4_en)
 -M:    Eugenia Emantayev <eugenia@mellanox.com>
 +M:    Tariq Toukan <tariqt@mellanox.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  W:    http://www.mellanox.com
@@@ -7583,7 -7457,6 +7583,7 @@@ Q:      http://patchwork.ozlabs.org/project/
  T:    git git://git.infradead.org/linux-mtd.git
  T:    git git://git.infradead.org/l2-mtd.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/mtd/
  F:    drivers/mtd/
  F:    include/linux/mtd/
  F:    include/uapi/mtd/
@@@ -7723,8 -7596,10 +7723,8 @@@ L:     linux-media@vger.kernel.or
  W:    https://linuxtv.org
  W:    http://palosaari.fi/linux/
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 -T:    git git://linuxtv.org/anttip/media_tree.git
  S:    Maintained
 -F:    drivers/staging/media/mn88472/
 -F:    drivers/media/dvb-frontends/mn88472.h
 +F:    drivers/media/dvb-frontends/mn88472*
  
  MN88473 MEDIA DRIVER
  M:    Antti Palosaari <crope@iki.fi>
@@@ -8133,7 -8008,6 +8133,7 @@@ Q:      http://patchwork.kernel.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/net/wireless/
  F:    drivers/net/wireless/
  
  NETXEN (1/10) GbE SUPPORT
@@@ -8279,13 -8153,6 +8279,13 @@@ S:    Supporte
  F:    drivers/nvme/host/
  F:    include/linux/nvme.h
  
 +NVM EXPRESS TARGET DRIVER
 +M:    Christoph Hellwig <hch@lst.de>
 +M:    Sagi Grimberg <sagi@grimberg.me>
 +L:    linux-nvme@lists.infradead.org
 +S:    Supported
 +F:    drivers/nvme/target/
 +
  NVMEM FRAMEWORK
  M:    Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
  M:    Maxime Ripard <maxime.ripard@free-electrons.com>
@@@ -8538,9 -8405,10 +8538,9 @@@ F:     drivers/i2c/busses/i2c-ocores.
  OPEN FIRMWARE AND FLATTENED DEVICE TREE
  M:    Rob Herring <robh+dt@kernel.org>
  M:    Frank Rowand <frowand.list@gmail.com>
 -M:    Grant Likely <grant.likely@linaro.org>
  L:    devicetree@vger.kernel.org
  W:    http://www.devicetree.org/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/glikely/linux.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
  S:    Maintained
  F:    drivers/of/
  F:    include/linux/of*.h
@@@ -8548,10 -8416,12 +8548,10 @@@ F:   scripts/dtc
  
  OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
  M:    Rob Herring <robh+dt@kernel.org>
 -M:    Pawel Moll <pawel.moll@arm.com>
  M:    Mark Rutland <mark.rutland@arm.com>
 -M:    Ian Campbell <ijc+devicetree@hellion.org.uk>
 -M:    Kumar Gala <galak@codeaurora.org>
  L:    devicetree@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
 +Q:    http://patchwork.ozlabs.org/project/devicetree-bindings/list/
  S:    Maintained
  F:    Documentation/devicetree/
  F:    arch/*/boot/dts/
@@@ -9076,7 -8946,6 +9076,7 @@@ L:      linux-gpio@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
  S:    Maintained
  F:    Documentation/devicetree/bindings/pinctrl/
 +F:    Documentation/pinctrl.txt
  F:    drivers/pinctrl/
  F:    include/linux/pinctrl/
  
@@@ -9199,8 -9068,6 +9199,8 @@@ M:      David Woodhouse <dwmw2@infradead.org
  L:    linux-pm@vger.kernel.org
  T:    git git://git.infradead.org/battery-2.6.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/power/
 +F:    Documentation/devicetree/bindings/power_supply/
  F:    include/linux/power_supply.h
  F:    drivers/power/
  X:    drivers/power/avs/
@@@ -9338,13 -9205,6 +9338,13 @@@ F:    include/linux/tracehook.
  F:    include/uapi/linux/ptrace.h
  F:    kernel/ptrace.c
  
 +PULSE8-CEC DRIVER
 +M:    Hans Verkuil <hverkuil@xs4all.nl>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/staging/media/pulse8-cec
 +
  PVRUSB2 VIDEO4LINUX DRIVER
  M:    Mike Isely <isely@pobox.com>
  L:    pvrusb2@isely.net       (subscribers-only)
@@@ -9356,10 -9216,10 +9356,10 @@@ F:   Documentation/video4linux/README.pvr
  F:    drivers/media/usb/pvrusb2/
  
  PWC WEBCAM DRIVER
 -M:    Hans de Goede <hdegoede@redhat.com>
 +M:    Hans Verkuil <hverkuil@xs4all.nl>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/media/usb/pwc/*
  
  PWM FAN DRIVER
@@@ -9432,8 -9292,7 +9432,8 @@@ L:      rtc-linux@googlegroups.co
  S:    Maintained
  
  QAT DRIVER
 -M:    Tadeusz Struk <tadeusz.struk@intel.com>
 +M:    Giovanni Cabiddu <giovanni.cabiddu@intel.com>
 +M:    Salvatore Benedetto <salvatore.benedetto@intel.com>
  L:    qat-linux@intel.com
  S:    Supported
  F:    drivers/crypto/qat/
@@@ -9575,14 -9434,14 +9575,14 @@@ F:   drivers/video/fbdev/aty/radeon
  F:    include/uapi/linux/radeonfb.h
  
  RADIOSHARK RADIO DRIVER
 -M:    Hans de Goede <hdegoede@redhat.com>
 +M:    Hans Verkuil <hverkuil@xs4all.nl>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/radio/radio-shark.c
  
  RADIOSHARK2 RADIO DRIVER
 -M:    Hans de Goede <hdegoede@redhat.com>
 +M:    Hans Verkuil <hverkuil@xs4all.nl>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
@@@ -9656,7 -9515,7 +9656,7 @@@ M:      Florian Fainelli <florian@openwrt.or
  S:    Maintained
  
  RDC R6040 FAST ETHERNET DRIVER
 -M:    Florian Fainelli <florian@openwrt.org>
 +M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/ethernet/rdc/r6040.c
@@@ -9723,7 -9582,6 +9723,7 @@@ M:      Mark Brown <broonie@kernel.org
  L:    linux-kernel@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git
  S:    Supported
 +F:    Documentation/devicetree/bindings/regmap/
  F:    drivers/base/regmap/
  F:    include/linux/regmap.h
  
@@@ -9733,9 -9591,8 +9733,9 @@@ M:      Bjorn Andersson <bjorn.andersson@lin
  L:    linux-remoteproc@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ohad/remoteproc.git
  S:    Maintained
 -F:    drivers/remoteproc/
 +F:    Documentation/devicetree/bindings/remoteproc/
  F:    Documentation/remoteproc.txt
 +F:    drivers/remoteproc/
  F:    include/linux/remoteproc.h
  
  REMOTE PROCESSOR MESSAGING (RPMSG) SUBSYSTEM
@@@ -9809,6 -9666,7 +9809,6 @@@ F:      Documentation/ABI/*/sysfs-driver-hid
  
  ROCKER DRIVER
  M:    Jiri Pirko <jiri@resnulli.us>
 -M:    Scott Feldman <sfeldma@gmail.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/rocker/
@@@ -9995,8 -9853,7 +9995,8 @@@ S:      Odd Fixe
  F:    drivers/media/i2c/saa6588*
  
  SAA7134 VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -10125,7 -9982,6 +10125,7 @@@ SERIAL DRIVER
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  L:    linux-serial@vger.kernel.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/serial/
  F:    drivers/tty/serial/
  
  SYNOPSYS DESIGNWARE DMAC DRIVER
@@@ -10262,7 -10118,6 +10262,7 @@@ M:   "Martin K. Petersen" <martin.peterse
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/scsi/
  F:    drivers/scsi/
  F:    include/scsi/
  
@@@ -10407,9 -10262,10 +10407,9 @@@ W:  http://www.avagotech.co
  S:    Supported
  F:    drivers/scsi/be2iscsi/
  
 -Emulex 10Gbps NIC BE2, BE3-R, Lancer, Skyhawk-R DRIVER
 +Emulex 10Gbps NIC BE2, BE3-R, Lancer, Skyhawk-R DRIVER (be2net)
  M:    Sathya Perla <sathya.perla@broadcom.com>
  M:    Ajit Khaparde <ajit.khaparde@broadcom.com>
 -M:    Padmanabh Ratnakar <padmanabh.ratnakar@broadcom.com>
  M:    Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
  M:    Somnath Kotur <somnath.kotur@broadcom.com>
  L:    netdev@vger.kernel.org
@@@ -10516,8 -10372,7 +10516,8 @@@ S:   Maintaine
  F:    drivers/media/radio/si4713/radio-usb-si4713.c
  
  SIANO DVB DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -10675,7 -10530,7 +10675,7 @@@ SMACK SECURITY MODUL
  M:    Casey Schaufler <casey@schaufler-ca.com>
  L:    linux-security-module@vger.kernel.org
  W:    http://schaufler-ca.com
- T:    git git://git.gitorious.org/smack-next/kernel.git
+ T:    git git://github.com/cschaufler/smack-next
  S:    Maintained
  F:    Documentation/security/Smack.txt
  F:    security/smack/
@@@ -10924,7 -10779,6 +10924,7 @@@ L:   linux-spi@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git
  Q:    http://patchwork.kernel.org/project/spi-devel-general/list/
  S:    Maintained
 +F:    Documentation/devicetree/bindings/spi/
  F:    Documentation/spi/
  F:    drivers/spi/
  F:    include/linux/spi/
@@@ -10987,7 -10841,6 +10987,7 @@@ STAGING - INDUSTRIAL I
  M:    Jonathan Cameron <jic23@kernel.org>
  L:    linux-iio@vger.kernel.org
  S:    Odd Fixes
 +F:    Documentation/devicetree/bindings/staging/iio/
  F:    drivers/staging/iio/
  
  STAGING - LIRC (LINUX INFRARED REMOTE CONTROL) DRIVERS
@@@ -11285,8 -11138,7 +11285,8 @@@ S:   Maintaine
  F:    drivers/media/i2c/tda9840*
  
  TEA5761 TUNER DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -11294,8 -11146,7 +11294,8 @@@ S:   Odd fixe
  F:    drivers/media/tuners/tea5761.*
  
  TEA5767 TUNER DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -11442,6 -11293,11 +11442,6 @@@ F:  Documentation/thermal/cpu-cooling-ap
  F:    drivers/thermal/cpu_cooling.c
  F:    include/linux/cpu_cooling.h
  
 -THINGM BLINK(1) USB RGB LED DRIVER
 -M:    Vivien Didelot <vivien.didelot@savoirfairelinux.com>
 -S:    Maintained
 -F:    drivers/hid/hid-thingm.c
 -
  THINKPAD ACPI EXTRAS DRIVER
  M:    Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
  L:    ibm-acpi-devel@lists.sourceforge.net
@@@ -11677,8 -11533,7 +11677,8 @@@ F:   include/linux/shmem_fs.
  F:    mm/shmem.c
  
  TM6000 VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -11892,12 -11747,6 +11892,12 @@@ S: Supporte
  F:    Documentation/scsi/ufs.txt
  F:    drivers/scsi/ufs/
  
 +UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER DWC HOOKS
 +M:    Joao Pinto <Joao.Pinto@synopsys.com>
 +L:    linux-scsi@vger.kernel.org
 +S:    Supported
 +F:    drivers/scsi/ufs/*dwc*
 +
  UNSORTED BLOCK IMAGES (UBI)
  M:    Artem Bityutskiy <dedekind1@gmail.com>
  M:    Richard Weinberger <richard@nod.at>
@@@ -11923,7 -11772,8 +11923,7 @@@ S:   Maintaine
  F:    drivers/net/wireless/ath/ar5523/
  
  USB ATTACHED SCSI
 -M:    Hans de Goede <hdegoede@redhat.com>
 -M:    Gerd Hoffmann <kraxel@redhat.com>
 +M:    Oliver Neukum <oneukum@suse.com>
  L:    linux-usb@vger.kernel.org
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
@@@ -12037,8 -11887,7 +12037,8 @@@ F:   drivers/usb/common/usb-otg-fsm.
  
  USB OVER IP DRIVER
  M:    Valentina Manea <valentina.manea.m@gmail.com>
 -M:    Shuah Khan <shuah.kh@samsung.com>
 +M:    Shuah Khan <shuahkh@osg.samsung.com>
 +M:    Shuah Khan <shuah@kernel.org>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
  F:    Documentation/usb/usbip_protocol.txt
@@@ -12109,7 -11958,6 +12109,7 @@@ L:   linux-usb@vger.kernel.or
  W:    http://www.linux-usb.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
  S:    Supported
 +F:    Documentation/devicetree/bindings/usb/
  F:    Documentation/usb/
  F:    drivers/usb/
  F:    include/linux/usb.h
@@@ -12283,7 -12131,6 +12283,7 @@@ VIRTIO CORE, NET AND BLOCK DRIVER
  M:    "Michael S. Tsirkin" <mst@redhat.com>
  L:    virtualization@lists.linux-foundation.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/virtio/
  F:    drivers/virtio/
  F:    tools/virtio/
  F:    drivers/net/virtio_net.c
@@@ -12422,7 -12269,7 +12422,7 @@@ S:   Maintaine
  F:    drivers/net/vmxnet3/
  
  VMware PVSCSI driver
 -M:    Arvind Kumar <arvindkumar@vmware.com>
 +M:    Jim Gill <jgill@vmware.com>
  M:    VMware PV-Drivers <pv-drivers@vmware.com>
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
@@@ -12672,8 -12519,7 +12672,8 @@@ S:   Maintaine
  F:    arch/x86/entry/vdso/
  
  XC2028/3028 TUNER DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
 +M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-media@vger.kernel.org
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
index 030c1d5aa46ddadc3c25af32a1052eb304f0287a,602316c97a475d87154cfe4558d2711b7841b342..e0c81da60f76270ad122fee3595464852e7d9ee2
  #define CREATE_TRACE_POINTS
  #include <trace/events/syscalls.h>
  
 +struct pt_regs_offset {
 +      const char *name;
 +      int offset;
 +};
 +
 +#define REG_OFFSET_NAME(r) {.name = #r, .offset = offsetof(struct pt_regs, r)}
 +#define REG_OFFSET_END {.name = NULL, .offset = 0}
 +#define GPR_OFFSET_NAME(r) \
 +      {.name = "x" #r, .offset = offsetof(struct pt_regs, regs[r])}
 +
 +static const struct pt_regs_offset regoffset_table[] = {
 +      GPR_OFFSET_NAME(0),
 +      GPR_OFFSET_NAME(1),
 +      GPR_OFFSET_NAME(2),
 +      GPR_OFFSET_NAME(3),
 +      GPR_OFFSET_NAME(4),
 +      GPR_OFFSET_NAME(5),
 +      GPR_OFFSET_NAME(6),
 +      GPR_OFFSET_NAME(7),
 +      GPR_OFFSET_NAME(8),
 +      GPR_OFFSET_NAME(9),
 +      GPR_OFFSET_NAME(10),
 +      GPR_OFFSET_NAME(11),
 +      GPR_OFFSET_NAME(12),
 +      GPR_OFFSET_NAME(13),
 +      GPR_OFFSET_NAME(14),
 +      GPR_OFFSET_NAME(15),
 +      GPR_OFFSET_NAME(16),
 +      GPR_OFFSET_NAME(17),
 +      GPR_OFFSET_NAME(18),
 +      GPR_OFFSET_NAME(19),
 +      GPR_OFFSET_NAME(20),
 +      GPR_OFFSET_NAME(21),
 +      GPR_OFFSET_NAME(22),
 +      GPR_OFFSET_NAME(23),
 +      GPR_OFFSET_NAME(24),
 +      GPR_OFFSET_NAME(25),
 +      GPR_OFFSET_NAME(26),
 +      GPR_OFFSET_NAME(27),
 +      GPR_OFFSET_NAME(28),
 +      GPR_OFFSET_NAME(29),
 +      GPR_OFFSET_NAME(30),
 +      {.name = "lr", .offset = offsetof(struct pt_regs, regs[30])},
 +      REG_OFFSET_NAME(sp),
 +      REG_OFFSET_NAME(pc),
 +      REG_OFFSET_NAME(pstate),
 +      REG_OFFSET_END,
 +};
 +
 +/**
 + * regs_query_register_offset() - query register offset from its name
 + * @name:     the name of a register
 + *
 + * regs_query_register_offset() returns the offset of a register in struct
 + * pt_regs from its name. If the name is invalid, this returns -EINVAL;
 + */
 +int regs_query_register_offset(const char *name)
 +{
 +      const struct pt_regs_offset *roff;
 +
 +      for (roff = regoffset_table; roff->name != NULL; roff++)
 +              if (!strcmp(roff->name, name))
 +                      return roff->offset;
 +      return -EINVAL;
 +}
 +
 +/**
 + * regs_within_kernel_stack() - check the address in the stack
 + * @regs:      pt_regs which contains kernel stack pointer.
 + * @addr:      address which is checked.
 + *
 + * regs_within_kernel_stack() checks @addr is within the kernel stack page(s).
 + * If @addr is within the kernel stack, it returns true. If not, returns false.
 + */
 +static bool regs_within_kernel_stack(struct pt_regs *regs, unsigned long addr)
 +{
 +      return ((addr & ~(THREAD_SIZE - 1))  ==
 +              (kernel_stack_pointer(regs) & ~(THREAD_SIZE - 1))) ||
 +              on_irq_stack(addr, raw_smp_processor_id());
 +}
 +
 +/**
 + * regs_get_kernel_stack_nth() - get Nth entry of the stack
 + * @regs:     pt_regs which contains kernel stack pointer.
 + * @n:                stack entry number.
 + *
 + * regs_get_kernel_stack_nth() returns @n th entry of the kernel stack which
 + * is specified by @regs. If the @n th entry is NOT in the kernel stack,
 + * this returns 0.
 + */
 +unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, unsigned int n)
 +{
 +      unsigned long *addr = (unsigned long *)kernel_stack_pointer(regs);
 +
 +      addr += n;
 +      if (regs_within_kernel_stack(regs, (unsigned long)addr))
 +              return *addr;
 +      else
 +              return 0;
 +}
 +
  /*
   * TODO: does not yet catch signals sent when the child dies.
   * in exit.c or in signal.c.
@@@ -1347,13 -1246,13 +1347,13 @@@ static void tracehook_report_syscall(st
  
  asmlinkage int syscall_trace_enter(struct pt_regs *regs)
  {
-       /* Do the secure computing check first; failures should be fast. */
-       if (secure_computing() == -1)
-               return -1;
        if (test_thread_flag(TIF_SYSCALL_TRACE))
                tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER);
  
+       /* Do the secure computing after ptrace; failures should be fast. */
+       if (secure_computing(NULL) == -1)
+               return -1;
        if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
                trace_sys_enter(regs, regs->syscallno);
  
index 060b140f03c69de424e40e4dcdb5064d832ce889,5dc47ebb3840144aee53b0f75ea31d9e37a643d5..134bee9ac664db9b36b3c0961bd36a1f2d72b720
@@@ -377,7 -377,7 +377,7 @@@ static int fpr_get(struct task_struct *
  
  #else
        BUILD_BUG_ON(offsetof(struct thread_fp_state, fpscr) !=
 -                   offsetof(struct thread_fp_state, fpr[32][0]));
 +                   offsetof(struct thread_fp_state, fpr[32]));
  
        return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
                                   &target->thread.fp_state, 0, -1);
@@@ -405,7 -405,7 +405,7 @@@ static int fpr_set(struct task_struct *
        return 0;
  #else
        BUILD_BUG_ON(offsetof(struct thread_fp_state, fpscr) !=
 -                   offsetof(struct thread_fp_state, fpr[32][0]));
 +                   offsetof(struct thread_fp_state, fpr[32]));
  
        return user_regset_copyin(&pos, &count, &kbuf, &ubuf,
                                  &target->thread.fp_state, 0, -1);
@@@ -1783,12 -1783,12 +1783,12 @@@ static int do_seccomp(struct pt_regs *r
         * have already loaded -ENOSYS into r3, or seccomp has put
         * something else in r3 (via SECCOMP_RET_ERRNO/TRACE).
         */
-       if (__secure_computing())
+       if (__secure_computing(NULL))
                return -1;
  
        /*
         * The syscall was allowed by seccomp, restore the register
-        * state to what ptrace and audit expect.
+        * state to what audit expects.
         * Note that we use orig_gpr3, which means a seccomp tracer can
         * modify the first syscall parameter (in orig_gpr3) and also
         * allow the syscall to proceed.
@@@ -1822,22 -1822,25 +1822,25 @@@ static inline int do_seccomp(struct pt_
   */
  long do_syscall_trace_enter(struct pt_regs *regs)
  {
-       bool abort = false;
        user_exit();
  
+       /*
+        * The tracer may decide to abort the syscall, if so tracehook
+        * will return !0. Note that the tracer may also just change
+        * regs->gpr[0] to an invalid syscall number, that is handled
+        * below on the exit path.
+        */
+       if (test_thread_flag(TIF_SYSCALL_TRACE) &&
+           tracehook_report_syscall_entry(regs))
+               goto skip;
+       /* Run seccomp after ptrace; allow it to set gpr[3]. */
        if (do_seccomp(regs))
                return -1;
  
-       if (test_thread_flag(TIF_SYSCALL_TRACE)) {
-               /*
-                * The tracer may decide to abort the syscall, if so tracehook
-                * will return !0. Note that the tracer may also just change
-                * regs->gpr[0] to an invalid syscall number, that is handled
-                * below on the exit path.
-                */
-               abort = tracehook_report_syscall_entry(regs) != 0;
-       }
+       /* Avoid trace and audit when syscall is invalid. */
+       if (regs->gpr[0] >= NR_syscalls)
+               goto skip;
  
        if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
                trace_sys_enter(regs, regs->gpr[0]);
                                    regs->gpr[5] & 0xffffffff,
                                    regs->gpr[6] & 0xffffffff);
  
-       if (abort || regs->gpr[0] >= NR_syscalls) {
-               /*
-                * If we are aborting explicitly, or if the syscall number is
-                * now invalid, set the return value to -ENOSYS.
-                */
-               regs->gpr[3] = -ENOSYS;
-               return -1;
-       }
        /* Return the possibly modified but valid syscall number */
        return regs->gpr[0];
+ skip:
+       /*
+        * If we are aborting explicitly, or if the syscall number is
+        * now invalid, set the return value to -ENOSYS.
+        */
+       regs->gpr[3] = -ENOSYS;
+       return -1;
  }
  
  void do_syscall_trace_leave(struct pt_regs *regs)
diff --combined arch/x86/entry/common.c
index 9e1e27d31c6d6d9425f5fe4b0d916c26bd5d0abd,81c0e12d831c42a62f7622bbfc5682e15a1314f9..a1e71d431fed85f40f939e5765b8fe4bb4a7a411
@@@ -40,10 -40,10 +40,10 @@@ static struct thread_info *pt_regs_to_t
  
  #ifdef CONFIG_CONTEXT_TRACKING
  /* Called on entry from user mode with IRQs off. */
 -__visible void enter_from_user_mode(void)
 +__visible inline void enter_from_user_mode(void)
  {
        CT_WARN_ON(ct_state() != CONTEXT_USER);
 -      user_exit();
 +      user_exit_irqoff();
  }
  #else
  static inline void enter_from_user_mode(void) {}
@@@ -64,22 -64,16 +64,16 @@@ static void do_audit_syscall_entry(stru
  }
  
  /*
-  * We can return 0 to resume the syscall or anything else to go to phase
-  * 2.  If we resume the syscall, we need to put something appropriate in
-  * regs->orig_ax.
-  *
-  * NB: We don't have full pt_regs here, but regs->orig_ax and regs->ax
-  * are fully functional.
-  *
-  * For phase 2's benefit, our return value is:
-  * 0:                 resume the syscall
-  * 1:                 go to phase 2; no seccomp phase 2 needed
-  * anything else:     go to phase 2; pass return value to seccomp
+  * Returns the syscall nr to run (which should match regs->orig_ax) or -1
+  * to skip the syscall.
   */
unsigned long syscall_trace_enter_phase1(struct pt_regs *regs, u32 arch)
static long syscall_trace_enter(struct pt_regs *regs)
  {
+       u32 arch = in_ia32_syscall() ? AUDIT_ARCH_I386 : AUDIT_ARCH_X86_64;
        struct thread_info *ti = pt_regs_to_thread_info(regs);
        unsigned long ret = 0;
+       bool emulated = false;
        u32 work;
  
        if (IS_ENABLED(CONFIG_DEBUG_ENTRY))
  
        work = ACCESS_ONCE(ti->flags) & _TIF_WORK_SYSCALL_ENTRY;
  
+       if (unlikely(work & _TIF_SYSCALL_EMU))
+               emulated = true;
+       if ((emulated || (work & _TIF_SYSCALL_TRACE)) &&
+           tracehook_report_syscall_entry(regs))
+               return -1L;
+       if (emulated)
+               return -1L;
  #ifdef CONFIG_SECCOMP
        /*
-        * Do seccomp first -- it should minimize exposure of other
-        * code, and keeping seccomp fast is probably more valuable
-        * than the rest of this.
+        * Do seccomp after ptrace, to catch any tracer changes.
         */
        if (work & _TIF_SECCOMP) {
                struct seccomp_data sd;
                        sd.args[5] = regs->bp;
                }
  
-               BUILD_BUG_ON(SECCOMP_PHASE1_OK != 0);
-               BUILD_BUG_ON(SECCOMP_PHASE1_SKIP != 1);
-               ret = seccomp_phase1(&sd);
-               if (ret == SECCOMP_PHASE1_SKIP) {
-                       regs->orig_ax = -1;
-                       ret = 0;
-               } else if (ret != SECCOMP_PHASE1_OK) {
-                       return ret;  /* Go directly to phase 2 */
-               }
-               work &= ~_TIF_SECCOMP;
-       }
- #endif
-       /* Do our best to finish without phase 2. */
-       if (work == 0)
-               return ret;  /* seccomp and/or nohz only (ret == 0 here) */
- #ifdef CONFIG_AUDITSYSCALL
-       if (work == _TIF_SYSCALL_AUDIT) {
-               /*
-                * If there is no more work to be done except auditing,
-                * then audit in phase 1.  Phase 2 always audits, so, if
-                * we audit here, then we can't go on to phase 2.
-                */
-               do_audit_syscall_entry(regs, arch);
-               return 0;
-       }
- #endif
-       return 1;  /* Something is enabled that we can't handle in phase 1 */
- }
- /* Returns the syscall nr to run (which should match regs->orig_ax). */
- long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch,
-                               unsigned long phase1_result)
- {
-       struct thread_info *ti = pt_regs_to_thread_info(regs);
-       long ret = 0;
-       u32 work = ACCESS_ONCE(ti->flags) & _TIF_WORK_SYSCALL_ENTRY;
-       if (IS_ENABLED(CONFIG_DEBUG_ENTRY))
-               BUG_ON(regs != task_pt_regs(current));
- #ifdef CONFIG_SECCOMP
-       /*
-        * Call seccomp_phase2 before running the other hooks so that
-        * they can see any changes made by a seccomp tracer.
-        */
-       if (phase1_result > 1 && seccomp_phase2(phase1_result)) {
-               /* seccomp failures shouldn't expose any additional code. */
-               return -1;
+               ret = __secure_computing(&sd);
+               if (ret == -1)
+                       return ret;
        }
  #endif
  
-       if (unlikely(work & _TIF_SYSCALL_EMU))
-               ret = -1L;
-       if ((ret || test_thread_flag(TIF_SYSCALL_TRACE)) &&
-           tracehook_report_syscall_entry(regs))
-               ret = -1L;
        if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
                trace_sys_enter(regs, regs->orig_ax);
  
        return ret ?: regs->orig_ax;
  }
  
- long syscall_trace_enter(struct pt_regs *regs)
- {
-       u32 arch = in_ia32_syscall() ? AUDIT_ARCH_I386 : AUDIT_ARCH_X86_64;
-       unsigned long phase1_result = syscall_trace_enter_phase1(regs, arch);
-       if (phase1_result == 0)
-               return regs->orig_ax;
-       else
-               return syscall_trace_enter_phase2(regs, arch, phase1_result);
- }
  #define EXIT_TO_USERMODE_LOOP_FLAGS                           \
        (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_UPROBE |   \
         _TIF_NEED_RESCHED | _TIF_USER_RETURN_NOTIFY)
@@@ -274,7 -208,7 +208,7 @@@ __visible inline void prepare_exit_to_u
        ti->status &= ~TS_COMPAT;
  #endif
  
 -      user_enter();
 +      user_enter_irqoff();
  }
  
  #define SYSCALL_EXIT_WORK_FLAGS                               \
index 75fc719b7f31a57d27e120a9a23cd2dbe8340beb,85acde5fa44209c95babb0262ab59a90c5524d5d..636c4b341f36a93975c1ab732f8dfc5fb66bf4ba
@@@ -96,7 -96,7 +96,7 @@@ static bool write_ok_or_segv(unsigned l
  {
        /*
         * XXX: if access_ok, get_user, and put_user handled
 -       * sig_on_uaccess_error, this could go away.
 +       * sig_on_uaccess_err, this could go away.
         */
  
        if (!access_ok(VERIFY_WRITE, (void __user *)ptr, size)) {
@@@ -125,7 -125,7 +125,7 @@@ bool emulate_vsyscall(struct pt_regs *r
        struct task_struct *tsk;
        unsigned long caller;
        int vsyscall_nr, syscall_nr, tmp;
 -      int prev_sig_on_uaccess_error;
 +      int prev_sig_on_uaccess_err;
        long ret;
  
        /*
         */
        regs->orig_ax = syscall_nr;
        regs->ax = -ENOSYS;
-       tmp = secure_computing();
+       tmp = secure_computing(NULL);
        if ((!tmp && regs->orig_ax != syscall_nr) || regs->ip != address) {
                warn_bad_vsyscall(KERN_DEBUG, regs,
                                  "seccomp tried to change syscall nr or ip");
         * With a real vsyscall, page faults cause SIGSEGV.  We want to
         * preserve that behavior to make writing exploits harder.
         */
 -      prev_sig_on_uaccess_error = current_thread_info()->sig_on_uaccess_error;
 -      current_thread_info()->sig_on_uaccess_error = 1;
 +      prev_sig_on_uaccess_err = current->thread.sig_on_uaccess_err;
 +      current->thread.sig_on_uaccess_err = 1;
  
        ret = -EFAULT;
        switch (vsyscall_nr) {
                break;
        }
  
 -      current_thread_info()->sig_on_uaccess_error = prev_sig_on_uaccess_error;
 +      current->thread.sig_on_uaccess_err = prev_sig_on_uaccess_err;
  
  check_fault:
        if (ret == -EFAULT) {
index ec10cfef166afb3a7cdc777ade3903e076d30376,ad821a3a99f5bb491649a0761d8097ab666d2555..6d4e92ccdc914460b28f9b07aaa65406676f912b
@@@ -245,7 -245,6 +245,7 @@@ endi
  header-y += hw_breakpoint.h
  header-y += l2tp.h
  header-y += libc-compat.h
 +header-y += lirc.h
  header-y += limits.h
  header-y += llc.h
  header-y += loop.h
@@@ -455,6 -454,7 +455,7 @@@ header-y += virtio_scsi.
  header-y += virtio_types.h
  header-y += vm_sockets.h
  header-y += vt.h
+ header-y += vtpm_proxy.h
  header-y += wait.h
  header-y += wanrouter.h
  header-y += watchdog.h
diff --combined net/dccp/ipv6.c
index 3ff137d9471d8420748fd72c8631d67eb57ffb66,01bacf5bc027430345a1ed450725b033476a0914..3828f94b234c1104a3e745b3c0a76ab343aed4b6
@@@ -216,14 -216,17 +216,17 @@@ static int dccp_v6_send_response(const 
        skb = dccp_make_response(sk, dst, req);
        if (skb != NULL) {
                struct dccp_hdr *dh = dccp_hdr(skb);
+               struct ipv6_txoptions *opt;
  
                dh->dccph_checksum = dccp_v6_csum_finish(skb,
                                                         &ireq->ir_v6_loc_addr,
                                                         &ireq->ir_v6_rmt_addr);
                fl6.daddr = ireq->ir_v6_rmt_addr;
                rcu_read_lock();
-               err = ip6_xmit(sk, skb, &fl6, rcu_dereference(np->opt),
-                              np->tclass);
+               opt = ireq->ipv6_opt;
+               if (!opt)
+                       opt = rcu_dereference(np->opt);
+               err = ip6_xmit(sk, skb, &fl6, opt, np->tclass);
                rcu_read_unlock();
                err = net_xmit_eval(err);
        }
@@@ -236,6 -239,7 +239,7 @@@ done
  static void dccp_v6_reqsk_destructor(struct request_sock *req)
  {
        dccp_feat_list_purge(&dccp_rsk(req)->dreq_featneg);
+       kfree(inet_rsk(req)->ipv6_opt);
        kfree_skb(inet_rsk(req)->pktopts);
  }
  
@@@ -494,7 -498,9 +498,9 @@@ static struct sock *dccp_v6_request_rec
         * Yes, keeping reference count would be much more clever, but we make
         * one more one thing there: reattach optmem to newsk.
         */
-       opt = rcu_dereference(np->opt);
+       opt = ireq->ipv6_opt;
+       if (!opt)
+               opt = rcu_dereference(np->opt);
        if (opt) {
                opt = ipv6_dup_options(newsk, opt);
                RCU_INIT_POINTER(newnp->opt, opt);
@@@ -732,7 -738,7 +738,7 @@@ lookup
        if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
                goto discard_and_relse;
  
 -      return sk_receive_skb(sk, skb, 1) ? -1 : 0;
 +      return __sk_receive_skb(sk, skb, 1, dh->dccph_doff * 4) ? -1 : 0;
  
  no_dccp_socket:
        if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
diff --combined net/ipv4/tcp_input.c
index f9f9e375d7deb176eb65dc977408dadc97fa04e6,d663d5071d2630c5cd3279ed04b63a6d79101f98..3ebf45b38bc309f448dbc4f27fe8722cefabaf19
@@@ -87,7 -87,7 +87,7 @@@ int sysctl_tcp_adv_win_scale __read_mos
  EXPORT_SYMBOL(sysctl_tcp_adv_win_scale);
  
  /* rfc5961 challenge ack rate limiting */
 -int sysctl_tcp_challenge_ack_limit = 100;
 +int sysctl_tcp_challenge_ack_limit = 1000;
  
  int sysctl_tcp_stdurg __read_mostly;
  int sysctl_tcp_rfc1337 __read_mostly;
@@@ -3115,7 -3115,6 +3115,7 @@@ static int tcp_clean_rtx_queue(struct s
        long ca_rtt_us = -1L;
        struct sk_buff *skb;
        u32 pkts_acked = 0;
 +      u32 last_in_flight = 0;
        bool rtt_update;
        int flag = 0;
  
                        if (!first_ackt.v64)
                                first_ackt = last_ackt;
  
 +                      last_in_flight = TCP_SKB_CB(skb)->tx.in_flight;
                        reord = min(pkts_acked, reord);
                        if (!after(scb->end_seq, tp->high_seq))
                                flag |= FLAG_ORIG_SACK_ACKED;
  
        if (icsk->icsk_ca_ops->pkts_acked) {
                struct ack_sample sample = { .pkts_acked = pkts_acked,
 -                                           .rtt_us = ca_rtt_us };
 +                                           .rtt_us = ca_rtt_us,
 +                                           .in_flight = last_in_flight };
  
                icsk->icsk_ca_ops->pkts_acked(sk, &sample);
        }
@@@ -3424,23 -3421,6 +3424,23 @@@ static int tcp_ack_update_window(struc
        return flag;
  }
  
 +static bool __tcp_oow_rate_limited(struct net *net, int mib_idx,
 +                                 u32 *last_oow_ack_time)
 +{
 +      if (*last_oow_ack_time) {
 +              s32 elapsed = (s32)(tcp_time_stamp - *last_oow_ack_time);
 +
 +              if (0 <= elapsed && elapsed < sysctl_tcp_invalid_ratelimit) {
 +                      NET_INC_STATS(net, mib_idx);
 +                      return true;    /* rate-limited: don't send yet! */
 +              }
 +      }
 +
 +      *last_oow_ack_time = tcp_time_stamp;
 +
 +      return false;   /* not rate-limited: go ahead, send dupack now! */
 +}
 +
  /* Return true if we're currently rate-limiting out-of-window ACKs and
   * thus shouldn't send a dupack right now. We rate-limit dupacks in
   * response to out-of-window SYNs or ACKs to mitigate ACK loops or DoS
@@@ -3454,9 -3434,21 +3454,9 @@@ bool tcp_oow_rate_limited(struct net *n
        /* Data packets without SYNs are not likely part of an ACK loop. */
        if ((TCP_SKB_CB(skb)->seq != TCP_SKB_CB(skb)->end_seq) &&
            !tcp_hdr(skb)->syn)
 -              goto not_rate_limited;
 -
 -      if (*last_oow_ack_time) {
 -              s32 elapsed = (s32)(tcp_time_stamp - *last_oow_ack_time);
 -
 -              if (0 <= elapsed && elapsed < sysctl_tcp_invalid_ratelimit) {
 -                      NET_INC_STATS(net, mib_idx);
 -                      return true;    /* rate-limited: don't send yet! */
 -              }
 -      }
 -
 -      *last_oow_ack_time = tcp_time_stamp;
 +              return false;
  
 -not_rate_limited:
 -      return false;   /* not rate-limited: go ahead, send dupack now! */
 +      return __tcp_oow_rate_limited(net, mib_idx, last_oow_ack_time);
  }
  
  /* RFC 5961 7 [ACK Throttling] */
@@@ -3466,26 -3458,21 +3466,26 @@@ static void tcp_send_challenge_ack(stru
        static u32 challenge_timestamp;
        static unsigned int challenge_count;
        struct tcp_sock *tp = tcp_sk(sk);
 -      u32 now;
 +      u32 count, now;
  
        /* First check our per-socket dupack rate limit. */
 -      if (tcp_oow_rate_limited(sock_net(sk), skb,
 -                               LINUX_MIB_TCPACKSKIPPEDCHALLENGE,
 -                               &tp->last_oow_ack_time))
 +      if (__tcp_oow_rate_limited(sock_net(sk),
 +                                 LINUX_MIB_TCPACKSKIPPEDCHALLENGE,
 +                                 &tp->last_oow_ack_time))
                return;
  
 -      /* Then check the check host-wide RFC 5961 rate limit. */
 +      /* Then check host-wide RFC 5961 rate limit. */
        now = jiffies / HZ;
        if (now != challenge_timestamp) {
 +              u32 half = (sysctl_tcp_challenge_ack_limit + 1) >> 1;
 +
                challenge_timestamp = now;
 -              challenge_count = 0;
 +              WRITE_ONCE(challenge_count, half +
 +                         prandom_u32_max(sysctl_tcp_challenge_ack_limit));
        }
 -      if (++challenge_count <= sysctl_tcp_challenge_ack_limit) {
 +      count = READ_ONCE(challenge_count);
 +      if (count > 0) {
 +              WRITE_ONCE(challenge_count, count - 1);
                NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPCHALLENGEACK);
                tcp_send_ack(sk);
        }
@@@ -5172,7 -5159,6 +5172,7 @@@ static bool tcp_validate_incoming(struc
                                  const struct tcphdr *th, int syn_inerr)
  {
        struct tcp_sock *tp = tcp_sk(sk);
 +      bool rst_seq_match = false;
  
        /* RFC1323: H1. Apply PAWS check first. */
        if (tcp_fast_parse_options(skb, th, tp) && tp->rx_opt.saw_tstamp &&
  
        /* Step 2: check RST bit */
        if (th->rst) {
 -              /* RFC 5961 3.2 :
 -               * If sequence number exactly matches RCV.NXT, then
 +              /* RFC 5961 3.2 (extend to match against SACK too if available):
 +               * If seq num matches RCV.NXT or the right-most SACK block,
 +               * then
                 *     RESET the connection
                 * else
                 *     Send a challenge ACK
                 */
 -              if (TCP_SKB_CB(skb)->seq == tp->rcv_nxt)
 +              if (TCP_SKB_CB(skb)->seq == tp->rcv_nxt) {
 +                      rst_seq_match = true;
 +              } else if (tcp_is_sack(tp) && tp->rx_opt.num_sacks > 0) {
 +                      struct tcp_sack_block *sp = &tp->selective_acks[0];
 +                      int max_sack = sp[0].end_seq;
 +                      int this_sack;
 +
 +                      for (this_sack = 1; this_sack < tp->rx_opt.num_sacks;
 +                           ++this_sack) {
 +                              max_sack = after(sp[this_sack].end_seq,
 +                                               max_sack) ?
 +                                      sp[this_sack].end_seq : max_sack;
 +                      }
 +
 +                      if (TCP_SKB_CB(skb)->seq == max_sack)
 +                              rst_seq_match = true;
 +              }
 +
 +              if (rst_seq_match)
                        tcp_reset(sk);
                else
                        tcp_send_challenge_ack(sk, skb);
@@@ -6147,6 -6114,9 +6147,9 @@@ struct request_sock *inet_reqsk_alloc(c
  
                kmemcheck_annotate_bitfield(ireq, flags);
                ireq->opt = NULL;
+ #if IS_ENABLED(CONFIG_IPV6)
+               ireq->pktopts = NULL;
+ #endif
                atomic64_set(&ireq->ir_cookie, 0);
                ireq->ireq_state = TCP_NEW_SYN_RECV;
                write_pnet(&ireq->ireq_net, sock_net(sk_listener));
diff --combined net/ipv6/af_inet6.c
index 2076c21107d07e4e78a0a29f1d374c3414b8e1bd,b0994a49dfca4c55a8385b2aec264f7119be8550..b454055ba625a20ed6f470191ad9a6c6366edfe6
@@@ -60,6 -60,7 +60,7 @@@
  #ifdef CONFIG_IPV6_TUNNEL
  #include <net/ip6_tunnel.h>
  #endif
+ #include <net/calipso.h>
  
  #include <asm/uaccess.h>
  #include <linux/mroute6.h>
@@@ -92,12 -93,6 +93,12 @@@ MODULE_PARM_DESC(disable_ipv6, "Disabl
  module_param_named(autoconf, ipv6_defaults.autoconf, int, 0444);
  MODULE_PARM_DESC(autoconf, "Enable IPv6 address autoconfiguration on all interfaces");
  
 +bool ipv6_mod_enabled(void)
 +{
 +      return disable_ipv6_mod == 0;
 +}
 +EXPORT_SYMBOL_GPL(ipv6_mod_enabled);
 +
  static __inline__ struct ipv6_pinfo *inet6_sk_generic(struct sock *sk)
  {
        const int offset = sk->sk_prot->obj_size - sizeof(struct ipv6_pinfo);
@@@ -983,6 -978,10 +984,10 @@@ static int __init inet6_init(void
        if (err)
                goto pingv6_fail;
  
+       err = calipso_init();
+       if (err)
+               goto calipso_fail;
  #ifdef CONFIG_SYSCTL
        err = ipv6_sysctl_register();
        if (err)
@@@ -993,8 -992,10 +998,10 @@@ out
  
  #ifdef CONFIG_SYSCTL
  sysctl_fail:
-       pingv6_exit();
+       calipso_exit();
  #endif
+ calipso_fail:
+       pingv6_exit();
  pingv6_fail:
        ipv6_packet_cleanup();
  ipv6_packet_fail:
diff --combined net/ipv6/tcp_ipv6.c
index 37cf91323319332d6256615d367bbede62066ae9,818b3b5cd490cbacf1fae9163cab967263fc60a2..33df8b8575cceb6f4bf50d9a50ab5a6afa79cd86
@@@ -443,6 -443,7 +443,7 @@@ static int tcp_v6_send_synack(const str
  {
        struct inet_request_sock *ireq = inet_rsk(req);
        struct ipv6_pinfo *np = inet6_sk(sk);
+       struct ipv6_txoptions *opt;
        struct flowi6 *fl6 = &fl->u.ip6;
        struct sk_buff *skb;
        int err = -ENOMEM;
                        fl6->flowlabel = ip6_flowlabel(ipv6_hdr(ireq->pktopts));
  
                rcu_read_lock();
-               err = ip6_xmit(sk, skb, fl6, rcu_dereference(np->opt),
-                              np->tclass);
+               opt = ireq->ipv6_opt;
+               if (!opt)
+                       opt = rcu_dereference(np->opt);
+               err = ip6_xmit(sk, skb, fl6, opt, np->tclass);
                rcu_read_unlock();
                err = net_xmit_eval(err);
        }
@@@ -476,6 -479,7 +479,7 @@@ done
  
  static void tcp_v6_reqsk_destructor(struct request_sock *req)
  {
+       kfree(inet_rsk(req)->ipv6_opt);
        kfree_skb(inet_rsk(req)->pktopts);
  }
  
@@@ -526,33 -530,26 +530,33 @@@ static int tcp_v6_parse_md5_keys(struc
                              AF_INET6, cmd.tcpm_key, cmd.tcpm_keylen, GFP_KERNEL);
  }
  
 -static int tcp_v6_md5_hash_pseudoheader(struct tcp_md5sig_pool *hp,
 -                                      const struct in6_addr *daddr,
 -                                      const struct in6_addr *saddr, int nbytes)
 +static int tcp_v6_md5_hash_headers(struct tcp_md5sig_pool *hp,
 +                                 const struct in6_addr *daddr,
 +                                 const struct in6_addr *saddr,
 +                                 const struct tcphdr *th, int nbytes)
  {
        struct tcp6_pseudohdr *bp;
        struct scatterlist sg;
 +      struct tcphdr *_th;
  
 -      bp = &hp->md5_blk.ip6;
 +      bp = hp->scratch;
        /* 1. TCP pseudo-header (RFC2460) */
        bp->saddr = *saddr;
        bp->daddr = *daddr;
        bp->protocol = cpu_to_be32(IPPROTO_TCP);
        bp->len = cpu_to_be32(nbytes);
  
 -      sg_init_one(&sg, bp, sizeof(*bp));
 -      ahash_request_set_crypt(hp->md5_req, &sg, NULL, sizeof(*bp));
 +      _th = (struct tcphdr *)(bp + 1);
 +      memcpy(_th, th, sizeof(*th));
 +      _th->check = 0;
 +
 +      sg_init_one(&sg, bp, sizeof(*bp) + sizeof(*th));
 +      ahash_request_set_crypt(hp->md5_req, &sg, NULL,
 +                              sizeof(*bp) + sizeof(*th));
        return crypto_ahash_update(hp->md5_req);
  }
  
 -static int tcp_v6_md5_hash_hdr(char *md5_hash, struct tcp_md5sig_key *key,
 +static int tcp_v6_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key,
                               const struct in6_addr *daddr, struct in6_addr *saddr,
                               const struct tcphdr *th)
  {
  
        if (crypto_ahash_init(req))
                goto clear_hash;
 -      if (tcp_v6_md5_hash_pseudoheader(hp, daddr, saddr, th->doff << 2))
 -              goto clear_hash;
 -      if (tcp_md5_hash_header(hp, th))
 +      if (tcp_v6_md5_hash_headers(hp, daddr, saddr, th, th->doff << 2))
                goto clear_hash;
        if (tcp_md5_hash_key(hp, key))
                goto clear_hash;
@@@ -611,7 -610,9 +615,7 @@@ static int tcp_v6_md5_hash_skb(char *md
        if (crypto_ahash_init(req))
                goto clear_hash;
  
 -      if (tcp_v6_md5_hash_pseudoheader(hp, daddr, saddr, skb->len))
 -              goto clear_hash;
 -      if (tcp_md5_hash_header(hp, th))
 +      if (tcp_v6_md5_hash_headers(hp, daddr, saddr, th, skb->len))
                goto clear_hash;
        if (tcp_md5_hash_skb_data(hp, skb, th->doff << 2))
                goto clear_hash;
@@@ -741,7 -742,7 +745,7 @@@ static const struct tcp_request_sock_op
  static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 seq,
                                 u32 ack, u32 win, u32 tsval, u32 tsecr,
                                 int oif, struct tcp_md5sig_key *key, int rst,
 -                               u8 tclass, u32 label)
 +                               u8 tclass, __be32 label)
  {
        const struct tcphdr *th = tcp_hdr(skb);
        struct tcphdr *t1;
@@@ -914,7 -915,7 +918,7 @@@ out
  static void tcp_v6_send_ack(const struct sock *sk, struct sk_buff *skb, u32 seq,
                            u32 ack, u32 win, u32 tsval, u32 tsecr, int oif,
                            struct tcp_md5sig_key *key, u8 tclass,
 -                          u32 label)
 +                          __be32 label)
  {
        tcp_v6_send_response(sk, skb, seq, ack, win, tsval, tsecr, oif, key, 0,
                             tclass, label);
@@@ -1112,7 -1113,9 +1116,9 @@@ static struct sock *tcp_v6_syn_recv_soc
           but we make one more one thing there: reattach optmem
           to newsk.
         */
-       opt = rcu_dereference(np->opt);
+       opt = ireq->ipv6_opt;
+       if (!opt)
+               opt = rcu_dereference(np->opt);
        if (opt) {
                opt = ipv6_dup_options(newsk, opt);
                RCU_INIT_POINTER(newnp->opt, opt);
@@@ -1724,9 -1727,7 +1730,9 @@@ static void get_tcp6_sock(struct seq_fi
        destp = ntohs(inet->inet_dport);
        srcp  = ntohs(inet->inet_sport);
  
 -      if (icsk->icsk_pending == ICSK_TIME_RETRANS) {
 +      if (icsk->icsk_pending == ICSK_TIME_RETRANS ||
 +          icsk->icsk_pending == ICSK_TIME_EARLY_RETRANS ||
 +          icsk->icsk_pending == ICSK_TIME_LOSS_PROBE) {
                timer_active    = 1;
                timer_expires   = icsk->icsk_timeout;
        } else if (icsk->icsk_pending == ICSK_TIME_PROBE0) {
diff --combined net/iucv/af_iucv.c
index 37d674e6f8a9f4f1e8bc31ea49ed8a4f1333241f,a0d1e36a284bca11a3cb6762bb7cb26e1ac194e5..02b45a8e8b35729a65c6d796136a846aa2df648b
@@@ -22,6 -22,7 +22,7 @@@
  #include <linux/skbuff.h>
  #include <linux/init.h>
  #include <linux/poll.h>
+ #include <linux/security.h>
  #include <net/sock.h>
  #include <asm/ebcdic.h>
  #include <asm/cpcmd.h>
@@@ -530,8 -531,10 +531,10 @@@ static void iucv_sock_close(struct soc
  
  static void iucv_sock_init(struct sock *sk, struct sock *parent)
  {
-       if (parent)
+       if (parent) {
                sk->sk_type = parent->sk_type;
+               security_sk_clone(parent, sk);
+       }
  }
  
  static struct sock *iucv_sock_alloc(struct socket *sock, int proto, gfp_t prio, int kern)
@@@ -1033,7 -1036,6 +1036,7 @@@ static int iucv_sock_sendmsg(struct soc
  {
        struct sock *sk = sock->sk;
        struct iucv_sock *iucv = iucv_sk(sk);
 +      size_t headroom, linear;
        struct sk_buff *skb;
        struct iucv_message txmsg = {0};
        struct cmsghdr *cmsg;
         * this is fine for SOCK_SEQPACKET (unless we want to support
         * segmented records using the MSG_EOR flag), but
         * for SOCK_STREAM we might want to improve it in future */
 -      if (iucv->transport == AF_IUCV_TRANS_HIPER)
 -              skb = sock_alloc_send_skb(sk,
 -                      len + sizeof(struct af_iucv_trans_hdr) + ETH_HLEN,
 -                      noblock, &err);
 -      else
 -              skb = sock_alloc_send_skb(sk, len, noblock, &err);
 +      headroom = (iucv->transport == AF_IUCV_TRANS_HIPER)
 +                 ? sizeof(struct af_iucv_trans_hdr) + ETH_HLEN : 0;
 +      if (headroom + len < PAGE_SIZE) {
 +              linear = len;
 +      } else {
 +              /* In nonlinear "classic" iucv skb,
 +               * reserve space for iucv_array
 +               */
 +              if (iucv->transport != AF_IUCV_TRANS_HIPER)
 +                      headroom += sizeof(struct iucv_array) *
 +                                  (MAX_SKB_FRAGS + 1);
 +              linear = PAGE_SIZE - headroom;
 +      }
 +      skb = sock_alloc_send_pskb(sk, headroom + linear, len - linear,
 +                                 noblock, &err, 0);
        if (!skb)
                goto out;
 -      if (iucv->transport == AF_IUCV_TRANS_HIPER)
 -              skb_reserve(skb, sizeof(struct af_iucv_trans_hdr) + ETH_HLEN);
 -      if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
 -              err = -EFAULT;
 +      if (headroom)
 +              skb_reserve(skb, headroom);
 +      skb_put(skb, linear);
 +      skb->len = len;
 +      skb->data_len = len - linear;
 +      err = skb_copy_datagram_from_iter(skb, 0, &msg->msg_iter, len);
 +      if (err)
                goto fail;
 -      }
  
        /* wait if outstanding messages for iucv path has reached */
        timeo = sock_sndtimeo(sk, noblock);
                        atomic_dec(&iucv->msg_sent);
                        goto fail;
                }
 -              goto release;
 -      }
 -      skb_queue_tail(&iucv->send_skb_q, skb);
 -
 -      if (((iucv->path->flags & IUCV_IPRMDATA) & iucv->flags)
 -            && skb->len <= 7) {
 -              err = iucv_send_iprm(iucv->path, &txmsg, skb);
 +      } else { /* Classic VM IUCV transport */
 +              skb_queue_tail(&iucv->send_skb_q, skb);
 +
 +              if (((iucv->path->flags & IUCV_IPRMDATA) & iucv->flags) &&
 +                  skb->len <= 7) {
 +                      err = iucv_send_iprm(iucv->path, &txmsg, skb);
 +
 +                      /* on success: there is no message_complete callback */
 +                      /* for an IPRMDATA msg; remove skb from send queue   */
 +                      if (err == 0) {
 +                              skb_unlink(skb, &iucv->send_skb_q);
 +                              kfree_skb(skb);
 +                      }
  
 -              /* on success: there is no message_complete callback
 -               * for an IPRMDATA msg; remove skb from send queue */
 -              if (err == 0) {
 -                      skb_unlink(skb, &iucv->send_skb_q);
 -                      kfree_skb(skb);
 +                      /* this error should never happen since the     */
 +                      /* IUCV_IPRMDATA path flag is set... sever path */
 +                      if (err == 0x15) {
 +                              pr_iucv->path_sever(iucv->path, NULL);
 +                              skb_unlink(skb, &iucv->send_skb_q);
 +                              err = -EPIPE;
 +                              goto fail;
 +                      }
 +              } else if (skb_is_nonlinear(skb)) {
 +                      struct iucv_array *iba = (struct iucv_array *)skb->head;
 +                      int i;
 +
 +                      /* skip iucv_array lying in the headroom */
 +                      iba[0].address = (u32)(addr_t)skb->data;
 +                      iba[0].length = (u32)skb_headlen(skb);
 +                      for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
 +                              skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
 +
 +                              iba[i + 1].address =
 +                                      (u32)(addr_t)skb_frag_address(frag);
 +                              iba[i + 1].length = (u32)skb_frag_size(frag);
 +                      }
 +                      err = pr_iucv->message_send(iucv->path, &txmsg,
 +                                                  IUCV_IPBUFLST, 0,
 +                                                  (void *)iba, skb->len);
 +              } else { /* non-IPRM Linear skb */
 +                      err = pr_iucv->message_send(iucv->path, &txmsg,
 +                                      0, 0, (void *)skb->data, skb->len);
                }
 -
 -              /* this error should never happen since the
 -               * IUCV_IPRMDATA path flag is set... sever path */
 -              if (err == 0x15) {
 -                      pr_iucv->path_sever(iucv->path, NULL);
 +              if (err) {
 +                      if (err == 3) {
 +                              user_id[8] = 0;
 +                              memcpy(user_id, iucv->dst_user_id, 8);
 +                              appl_id[8] = 0;
 +                              memcpy(appl_id, iucv->dst_name, 8);
 +                              pr_err(
 +              "Application %s on z/VM guest %s exceeds message limit\n",
 +                                      appl_id, user_id);
 +                              err = -EAGAIN;
 +                      } else {
 +                              err = -EPIPE;
 +                      }
                        skb_unlink(skb, &iucv->send_skb_q);
 -                      err = -EPIPE;
                        goto fail;
                }
 -      } else
 -              err = pr_iucv->message_send(iucv->path, &txmsg, 0, 0,
 -                                      (void *) skb->data, skb->len);
 -      if (err) {
 -              if (err == 3) {
 -                      user_id[8] = 0;
 -                      memcpy(user_id, iucv->dst_user_id, 8);
 -                      appl_id[8] = 0;
 -                      memcpy(appl_id, iucv->dst_name, 8);
 -                      pr_err("Application %s on z/VM guest %s"
 -                              " exceeds message limit\n",
 -                              appl_id, user_id);
 -                      err = -EAGAIN;
 -              } else
 -                      err = -EPIPE;
 -              skb_unlink(skb, &iucv->send_skb_q);
 -              goto fail;
        }
  
 -release:
        release_sock(sk);
        return len;
  
        return err;
  }
  
 -/* iucv_fragment_skb() - Fragment a single IUCV message into multiple skb's
 - *
 - * Locking: must be called with message_q.lock held
 - */
 -static int iucv_fragment_skb(struct sock *sk, struct sk_buff *skb, int len)
 +static struct sk_buff *alloc_iucv_recv_skb(unsigned long len)
  {
 -      int dataleft, size, copied = 0;
 -      struct sk_buff *nskb;
 -
 -      dataleft = len;
 -      while (dataleft) {
 -              if (dataleft >= sk->sk_rcvbuf / 4)
 -                      size = sk->sk_rcvbuf / 4;
 -              else
 -                      size = dataleft;
 -
 -              nskb = alloc_skb(size, GFP_ATOMIC | GFP_DMA);
 -              if (!nskb)
 -                      return -ENOMEM;
 -
 -              /* copy target class to control buffer of new skb */
 -              IUCV_SKB_CB(nskb)->class = IUCV_SKB_CB(skb)->class;
 -
 -              /* copy data fragment */
 -              memcpy(nskb->data, skb->data + copied, size);
 -              copied += size;
 -              dataleft -= size;
 -
 -              skb_reset_transport_header(nskb);
 -              skb_reset_network_header(nskb);
 -              nskb->len = size;
 +      size_t headroom, linear;
 +      struct sk_buff *skb;
 +      int err;
  
 -              skb_queue_tail(&iucv_sk(sk)->backlog_skb_q, nskb);
 +      if (len < PAGE_SIZE) {
 +              headroom = 0;
 +              linear = len;
 +      } else {
 +              headroom = sizeof(struct iucv_array) * (MAX_SKB_FRAGS + 1);
 +              linear = PAGE_SIZE - headroom;
        }
 -
 -      return 0;
 +      skb = alloc_skb_with_frags(headroom + linear, len - linear,
 +                                 0, &err, GFP_ATOMIC | GFP_DMA);
 +      WARN_ONCE(!skb,
 +                "alloc of recv iucv skb len=%lu failed with errcode=%d\n",
 +                len, err);
 +      if (skb) {
 +              if (headroom)
 +                      skb_reserve(skb, headroom);
 +              skb_put(skb, linear);
 +              skb->len = len;
 +              skb->data_len = len - linear;
 +      }
 +      return skb;
  }
  
  /* iucv_process_message() - Receive a single outstanding IUCV message
@@@ -1283,32 -1266,31 +1286,32 @@@ static void iucv_process_message(struc
                        skb->len = 0;
                }
        } else {
 -              rc = pr_iucv->message_receive(path, msg,
 +              if (skb_is_nonlinear(skb)) {
 +                      struct iucv_array *iba = (struct iucv_array *)skb->head;
 +                      int i;
 +
 +                      iba[0].address = (u32)(addr_t)skb->data;
 +                      iba[0].length = (u32)skb_headlen(skb);
 +                      for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
 +                              skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
 +
 +                              iba[i + 1].address =
 +                                      (u32)(addr_t)skb_frag_address(frag);
 +                              iba[i + 1].length = (u32)skb_frag_size(frag);
 +                      }
 +                      rc = pr_iucv->message_receive(path, msg,
 +                                            IUCV_IPBUFLST,
 +                                            (void *)iba, len, NULL);
 +              } else {
 +                      rc = pr_iucv->message_receive(path, msg,
                                              msg->flags & IUCV_IPRMDATA,
                                              skb->data, len, NULL);
 +              }
                if (rc) {
                        kfree_skb(skb);
                        return;
                }
 -              /* we need to fragment iucv messages for SOCK_STREAM only;
 -               * for SOCK_SEQPACKET, it is only relevant if we support
 -               * record segmentation using MSG_EOR (see also recvmsg()) */
 -              if (sk->sk_type == SOCK_STREAM &&
 -                  skb->truesize >= sk->sk_rcvbuf / 4) {
 -                      rc = iucv_fragment_skb(sk, skb, len);
 -                      kfree_skb(skb);
 -                      skb = NULL;
 -                      if (rc) {
 -                              pr_iucv->path_sever(path, NULL);
 -                              return;
 -                      }
 -                      skb = skb_dequeue(&iucv_sk(sk)->backlog_skb_q);
 -              } else {
 -                      skb_reset_transport_header(skb);
 -                      skb_reset_network_header(skb);
 -                      skb->len = len;
 -              }
 +              WARN_ON_ONCE(skb->len != len);
        }
  
        IUCV_SKB_CB(skb)->offset = 0;
@@@ -1327,7 -1309,7 +1330,7 @@@ static void iucv_process_message_q(stru
        struct sock_msg_q *p, *n;
  
        list_for_each_entry_safe(p, n, &iucv->message_q.list, list) {
 -              skb = alloc_skb(iucv_msg_length(&p->msg), GFP_ATOMIC | GFP_DMA);
 +              skb = alloc_iucv_recv_skb(iucv_msg_length(&p->msg));
                if (!skb)
                        break;
                iucv_process_message(sk, skb, p->path, &p->msg);
@@@ -1822,7 -1804,7 +1825,7 @@@ static void iucv_callback_rx(struct iuc
        if (len > sk->sk_rcvbuf)
                goto save_message;
  
 -      skb = alloc_skb(iucv_msg_length(msg), GFP_ATOMIC | GFP_DMA);
 +      skb = alloc_iucv_recv_skb(iucv_msg_length(msg));
        if (!skb)
                goto save_message;
  
diff --combined samples/Kconfig
index 27a24571e96cbb456f219d7e24f1c7e5c787410f,ccc50beaf17b8d664831849fced771c9996ecd76..85c405fcccb0cb08ec59efa262961e08bb3389f1
@@@ -11,13 -11,6 +11,13 @@@ config SAMPLE_TRACE_EVENT
        help
          This build trace event example modules.
  
 +config SAMPLE_TRACE_PRINTK
 +        tristate "Build trace_printk module - tests various trace_printk formats"
 +      depends on EVENT_TRACING && m
 +      help
 +       This builds a module that calls trace_printk() and can be used to
 +       test various trace_printk() calls from a module.
 +
  config SAMPLE_KOBJECT
        tristate "Build kobject examples -- loadable modules only"
        depends on m
@@@ -92,4 -85,11 +92,11 @@@ config SAMPLE_CONNECTO
          with it.
          See also Documentation/connector/connector.txt
  
+ config SAMPLE_SECCOMP
+       tristate "Build seccomp sample code -- loadable modules only"
+       depends on SECCOMP_FILTER && m
+       help
+         Build samples of seccomp filters using various methods of
+         BPF filter construction.
  endif # SAMPLES
diff --combined security/selinux/hooks.c
index 19be9d39c7424e2c9d9c8615b00936aa6a014963,da934342a39f59432bde76a4755f85d5082f7ea1..ec30880c4b98cfc15ef77d0cdcc916c346b57a8e
@@@ -830,28 -830,6 +830,28 @@@ static int selinux_set_mnt_opts(struct 
                        goto out;
                }
        }
 +
 +      /*
 +       * If this is a user namespace mount, no contexts are allowed
 +       * on the command line and security labels must be ignored.
 +       */
 +      if (sb->s_user_ns != &init_user_ns) {
 +              if (context_sid || fscontext_sid || rootcontext_sid ||
 +                  defcontext_sid) {
 +                      rc = -EACCES;
 +                      goto out;
 +              }
 +              if (sbsec->behavior == SECURITY_FS_USE_XATTR) {
 +                      sbsec->behavior = SECURITY_FS_USE_MNTPOINT;
 +                      rc = security_transition_sid(current_sid(), current_sid(),
 +                                                   SECCLASS_FILE, NULL,
 +                                                   &sbsec->mntpoint_sid);
 +                      if (rc)
 +                              goto out;
 +              }
 +              goto out_set_opts;
 +      }
 +
        /* sets the context of the superblock for the fs being mounted. */
        if (fscontext_sid) {
                rc = may_context_mount_sb_relabel(fscontext_sid, sbsec, cred);
                sbsec->def_sid = defcontext_sid;
        }
  
 +out_set_opts:
        rc = sb_finish_set_opts(sb);
  out:
        mutex_unlock(&sbsec->lock);
@@@ -2282,7 -2259,7 +2282,7 @@@ static int check_nnp_nosuid(const struc
                            const struct task_security_struct *new_tsec)
  {
        int nnp = (bprm->unsafe & LSM_UNSAFE_NO_NEW_PRIVS);
 -      int nosuid = (bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID);
 +      int nosuid = !mnt_may_suid(bprm->file->f_path.mnt);
        int rc;
  
        if (!nnp && !nosuid)
@@@ -4627,13 -4604,13 +4627,13 @@@ static int selinux_socket_sock_rcv_skb(
                err = selinux_inet_sys_rcv_skb(sock_net(sk), skb->skb_iif,
                                               addrp, family, peer_sid, &ad);
                if (err) {
-                       selinux_netlbl_err(skb, err, 0);
+                       selinux_netlbl_err(skb, family, err, 0);
                        return err;
                }
                err = avc_has_perm(sk_sid, peer_sid, SECCLASS_PEER,
                                   PEER__RECV, &ad);
                if (err) {
-                       selinux_netlbl_err(skb, err, 0);
+                       selinux_netlbl_err(skb, family, err, 0);
                        return err;
                }
        }
@@@ -5001,7 -4978,7 +5001,7 @@@ static unsigned int selinux_ip_forward(
                err = selinux_inet_sys_rcv_skb(dev_net(indev), indev->ifindex,
                                               addrp, family, peer_sid, &ad);
                if (err) {
-                       selinux_netlbl_err(skb, err, 1);
+                       selinux_netlbl_err(skb, family, err, 1);
                        return NF_DROP;
                }
        }
@@@ -5087,6 -5064,15 +5087,15 @@@ static unsigned int selinux_ipv4_output
        return selinux_ip_output(skb, PF_INET);
  }
  
+ #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
+ static unsigned int selinux_ipv6_output(void *priv,
+                                       struct sk_buff *skb,
+                                       const struct nf_hook_state *state)
+ {
+       return selinux_ip_output(skb, PF_INET6);
+ }
+ #endif        /* IPV6 */
  static unsigned int selinux_ip_postroute_compat(struct sk_buff *skb,
                                                int ifindex,
                                                u16 family)
@@@ -6321,6 -6307,12 +6330,12 @@@ static struct nf_hook_ops selinux_nf_op
                .hooknum =      NF_INET_FORWARD,
                .priority =     NF_IP6_PRI_SELINUX_FIRST,
        },
+       {
+               .hook =         selinux_ipv6_output,
+               .pf =           NFPROTO_IPV6,
+               .hooknum =      NF_INET_LOCAL_OUT,
+               .priority =     NF_IP6_PRI_SELINUX_FIRST,
+       },
  #endif        /* IPV6 */
  };
  
index b75634dbf53ba24f4e39be091f9474f697ccb0d9,0cc54a02b1c6105364dd864f269a89f78f71d124..87a9741b0d02d798e12235ec2d2c496494c3d142
@@@ -549,7 -549,7 +549,7 @@@ static int smack_sb_alloc_security(stru
        sbsp->smk_floor = &smack_known_floor;
        sbsp->smk_hat = &smack_known_hat;
        /*
 -       * smk_initialized will be zero from kzalloc.
 +       * SMK_SB_INITIALIZED will be zero from kzalloc.
         */
        sb->s_security = sbsp;
  
@@@ -766,10 -766,10 +766,10 @@@ static int smack_set_mnt_opts(struct su
        int num_opts = opts->num_mnt_opts;
        int transmute = 0;
  
 -      if (sp->smk_initialized)
 +      if (sp->smk_flags & SMK_SB_INITIALIZED)
                return 0;
  
 -      sp->smk_initialized = 1;
 +      sp->smk_flags |= SMK_SB_INITIALIZED;
  
        for (i = 0; i < num_opts; i++) {
                switch (opts->mnt_opts_flags[i]) {
                skp = smk_of_current();
                sp->smk_root = skp;
                sp->smk_default = skp;
 +              /*
 +               * For a handful of fs types with no user-controlled
 +               * backing store it's okay to trust security labels
 +               * in the filesystem. The rest are untrusted.
 +               */
 +              if (sb->s_user_ns != &init_user_ns &&
 +                  sb->s_magic != SYSFS_MAGIC && sb->s_magic != TMPFS_MAGIC &&
 +                  sb->s_magic != RAMFS_MAGIC) {
 +                      transmute = 1;
 +                      sp->smk_flags |= SMK_SB_UNTRUSTED;
 +              }
        }
  
        /*
@@@ -919,7 -908,6 +919,7 @@@ static int smack_bprm_set_creds(struct 
        struct inode *inode = file_inode(bprm->file);
        struct task_smack *bsp = bprm->cred->security;
        struct inode_smack *isp;
 +      struct superblock_smack *sbsp;
        int rc;
  
        if (bprm->cred_prepared)
        if (isp->smk_task == NULL || isp->smk_task == bsp->smk_task)
                return 0;
  
 +      sbsp = inode->i_sb->s_security;
 +      if ((sbsp->smk_flags & SMK_SB_UNTRUSTED) &&
 +          isp->smk_task != sbsp->smk_root)
 +              return 0;
 +
        if (bprm->unsafe & (LSM_UNSAFE_PTRACE | LSM_UNSAFE_PTRACE_CAP)) {
                struct task_struct *tracer;
                rc = 0;
@@@ -1220,7 -1203,6 +1220,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 smk_audit_info ad;
        int no_block = mask & MAY_NOT_BLOCK;
        int rc;
        if (mask == 0)
                return 0;
  
 +      if (sbsp->smk_flags & SMK_SB_UNTRUSTED) {
 +              if (smk_of_inode(inode) != sbsp->smk_root)
 +                      return -EACCES;
 +      }
 +
        /* May be droppable after audit */
        if (no_block)
                return -ECHILD;
@@@ -1731,7 -1708,6 +1731,7 @@@ static int smack_mmap_file(struct file 
        struct task_smack *tsp;
        struct smack_known *okp;
        struct inode_smack *isp;
 +      struct superblock_smack *sbsp;
        int may;
        int mmay;
        int tmay;
        isp = file_inode(file)->i_security;
        if (isp->smk_mmap == NULL)
                return 0;
 +      sbsp = file_inode(file)->i_sb->s_security;
 +      if (sbsp->smk_flags & SMK_SB_UNTRUSTED &&
 +          isp->smk_mmap != sbsp->smk_root)
 +              return -EACCES;
        mkp = isp->smk_mmap;
  
        tsp = current_security();
@@@ -2255,6 -2227,9 +2255,9 @@@ static int smack_task_kill(struct task_
        struct smack_known *tkp = smk_of_task_struct(p);
        int rc;
  
+       if (!sig)
+               return 0; /* null signal; existence test */
        smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_TASK);
        smk_ad_setfield_u_tsk(&ad, p);
        /*
@@@ -4020,7 -3995,7 +4023,7 @@@ access_check
                rc = smk_bu_note("IPv4 delivery", skp, ssp->smk_in,
                                        MAY_WRITE, rc);
                if (rc != 0)
-                       netlbl_skbuff_err(skb, rc, 0);
+                       netlbl_skbuff_err(skb, sk->sk_family, rc, 0);
                break;
  #if IS_ENABLED(CONFIG_IPV6)
        case PF_INET6: