From bf6ee3f7f74f2b9536325f7708dae390f153fb08 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 13 Jan 2015 15:23:22 +0100 Subject: [PATCH] kernel: Update to 3.18.2 --- kernel/config-arm-generic | 70 +- kernel/config-armv5tel-default | 40 +- kernel/config-armv7hl-default | 94 +- kernel/config-armv7hl-lpae | 16 + kernel/config-generic | 136 +- kernel/config-i686-legacy | 38 +- kernel/config-x86-generic | 32 +- kernel/config-x86_64-default | 1 + kernel/kernel.nm | 7 +- ... grsecurity-3.0-3.18.2-201501120821.patch} | 11770 ++++++++-------- 10 files changed, 6015 insertions(+), 6189 deletions(-) rename kernel/patches/{grsecurity-3.0-3.17.4-201411220955.patch => grsecurity-3.0-3.18.2-201501120821.patch} (94%) diff --git a/kernel/config-arm-generic b/kernel/config-arm-generic index c31b8ca22..2d1f04e31 100644 --- a/kernel/config-arm-generic +++ b/kernel/config-arm-generic @@ -9,7 +9,7 @@ CONFIG_ARM_PATCH_PHYS_VIRT=y # IRQ subsystem # CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_HANDLE_DOMAIN_IRQ=y # # Timers subsystem @@ -80,7 +80,6 @@ CONFIG_ARCH_MULTIPLATFORM=y # CPU Core family selection # # CONFIG_ARCH_MULTI_V6 is not set -CONFIG_ARCH_HISI=y # # Hisilicon platform type @@ -93,11 +92,6 @@ CONFIG_ARCH_MXC=y # # CONFIG_PLAT_SPEAR is not set -# -# CSR SiRF atlas6/primaII/Marco/Polo Specific Features -# -CONFIG_ARM_TIMER_SP804=y - # # Processor Type # @@ -120,7 +114,6 @@ CONFIG_MULTI_IRQ_HANDLER=y # # Bus support # -CONFIG_ARM_AMBA=y CONFIG_PCI_SYSCALL=y # CONFIG_PCI_MSI is not set # CONFIG_PCI_STUB is not set @@ -142,7 +135,6 @@ CONFIG_VMSPLIT_3G=y # CONFIG_VMSPLIT_1G is not set CONFIG_PAGE_OFFSET=0xC0000000 CONFIG_AEABI=y -# CONFIG_OABI_COMPAT is not set # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set CONFIG_HIGHMEM=y @@ -173,7 +165,7 @@ CONFIG_AUTO_ZRELADDR=y # CONFIG_CPU_FREQ_STAT=y # CONFIG_CPU_FREQ_STAT_DETAILS is not set -# CONFIG_GENERIC_CPUFREQ_CPU0 is not set +CONFIG_CPUFREQ_DT=m # # ARM CPU frequency scaling drivers @@ -309,7 +301,9 @@ CONFIG_MII=y # CONFIG_AMD8111_ETH=y CONFIG_AMD_XGBE=m +CONFIG_ARC_EMAC_CORE=m CONFIG_ARC_EMAC=m +CONFIG_EMAC_ROCKCHIP=m CONFIG_NET_CADENCE=y CONFIG_BCMGENET=m CONFIG_SYSTEMPORT=m @@ -354,11 +348,6 @@ CONFIG_WIL6210_TRACING=y # CONFIG_IPW2200_MONITOR is not set # CONFIG_IPW2200_QOS is not set -# -# Input device support -# -# CONFIG_INPUT_FF_MEMLESS is not set - # # Userland interfaces # @@ -376,6 +365,7 @@ CONFIG_KEYBOARD_OMAP4=m CONFIG_KEYBOARD_CAP1106=m # CONFIG_INPUT_PM8XXX_VIBRATOR is not set CONFIG_INPUT_PMIC8XXX_PWRKEY=m +CONFIG_INPUT_MAX77693_HAPTIC=m # CONFIG_INPUT_MAX8997_HAPTIC is not set # CONFIG_INPUT_GPIO_BEEPER is not set # CONFIG_INPUT_TWL4030_PWRBUTTON is not set @@ -405,8 +395,6 @@ CONFIG_SERIAL_8250_EM=m # # Non-8250 serial port support # -CONFIG_SERIAL_AMBA_PL010=m -CONFIG_SERIAL_AMBA_PL011=m CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y CONFIG_SERIAL_IMX=m # CONFIG_SERIAL_JSM is not set @@ -446,7 +434,6 @@ CONFIG_I2C_RK3X=m CONFIG_PINMUX=y CONFIG_PINCONF=y # CONFIG_PINCTRL_AS3722 is not set -# CONFIG_PINCTRL_BCM281XX is not set # CONFIG_PINCTRL_PALMAS is not set CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y CONFIG_ARCH_REQUIRE_GPIOLIB=y @@ -480,11 +467,6 @@ CONFIG_GPIO_ADNP=m # # CONFIG_GPIO_MCP23S08 is not set -# -# MODULbus GPIO expanders: -# -CONFIG_GPIO_BCM_KONA=y - # # 1-wire Slaves # @@ -504,9 +486,12 @@ CONFIG_GPIO_BCM_KONA=y # CONFIG_CHARGER_TPS65090 is not set CONFIG_POWER_RESET_AS3722=y CONFIG_POWER_RESET_GPIO=y -CONFIG_POWER_RESET_HISI=y +CONFIG_POWER_RESET_GPIO_RESTART=y +CONFIG_POWER_RESET_LTC2952=y CONFIG_POWER_RESET_RESTART=y +CONFIG_POWER_RESET_VERSATILE=y CONFIG_POWER_RESET_VEXPRESS=y +CONFIG_POWER_RESET_SYSCON=y # # Native drivers @@ -520,7 +505,7 @@ CONFIG_THERMAL_OF=y # Watchdog Device Drivers # CONFIG_GPIO_WATCHDOG=m -CONFIG_ARM_SP805_WATCHDOG=m +CONFIG_CADENCE_WATCHDOG=m CONFIG_MAX63XX_WATCHDOG=m CONFIG_IMX2_WDT=m @@ -535,11 +520,13 @@ CONFIG_IMX2_WDT=m # CONFIG_MFD_AS3722=y # CONFIG_MFD_ASIC3 is not set +CONFIG_MFD_HI6421_PMIC=m # CONFIG_HTC_EGPIO is not set # CONFIG_LPC_ICH is not set CONFIG_MFD_PM8XXX=m CONFIG_MFD_PM8921_CORE=m # CONFIG_MFD_RTSX_PCI is not set +CONFIG_MFD_RK808=m CONFIG_MFD_STMPE=y # @@ -555,6 +542,9 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set CONFIG_REGULATOR_AS3722=m +CONFIG_REGULATOR_HI6421=m +CONFIG_REGULATOR_PWM=m +CONFIG_REGULATOR_RK808=m CONFIG_REGULATOR_TPS65218=m CONFIG_REGULATOR_VEXPRESS=m @@ -679,7 +669,6 @@ CONFIG_SND_COMPRESS_OFFLOAD=m # HD-Audio # CONFIG_SND_ARM=y -CONFIG_SND_ARMAACI=m CONFIG_SND_SOC=m CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y CONFIG_SND_ATMEL_SOC=m @@ -704,8 +693,10 @@ CONFIG_SND_SOC_IMX_SSI=m # CONFIG_SND_SOC_EUKREA_TLV320=m CONFIG_SND_SOC_IMX_WM8962=m +CONFIG_SND_SOC_IMX_ES8328=m CONFIG_SND_SOC_IMX_SGTL5000=m CONFIG_SND_SOC_IMX_SPDIF=m +CONFIG_SND_SOC_FSL_ASOC_CARD=m # # SoC Audio support for SuperH @@ -720,6 +711,7 @@ CONFIG_SND_SOC_AK4554=m CONFIG_SND_SOC_AK4642=m CONFIG_SND_SOC_AK5386=m CONFIG_SND_SOC_ALC5623=m +CONFIG_SND_SOC_CS35L32=m CONFIG_SND_SOC_CS42L52=m CONFIG_SND_SOC_CS42L56=m CONFIG_SND_SOC_CS42L73=m @@ -729,6 +721,8 @@ CONFIG_SND_SOC_CS4271=m CONFIG_SND_SOC_CS42XX8=m CONFIG_SND_SOC_CS42XX8_I2C=m CONFIG_SND_SOC_HDMI_CODEC=m +CONFIG_SND_SOC_ES8328=m +CONFIG_SND_SOC_ES8328_I2C=m CONFIG_SND_SOC_PCM1681=m CONFIG_SND_SOC_PCM512x=m CONFIG_SND_SOC_PCM512x_I2C=m @@ -737,6 +731,9 @@ CONFIG_SND_SOC_SIGMADSP=m CONFIG_SND_SOC_SIGMADSP_I2C=m CONFIG_SND_SOC_SIRF_AUDIO_CODEC=m CONFIG_SND_SOC_SPDIF=m +CONFIG_SND_SOC_SSM2602=m +CONFIG_SND_SOC_SSM2602_I2C=m +CONFIG_SND_SOC_SSM4567=m CONFIG_SND_SOC_STA350=m CONFIG_SND_SOC_TAS2552=m CONFIG_SND_SOC_TAS5086=m @@ -758,6 +755,7 @@ CONFIG_SND_SOC_WM8776=m CONFIG_SND_SOC_WM8804=m CONFIG_SND_SOC_WM8903=m CONFIG_SND_SOC_WM8962=m +CONFIG_SND_SOC_WM8978=m CONFIG_SND_SOC_TPA6130A2=m CONFIG_SND_SIMPLE_CARD=m @@ -778,7 +776,6 @@ CONFIG_USB_ULPI=y # # MMC/SD/SDIO Host Controller Drivers # -CONFIG_MMC_ARMMMCI=m CONFIG_MMC_SDHCI_IO_ACCESSORS=y CONFIG_MMC_SDHCI_OF_ARASAN=m CONFIG_MMC_SDHCI_ESDHC_IMX=m @@ -790,6 +787,11 @@ CONFIG_MMC_DW_EXYNOS=m CONFIG_MMC_DW_K3=m CONFIG_MMC_DW_PCI=m +# +# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) +# +CONFIG_LEDS_SYSCON=y + # # iptables trigger is under Netfilter config (LED target) # @@ -800,13 +802,12 @@ CONFIG_MMC_DW_PCI=m # CONFIG_RTC_DRV_AS3722=m CONFIG_RTC_DRV_HYM8563=m +CONFIG_RTC_DRV_RK808=m # # on-CPU RTC drivers # CONFIG_RTC_DRV_IMXDI=m -CONFIG_RTC_DRV_PL030=m -CONFIG_RTC_DRV_PL031=m CONFIG_RTC_DRV_PM8XXX=m CONFIG_RTC_DRV_MXC=m CONFIG_RTC_DRV_SNVS=m @@ -819,11 +820,13 @@ CONFIG_MX3_IPU=y CONFIG_MX3_IPU_IRQS=4 CONFIG_FSL_EDMA=m CONFIG_NBPFAXI_DMA=m +CONFIG_DMA_VIRTUAL_CHANNELS=m CONFIG_DMA_OF=y # # Common Clock Framework # +CONFIG_COMMON_CLK_RK808=m CONFIG_COMMON_CLK_SI570=m CONFIG_COMMON_CLK_QCOM=m CONFIG_APQ_GCC_8084=m @@ -848,13 +851,17 @@ CONFIG_OF_IOMMU=y # CONFIG_VF610_ADC=m +# +# Digital to analog converters +# +CONFIG_MAX5821=m + # # Temperature sensors # CONFIG_PWM=y CONFIG_PWM_SYSFS=y CONFIG_IRQCHIP=y -CONFIG_ARM_GIC=y # # Memory Debugging @@ -871,15 +878,12 @@ CONFIG_ARM_GIC=y # # CONFIG_ARM_PTDUMP is not set CONFIG_ARM_UNWIND=y -CONFIG_OLD_MCOUNT=y # CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_LL is not set CONFIG_DEBUG_IMX_UART_PORT=1 -CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" # CONFIG_DEBUG_UART_PL01X is not set # CONFIG_DEBUG_UART_8250 is not set CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" -# CONFIG_OC_ETM is not set # CONFIG_DEBUG_SET_MODULE_RONX is not set # diff --git a/kernel/config-armv5tel-default b/kernel/config-armv5tel-default index 081090b6c..da3b39e75 100644 --- a/kernel/config-armv5tel-default +++ b/kernel/config-armv5tel-default @@ -46,12 +46,9 @@ CONFIG_MACH_NETXBIG=y # MX27 platforms: # # CONFIG_MACH_MX27ADS is not set -# CONFIG_MACH_PCM038 is not set -# CONFIG_MACH_CPUIMX27 is not set # CONFIG_MACH_MX27_3DS is not set # CONFIG_MACH_IMX27_VISSTRIM_M10 is not set # CONFIG_MACH_PCA100 is not set -# CONFIG_MACH_MXT_TD60 is not set # CONFIG_MACH_IMX27_DT is not set # CONFIG_ARCH_MXS is not set # CONFIG_ARCH_NOMADIK is not set @@ -100,6 +97,7 @@ CONFIG_HZ_300=y # CONFIG_HZ_500 is not set # CONFIG_HZ_1000 is not set CONFIG_HZ=300 +# CONFIG_OABI_COMPAT is not set CONFIG_SPLIT_PTLOCK_CPUS=999999 CONFIG_NEED_PER_CPU_KM=y CONFIG_FORCE_MAX_ZONEORDER=11 @@ -173,16 +171,6 @@ CONFIG_INPUT_MATRIXKMAP=m # CONFIG_KEYBOARD_SAMSUNG=m -# -# Hardware I/O ports -# -CONFIG_SERIO_AMBAKMI=m - -# -# I2C system bus drivers (mostly embedded / system-on-chip) -# -CONFIG_I2C_NOMADIK=m - # # PPS support # @@ -204,7 +192,6 @@ CONFIG_PINCTRL_KIRKWOOD=y # Memory mapped GPIO drivers: # CONFIG_GPIO_MVEBU=y -# CONFIG_GPIO_PL061 is not set # # 1-wire Bus Masters @@ -286,8 +273,6 @@ CONFIG_FB_MODE_HELPERS=y # # Frame buffer hardware drivers # -CONFIG_FB_ARMCLCD=m -# CONFIG_PLAT_VERSATILE_CLCD is not set CONFIG_FB_IMX=m CONFIG_FB_MX3=m CONFIG_LCD_PLATFORM=m @@ -351,13 +336,10 @@ CONFIG_RTC_DRV_MV=m # DMA Devices # CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y -CONFIG_AMBA_PL08X=y CONFIG_DW_DMAC_PCI=m CONFIG_MV_XOR=y -CONFIG_PL330_DMA=m CONFIG_IMX_SDMA=m CONFIG_IMX_DMA=m -CONFIG_DMA_VIRTUAL_CHANNELS=y # # DMA Clients @@ -398,10 +380,9 @@ CONFIG_KIRKWOOD_CLK=y # CONFIG_ORION_TIMER=y # CONFIG_SH_TIMER_TMU is not set -# CONFIG_PL320_MBOX is not set # -# Rpmsg drivers +# DEVFREQ Drivers # CONFIG_MVEBU_DEVBUS=y @@ -430,6 +411,23 @@ CONFIG_PHY_MVEBU_SATA=y # CONFIG_PHY_EXYNOS4X12_USB2 is not set # CONFIG_PHY_EXYNOS5250_USB2 is not set +# +# Compile-time checks and compiler options +# +CONFIG_FRAME_POINTER=y + +# +# RCU Debugging +# +CONFIG_FUNCTION_GRAPH_TRACER=y + +# +# Runtime Testing +# +CONFIG_OLD_MCOUNT=y +CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" +# CONFIG_DEBUG_UART_BCM63XX is not set + # # Random Number Generation # diff --git a/kernel/config-armv7hl-default b/kernel/config-armv7hl-default index f1c0b366f..6c38fcd94 100644 --- a/kernel/config-armv7hl-default +++ b/kernel/config-armv7hl-default @@ -35,6 +35,7 @@ CONFIG_RCU_FANOUT_LEAF=16 # CONFIG_RCU_FANOUT_EXACT is not set # CONFIG_RCU_FAST_NO_HZ is not set # CONFIG_RCU_NOCB_CPU is not set +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 # # Kernel Performance Events And Counters @@ -58,19 +59,24 @@ CONFIG_ARCH_VIRT=y CONFIG_ARCH_BCM=y # CONFIG_ARCH_BCM_MOBILE is not set CONFIG_ARCH_BCM_5301X=y +CONFIG_ARCH_BCM_63XX=y CONFIG_ARCH_BRCMSTB=y CONFIG_ARCH_BERLIN=y # CONFIG_MACH_BERLIN_BG2 is not set # CONFIG_MACH_BERLIN_BG2CD is not set # CONFIG_MACH_BERLIN_BG2Q is not set CONFIG_ARCH_HIGHBANK=y +CONFIG_ARCH_HISI=y # # Hisilicon platform type # CONFIG_ARCH_HI3xxx=y +CONFIG_ARCH_HIP04=y CONFIG_ARCH_HIX5HD2=y CONFIG_ARCH_KEYSTONE=y +CONFIG_ARCH_MESON=y +CONFIG_MACH_MESON6=y # # Device tree only @@ -186,12 +192,16 @@ CONFIG_S5P_DEV_MFC=y # # CONFIG_SAMSUNG_PM_CHECK is not set CONFIG_ARCH_SHMOBILE=y +CONFIG_PM_RCAR=y +CONFIG_ARCH_RCAR_GEN1=y CONFIG_ARCH_SHMOBILE_MULTI=y # CONFIG_ARCH_EMEV2 is not set # CONFIG_ARCH_R7S72100 is not set +# CONFIG_ARCH_R8A7740 is not set CONFIG_ARCH_R8A7779=y # CONFIG_ARCH_R8A7790 is not set # CONFIG_ARCH_R8A7791 is not set +# CONFIG_ARCH_R8A7794 is not set # # Renesas ARM SoCs Board Type @@ -241,6 +251,7 @@ CONFIG_ARCH_VT8500=y CONFIG_ARCH_WM8850=y CONFIG_ARCH_ZYNQ=y CONFIG_PLAT_VERSATILE=y +CONFIG_ARM_TIMER_SP804=y CONFIG_ARCH_SUPPORTS_FIRMWARE=y CONFIG_ARCH_SUPPORTS_TRUSTED_FOUNDATIONS=y @@ -298,6 +309,7 @@ CONFIG_TI_PRIV_EDMA=y # # Bus support # +CONFIG_ARM_AMBA=y CONFIG_PCI_DOMAINS=y # @@ -309,6 +321,8 @@ CONFIG_PCI_IMX6=y CONFIG_PCI_TEGRA=y CONFIG_PCI_RCAR_GEN2=y CONFIG_PCI_RCAR_GEN2_PCIE=y +CONFIG_PCI_KEYSTONE=y +CONFIG_PCIE_XILINX=y CONFIG_PCIEPORTBUS=y CONFIG_PCIEAER=y # CONFIG_PCIE_ECRC is not set @@ -329,6 +343,7 @@ CONFIG_ARM_CPU_TOPOLOGY=y # CONFIG_SCHED_MC is not set # CONFIG_SCHED_SMT is not set CONFIG_MCPM=y +CONFIG_MCPM_QUAD_CLUSTER=y CONFIG_BIG_LITTLE=y # CONFIG_BL_SWITCHER is not set CONFIG_NR_CPUS=4 @@ -338,6 +353,8 @@ CONFIG_ARCH_NR_GPIO=1024 CONFIG_HZ_FIXED=200 CONFIG_HZ=200 CONFIG_THUMB2_KERNEL=y +CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11=y +CONFIG_ARM_ASM_UNIFIED=y CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_MMU_NOTIFIER=y @@ -364,6 +381,7 @@ CONFIG_ARM_EXYNOS4X12_CPUFREQ=y CONFIG_ARM_EXYNOS5250_CPUFREQ=y CONFIG_ARM_EXYNOS5440_CPUFREQ=y # CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW is not set +CONFIG_ARM_HIGHBANK_CPUFREQ=m # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set CONFIG_ARM_OMAP2PLUS_CPUFREQ=y CONFIG_ARM_TEGRA_CPUFREQ=y @@ -392,6 +410,7 @@ CONFIG_PM_SLEEP_SMP=y CONFIG_PM_GENERIC_DOMAINS=y CONFIG_PM_GENERIC_DOMAINS_SLEEP=y CONFIG_PM_GENERIC_DOMAINS_RUNTIME=y +CONFIG_PM_GENERIC_DOMAINS_OF=y # # Classification @@ -405,6 +424,7 @@ CONFIG_NET_FLOW_LIMIT=y # Generic Driver Options # CONFIG_SYS_HYPERVISOR=y +CONFIG_REGMAP_SPMI=m # # Bus devices @@ -431,6 +451,11 @@ CONFIG_VIRTIO_BLK=m # # CONFIG_EEPROM_SUNXI_SID is not set +# +# SCSI Transports +# +CONFIG_XEN_SCSI_FRONTEND=m + # # Controllers with non-SFF native interface # @@ -451,7 +476,9 @@ CONFIG_NET_VENDOR_ALLWINNER=y CONFIG_SUN4I_EMAC=m # CONFIG_MACB is not set CONFIG_NET_CALXEDA_XGMAC=m +CONFIG_PXA168_ETH=m CONFIG_SH_ETH=m +CONFIG_DWMAC_MESON=y CONFIG_DWMAC_SUNXI=y CONFIG_DWMAC_STI=y CONFIG_TI_DAVINCI_EMAC=m @@ -497,9 +524,17 @@ CONFIG_INPUT_SIRFSOC_ONKEY=y # # CONFIG_SERIO_AMBAKMI is not set +# +# Serial drivers +# +CONFIG_SERIAL_8250_MT6577=y + # # Non-8250 serial port support # +CONFIG_SERIAL_AMBA_PL010=m +CONFIG_SERIAL_AMBA_PL011=m +CONFIG_SERIAL_MESON=m CONFIG_SERIAL_SAMSUNG=m CONFIG_SERIAL_SAMSUNG_UARTS_4=y CONFIG_SERIAL_SAMSUNG_UARTS=4 @@ -519,6 +554,11 @@ CONFIG_HW_RANDOM_OMAP3_ROM=y CONFIG_HW_RANDOM_EXYNOS=y CONFIG_HW_RANDOM_MSM=m +# +# PC SMBus host controller drivers +# +CONFIG_I2C_HIX5HD2=m + # # I2C system bus drivers (mostly embedded / system-on-chip) # @@ -564,11 +604,6 @@ CONFIG_PTP_1588_CLOCK=y # Pin controllers # CONFIG_GENERIC_PINCONF=y -CONFIG_PINCTRL_IMX=y -CONFIG_PINCTRL_IMX6Q=y -CONFIG_PINCTRL_IMX6SL=y -CONFIG_PINCTRL_IMX6SX=y -CONFIG_PINCTRL_VF610=y CONFIG_PINCTRL_ROCKCHIP=y CONFIG_PINCTRL_SINGLE=y CONFIG_PINCTRL_SIRF=y @@ -579,6 +614,11 @@ CONFIG_PINCTRL_TEGRA30=y CONFIG_PINCTRL_TEGRA114=y CONFIG_PINCTRL_TEGRA124=y CONFIG_PINCTRL_TEGRA_XUSB=y +CONFIG_PINCTRL_IMX=y +CONFIG_PINCTRL_IMX6Q=y +CONFIG_PINCTRL_IMX6SL=y +CONFIG_PINCTRL_IMX6SX=y +CONFIG_PINCTRL_VF610=y CONFIG_PINCTRL_ABX500=y CONFIG_PINCTRL_AB8500=y CONFIG_PINCTRL_AB8540=y @@ -589,6 +629,7 @@ CONFIG_PINCTRL_DB8500=y CONFIG_PINCTRL_DB8540=y CONFIG_PINCTRL_MSM=y CONFIG_PINCTRL_APQ8064=y +CONFIG_PINCTRL_APQ8084=y CONFIG_PINCTRL_IPQ8064=y CONFIG_PINCTRL_MSM8960=m CONFIG_PINCTRL_MSM8X74=m @@ -630,9 +671,12 @@ CONFIG_GPIO_ZYNQ=m # 1-wire Slaves # CONFIG_POWER_RESET_BRCMSTB=y +CONFIG_POWER_RESET_HISI=y # CONFIG_POWER_RESET_MSM is not set CONFIG_POWER_RESET_SUN6I=y +CONFIG_POWER_RESET_ST=y CONFIG_POWER_RESET_KEYSTONE=y +# CONFIG_ROCKCHIP_IODOMAIN is not set # # Native drivers @@ -661,6 +705,7 @@ CONFIG_ST_THERMAL_MEMMAP=m # # Watchdog Device Drivers # +CONFIG_ARM_SP805_WATCHDOG=m CONFIG_S3C2410_WATCHDOG=m CONFIG_OMAP_WATCHDOG=m CONFIG_DAVINCI_WATCHDOG=m @@ -668,6 +713,8 @@ CONFIG_SUNXI_WATCHDOG=m CONFIG_UX500_WATCHDOG=y CONFIG_SIRFSOC_WATCHDOG=y CONFIG_TEGRA_WATCHDOG=m +CONFIG_QCOM_WDT=m +CONFIG_MESON_WATCHDOG=m # CONFIG_XEN_WDT is not set # @@ -678,6 +725,7 @@ CONFIG_TEGRA_WATCHDOG=m # # Multifunction device drivers # +CONFIG_MFD_SPMI_PMIC=m CONFIG_ABX500_CORE=y # CONFIG_AB3100_CORE is not set CONFIG_AB8500_CORE=y @@ -697,7 +745,6 @@ CONFIG_REGULATOR_GPIO=y CONFIG_REGULATOR_LP872X=y CONFIG_REGULATOR_LP8788=y CONFIG_REGULATOR_PBIAS=m -CONFIG_REGULATOR_ST_PWM=m CONFIG_REGULATOR_TI_ABB=m CONFIG_REGULATOR_TWL4030=y @@ -711,7 +758,6 @@ CONFIG_IR_SUNXI=m # Media digital TV PCI Adapters # # CONFIG_VIDEO_CAFE_CCIC is not set -# CONFIG_VIDEO_DM6446_CCDC is not set # CONFIG_VIDEO_OMAP2_VOUT is not set # CONFIG_VIDEO_SH_VOU is not set CONFIG_VIDEO_OMAP3=m @@ -725,6 +771,7 @@ CONFIG_VIDEO_SAMSUNG_S5P_G2D=m CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m CONFIG_VIDEO_SAMSUNG_S5P_MFC=m CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=m +CONFIG_VIDEO_RENESAS_VSP1=m # CONFIG_VIDEO_TI_VPE is not set # @@ -793,6 +840,7 @@ CONFIG_EXYNOS_VIDEO=y # HD-Audio # CONFIG_SND_HDA_TEGRA=m +CONFIG_SND_ARMAACI=m # CONFIG_SND_SOC_ADI is not set CONFIG_SND_EDMA_SOC=m CONFIG_SND_DAVINCI_SOC_MCASP=m @@ -803,7 +851,6 @@ CONFIG_SND_AM33XX_SOC_EVM=m # SoC Audio support for Freescale i.MX boards: # CONFIG_SND_SOC_ROCKCHIP=m -CONFIG_SND_ROCKCHIP_I2S=m CONFIG_SND_SOC_SAMSUNG=m CONFIG_SND_SAMSUNG_PCM=m CONFIG_SND_SAMSUNG_SPDIF=m @@ -840,9 +887,11 @@ CONFIG_SND_SOC_WM8994=m CONFIG_USB_XHCI_RCAR=m CONFIG_USB_EHCI_MXC=y CONFIG_USB_EHCI_HCD_OMAP=y +CONFIG_USB_EHCI_HCD_STI=m CONFIG_USB_EHCI_MSM=y CONFIG_USB_EHCI_TEGRA=y CONFIG_USB_EHCI_EXYNOS=y +CONFIG_USB_OHCI_HCD_STI=m CONFIG_USB_OHCI_HCD_OMAP3=y CONFIG_USB_OHCI_EXYNOS=y CONFIG_USB_UHCI_SUPPORT_NON_PCI_HC=y @@ -863,6 +912,8 @@ CONFIG_USB_MUSB_AM35X=m # CONFIG_USB_DWC3_EXYNOS=m CONFIG_USB_DWC3_KEYSTONE=m +CONFIG_USB_DWC3_ST=m +CONFIG_USB_DWC3_QCOM=m # # USB Physical Layer drivers @@ -883,6 +934,7 @@ CONFIG_MMC_BLOCK=y # # MMC/SD/SDIO Host Controller Drivers # +CONFIG_MMC_ARMMMCI=m # CONFIG_MMC_RICOH_MMC is not set CONFIG_MMC_SDHCI_TEGRA=m CONFIG_MMC_SDHCI_S3C=m @@ -894,6 +946,7 @@ CONFIG_MMC_OMAP_HS=m CONFIG_MMC_SDHCI_MSM=m CONFIG_MMC_TMIO_CORE=m CONFIG_MMC_SDHI=m +CONFIG_MMC_DW_ROCKCHIP=m CONFIG_MMC_SH_MMCIF=m CONFIG_MMC_WMT=y CONFIG_MMC_SUNXI=m @@ -913,7 +966,10 @@ CONFIG_MMC_SUNXI=m # CONFIG_RTC_DRV_OMAP=m CONFIG_RTC_DRV_S3C=m +CONFIG_RTC_DRV_PL030=m +CONFIG_RTC_DRV_PL031=m # CONFIG_RTC_DRV_VT8500 is not set +CONFIG_RTC_DRV_SUN6I=m CONFIG_RTC_DRV_SUNXI=m CONFIG_RTC_DRV_TEGRA=m CONFIG_RTC_DRV_SIRFSOC=m @@ -941,7 +997,6 @@ CONFIG_SH_DMAE_BASE=y # CONFIG_K3_DMA is not set CONFIG_XILINX_VDMA=m CONFIG_DMA_SUN6I=m -CONFIG_DMA_VIRTUAL_CHANNELS=m # # DMA Clients @@ -984,12 +1039,13 @@ CONFIG_XEN_PRIVCMD=y # Android # # CONFIG_DRM_IMX is not set -# CONFIG_BT_NOKIA_H4P is not set # # SOC (System On Chip) specific Drivers # CONFIG_QCOM_GSBI=m +CONFIG_KEYSTONE_NAVIGATOR_QMSS=m +CONFIG_KEYSTONE_NAVIGATOR_DMA=m # # Common Clock Framework @@ -1014,6 +1070,7 @@ CONFIG_COMMON_CLK_SAMSUNG=y # CONFIG_DW_APB_TIMER=y CONFIG_DW_APB_TIMER_OF=y +CONFIG_MESON6_TIMER=y CONFIG_SUN4I_TIMER=y CONFIG_SUN5I_HSTIMER=y CONFIG_VT8500_TIMER=y @@ -1052,6 +1109,11 @@ CONFIG_OMAP_REMOTEPROC=m # Rpmsg drivers # CONFIG_RPMSG=m + +# +# DEVFREQ Drivers +# +CONFIG_ARM_EXYNOS5_BUS_DEVFREQ=m # CONFIG_TI_AEMIF is not set # CONFIG_TI_EMIF is not set CONFIG_TEGRA20_MC=y @@ -1062,6 +1124,7 @@ CONFIG_TEGRA30_MC=y # # CONFIG_EXYNOS_ADC is not set # CONFIG_LP8788_ADC is not set +CONFIG_ROCKCHIP_SARADC=m # CONFIG_TWL6030_GPADC is not set # CONFIG_XILINX_XADC is not set @@ -1083,11 +1146,14 @@ CONFIG_PWM_STI=m # CONFIG_PWM_TWL is not set # CONFIG_PWM_TWL_LED is not set # CONFIG_PWM_VT8500 is not set +CONFIG_ARM_GIC=y CONFIG_GIC_NON_BANKED=y CONFIG_BRCMSTB_L2_IRQ=y CONFIG_DW_APB_ICTL=y +CONFIG_OMAP_IRQCHIP=y CONFIG_RENESAS_INTC_IRQPIN=y CONFIG_IRQ_CROSSBAR=y +# CONFIG_KEYSTONE_IRQ is not set CONFIG_ARCH_HAS_RESET_CONTROLLER=y CONFIG_STI_RESET_SYSCFG=y CONFIG_STIH415_RESET=y @@ -1099,6 +1165,7 @@ CONFIG_STIH416_RESET=y CONFIG_PHY_BERLIN_SATA=m CONFIG_PHY_EXYNOS_MIPI_VIDEO=y CONFIG_PHY_MIPHY365X=m +CONFIG_PHY_RCAR_GEN2=m CONFIG_OMAP_CONTROL_PHY=m CONFIG_TWL4030_USB=m CONFIG_PHY_EXYNOS_DP_VIDEO=y @@ -1111,6 +1178,8 @@ CONFIG_PHY_EXYNOS5250_USB2=y CONFIG_PHY_EXYNOS5_USBDRD=m CONFIG_PHY_QCOM_APQ8064_SATA=m CONFIG_PHY_QCOM_IPQ806X_SATA=m +CONFIG_PHY_STIH407_USB=m +CONFIG_PHY_STIH41X_USB=m CONFIG_RAS=y # @@ -1133,6 +1202,11 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=21 # Runtime Testing # CONFIG_DEBUG_VF_UART_PORT=1 +CONFIG_DEBUG_LL_INCLUDE="debug/bcm63xx.S" +CONFIG_DEBUG_UART_BCM63XX=y +CONFIG_DEBUG_UART_PHYS=0xfffe8600 +CONFIG_DEBUG_UART_VIRT=0xfcfe8600 +# CONFIG_OC_ETM is not set # CONFIG_PID_IN_CONTEXTIDR is not set # diff --git a/kernel/config-armv7hl-lpae b/kernel/config-armv7hl-lpae index a3d1c3efc..449f34635 100644 --- a/kernel/config-armv7hl-lpae +++ b/kernel/config-armv7hl-lpae @@ -27,10 +27,16 @@ CONFIG_SYS_SUPPORTS_HUGETLBFS=y CONFIG_PHYS_ADDR_T_64BIT=y # CONFIG_TRANSPARENT_HUGEPAGE is not set +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +CONFIG_I2C_AXXIA=m + # # 1-wire Slaves # CONFIG_POWER_RESET_AXXIA=y +CONFIG_ROCKCHIP_IODOMAIN=m # # Media drivers @@ -44,6 +50,16 @@ CONFIG_POWER_RESET_AXXIA=y # CONFIG_IPMMU_VMSA is not set # CONFIG_ARM_SMMU is not set +# +# Analog to digital converters +# +# CONFIG_ROCKCHIP_SARADC is not set + +# +# Digital to analog converters +# +# CONFIG_MAX5821 is not set + # # Pseudo filesystems # diff --git a/kernel/config-generic b/kernel/config-generic index e21033fad..9c9dc5e0c 100644 --- a/kernel/config-generic +++ b/kernel/config-generic @@ -54,6 +54,7 @@ CONFIG_AUDIT_TREE=y # CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_CHIP=y CONFIG_IRQ_DOMAIN=y # CONFIG_IRQ_DOMAIN_DEBUG is not set CONFIG_IRQ_FORCED_THREADING=y @@ -84,11 +85,11 @@ CONFIG_TASK_IO_ACCOUNTING=y # RCU Subsystem # # CONFIG_PREEMPT_RCU is not set +# CONFIG_TASKS_RCU is not set # CONFIG_TREE_RCU_TRACE is not set # CONFIG_BUILD_BIN2C is not set # CONFIG_IKCONFIG is not set CONFIG_LOG_BUF_SHIFT=18 -CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_FREEZER=y @@ -126,6 +127,7 @@ CONFIG_RD_LZ4=y CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_HAVE_UID16=y +CONFIG_BPF=y CONFIG_EXPERT=y CONFIG_UID16=y CONFIG_SGETMASK_SYSCALL=y @@ -142,8 +144,10 @@ CONFIG_EPOLL=y CONFIG_SIGNALFD=y CONFIG_TIMERFD=y CONFIG_EVENTFD=y +CONFIG_BPF_SYSCALL=y CONFIG_SHMEM=y CONFIG_AIO=y +CONFIG_ADVISE_SYSCALLS=y CONFIG_PCI_QUIRKS=y CONFIG_EMBEDDED=y CONFIG_HAVE_PERF_EVENTS=y @@ -204,6 +208,7 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_MODULE_SIG is not set +# CONFIG_MODULE_COMPRESS is not set CONFIG_STOP_MACHINE=y CONFIG_BLOCK=y CONFIG_BLK_DEV_BSG=y @@ -248,7 +253,7 @@ CONFIG_CFQ_GROUP_IOSCHED=y CONFIG_DEFAULT_CFQ=y # CONFIG_DEFAULT_NOOP is not set CONFIG_DEFAULT_IOSCHED="cfq" -CONFIG_ASN1=m +CONFIG_ASN1=y CONFIG_INLINE_SPIN_UNLOCK_IRQ=y CONFIG_INLINE_READ_UNLOCK=y CONFIG_INLINE_READ_UNLOCK_IRQ=y @@ -271,6 +276,7 @@ CONFIG_HAVE_MEMBLOCK=y CONFIG_MEMORY_ISOLATION=y # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_MEMORY_BALLOON=y CONFIG_BALLOON_COMPACTION=y CONFIG_COMPACTION=y CONFIG_MIGRATION=y @@ -401,6 +407,8 @@ CONFIG_IP_PIMSM_V2=y CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=m CONFIG_NET_UDP_TUNNEL=m +CONFIG_NET_FOU=m +# CONFIG_GENEVE is not set CONFIG_INET_AH=m CONFIG_INET_ESP=m CONFIG_INET_IPCOMP=m @@ -426,6 +434,7 @@ CONFIG_TCP_CONG_LP=m CONFIG_TCP_CONG_VENO=m CONFIG_TCP_CONG_YEAH=m CONFIG_TCP_CONG_ILLINOIS=m +CONFIG_TCP_CONG_DCTCP=m CONFIG_DEFAULT_CUBIC=y # CONFIG_DEFAULT_RENO is not set CONFIG_DEFAULT_TCP_CONG="cubic" @@ -521,6 +530,7 @@ CONFIG_NFT_HASH=m CONFIG_NFT_COUNTER=m CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m +CONFIG_NFT_MASQ=m CONFIG_NFT_NAT=m CONFIG_NFT_QUEUE=m CONFIG_NFT_REJECT=m @@ -624,6 +634,7 @@ CONFIG_IP_SET_HASH_IPMARK=m CONFIG_IP_SET_HASH_IPPORT=m CONFIG_IP_SET_HASH_IPPORTIP=m CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_MAC=m CONFIG_IP_SET_HASH_NETPORTNET=m CONFIG_IP_SET_HASH_NET=m CONFIG_IP_SET_HASH_NETNET=m @@ -652,6 +663,7 @@ CONFIG_IP_VS_RR=m CONFIG_IP_VS_WRR=m CONFIG_IP_VS_LC=m CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_FO=m CONFIG_IP_VS_LBLC=m CONFIG_IP_VS_LBLCR=m CONFIG_IP_VS_DH=m @@ -681,10 +693,13 @@ CONFIG_NF_LOG_ARP=m CONFIG_NF_LOG_IPV4=m CONFIG_NF_TABLES_IPV4=m CONFIG_NFT_CHAIN_ROUTE_IPV4=m -CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NF_REJECT_IPV4=m CONFIG_NFT_REJECT_IPV4=m CONFIG_NF_TABLES_ARP=m CONFIG_NF_NAT_IPV4=m +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NF_NAT_MASQUERADE_IPV4=m +CONFIG_NFT_MASQ_IPV4=m CONFIG_NF_NAT_SNMP_BASIC=m CONFIG_NF_NAT_PROTO_GRE=m CONFIG_NF_NAT_PPTP=m @@ -718,10 +733,13 @@ CONFIG_NF_DEFRAG_IPV6=y CONFIG_NF_CONNTRACK_IPV6=y CONFIG_NF_TABLES_IPV6=m CONFIG_NFT_CHAIN_ROUTE_IPV6=m -CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NF_REJECT_IPV6=m CONFIG_NFT_REJECT_IPV6=m CONFIG_NF_LOG_IPV6=m CONFIG_NF_NAT_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NF_NAT_MASQUERADE_IPV6=m +CONFIG_NFT_MASQ_IPV6=m CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_MATCH_AH=m CONFIG_IP6_NF_MATCH_EUI64=m @@ -795,6 +813,7 @@ CONFIG_BRIDGE_IGMP_SNOOPING=y CONFIG_BRIDGE_VLAN_FILTERING=y CONFIG_HAVE_NET_DSA=y CONFIG_NET_DSA=y +CONFIG_NET_DSA_TAG_BRCM=y CONFIG_NET_DSA_TAG_DSA=y CONFIG_NET_DSA_TAG_EDSA=y CONFIG_NET_DSA_TAG_TRAILER=y @@ -991,6 +1010,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_FW_LOADER=y CONFIG_EXTRA_FIRMWARE="" # CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set +# CONFIG_ALLOW_DEV_COREDUMP is not set # CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DEVRES is not set # CONFIG_GENERIC_CPU_DEVICES is not set @@ -1086,6 +1106,7 @@ CONFIG_ALTERA_STAPL=m # Intel MIC Card Driver # # CONFIG_ECHO is not set +# CONFIG_CXL_BASE is not set CONFIG_HAVE_IDE=y # CONFIG_IDE is not set @@ -1097,6 +1118,7 @@ CONFIG_RAID_ATTRS=m CONFIG_SCSI=y CONFIG_SCSI_DMA=y CONFIG_SCSI_NETLINK=y +# CONFIG_SCSI_MQ_DEFAULT is not set CONFIG_SCSI_PROC_FS=y # @@ -1382,12 +1404,16 @@ CONFIG_NET_DSA_MV88E6060=y CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y CONFIG_NET_DSA_MV88E6131=y CONFIG_NET_DSA_MV88E6123_61_65=y +CONFIG_NET_DSA_MV88E6171=m +CONFIG_NET_DSA_BCM_SF2=m CONFIG_ETHERNET=y CONFIG_MDIO=m CONFIG_NET_VENDOR_3COM=y CONFIG_TYPHOON=m CONFIG_NET_VENDOR_ADAPTEC=y CONFIG_ADAPTEC_STARFIRE=m +CONFIG_NET_VENDOR_AGERE=y +CONFIG_ET131X=m CONFIG_NET_VENDOR_ALTEON=y CONFIG_ACENIC=m # CONFIG_ACENIC_OMIT_TIGON_I is not set @@ -1492,6 +1518,7 @@ CONFIG_QLCNIC=m CONFIG_QLCNIC_HWMON=y CONFIG_QLGE=m CONFIG_NETXEN_NIC=m +CONFIG_NET_VENDOR_QUALCOMM=y CONFIG_NET_VENDOR_REALTEK=y CONFIG_8139CP=m CONFIG_8139TOO=m @@ -1566,6 +1593,7 @@ CONFIG_MICREL_PHY=m CONFIG_FIXED_PHY=y CONFIG_MDIO_BITBANG=m # CONFIG_MDIO_GPIO is not set +CONFIG_MDIO_BCM_UNIMAC=m CONFIG_PPP=m CONFIG_PPP_BSDCOMP=m CONFIG_PPP_DEFLATE=m @@ -1649,8 +1677,10 @@ CONFIG_ATH9K=m CONFIG_ATH9K_PCI=y CONFIG_ATH9K_AHB=y # CONFIG_ATH9K_DEBUGFS is not set +CONFIG_ATH9K_DYNACK=y CONFIG_ATH9K_WOW=y CONFIG_ATH9K_RFKILL=y +CONFIG_ATH9K_CHANNEL_CONTEXT=y CONFIG_ATH9K_HTC=m # CONFIG_ATH9K_HTC_DEBUGFS is not set CONFIG_CARL9170=m @@ -1772,6 +1802,8 @@ CONFIG_RTL8192DE=m CONFIG_RTL8723AE=m CONFIG_RTL8723BE=m CONFIG_RTL8188EE=m +CONFIG_RTL8192EE=m +CONFIG_RTL8821AE=m CONFIG_RTL8192CU=m CONFIG_RTLWIFI=m CONFIG_RTLWIFI_PCI=m @@ -1902,6 +1934,7 @@ CONFIG_ISDN_HDLC=m # Input device support # CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=m CONFIG_INPUT_POLLDEV=m CONFIG_INPUT_SPARSEKMAP=m @@ -1981,6 +2014,7 @@ CONFIG_INPUT_YEALINK=m CONFIG_INPUT_CM109=m CONFIG_INPUT_RETU_PWRBUTTON=m CONFIG_INPUT_UINPUT=m +CONFIG_INPUT_PALMAS_PWRBUTTON=m # CONFIG_INPUT_PCF8574 is not set CONFIG_INPUT_GPIO_ROTARY_ENCODER=m # CONFIG_INPUT_DA9052_ONKEY is not set @@ -1990,6 +2024,8 @@ CONFIG_INPUT_GPIO_ROTARY_ENCODER=m # CONFIG_INPUT_IMS_PCU is not set # CONFIG_INPUT_CMA3000 is not set CONFIG_INPUT_SOC_BUTTON_ARRAY=m +CONFIG_INPUT_DRV260X_HAPTICS=m +CONFIG_INPUT_DRV2667_HAPTICS=m # # Hardware I/O ports @@ -2070,6 +2106,7 @@ CONFIG_R3964=m CONFIG_RAW_DRIVER=y CONFIG_MAX_RAW_DEVS=8192 # CONFIG_TCG_TPM is not set +# CONFIG_XILLYBUS is not set # # I2C support @@ -2371,6 +2408,7 @@ CONFIG_SENSORS_MAX6650=m CONFIG_SENSORS_MAX6697=m CONFIG_SENSORS_HTU21=m CONFIG_SENSORS_MCP3021=m +CONFIG_SENSORS_MENF21BMC_HWMON=m CONFIG_SENSORS_LM63=m CONFIG_SENSORS_LM73=m CONFIG_SENSORS_LM75=m @@ -2457,6 +2495,7 @@ CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set CONFIG_THERMAL_GOV_FAIR_SHARE=y CONFIG_THERMAL_GOV_STEP_WISE=y +CONFIG_THERMAL_GOV_BANG_BANG=y CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_THERMAL_EMULATION=y @@ -2473,10 +2512,13 @@ CONFIG_WATCHDOG_NOWAYOUT=y CONFIG_SOFT_WATCHDOG=m CONFIG_DA9052_WATCHDOG=m CONFIG_DA9055_WATCHDOG=m +CONFIG_DA9063_WATCHDOG=m +CONFIG_MENF21BMC_WATCHDOG=m CONFIG_WM831X_WATCHDOG=m CONFIG_WM8350_WATCHDOG=m CONFIG_XILINX_WATCHDOG=m CONFIG_DW_WATCHDOG=m +CONFIG_RN5T618_WATCHDOG=m CONFIG_TWL4030_WATCHDOG=m CONFIG_RETU_WATCHDOG=m CONFIG_ALIM7101_WDT=m @@ -2555,6 +2597,7 @@ CONFIG_MFD_MAX8907=m CONFIG_MFD_MAX8925=y CONFIG_MFD_MAX8997=y CONFIG_MFD_MAX8998=y +CONFIG_MFD_MENF21BMC=m CONFIG_MFD_VIPERBOARD=m CONFIG_MFD_RETU=m # CONFIG_MFD_PCF50633 is not set @@ -2562,6 +2605,7 @@ CONFIG_MFD_RETU=m # CONFIG_MFD_RDC321X is not set CONFIG_MFD_RTSX_USB=m CONFIG_MFD_RC5T583=y +CONFIG_MFD_RN5T618=y CONFIG_MFD_SEC_CORE=y # CONFIG_MFD_SI476X_CORE is not set CONFIG_MFD_SM501=m @@ -2614,6 +2658,7 @@ CONFIG_REGULATOR_DA9063=m CONFIG_REGULATOR_DA9210=m CONFIG_REGULATOR_DA9211=m CONFIG_REGULATOR_FAN53555=m +CONFIG_REGULATOR_ISL9305=m CONFIG_REGULATOR_ISL6271A=m CONFIG_REGULATOR_LP3971=m CONFIG_REGULATOR_LP3972=m @@ -2631,9 +2676,11 @@ CONFIG_REGULATOR_MAX8997=m CONFIG_REGULATOR_MAX8998=m CONFIG_REGULATOR_MAX77686=m CONFIG_REGULATOR_MAX77693=m +CONFIG_REGULATOR_MAX77802=m CONFIG_REGULATOR_PALMAS=m CONFIG_REGULATOR_PFUZE100=m CONFIG_REGULATOR_RC5T583=m +CONFIG_REGULATOR_RN5T618=m CONFIG_REGULATOR_S2MPA01=m CONFIG_REGULATOR_S2MPS11=m CONFIG_REGULATOR_S5M8767=m @@ -2700,6 +2747,7 @@ CONFIG_IR_MCE_KBD_DECODER=m CONFIG_IR_XMP_DECODER=m CONFIG_RC_DEVICES=y # CONFIG_RC_ATI_REMOTE is not set +# CONFIG_IR_HIX5HD2 is not set CONFIG_IR_IMON=m CONFIG_IR_MCEUSB=m CONFIG_IR_REDRAT3=m @@ -2852,9 +2900,11 @@ CONFIG_DVB_USB_GL861=m CONFIG_DVB_USB_LME2510=m # CONFIG_DVB_USB_MXL111SF is not set CONFIG_DVB_USB_RTL28XXU=m +CONFIG_DVB_USB_DVBSKY=m CONFIG_SMS_USB_DRV=m CONFIG_DVB_B2C2_FLEXCOP_USB=m # CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set +CONFIG_DVB_AS102=m # # Webcam, TV (analog/digital) USB devices @@ -2869,6 +2919,7 @@ CONFIG_VIDEO_EM28XX_RC=m # Software defined radio USB devices # CONFIG_USB_AIRSPY=m +CONFIG_USB_HACKRF=m CONFIG_MEDIA_PCI_SUPPORT=y # @@ -2883,6 +2934,7 @@ CONFIG_MEDIA_PCI_SUPPORT=y # CONFIG_VIDEO_HEXIUM_ORION is not set # CONFIG_VIDEO_MXB is not set # CONFIG_VIDEO_SOLO6X10 is not set +# CONFIG_VIDEO_TW68 is not set # # Media capture/analog/hybrid TV support @@ -2891,6 +2943,7 @@ CONFIG_MEDIA_PCI_SUPPORT=y # # Media digital TV PCI Adapters # +CONFIG_DVB_PT3=m # CONFIG_DVB_DDBRIDGE is not set CONFIG_V4L_PLATFORM_DRIVERS=y CONFIG_SOC_CAMERA=m @@ -2898,7 +2951,6 @@ CONFIG_SOC_CAMERA_PLATFORM=m CONFIG_V4L_MEM2MEM_DRIVERS=y CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m CONFIG_VIDEO_SH_VEU=m -CONFIG_VIDEO_RENESAS_VSP1=m # CONFIG_V4L_TEST_DRIVERS is not set # @@ -3026,6 +3078,8 @@ CONFIG_MEDIA_TUNER_TUA9001=m CONFIG_MEDIA_TUNER_SI2157=m CONFIG_MEDIA_TUNER_IT913X=m CONFIG_MEDIA_TUNER_R820T=m +CONFIG_MEDIA_TUNER_MXL301RF=m +CONFIG_MEDIA_TUNER_QM1D1C0042=m # # Multistandard (satellite) frontends @@ -3084,6 +3138,7 @@ CONFIG_DVB_RTL2830=m CONFIG_DVB_RTL2832=m CONFIG_DVB_RTL2832_SDR=m CONFIG_DVB_SI2168=m +CONFIG_DVB_AS102_FE=m # # DVB-C (cable) frontends @@ -3109,6 +3164,7 @@ CONFIG_DVB_S5H1411=m CONFIG_DVB_S921=m CONFIG_DVB_DIB8000=m CONFIG_DVB_MB86A20S=m +CONFIG_DVB_TC90522=m # # Digital terrestrial only tuners/PLL @@ -3145,7 +3201,6 @@ CONFIG_VGA_ARB_MAX_GPUS=16 # Direct Rendering Manager # CONFIG_DRM=m -CONFIG_DRM_USB=m CONFIG_DRM_KMS_HELPER=m CONFIG_DRM_KMS_FB_HELPER=y # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set @@ -3174,6 +3229,7 @@ CONFIG_DRM_BOCHS=m # CONFIG_FB=y CONFIG_FIRMWARE_EDID=y +CONFIG_FB_CMDLINE=y # CONFIG_FB_DDC is not set # CONFIG_FB_BOOT_VESA_SUPPORT is not set CONFIG_FB_CFB_FILLRECT=m @@ -3461,6 +3517,7 @@ CONFIG_HID_MONTEREY=y # CONFIG_HID_NTRIG is not set CONFIG_HID_ORTEK=m # CONFIG_HID_PANTHERLORD is not set +CONFIG_HID_PENMOUNT=m CONFIG_HID_PETALYNX=m CONFIG_HID_PICOLCD=m CONFIG_HID_PICOLCD_FB=y @@ -3526,6 +3583,7 @@ CONFIG_USB_WUSB_CBAF=m # # CONFIG_USB_C67X00_HCD is not set CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI=y CONFIG_USB_XHCI_PLATFORM=m CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y @@ -3674,7 +3732,6 @@ CONFIG_USB_SERIAL_OPTION=m # CONFIG_USB_SERIAL_OPTICON is not set # CONFIG_USB_SERIAL_XSENS_MT is not set # CONFIG_USB_SERIAL_WISHBONE is not set -CONFIG_USB_SERIAL_ZTE=m CONFIG_USB_SERIAL_SSU100=m CONFIG_USB_SERIAL_QT2=m # CONFIG_USB_SERIAL_DEBUG is not set @@ -3717,12 +3774,10 @@ CONFIG_USB_XUSBATM=m # USB Physical Layer drivers # CONFIG_USB_PHY=y -CONFIG_SAMSUNG_USBPHY=m -CONFIG_SAMSUNG_USB2PHY=m -CONFIG_SAMSUNG_USB3PHY=m CONFIG_USB_GPIO_VBUS=m CONFIG_USB_ISP1301=m # CONFIG_USB_GADGET is not set +CONFIG_USB_LED_TRIG=y # CONFIG_UWB is not set # CONFIG_MMC_DEBUG is not set # CONFIG_MMC_CLKGATE is not set @@ -3799,6 +3854,7 @@ CONFIG_LEDS_ADP5520=m CONFIG_LEDS_TCA6507=m CONFIG_LEDS_MAX8997=m CONFIG_LEDS_LM355x=m +CONFIG_LEDS_MENF21BMC=m # # LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) @@ -3856,6 +3912,7 @@ CONFIG_RTC_DRV_MAX8925=m CONFIG_RTC_DRV_MAX8998=m CONFIG_RTC_DRV_MAX8997=m CONFIG_RTC_DRV_MAX77686=m +CONFIG_RTC_DRV_MAX77802=m CONFIG_RTC_DRV_RS5C372=m CONFIG_RTC_DRV_ISL1208=m CONFIG_RTC_DRV_ISL12022=m @@ -3955,7 +4012,6 @@ CONFIG_VIRTIO_BALLOON=m # Xen driver support # CONFIG_STAGING=y -CONFIG_ET131X=m # CONFIG_PRISM2_USB is not set # CONFIG_COMEDI is not set # CONFIG_RTL8192U is not set @@ -3966,13 +4022,10 @@ CONFIG_RTLLIB_CRYPTO_WEP=m # CONFIG_RTL8192E is not set # CONFIG_R8712U is not set # CONFIG_R8188EU is not set -CONFIG_R8192EE=m CONFIG_R8723AU=m CONFIG_8723AU_AP_MODE=y CONFIG_8723AU_BT_COEXIST=y -CONFIG_R8821AE=m CONFIG_RTS5208=m -# CONFIG_RTS5208_DEBUG is not set # CONFIG_LINE6_USB is not set # CONFIG_VT6655 is not set # CONFIG_VT6656 is not set @@ -4063,7 +4116,6 @@ CONFIG_SENSORS_HMC5843_I2C=m # CONFIG_WIMAX_GDM72XX is not set # CONFIG_LTE_GDM724X is not set # CONFIG_LUSTRE_FS is not set -# CONFIG_XILLYBUS is not set # CONFIG_DGNC is not set # CONFIG_DGAP is not set # CONFIG_GS_FPGABOOT is not set @@ -4071,6 +4123,7 @@ CONFIG_SENSORS_HMC5843_I2C=m # # SOC (System On Chip) specific Drivers # +CONFIG_SOC_TI=y CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y @@ -4078,10 +4131,13 @@ CONFIG_COMMON_CLK=y # # Common Clock Framework # +CONFIG_COMMON_CLK_MAX_GEN=y +CONFIG_COMMON_CLK_MAX77802=m CONFIG_COMMON_CLK_SI5351=m CONFIG_COMMON_CLK_S2MPS11=m CONFIG_CLK_TWL6040=m CONFIG_COMMON_CLK_PALMAS=m +# CONFIG_COMMON_CLK_PXA is not set # # Hardware Spinlock drivers @@ -4090,6 +4146,7 @@ CONFIG_COMMON_CLK_PALMAS=m # # Clock Source drivers # +# CONFIG_ATMEL_PIT is not set # CONFIG_SH_TIMER_CMT is not set # CONFIG_SH_TIMER_MTU2 is not set # CONFIG_EM_TIMER_STI is not set @@ -4104,7 +4161,23 @@ CONFIG_IOMMU_SUPPORT=y # # Rpmsg drivers # -# CONFIG_PM_DEVFREQ is not set + +# +# SOC (System On Chip) specific Drivers +# +CONFIG_PM_DEVFREQ=y + +# +# DEVFREQ Governors +# +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m +CONFIG_DEVFREQ_GOV_PERFORMANCE=m +CONFIG_DEVFREQ_GOV_POWERSAVE=m +CONFIG_DEVFREQ_GOV_USERSPACE=m + +# +# DEVFREQ Drivers +# # CONFIG_EXTCON is not set CONFIG_MEMORY=y CONFIG_IIO=m @@ -4119,6 +4192,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # Accelerometers # # CONFIG_BMA180 is not set +# CONFIG_BMC150_ACCEL is not set # CONFIG_HID_SENSOR_ACCEL_3D is not set # CONFIG_IIO_ST_ACCEL_3AXIS is not set # CONFIG_MMA8452 is not set @@ -4172,6 +4246,7 @@ CONFIG_IIO_ST_SENSORS_CORE=m # # Digital gyroscope sensors # +# CONFIG_BMG160 is not set # CONFIG_HID_SENSOR_GYRO_3D is not set # CONFIG_IIO_ST_GYRO_3AXIS is not set # CONFIG_ITG3200 is not set @@ -4191,6 +4266,7 @@ CONFIG_DHT11=m # Light sensors # # CONFIG_ADJD_S311 is not set +# CONFIG_AL3320A is not set # CONFIG_APDS9300 is not set CONFIG_CM32181=m # CONFIG_CM36651 is not set @@ -4323,6 +4399,7 @@ CONFIG_QUOTACTL=y CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m +CONFIG_OVERLAY_FS=m # # Caches @@ -4420,6 +4497,7 @@ CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y CONFIG_NFSD_V4_SECURITY_LABEL=y # CONFIG_NFSD_FAULT_INJECTION is not set +CONFIG_GRACE_PERIOD=m CONFIG_LOCKD=m CONFIG_LOCKD_V4=y CONFIG_NFS_ACL_SUPPORT=m @@ -4525,7 +4603,6 @@ CONFIG_STRIP_ASM_SYMS=y CONFIG_DEBUG_FS=y CONFIG_HEADERS_CHECK=y # CONFIG_DEBUG_SECTION_MISMATCH is not set -CONFIG_FRAME_POINTER=y # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 @@ -4557,6 +4634,7 @@ CONFIG_PANIC_ON_OOPS_VALUE=0 CONFIG_PANIC_TIMEOUT=120 CONFIG_SCHED_DEBUG=y CONFIG_SCHEDSTATS=y +CONFIG_SCHED_STACK_END_CHECK=y CONFIG_TIMER_STATS=y # @@ -4593,7 +4671,6 @@ CONFIG_DEBUG_LIST=y # CONFIG_FAULT_INJECTION is not set CONFIG_NOP_TRACER=y CONFIG_HAVE_FUNCTION_TRACER=y -CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y CONFIG_HAVE_DYNAMIC_FTRACE=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y @@ -4608,7 +4685,6 @@ CONFIG_GENERIC_TRACER=y CONFIG_TRACING_SUPPORT=y CONFIG_FTRACE=y CONFIG_FUNCTION_TRACER=y -CONFIG_FUNCTION_GRAPH_TRACER=y # CONFIG_IRQSOFF_TRACER is not set CONFIG_SCHED_TRACER=y CONFIG_TRACER_SNAPSHOT=y @@ -4644,7 +4720,7 @@ CONFIG_ASYNC_RAID6_TEST=m # CONFIG_TEST_RHASHTABLE is not set # CONFIG_BUILD_DOCSRC is not set # CONFIG_DMA_API_DEBUG is not set -# CONFIG_TEST_MODULE is not set +# CONFIG_TEST_LKM is not set # CONFIG_TEST_USER_COPY is not set # CONFIG_TEST_BPF is not set # CONFIG_TEST_FIRMWARE is not set @@ -4826,6 +4902,10 @@ CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 # CONFIG_SECURITY_SMACK is not set # CONFIG_SECURITY_TOMOYO is not set # CONFIG_SECURITY_APPARMOR is not set +CONFIG_INTEGRITY=y +CONFIG_INTEGRITY_SIGNATURE=y +CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y +CONFIG_INTEGRITY_AUDIT=y # CONFIG_IMA is not set # CONFIG_EVM is not set CONFIG_DEFAULT_SECURITY_SELINUX=y @@ -4861,6 +4941,7 @@ CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_NULL=m CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_CRYPTD=y +CONFIG_CRYPTO_MCRYPTD=m CONFIG_CRYPTO_AUTHENC=m CONFIG_CRYPTO_TEST=m @@ -4902,7 +4983,7 @@ CONFIG_CRYPTO_RMD128=m CONFIG_CRYPTO_RMD160=m CONFIG_CRYPTO_RMD256=m CONFIG_CRYPTO_RMD320=m -CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA256=y CONFIG_CRYPTO_SHA512=m CONFIG_CRYPTO_TGR192=m @@ -4949,10 +5030,10 @@ CONFIG_CRYPTO_USER_API_HASH=y CONFIG_CRYPTO_USER_API_SKCIPHER=y CONFIG_CRYPTO_HASH_INFO=y CONFIG_CRYPTO_HW=y -CONFIG_ASYMMETRIC_KEY_TYPE=m -CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m -CONFIG_PUBLIC_KEY_ALGO_RSA=m -CONFIG_X509_CERTIFICATE_PARSER=m +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_PUBLIC_KEY_ALGO_RSA=y +CONFIG_X509_CERTIFICATE_PARSER=y CONFIG_PKCS7_MESSAGE_PARSER=m # CONFIG_PKCS7_TEST_KEY is not set CONFIG_VIRTUALIZATION=y @@ -5023,8 +5104,9 @@ CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y CONFIG_AVERAGE=y CONFIG_CLZ_TAB=y CONFIG_CORDIC=m -CONFIG_MPILIB=m -CONFIG_OID_REGISTRY=m +CONFIG_MPILIB=y +CONFIG_SIGNATURE=y +CONFIG_OID_REGISTRY=y CONFIG_FONT_SUPPORT=y # CONFIG_FONTS is not set CONFIG_FONT_8x8=y diff --git a/kernel/config-i686-legacy b/kernel/config-i686-legacy index b7b4954a3..388fbff08 100644 --- a/kernel/config-i686-legacy +++ b/kernel/config-i686-legacy @@ -13,10 +13,15 @@ CONFIG_HIGHMEM4G=y # CONFIG_VMSPLIT_2G_OPT is not set # CONFIG_PHYS_ADDR_T_64BIT is not set +# +# Power management and ACPI options +# +CONFIG_PM_OPP=y + # # CPU Frequency scaling # -# CONFIG_GENERIC_CPUFREQ_CPU0 is not set +CONFIG_CPUFREQ_DT=m # # Bus options (PCI etc.) @@ -70,7 +75,9 @@ CONFIG_OF_PCI_IRQ=y # Distributed Switch Architecture drivers # CONFIG_AMD_XGBE=m +CONFIG_ARC_EMAC_CORE=m # CONFIG_ARC_EMAC is not set +CONFIG_EMAC_ROCKCHIP=m CONFIG_BCMGENET=m CONFIG_SYSTEMPORT=m @@ -89,6 +96,7 @@ CONFIG_KEYBOARD_STMPE=m CONFIG_KEYBOARD_OMAP4=m CONFIG_KEYBOARD_CAP1106=m CONFIG_MOUSE_PS2_OLPC=y +CONFIG_INPUT_MAX77693_HAPTIC=m CONFIG_INPUT_MAX8997_HAPTIC=m # CONFIG_INPUT_GPIO_BEEPER is not set CONFIG_INPUT_PWM_BEEPER=m @@ -129,7 +137,6 @@ CONFIG_PINMUX=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y CONFIG_PINCTRL_AS3722=y -CONFIG_PINCTRL_BCM281XX=y # CONFIG_PINCTRL_SINGLE is not set CONFIG_PINCTRL_PALMAS=y CONFIG_OF_GPIO=y @@ -158,17 +165,15 @@ CONFIG_GPIO_CS5535=y # # CONFIG_GPIO_MCP23S08 is not set -# -# MODULbus GPIO expanders: -# -# CONFIG_GPIO_BCM_KONA is not set - # # 1-wire Slaves # CONFIG_BATTERY_OLPC=y CONFIG_POWER_RESET_AS3722=y CONFIG_POWER_RESET_GPIO=y +CONFIG_POWER_RESET_GPIO_RESTART=y +CONFIG_POWER_RESET_LTC2952=y +CONFIG_POWER_RESET_SYSCON=y # # Native drivers @@ -189,6 +194,8 @@ CONFIG_SENSORS_PWM_FAN=m # Multifunction device drivers # CONFIG_MFD_AS3722=y +CONFIG_MFD_HI6421_PMIC=m +CONFIG_MFD_RK808=y CONFIG_MFD_STMPE=y # @@ -196,6 +203,9 @@ CONFIG_MFD_STMPE=y # CONFIG_STMPE_I2C=y CONFIG_REGULATOR_AS3722=m +CONFIG_REGULATOR_HI6421=m +CONFIG_REGULATOR_PWM=m +CONFIG_REGULATOR_RK808=m CONFIG_REGULATOR_TPS65218=m # @@ -224,11 +234,17 @@ CONFIG_MMC_SDHCI_OF_ARASAN=m # CONFIG_LEDS_PWM=m +# +# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) +# +CONFIG_LEDS_SYSCON=y + # # I2C RTC drivers # CONFIG_RTC_DRV_AS3722=m CONFIG_RTC_DRV_HYM8563=m +CONFIG_RTC_DRV_RK808=m # # on-CPU RTC drivers @@ -256,6 +272,7 @@ CONFIG_XO1_RFKILL=m # # Common Clock Framework # +CONFIG_COMMON_CLK_RK808=m # CONFIG_COMMON_CLK_SI5351 is not set CONFIG_COMMON_CLK_SI570=m CONFIG_COMMON_CLK_QCOM=m @@ -278,6 +295,11 @@ CONFIG_OF_IOMMU=y # CONFIG_VF610_ADC=m +# +# Digital to analog converters +# +CONFIG_MAX5821=m + # # Temperature sensors # @@ -286,6 +308,8 @@ CONFIG_PWM_SYSFS=y CONFIG_PWM_FSL_FTM=m CONFIG_PWM_LP3943=m CONFIG_PWM_LPSS=m +CONFIG_PWM_LPSS_PCI=m +CONFIG_PWM_LPSS_PLATFORM=m CONFIG_PWM_PCA9685=m CONFIG_PWM_TWL=m CONFIG_PWM_TWL_LED=m diff --git a/kernel/config-x86-generic b/kernel/config-x86-generic index 31c2a243d..0764a317f 100644 --- a/kernel/config-x86-generic +++ b/kernel/config-x86-generic @@ -1,5 +1,6 @@ CONFIG_X86=y CONFIG_INSTRUCTION_DECODER=y +CONFIG_PERF_EVENTS_INTEL_UNCORE=y CONFIG_NEED_SG_DMA_LENGTH=y CONFIG_GENERIC_ISA_DMA=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y @@ -43,7 +44,7 @@ CONFIG_RCU_NOCB_CPU=y # CONFIG_RCU_NOCB_CPU_NONE is not set # CONFIG_RCU_NOCB_CPU_ZERO is not set CONFIG_RCU_NOCB_CPU_ALL=y -CONFIG_ARCH_WANTS_PROT_NUMA_PROT_NONE=y +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_PCSPKR_PLATFORM=y @@ -69,10 +70,13 @@ CONFIG_QUEUE_RWLOCK=y # Processor type and features # CONFIG_SMP=y +CONFIG_X86_FEATURE_NAMES=y CONFIG_X86_MPPARSE=y CONFIG_X86_EXTENDED_PLATFORM=y # CONFIG_X86_GOLDFISH is not set CONFIG_X86_INTEL_LPSS=y +CONFIG_IOSF_MBI=m +# CONFIG_IOSF_MBI_DEBUG is not set CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y CONFIG_SCHED_OMIT_FRAME_POINTER=y CONFIG_HYPERVISOR_GUEST=y @@ -116,7 +120,6 @@ CONFIG_X86_MCE_AMD=y CONFIG_X86_MCE_THRESHOLD=y # CONFIG_X86_MCE_INJECT is not set CONFIG_X86_THERMAL_VECTOR=y -# CONFIG_X86_16BIT is not set CONFIG_I8K=m CONFIG_MICROCODE=m CONFIG_MICROCODE_INTEL=y @@ -298,7 +301,6 @@ CONFIG_HOTPLUG_PCI_ACPI_IBM=m # # Executable file formats / Emulations # -CONFIG_IOSF_MBI=m CONFIG_PMC_ATOM=y # @@ -394,6 +396,7 @@ CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m CONFIG_SCSI_BUSLOGIC=m CONFIG_VMWARE_PVSCSI=m +CONFIG_XEN_SCSI_FRONTEND=m CONFIG_FCOE_FNIC=m CONFIG_SCSI_EATA=m CONFIG_SCSI_EATA_TAGGED_QUEUE=y @@ -473,6 +476,8 @@ CONFIG_IXGBE_DCA=y CONFIG_IXGBEVF=m CONFIG_I40E_VXLAN=y CONFIG_I40EVF=m +CONFIG_FM10K=m +CONFIG_FM10K_VXLAN=y CONFIG_SKGE_GENESIS=y CONFIG_MYRI10GE_DCA=y CONFIG_QLCNIC_SRIOV=y @@ -514,7 +519,6 @@ CONFIG_XEN_NETDEV_BACKEND=m # # Input device support # -CONFIG_INPUT_FF_MEMLESS=m CONFIG_INPUT_MATRIXKMAP=m # @@ -557,6 +561,7 @@ CONFIG_NOZOMI=m # Serial drivers # CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_FINTEK=m # # Non-8250 serial port support @@ -626,11 +631,13 @@ CONFIG_PTP_1588_CLOCK=m # # CONFIG_PINCTRL_BAYTRAIL is not set CONFIG_GPIO_ACPI=y +CONFIG_GPIO_GENERIC=m # # Memory mapped GPIO drivers: # # CONFIG_GPIO_GENERIC_PLATFORM is not set +CONFIG_GPIO_DWAPB=m # CONFIG_GPIO_IT8761E is not set # CONFIG_GPIO_F7188X is not set CONFIG_GPIO_SCH=m @@ -642,6 +649,11 @@ CONFIG_GPIO_ICH=m # # CONFIG_GPIO_INTEL_MID is not set +# +# SPI GPIO expanders: +# +CONFIG_GPIO_MCP23S08=m + # # 1-wire Slaves # @@ -682,8 +694,9 @@ CONFIG_SENSORS_ACPI_POWER=m CONFIG_SENSORS_ATK0110=m CONFIG_INTEL_POWERCLAMP=m CONFIG_X86_PKG_TEMP_THERMAL=m -CONFIG_ACPI_INT3403_THERMAL=m CONFIG_INTEL_SOC_DTS_THERMAL=m +CONFIG_INT340X_THERMAL=m +CONFIG_ACPI_THERMAL_REL=m # # Watchdog Device Drivers @@ -802,11 +815,13 @@ CONFIG_VIDEO_SAA7134=m CONFIG_VIDEO_SAA7134_ALSA=m CONFIG_VIDEO_SAA7134_RC=y CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_SAA7134_GO7007=m CONFIG_VIDEO_SAA7164=m # # Media digital TV PCI Adapters # +CONFIG_DVB_AV7110_IR=y CONFIG_DVB_AV7110=m CONFIG_DVB_AV7110_OSD=y CONFIG_DVB_BUDGET_CORE=m @@ -1045,11 +1060,6 @@ CONFIG_EDAC_I5000=m CONFIG_EDAC_I5100=m CONFIG_EDAC_I7300=m -# -# Platform RTC drivers -# -CONFIG_RTC_DRV_EFI=m - # # DMA Devices # @@ -1241,6 +1251,7 @@ CONFIG_EFIVAR_FS=m # Compile-time checks and compiler options # CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_FRAME_POINTER=y # # Memory Debugging @@ -1264,6 +1275,7 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60 CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_FUNCTION_GRAPH_TRACER=y CONFIG_FTRACE_SYSCALLS=y CONFIG_DYNAMIC_FTRACE_WITH_REGS=y # CONFIG_MMIOTRACE is not set diff --git a/kernel/config-x86_64-default b/kernel/config-x86_64-default index db5fd4050..ac1488d18 100644 --- a/kernel/config-x86_64-default +++ b/kernel/config-x86_64-default @@ -244,6 +244,7 @@ CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m CONFIG_CRYPTO_SHA1_SSSE3=m CONFIG_CRYPTO_SHA256_SSSE3=m CONFIG_CRYPTO_SHA512_SSSE3=m +# CONFIG_CRYPTO_SHA1_MB is not set CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m # diff --git a/kernel/kernel.nm b/kernel/kernel.nm index eec42b0ee..d6c33e07e 100644 --- a/kernel/kernel.nm +++ b/kernel/kernel.nm @@ -4,8 +4,8 @@ ############################################################################### name = kernel -version = 3.17.4 -release = 2 +version = 3.18.2 +release = 1 thisapp = linux-%{version} maintainer = Arne Fitzenreiter @@ -57,6 +57,7 @@ build python-devel slang-devel xmlto + xz /sbin/depmod %{kernel_logo} @@ -289,7 +290,7 @@ build %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \ - xargs chmod u+x + xargs --no-run-if-empty chmod u+x # Move all development files to /usr/src. mkdir -p %{BUILDROOT}/usr/src/kernels diff --git a/kernel/patches/grsecurity-3.0-3.17.4-201411220955.patch b/kernel/patches/grsecurity-3.0-3.18.2-201501120821.patch similarity index 94% rename from kernel/patches/grsecurity-3.0-3.17.4-201411220955.patch rename to kernel/patches/grsecurity-3.0-3.18.2-201501120821.patch index 8d9a2849b..34d077be6 100644 --- a/kernel/patches/grsecurity-3.0-3.17.4-201411220955.patch +++ b/kernel/patches/grsecurity-3.0-3.18.2-201501120821.patch @@ -235,7 +235,7 @@ index 9de9813..1462492 100644 +zconf.lex.c zoffset.h diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt -index 764f599..c600e2f 100644 +index a311db8..415b28c 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt @@ -23,10 +23,11 @@ This document describes the Linux kernel Makefiles. @@ -313,10 +313,10 @@ index 764f599..c600e2f 100644 A typical pattern in a Kbuild file looks like this: diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt -index 1edd5fd..107ff46 100644 +index 479f332..2475ac2 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt -@@ -1155,6 +1155,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. +@@ -1182,6 +1182,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. Format: such that (rxsize & ~0x1fffc0) == 0. Default: 1024 @@ -327,7 +327,7 @@ index 1edd5fd..107ff46 100644 hashdist= [KNL,NUMA] Large hashes allocated during boot are distributed across NUMA nodes. Defaults on for 64-bit NUMA, off otherwise. -@@ -2175,6 +2179,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. +@@ -2259,6 +2263,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. noexec=on: enable non-executable mappings (default) noexec=off: disable non-executable mappings @@ -338,7 +338,7 @@ index 1edd5fd..107ff46 100644 nosmap [X86] Disable SMAP (Supervisor Mode Access Prevention) even if it is supported by processor. -@@ -2467,6 +2475,30 @@ bytes respectively. Such letter suffixes can also be entirely omitted. +@@ -2551,6 +2559,30 @@ bytes respectively. Such letter suffixes can also be entirely omitted. the specified number of seconds. This is to be used if your oopses keep scrolling off the screen. @@ -370,22 +370,21 @@ index 1edd5fd..107ff46 100644 pcd. [PARIDE] diff --git a/Makefile b/Makefile -index b60b64d..33b7ec8 100644 +index 8f73b41..320950a 100644 --- a/Makefile +++ b/Makefile -@@ -303,8 +303,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ - +@@ -298,7 +298,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ HOSTCC = gcc HOSTCXX = g++ --HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer + HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 -HOSTCXXFLAGS = -O2 -+HOSTCFLAGS = -Wall -W -Wmissing-prototypes -Wstrict-prototypes -Wno-unused-parameter -Wno-missing-field-initializers -O2 -fomit-frame-pointer -fno-delete-null-pointer-checks ++HOSTCFLAGS = -Wall -W -Wmissing-prototypes -Wstrict-prototypes -Wno-unused-parameter -Wno-missing-field-initializers -O2 -fomit-frame-pointer -std=gnu89 -fno-delete-null-pointer-checks +HOSTCFLAGS += $(call cc-option, -Wno-empty-body) +HOSTCXXFLAGS = -O2 -Wall -W -Wno-array-bounds ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1) HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \ -@@ -450,8 +451,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \ +@@ -445,8 +447,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \ # Rules shared between *config targets and build targets # Basic helpers built in scripts/ @@ -396,7 +395,7 @@ index b60b64d..33b7ec8 100644 $(Q)$(MAKE) $(build)=scripts/basic $(Q)rm -f .tmp_quiet_recordmcount -@@ -625,6 +626,72 @@ endif +@@ -620,6 +622,72 @@ endif # Tell gcc to never replace conditional load with a non-conditional one KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0) @@ -469,7 +468,7 @@ index b60b64d..33b7ec8 100644 ifdef CONFIG_READABLE_ASM # Disable optimizations that make assembler listings hard to read. # reorder blocks reorders the control in the function -@@ -717,7 +784,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g) +@@ -712,7 +780,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g) else KBUILD_CFLAGS += -g endif @@ -478,7 +477,7 @@ index b60b64d..33b7ec8 100644 endif ifdef CONFIG_DEBUG_INFO_DWARF4 KBUILD_CFLAGS += $(call cc-option, -gdwarf-4,) -@@ -867,7 +934,7 @@ export mod_sign_cmd +@@ -877,7 +945,7 @@ export mod_sign_cmd ifeq ($(KBUILD_EXTMOD),) @@ -487,7 +486,7 @@ index b60b64d..33b7ec8 100644 vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \ $(core-y) $(core-m) $(drivers-y) $(drivers-m) \ -@@ -916,6 +983,8 @@ endif +@@ -924,6 +992,8 @@ endif # The actual objects are generated when descending, # make sure no implicit rule kicks in @@ -496,7 +495,7 @@ index b60b64d..33b7ec8 100644 $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; # Handle descending into subdirectories listed in $(vmlinux-dirs) -@@ -925,7 +994,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; +@@ -933,7 +1003,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; # Error messages still appears in the original language PHONY += $(vmlinux-dirs) @@ -505,7 +504,7 @@ index b60b64d..33b7ec8 100644 $(Q)$(MAKE) $(build)=$@ define filechk_kernel.release -@@ -968,10 +1037,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \ +@@ -976,10 +1046,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \ archprepare: archheaders archscripts prepare1 scripts_basic @@ -519,7 +518,7 @@ index b60b64d..33b7ec8 100644 prepare: prepare0 # Generate some files -@@ -1086,6 +1158,8 @@ all: modules +@@ -1094,6 +1167,8 @@ all: modules # using awk while concatenating to the final file. PHONY += modules @@ -528,7 +527,7 @@ index b60b64d..33b7ec8 100644 modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order @$(kecho) ' Building modules, stage 2.'; -@@ -1101,7 +1175,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin) +@@ -1109,7 +1184,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin) # Target to prepare building external modules PHONY += modules_prepare @@ -537,7 +536,7 @@ index b60b64d..33b7ec8 100644 # Target to install modules PHONY += modules_install -@@ -1167,7 +1241,10 @@ MRPROPER_FILES += .config .config.old .version .old_version $(version_h) \ +@@ -1175,7 +1250,10 @@ MRPROPER_FILES += .config .config.old .version .old_version $(version_h) \ Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \ signing_key.priv signing_key.x509 x509.genkey \ extra_certificates signing_key.x509.keyid \ @@ -549,7 +548,7 @@ index b60b64d..33b7ec8 100644 # clean - Delete most, but leave enough to build external modules # -@@ -1206,7 +1283,7 @@ distclean: mrproper +@@ -1214,7 +1292,7 @@ distclean: mrproper @find $(srctree) $(RCS_FIND_IGNORE) \ \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ @@ -558,7 +557,7 @@ index b60b64d..33b7ec8 100644 -type f -print | xargs rm -f -@@ -1372,6 +1449,8 @@ PHONY += $(module-dirs) modules +@@ -1380,6 +1458,8 @@ PHONY += $(module-dirs) modules $(module-dirs): crmodverdir $(objtree)/Module.symvers $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@) @@ -567,7 +566,7 @@ index b60b64d..33b7ec8 100644 modules: $(module-dirs) @$(kecho) ' Building modules, stage 2.'; $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost -@@ -1512,17 +1591,21 @@ else +@@ -1520,17 +1600,21 @@ else target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@)) endif @@ -593,10 +592,10 @@ index b60b64d..33b7ec8 100644 $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) %.symtypes: %.c prepare scripts FORCE $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) -@@ -1532,11 +1615,15 @@ endif - $(cmd_crmodverdir) - $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ +@@ -1542,11 +1626,15 @@ endif $(build)=$(build-dir) + # Make sure the latest headers are built for Documentation + Documentation/: headers_install -%/: prepare scripts FORCE +%/: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) +%/: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) @@ -612,10 +611,10 @@ index b60b64d..33b7ec8 100644 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ $(build)=$(build-dir) $(@:.ko=.o) diff --git a/arch/alpha/include/asm/atomic.h b/arch/alpha/include/asm/atomic.h -index ed60a1e..47f1a55 100644 +index 8f8eafb..3405f46 100644 --- a/arch/alpha/include/asm/atomic.h +++ b/arch/alpha/include/asm/atomic.h -@@ -292,4 +292,14 @@ static inline long atomic64_dec_if_positive(atomic64_t *v) +@@ -239,4 +239,14 @@ static inline long atomic64_dec_if_positive(atomic64_t *v) #define atomic_dec(v) atomic_sub(1,(v)) #define atomic64_dec(v) atomic64_sub(1,(v)) @@ -727,10 +726,10 @@ index 2fd00b7..cfd5069 100644 for (i = 0; i < n; i++) { diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c -index 1402fcc..0b1abd2 100644 +index f9c732e..78fbb0f 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c -@@ -1298,10 +1298,11 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p) +@@ -1295,10 +1295,11 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p) generic version except that we know how to honor ADDR_LIMIT_32BIT. */ static unsigned long @@ -744,7 +743,7 @@ index 1402fcc..0b1abd2 100644 info.flags = 0; info.length = len; -@@ -1309,6 +1310,7 @@ arch_get_unmapped_area_1(unsigned long addr, unsigned long len, +@@ -1306,6 +1307,7 @@ arch_get_unmapped_area_1(unsigned long addr, unsigned long len, info.high_limit = limit; info.align_mask = 0; info.align_offset = 0; @@ -752,7 +751,7 @@ index 1402fcc..0b1abd2 100644 return vm_unmapped_area(&info); } -@@ -1341,20 +1343,24 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, +@@ -1338,20 +1340,24 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, merely specific addresses, but regions of memory -- perhaps this feature should be incorporated into all ports? */ @@ -941,27 +940,11 @@ index 98838a0..b304fb4 100644 } else if (!cause) { /* Allow reads even for write-only mappings */ if (!(vma->vm_flags & (VM_READ | VM_WRITE))) -diff --git a/arch/arc/kernel/kgdb.c b/arch/arc/kernel/kgdb.c -index a2ff5c5..ecf6a78 100644 ---- a/arch/arc/kernel/kgdb.c -+++ b/arch/arc/kernel/kgdb.c -@@ -158,11 +158,6 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code, - return -1; - } - --unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs) --{ -- return instruction_pointer(regs); --} -- - int kgdb_arch_init(void) - { - single_step_data.armed = 0; diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 32cbbd5..c102df9 100644 +index 89c4b5c..847a7be 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig -@@ -1719,7 +1719,7 @@ config ALIGNMENT_TRAP +@@ -1740,7 +1740,7 @@ config ALIGNMENT_TRAP config UACCESS_WITH_MEMCPY bool "Use kernel mem{cpy,set}() for {copy_to,clear}_user()" @@ -970,7 +953,7 @@ index 32cbbd5..c102df9 100644 default y if CPU_FEROCEON help Implement faster copy_to_user and clear_user methods for CPU -@@ -1983,6 +1983,7 @@ config XIP_PHYS_ADDR +@@ -2004,6 +2004,7 @@ config XIP_PHYS_ADDR config KEXEC bool "Kexec system call (EXPERIMENTAL)" depends on (!SMP || PM_SLEEP_SMP) @@ -979,7 +962,7 @@ index 32cbbd5..c102df9 100644 kexec is a system call that implements the ability to shutdown your current kernel, and to start another kernel. It is like a reboot diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h -index 3040359..a494fa3 100644 +index e22c119..8fa9957 100644 --- a/arch/arm/include/asm/atomic.h +++ b/arch/arm/include/asm/atomic.h @@ -18,17 +18,41 @@ @@ -1011,10 +994,10 @@ index 3040359..a494fa3 100644 * strex/ldrex monitor on some implementations. The reason we can use it for * atomic_set() is the clrex or dummy strex done on every exception return. */ - #define atomic_read(v) (*(volatile int *)&(v)->counter) + #define atomic_read(v) ACCESS_ONCE((v)->counter) +static inline int atomic_read_unchecked(const atomic_unchecked_t *v) +{ -+ return v->counter; ++ return ACCESS_ONCE(v->counter); +} #define atomic_set(v,i) (((v)->counter) = (i)) +static inline void atomic_set_unchecked(atomic_unchecked_t *v, int i) @@ -1024,153 +1007,91 @@ index 3040359..a494fa3 100644 #if __LINUX_ARM_ARCH__ >= 6 -@@ -44,6 +68,36 @@ static inline void atomic_add(int i, atomic_t *v) - - prefetchw(&v->counter); - __asm__ __volatile__("@ atomic_add\n" -+"1: ldrex %1, [%3]\n" -+" adds %0, %1, %4\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" bvc 3f\n" -+"2: " REFCOUNT_TRAP_INSN "\n" -+"3:\n" -+#endif -+ -+" strex %1, %0, [%3]\n" -+" teq %1, #0\n" -+" bne 1b" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+"\n4:\n" -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) -+ : "r" (&v->counter), "Ir" (i) -+ : "cc"); -+} -+ -+static inline void atomic_add_unchecked(int i, atomic_unchecked_t *v) -+{ -+ unsigned long tmp; -+ int result; -+ -+ prefetchw(&v->counter); -+ __asm__ __volatile__("@ atomic_add_unchecked\n" - "1: ldrex %0, [%3]\n" - " add %0, %0, %4\n" - " strex %1, %0, [%3]\n" -@@ -63,6 +117,43 @@ static inline int atomic_add_return(int i, atomic_t *v) - prefetchw(&v->counter); - - __asm__ __volatile__("@ atomic_add_return\n" -+"1: ldrex %1, [%3]\n" -+" adds %0, %1, %4\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" bvc 3f\n" -+" mov %0, %1\n" -+"2: " REFCOUNT_TRAP_INSN "\n" -+"3:\n" -+#endif -+ -+" strex %1, %0, [%3]\n" -+" teq %1, #0\n" -+" bne 1b" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+"\n4:\n" -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) -+ : "r" (&v->counter), "Ir" (i) -+ : "cc"); -+ -+ smp_mb(); -+ -+ return result; -+} -+ -+static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v) -+{ -+ unsigned long tmp; -+ int result; -+ -+ smp_mb(); -+ prefetchw(&v->counter); -+ -+ __asm__ __volatile__("@ atomic_add_return_unchecked\n" - "1: ldrex %0, [%3]\n" - " add %0, %0, %4\n" - " strex %1, %0, [%3]\n" -@@ -84,6 +175,36 @@ static inline void atomic_sub(int i, atomic_t *v) +@@ -38,26 +62,50 @@ + * to ensure that the update happens. + */ - prefetchw(&v->counter); - __asm__ __volatile__("@ atomic_sub\n" -+"1: ldrex %1, [%3]\n" -+" subs %0, %1, %4\n" -+ +-#define ATOMIC_OP(op, c_op, asm_op) \ +-static inline void atomic_##op(int i, atomic_t *v) \ +#ifdef CONFIG_PAX_REFCOUNT -+" bvc 3f\n" -+"2: " REFCOUNT_TRAP_INSN "\n" -+"3:\n" -+#endif -+ -+" strex %1, %0, [%3]\n" -+" teq %1, #0\n" -+" bne 1b" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+"\n4:\n" ++#define __OVERFLOW_POST \ ++ " bvc 3f\n" \ ++ "2: " REFCOUNT_TRAP_INSN "\n"\ ++ "3:\n" ++#define __OVERFLOW_POST_RETURN \ ++ " bvc 3f\n" \ ++" mov %0, %1\n" \ ++ "2: " REFCOUNT_TRAP_INSN "\n"\ ++ "3:\n" ++#define __OVERFLOW_EXTABLE \ ++ "4:\n" \ + _ASM_EXTABLE(2b, 4b) ++#else ++#define __OVERFLOW_POST ++#define __OVERFLOW_POST_RETURN ++#define __OVERFLOW_EXTABLE +#endif + -+ : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) -+ : "r" (&v->counter), "Ir" (i) -+ : "cc"); -+} -+ -+static inline void atomic_sub_unchecked(int i, atomic_unchecked_t *v) -+{ -+ unsigned long tmp; -+ int result; -+ -+ prefetchw(&v->counter); -+ __asm__ __volatile__("@ atomic_sub_unchecked\n" - "1: ldrex %0, [%3]\n" - " sub %0, %0, %4\n" - " strex %1, %0, [%3]\n" -@@ -103,11 +224,25 @@ static inline int atomic_sub_return(int i, atomic_t *v) - prefetchw(&v->counter); ++#define __ATOMIC_OP(op, suffix, c_op, asm_op, post_op, extable) \ ++static inline void atomic_##op##suffix(int i, atomic##suffix##_t *v) \ + { \ + unsigned long tmp; \ + int result; \ + \ + prefetchw(&v->counter); \ +- __asm__ __volatile__("@ atomic_" #op "\n" \ ++ __asm__ __volatile__("@ atomic_" #op #suffix "\n" \ + "1: ldrex %0, [%3]\n" \ + " " #asm_op " %0, %0, %4\n" \ ++ post_op \ + " strex %1, %0, [%3]\n" \ + " teq %1, #0\n" \ +-" bne 1b" \ ++" bne 1b\n" \ ++ extable \ + : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) \ + : "r" (&v->counter), "Ir" (i) \ + : "cc"); \ + } \ - __asm__ __volatile__("@ atomic_sub_return\n" --"1: ldrex %0, [%3]\n" --" sub %0, %0, %4\n" -+"1: ldrex %1, [%3]\n" -+" subs %0, %1, %4\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" bvc 3f\n" -+" mov %0, %1\n" -+"2: " REFCOUNT_TRAP_INSN "\n" -+"3:\n" -+#endif -+ - " strex %1, %0, [%3]\n" - " teq %1, #0\n" - " bne 1b" +-#define ATOMIC_OP_RETURN(op, c_op, asm_op) \ +-static inline int atomic_##op##_return(int i, atomic_t *v) \ ++#define ATOMIC_OP(op, c_op, asm_op) __ATOMIC_OP(op, , c_op, asm_op, , )\ ++ __ATOMIC_OP(op, _unchecked, c_op, asm_op##s, __OVERFLOW_POST, __OVERFLOW_EXTABLE) + -+#ifdef CONFIG_PAX_REFCOUNT -+"\n4:\n" -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ - : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) - : "r" (&v->counter), "Ir" (i) - : "cc"); -@@ -152,12 +287,24 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) ++#define __ATOMIC_OP_RETURN(op, suffix, c_op, asm_op, post_op, extable) \ ++static inline int atomic_##op##_return##suffix(int i, atomic##suffix##_t *v)\ + { \ + unsigned long tmp; \ + int result; \ +@@ -65,12 +113,14 @@ static inline int atomic_##op##_return(int i, atomic_t *v) \ + smp_mb(); \ + prefetchw(&v->counter); \ + \ +- __asm__ __volatile__("@ atomic_" #op "_return\n" \ ++ __asm__ __volatile__("@ atomic_" #op "_return" #suffix "\n" \ + "1: ldrex %0, [%3]\n" \ + " " #asm_op " %0, %0, %4\n" \ ++ post_op \ + " strex %1, %0, [%3]\n" \ + " teq %1, #0\n" \ +-" bne 1b" \ ++" bne 1b\n" \ ++ extable \ + : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) \ + : "r" (&v->counter), "Ir" (i) \ + : "cc"); \ +@@ -80,6 +130,9 @@ static inline int atomic_##op##_return(int i, atomic_t *v) \ + return result; \ + } + ++#define ATOMIC_OP_RETURN(op, c_op, asm_op) __ATOMIC_OP_RETURN(op, , c_op, asm_op, , )\ ++ __ATOMIC_OP_RETURN(op, _unchecked, c_op, asm_op##s, __OVERFLOW_POST_RETURN, __OVERFLOW_EXTABLE) ++ + static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new) + { + int oldval; +@@ -115,12 +168,24 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) __asm__ __volatile__ ("@ atomic_add_unless\n" "1: ldrex %0, [%4]\n" " teq %0, %5\n" @@ -1198,7 +1119,7 @@ index 3040359..a494fa3 100644 : "=&r" (oldval), "=&r" (newval), "=&r" (tmp), "+Qo" (v->counter) : "r" (&v->counter), "r" (u), "r" (a) : "cc"); -@@ -168,6 +315,28 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) +@@ -131,14 +196,36 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) return oldval; } @@ -1227,49 +1148,59 @@ index 3040359..a494fa3 100644 #else /* ARM_ARCH_6 */ #ifdef CONFIG_SMP -@@ -186,7 +355,17 @@ static inline int atomic_add_return(int i, atomic_t *v) + #error SMP not supported on pre-ARMv6 CPUs + #endif - return val; - } -+ -+static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v) -+{ -+ return atomic_add_return(i, v); -+} -+ - #define atomic_add(i, v) (void) atomic_add_return(i, v) -+static inline void atomic_add_unchecked(int i, atomic_unchecked_t *v) -+{ -+ (void) atomic_add_return(i, v); -+} +-#define ATOMIC_OP(op, c_op, asm_op) \ +-static inline void atomic_##op(int i, atomic_t *v) \ ++#define __ATOMIC_OP(op, suffix, c_op, asm_op) \ ++static inline void atomic_##op##suffix(int i, atomic##suffix##_t *v) \ + { \ + unsigned long flags; \ + \ +@@ -147,8 +234,11 @@ static inline void atomic_##op(int i, atomic_t *v) \ + raw_local_irq_restore(flags); \ + } \ - static inline int atomic_sub_return(int i, atomic_t *v) - { -@@ -201,6 +380,10 @@ static inline int atomic_sub_return(int i, atomic_t *v) - return val; +-#define ATOMIC_OP_RETURN(op, c_op, asm_op) \ +-static inline int atomic_##op##_return(int i, atomic_t *v) \ ++#define ATOMIC_OP(op, c_op, asm_op) __ATOMIC_OP(op, , c_op, asm_op) \ ++ __ATOMIC_OP(op, _unchecked, c_op, asm_op) ++ ++#define __ATOMIC_OP_RETURN(op, suffix, c_op, asm_op) \ ++static inline int atomic_##op##_return##suffix(int i, atomic##suffix##_t *v)\ + { \ + unsigned long flags; \ + int val; \ +@@ -161,6 +251,9 @@ static inline int atomic_##op##_return(int i, atomic_t *v) \ + return val; \ } - #define atomic_sub(i, v) (void) atomic_sub_return(i, v) -+static inline void atomic_sub_unchecked(int i, atomic_unchecked_t *v) -+{ -+ (void) atomic_sub_return(i, v); -+} ++#define ATOMIC_OP_RETURN(op, c_op, asm_op) __ATOMIC_OP_RETURN(op, , c_op, asm_op)\ ++ __ATOMIC_OP_RETURN(op, _unchecked, c_op, asm_op) ++ static inline int atomic_cmpxchg(atomic_t *v, int old, int new) { -@@ -216,6 +399,11 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new) + int ret; +@@ -175,6 +268,11 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new) return ret; } +static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *v, int old, int new) +{ -+ return atomic_cmpxchg(v, old, new); ++ return atomic_cmpxchg((atomic_t *)v, old, new); +} + static inline int __atomic_add_unless(atomic_t *v, int a, int u) { int c, old; -@@ -229,13 +417,33 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) - #endif /* __LINUX_ARM_ARCH__ */ +@@ -196,16 +294,38 @@ ATOMIC_OPS(sub, -=, sub) + + #undef ATOMIC_OPS + #undef ATOMIC_OP_RETURN ++#undef __ATOMIC_OP_RETURN + #undef ATOMIC_OP ++#undef __ATOMIC_OP #define atomic_xchg(v, new) (xchg(&((v)->counter), new)) +static inline int atomic_xchg_unchecked(atomic_unchecked_t *v, int new) @@ -1302,7 +1233,7 @@ index 3040359..a494fa3 100644 #define atomic_dec_return(v) (atomic_sub_return(1, v)) #define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0) -@@ -246,6 +454,14 @@ typedef struct { +@@ -216,6 +336,14 @@ typedef struct { long long counter; } atomic64_t; @@ -1317,7 +1248,7 @@ index 3040359..a494fa3 100644 #define ATOMIC64_INIT(i) { (i) } #ifdef CONFIG_ARM_LPAE -@@ -262,6 +478,19 @@ static inline long long atomic64_read(const atomic64_t *v) +@@ -232,6 +360,19 @@ static inline long long atomic64_read(const atomic64_t *v) return result; } @@ -1337,7 +1268,7 @@ index 3040359..a494fa3 100644 static inline void atomic64_set(atomic64_t *v, long long i) { __asm__ __volatile__("@ atomic64_set\n" -@@ -270,6 +499,15 @@ static inline void atomic64_set(atomic64_t *v, long long i) +@@ -240,6 +381,15 @@ static inline void atomic64_set(atomic64_t *v, long long i) : "r" (&v->counter), "r" (i) ); } @@ -1353,7 +1284,7 @@ index 3040359..a494fa3 100644 #else static inline long long atomic64_read(const atomic64_t *v) { -@@ -284,6 +522,19 @@ static inline long long atomic64_read(const atomic64_t *v) +@@ -254,6 +404,19 @@ static inline long long atomic64_read(const atomic64_t *v) return result; } @@ -1373,7 +1304,7 @@ index 3040359..a494fa3 100644 static inline void atomic64_set(atomic64_t *v, long long i) { long long tmp; -@@ -298,6 +549,21 @@ static inline void atomic64_set(atomic64_t *v, long long i) +@@ -268,29 +431,57 @@ static inline void atomic64_set(atomic64_t *v, long long i) : "r" (&v->counter), "r" (i) : "cc"); } @@ -1394,156 +1325,91 @@ index 3040359..a494fa3 100644 +} #endif - static inline void atomic64_add(long long i, atomic64_t *v) -@@ -309,6 +575,37 @@ static inline void atomic64_add(long long i, atomic64_t *v) - __asm__ __volatile__("@ atomic64_add\n" - "1: ldrexd %0, %H0, [%3]\n" - " adds %Q0, %Q0, %Q4\n" -+" adcs %R0, %R0, %R4\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" bvc 3f\n" -+"2: " REFCOUNT_TRAP_INSN "\n" -+"3:\n" -+#endif -+ -+" strexd %1, %0, %H0, [%3]\n" -+" teq %1, #0\n" -+" bne 1b" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+"\n4:\n" -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) -+ : "r" (&v->counter), "r" (i) -+ : "cc"); -+} -+ -+static inline void atomic64_add_unchecked(long long i, atomic64_unchecked_t *v) -+{ -+ long long result; -+ unsigned long tmp; -+ -+ prefetchw(&v->counter); -+ __asm__ __volatile__("@ atomic64_add_unchecked\n" -+"1: ldrexd %0, %H0, [%3]\n" -+" adds %Q0, %Q0, %Q4\n" - " adc %R0, %R0, %R4\n" - " strexd %1, %0, %H0, [%3]\n" - " teq %1, #0\n" -@@ -329,6 +626,44 @@ static inline long long atomic64_add_return(long long i, atomic64_t *v) - __asm__ __volatile__("@ atomic64_add_return\n" - "1: ldrexd %0, %H0, [%3]\n" - " adds %Q0, %Q0, %Q4\n" -+" adcs %R0, %R0, %R4\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" bvc 3f\n" -+" mov %0, %1\n" -+" mov %H0, %H1\n" -+"2: " REFCOUNT_TRAP_INSN "\n" -+"3:\n" -+#endif -+ -+" strexd %1, %0, %H0, [%3]\n" -+" teq %1, #0\n" -+" bne 1b" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+"\n4:\n" -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) -+ : "r" (&v->counter), "r" (i) -+ : "cc"); -+ -+ smp_mb(); -+ -+ return result; -+} -+ -+static inline long long atomic64_add_return_unchecked(long long i, atomic64_unchecked_t *v) -+{ -+ long long result; -+ unsigned long tmp; -+ -+ smp_mb(); -+ -+ __asm__ __volatile__("@ atomic64_add_return_unchecked\n" -+"1: ldrexd %0, %H0, [%3]\n" -+" adds %Q0, %Q0, %Q4\n" - " adc %R0, %R0, %R4\n" - " strexd %1, %0, %H0, [%3]\n" - " teq %1, #0\n" -@@ -351,6 +686,37 @@ static inline void atomic64_sub(long long i, atomic64_t *v) - __asm__ __volatile__("@ atomic64_sub\n" - "1: ldrexd %0, %H0, [%3]\n" - " subs %Q0, %Q0, %Q4\n" -+" sbcs %R0, %R0, %R4\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" bvc 3f\n" -+"2: " REFCOUNT_TRAP_INSN "\n" -+"3:\n" -+#endif -+ -+" strexd %1, %0, %H0, [%3]\n" -+" teq %1, #0\n" -+" bne 1b" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+"\n4:\n" -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) -+ : "r" (&v->counter), "r" (i) -+ : "cc"); -+} -+ -+static inline void atomic64_sub_unchecked(long long i, atomic64_unchecked_t *v) -+{ -+ long long result; -+ unsigned long tmp; -+ -+ prefetchw(&v->counter); -+ __asm__ __volatile__("@ atomic64_sub_unchecked\n" -+"1: ldrexd %0, %H0, [%3]\n" -+" subs %Q0, %Q0, %Q4\n" - " sbc %R0, %R0, %R4\n" - " strexd %1, %0, %H0, [%3]\n" - " teq %1, #0\n" -@@ -371,10 +737,25 @@ static inline long long atomic64_sub_return(long long i, atomic64_t *v) - __asm__ __volatile__("@ atomic64_sub_return\n" - "1: ldrexd %0, %H0, [%3]\n" - " subs %Q0, %Q0, %Q4\n" --" sbc %R0, %R0, %R4\n" -+" sbcs %R0, %R0, %R4\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" bvc 3f\n" -+" mov %0, %1\n" -+" mov %H0, %H1\n" -+"2: " REFCOUNT_TRAP_INSN "\n" -+"3:\n" -+#endif -+ - " strexd %1, %0, %H0, [%3]\n" - " teq %1, #0\n" - " bne 1b" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+"\n4:\n" -+ _ASM_EXTABLE(2b, 4b) -+#endif +-#define ATOMIC64_OP(op, op1, op2) \ +-static inline void atomic64_##op(long long i, atomic64_t *v) \ ++#undef __OVERFLOW_POST_RETURN ++#define __OVERFLOW_POST_RETURN \ ++ " bvc 3f\n" \ ++" mov %0, %1\n" \ ++" mov %H0, %H1\n" \ ++ "2: " REFCOUNT_TRAP_INSN "\n"\ ++ "3:\n" ++ ++#define __ATOMIC64_OP(op, suffix, op1, op2, post_op, extable) \ ++static inline void atomic64_##op##suffix(long long i, atomic64##suffix##_t *v)\ + { \ + long long result; \ + unsigned long tmp; \ + \ + prefetchw(&v->counter); \ +- __asm__ __volatile__("@ atomic64_" #op "\n" \ ++ __asm__ __volatile__("@ atomic64_" #op #suffix "\n" \ + "1: ldrexd %0, %H0, [%3]\n" \ + " " #op1 " %Q0, %Q0, %Q4\n" \ + " " #op2 " %R0, %R0, %R4\n" \ ++ post_op \ + " strexd %1, %0, %H0, [%3]\n" \ + " teq %1, #0\n" \ +-" bne 1b" \ ++" bne 1b\n" \ ++ extable \ + : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) \ + : "r" (&v->counter), "r" (i) \ + : "cc"); \ + } \ + +-#define ATOMIC64_OP_RETURN(op, op1, op2) \ +-static inline long long atomic64_##op##_return(long long i, atomic64_t *v) \ ++#define ATOMIC64_OP(op, op1, op2) __ATOMIC64_OP(op, , op1, op2, , ) \ ++ __ATOMIC64_OP(op, _unchecked, op1, op2##s, __OVERFLOW_POST, __OVERFLOW_EXTABLE) + - : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) - : "r" (&v->counter), "r" (i) - : "cc"); -@@ -410,6 +791,31 @@ static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old, ++#define __ATOMIC64_OP_RETURN(op, suffix, op1, op2, post_op, extable) \ ++static inline long long atomic64_##op##_return##suffix(long long i, atomic64##suffix##_t *v) \ + { \ + long long result; \ + unsigned long tmp; \ +@@ -298,13 +489,15 @@ static inline long long atomic64_##op##_return(long long i, atomic64_t *v) \ + smp_mb(); \ + prefetchw(&v->counter); \ + \ +- __asm__ __volatile__("@ atomic64_" #op "_return\n" \ ++ __asm__ __volatile__("@ atomic64_" #op "_return" #suffix "\n" \ + "1: ldrexd %0, %H0, [%3]\n" \ + " " #op1 " %Q0, %Q0, %Q4\n" \ + " " #op2 " %R0, %R0, %R4\n" \ ++ post_op \ + " strexd %1, %0, %H0, [%3]\n" \ + " teq %1, #0\n" \ +-" bne 1b" \ ++" bne 1b\n" \ ++ extable \ + : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) \ + : "r" (&v->counter), "r" (i) \ + : "cc"); \ +@@ -314,6 +507,9 @@ static inline long long atomic64_##op##_return(long long i, atomic64_t *v) \ + return result; \ + } + ++#define ATOMIC64_OP_RETURN(op, op1, op2) __ATOMIC64_OP_RETURN(op, , op1, op2, , ) \ ++ __ATOMIC64_OP_RETURN(op, _unchecked, op1, op2##s, __OVERFLOW_POST_RETURN, __OVERFLOW_EXTABLE) ++ + #define ATOMIC64_OPS(op, op1, op2) \ + ATOMIC64_OP(op, op1, op2) \ + ATOMIC64_OP_RETURN(op, op1, op2) +@@ -323,7 +519,12 @@ ATOMIC64_OPS(sub, subs, sbc) + + #undef ATOMIC64_OPS + #undef ATOMIC64_OP_RETURN ++#undef __ATOMIC64_OP_RETURN + #undef ATOMIC64_OP ++#undef __ATOMIC64_OP ++#undef __OVERFLOW_EXTABLE ++#undef __OVERFLOW_POST_RETURN ++#undef __OVERFLOW_POST + + static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old, + long long new) +@@ -351,6 +552,31 @@ static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old, return oldval; } @@ -1575,7 +1441,7 @@ index 3040359..a494fa3 100644 static inline long long atomic64_xchg(atomic64_t *ptr, long long new) { long long result; -@@ -435,21 +841,35 @@ static inline long long atomic64_xchg(atomic64_t *ptr, long long new) +@@ -376,21 +602,35 @@ static inline long long atomic64_xchg(atomic64_t *ptr, long long new) static inline long long atomic64_dec_if_positive(atomic64_t *v) { long long result; @@ -1617,7 +1483,7 @@ index 3040359..a494fa3 100644 : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) : "r" (&v->counter) : "cc"); -@@ -473,13 +893,25 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u) +@@ -414,13 +654,25 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u) " teq %0, %5\n" " teqeq %H0, %H5\n" " moveq %1, #0\n" @@ -1646,7 +1512,7 @@ index 3040359..a494fa3 100644 : "=&r" (val), "+r" (ret), "=&r" (tmp), "+Qo" (v->counter) : "r" (&v->counter), "r" (u), "r" (a) : "cc"); -@@ -492,10 +924,13 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u) +@@ -433,10 +685,13 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u) #define atomic64_add_negative(a, v) (atomic64_add_return((a), (v)) < 0) #define atomic64_inc(v) atomic64_add(1LL, (v)) @@ -2097,7 +1963,7 @@ index 5cfba15..f415e1a 100644 #define PTE_EXT_AP0 (_AT(pteval_t, 1) << 4) #define PTE_EXT_AP1 (_AT(pteval_t, 2) << 4) diff --git a/arch/arm/include/asm/pgtable-2level.h b/arch/arm/include/asm/pgtable-2level.h -index 219ac88..73ec32a 100644 +index f027941..f36ce30 100644 --- a/arch/arm/include/asm/pgtable-2level.h +++ b/arch/arm/include/asm/pgtable-2level.h @@ -126,6 +126,9 @@ @@ -2123,7 +1989,7 @@ index 9fd61c7..f8f1cff 100644 /* diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h -index 06e0bc0..c65bca8 100644 +index a31ecdad..95e98d4 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h @@ -81,6 +81,7 @@ @@ -2148,7 +2014,7 @@ index 06e0bc0..c65bca8 100644 #define L_PTE_DIRTY_HIGH (1 << (55 - 32)) diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h -index 01baef0..73c156e 100644 +index 3b30062..01a5f9d 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -33,6 +33,9 @@ @@ -2231,7 +2097,7 @@ index 01baef0..73c156e 100644 */ #define _L_PTE_DEFAULT L_PTE_PRESENT | L_PTE_YOUNG -@@ -269,7 +317,7 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; } +@@ -267,7 +315,7 @@ PTE_BIT_FUNC(mknexec, |= L_PTE_XN); static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) { const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER | @@ -2254,10 +2120,10 @@ index c25ef3e..735f14b 100644 extern struct psci_operations psci_ops; extern struct smp_operations psci_smp_ops; diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h -index 2ec765c..beb1fe16 100644 +index 18f5a55..5072a40 100644 --- a/arch/arm/include/asm/smp.h +++ b/arch/arm/include/asm/smp.h -@@ -113,7 +113,7 @@ struct smp_operations { +@@ -107,7 +107,7 @@ struct smp_operations { int (*cpu_disable)(unsigned int cpu); #endif #endif @@ -2267,10 +2133,10 @@ index 2ec765c..beb1fe16 100644 struct of_cpu_method { const char *method; diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h -index fc44d37..acc63c4 100644 +index ce73ab6..7310f8a 100644 --- a/arch/arm/include/asm/thread_info.h +++ b/arch/arm/include/asm/thread_info.h -@@ -89,9 +89,9 @@ struct thread_info { +@@ -78,9 +78,9 @@ struct thread_info { .flags = 0, \ .preempt_count = INIT_PREEMPT_COUNT, \ .addr_limit = KERNEL_DS, \ @@ -2283,7 +2149,7 @@ index fc44d37..acc63c4 100644 .restart_block = { \ .fn = do_no_restart_syscall, \ }, \ -@@ -165,7 +165,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, +@@ -154,7 +154,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, #define TIF_SYSCALL_AUDIT 9 #define TIF_SYSCALL_TRACEPOINT 10 #define TIF_SECCOMP 11 /* seccomp syscall filtering active */ @@ -2296,7 +2162,7 @@ index fc44d37..acc63c4 100644 #define TIF_USING_IWMMXT 17 #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ #define TIF_RESTORE_SIGMASK 20 -@@ -179,10 +183,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, +@@ -168,10 +172,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) #define _TIF_SECCOMP (1 << TIF_SECCOMP) #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT) @@ -2563,7 +2429,7 @@ index a88671c..1cc895e 100644 EXPORT_SYMBOL(__get_user_1); EXPORT_SYMBOL(__get_user_2); diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S -index 36276cd..9d7b13b 100644 +index 2f5555d..d493c91 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -47,6 +47,87 @@ @@ -2671,7 +2537,7 @@ index 36276cd..9d7b13b 100644 .endm @@ -149,7 +234,11 @@ ENDPROC(__und_invalid) - .macro svc_entry, stack_hole=0 + .macro svc_entry, stack_hole=0, trace=1 UNWIND(.fnstart ) UNWIND(.save {r0 - pc} ) + @@ -2695,8 +2561,8 @@ index 36276cd..9d7b13b 100644 SPFIX( addeq r2, r2, #4 ) str r3, [sp, #-4]! @ save the "real" r0 copied @ from the exception stack -@@ -317,6 +411,9 @@ ENDPROC(__pabt_svc) - .macro usr_entry +@@ -368,6 +462,9 @@ ENDPROC(__fiq_abt) + .macro usr_entry, trace=1 UNWIND(.fnstart ) UNWIND(.cantunwind ) @ don't unwind the user space + @@ -2705,7 +2571,7 @@ index 36276cd..9d7b13b 100644 sub sp, sp, #S_FRAME_SIZE ARM( stmib sp, {r1 - r12} ) THUMB( stmia sp, {r0 - r12} ) -@@ -421,7 +518,9 @@ __und_usr: +@@ -478,7 +575,9 @@ __und_usr: tst r3, #PSR_T_BIT @ Thumb mode? bne __und_usr_thumb sub r4, r2, #4 @ ARM instr at LR - 4 @@ -2715,7 +2581,7 @@ index 36276cd..9d7b13b 100644 ARM_BE8(rev r0, r0) @ little endian instruction @ r0 = 32-bit ARM instruction which caused the exception -@@ -455,11 +554,15 @@ __und_usr_thumb: +@@ -512,11 +611,15 @@ __und_usr_thumb: */ .arch armv6t2 #endif @@ -2731,7 +2597,7 @@ index 36276cd..9d7b13b 100644 ARM_BE8(rev16 r0, r0) @ little endian instruction add r2, r2, #2 @ r2 is PC + 2, make it PC + 4 str r2, [sp, #S_PC] @ it's a 2x16bit instr, update -@@ -489,7 +592,8 @@ ENDPROC(__und_usr) +@@ -546,7 +649,8 @@ ENDPROC(__und_usr) */ .pushsection .fixup, "ax" .align 2 @@ -2741,7 +2607,7 @@ index 36276cd..9d7b13b 100644 ret r9 .popsection .pushsection __ex_table,"a" -@@ -698,7 +802,7 @@ ENTRY(__switch_to) +@@ -766,7 +870,7 @@ ENTRY(__switch_to) THUMB( str lr, [ip], #4 ) ldr r4, [r2, #TI_TP_VALUE] ldr r5, [r2, #TI_TP_VALUE + 4] @@ -2750,7 +2616,7 @@ index 36276cd..9d7b13b 100644 ldr r6, [r2, #TI_CPU_DOMAIN] #endif switch_tls r1, r4, r5, r3, r7 -@@ -707,7 +811,7 @@ ENTRY(__switch_to) +@@ -775,7 +879,7 @@ ENTRY(__switch_to) ldr r8, =__stack_chk_guard ldr r7, [r7, #TSK_STACK_CANARY] #endif @@ -2760,7 +2626,7 @@ index 36276cd..9d7b13b 100644 #endif mov r5, r0 diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S -index e52fe5a..1b0a924 100644 +index 6bb09d4..113e875 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -11,18 +11,46 @@ @@ -2827,10 +2693,10 @@ index e52fe5a..1b0a924 100644 #if defined(CONFIG_OABI_COMPAT) diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S -index 2fdf867..6e909e4 100644 +index 4176df7..a901f8d 100644 --- a/arch/arm/kernel/entry-header.S +++ b/arch/arm/kernel/entry-header.S -@@ -188,6 +188,60 @@ +@@ -196,6 +196,60 @@ msr cpsr_c, \rtemp @ switch back to the SVC mode .endm @@ -2891,7 +2757,7 @@ index 2fdf867..6e909e4 100644 #ifndef CONFIG_THUMB2_KERNEL .macro svc_exit, rpsr, irq = 0 .if \irq != 0 -@@ -207,6 +261,9 @@ +@@ -215,6 +269,9 @@ blne trace_hardirqs_off #endif .endif @@ -2901,7 +2767,7 @@ index 2fdf867..6e909e4 100644 msr spsr_cxsf, \rpsr #if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_32v6K) @ We must avoid clrex due to Cortex-A15 erratum #830321 -@@ -254,6 +311,9 @@ +@@ -290,6 +347,9 @@ blne trace_hardirqs_off #endif .endif @@ -2912,10 +2778,10 @@ index 2fdf867..6e909e4 100644 ldrd r0, r1, [sp, #S_LR] @ calling lr and pc diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c -index 918875d..cd5fa27 100644 +index b37752a..ff5cb72 100644 --- a/arch/arm/kernel/fiq.c +++ b/arch/arm/kernel/fiq.c -@@ -87,7 +87,10 @@ void set_fiq_handler(void *start, unsigned int length) +@@ -95,7 +95,10 @@ void set_fiq_handler(void *start, unsigned int length) void *base = vectors_page; unsigned offset = FIQ_OFFSET; @@ -3006,10 +2872,10 @@ index 07314af..c46655c 100644 flush_icache_range((uintptr_t)(addr), (uintptr_t)(addr) + size); diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c -index a35f6eb..7af43a0 100644 +index fe972a2..a772d83 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c -@@ -212,6 +212,7 @@ void machine_power_off(void) +@@ -207,6 +207,7 @@ void machine_power_off(void) if (pm_power_off) pm_power_off(); @@ -3017,7 +2883,7 @@ index a35f6eb..7af43a0 100644 } /* -@@ -225,7 +226,7 @@ void machine_power_off(void) +@@ -220,7 +221,7 @@ void machine_power_off(void) * executing pre-reset code, and using RAM that the primary CPU's code wishes * to use. Implementing such co-ordination would be essentially impossible. */ @@ -3026,7 +2892,7 @@ index a35f6eb..7af43a0 100644 { local_irq_disable(); smp_send_stop(); -@@ -248,8 +249,8 @@ void __show_regs(struct pt_regs *regs) +@@ -246,8 +247,8 @@ void __show_regs(struct pt_regs *regs) show_regs_print_info(KERN_DEFAULT); @@ -3037,7 +2903,7 @@ index a35f6eb..7af43a0 100644 printk("pc : [<%08lx>] lr : [<%08lx>] psr: %08lx\n" "sp : %08lx ip : %08lx fp : %08lx\n", regs->ARM_pc, regs->ARM_lr, regs->ARM_cpsr, -@@ -427,12 +428,6 @@ unsigned long get_wchan(struct task_struct *p) +@@ -424,12 +425,6 @@ unsigned long get_wchan(struct task_struct *p) return 0; } @@ -3050,7 +2916,7 @@ index a35f6eb..7af43a0 100644 #ifdef CONFIG_MMU #ifdef CONFIG_KUSER_HELPERS /* -@@ -448,7 +443,7 @@ static struct vm_area_struct gate_vma = { +@@ -445,7 +440,7 @@ static struct vm_area_struct gate_vma = { static int __init gate_vma_init(void) { @@ -3059,24 +2925,58 @@ index a35f6eb..7af43a0 100644 return 0; } arch_initcall(gate_vma_init); -@@ -474,41 +469,16 @@ int in_gate_area_no_mm(unsigned long addr) - - const char *arch_vma_name(struct vm_area_struct *vma) - { -- return is_gate_vma(vma) ? "[vectors]" : -- (vma->vm_mm && vma->vm_start == vma->vm_mm->context.sigpage) ? -- "[sigpage]" : NULL; -+ return is_gate_vma(vma) ? "[vectors]" : NULL; +@@ -474,81 +469,13 @@ const char *arch_vma_name(struct vm_area_struct *vma) + return is_gate_vma(vma) ? "[vectors]" : NULL; } +-/* If possible, provide a placement hint at a random offset from the +- * stack for the signal page. +- */ +-static unsigned long sigpage_addr(const struct mm_struct *mm, +- unsigned int npages) +-{ +- unsigned long offset; +- unsigned long first; +- unsigned long last; +- unsigned long addr; +- unsigned int slots; +- +- first = PAGE_ALIGN(mm->start_stack); +- +- last = TASK_SIZE - (npages << PAGE_SHIFT); +- +- /* No room after stack? */ +- if (first > last) +- return 0; +- +- /* Just enough room? */ +- if (first == last) +- return first; +- +- slots = ((last - first) >> PAGE_SHIFT) + 1; +- +- offset = get_random_int() % slots; +- +- addr = first + (offset << PAGE_SHIFT); +- +- return addr; +-} +- -static struct page *signal_page; -extern struct page *get_signal_page(void); +- +-static const struct vm_special_mapping sigpage_mapping = { +- .name = "[sigpage]", +- .pages = &signal_page, +-}; - int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) { struct mm_struct *mm = current->mm; +- struct vm_area_struct *vma; - unsigned long addr; -- int ret; +- unsigned long hint; +- int ret = 0; - - if (!signal_page) - signal_page = get_signal_page(); @@ -3084,18 +2984,23 @@ index a35f6eb..7af43a0 100644 - return -ENOMEM; down_write(&mm->mmap_sem); -- addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0); +- hint = sigpage_addr(mm, 1); +- addr = get_unmapped_area(NULL, hint, PAGE_SIZE, 0, 0); - if (IS_ERR_VALUE(addr)) { - ret = addr; - goto up_fail; - } - -- ret = install_special_mapping(mm, addr, PAGE_SIZE, +- vma = _install_special_mapping(mm, addr, PAGE_SIZE, - VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC, -- &signal_page); +- &sigpage_mapping); +- +- if (IS_ERR(vma)) { +- ret = PTR_ERR(vma); +- goto up_fail; +- } - -- if (ret == 0) -- mm->context.sigpage = addr; +- mm->context.sigpage = addr; - - up_fail: + mm->context.sigpage = (PAGE_OFFSET + (get_random_int() % 0x3FFEFFE0)) & 0xFFFFFFFC; @@ -3118,7 +3023,7 @@ index f73891b..cf3004e 100644 static int (*invoke_psci_fn)(u32, u32, u32, u32); typedef int (*psci_initcall_t)(const struct device_node *); diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c -index 0c27ed6..b67388e 100644 +index ef9119f..31995a3 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c @@ -928,10 +928,19 @@ static void tracehook_report_syscall(struct pt_regs *regs, @@ -3139,10 +3044,10 @@ index 0c27ed6..b67388e 100644 +#endif + /* Do the secure computing check first; failures should be fast. */ - if (secure_computing(scno) == -1) - return -1; + #ifdef CONFIG_HAVE_ARCH_SECCOMP_FILTER + if (secure_computing() == -1) diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c -index 84db893d..bd8213a 100644 +index c031063..e277ab8 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -104,21 +104,23 @@ EXPORT_SYMBOL(elf_hwcap); @@ -3174,7 +3079,7 @@ index 84db893d..bd8213a 100644 EXPORT_SYMBOL(outer_cache); #endif -@@ -251,9 +253,13 @@ static int __get_cpu_architecture(void) +@@ -252,9 +254,13 @@ static int __get_cpu_architecture(void) asm("mrc p15, 0, %0, c0, c1, 4" : "=r" (mmfr0)); if ((mmfr0 & 0x0000000f) >= 0x00000003 || @@ -3248,7 +3153,7 @@ index bd19834..e4d8c66 100644 - return page; -} diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c -index bbe22fc..d7737f5 100644 +index 13396d3..589d615 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -76,7 +76,7 @@ enum ipi_msg_type { @@ -3284,10 +3189,10 @@ index 7a3be1d..b00c7de 100644 start, end); itcm_present = true; diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c -index a964c9f..cf2a5b1 100644 +index 9f5d818..e013427 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c -@@ -64,7 +64,7 @@ static void dump_mem(const char *, const char *, unsigned long, unsigned long); +@@ -65,7 +65,7 @@ static void dump_mem(const char *, const char *, unsigned long, unsigned long); void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame) { #ifdef CONFIG_KALLSYMS @@ -3296,7 +3201,7 @@ index a964c9f..cf2a5b1 100644 #else printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from); #endif -@@ -266,6 +266,8 @@ static arch_spinlock_t die_lock = __ARCH_SPIN_LOCK_UNLOCKED; +@@ -267,6 +267,8 @@ static arch_spinlock_t die_lock = __ARCH_SPIN_LOCK_UNLOCKED; static int die_owner = -1; static unsigned int die_nest_count; @@ -3305,7 +3210,7 @@ index a964c9f..cf2a5b1 100644 static unsigned long oops_begin(void) { int cpu; -@@ -308,6 +310,9 @@ static void oops_end(unsigned long flags, struct pt_regs *regs, int signr) +@@ -309,6 +311,9 @@ static void oops_end(unsigned long flags, struct pt_regs *regs, int signr) panic("Fatal exception in interrupt"); if (panic_on_oops) panic("Fatal exception"); @@ -3315,7 +3220,7 @@ index a964c9f..cf2a5b1 100644 if (signr) do_exit(signr); } -@@ -887,7 +892,11 @@ void __init early_trap_init(void *vectors_base) +@@ -880,7 +885,11 @@ void __init early_trap_init(void *vectors_base) kuser_init(vectors_base); flush_icache_range(vectors, vectors + PAGE_SIZE * 2); @@ -3329,7 +3234,7 @@ index a964c9f..cf2a5b1 100644 /* * on V7-M there is no need to copy the vector table to a dedicated diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S -index 6f57cb9..645f8c4 100644 +index 8e95aa4..595dfc8 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S @@ -8,7 +8,11 @@ @@ -3386,20 +3291,20 @@ index 6f57cb9..645f8c4 100644 #ifndef CONFIG_XIP_KERNEL . = ALIGN(PAGE_SIZE); -@@ -220,6 +233,11 @@ SECTIONS - . = PAGE_OFFSET + TEXT_OFFSET; +@@ -221,6 +234,11 @@ SECTIONS #else + . = ALIGN(THREAD_SIZE); __init_end = .; + +#ifdef CONFIG_PAX_KERNEXEC + . = ALIGN(1<arch.vmid = kvm_next_vmid; kvm_next_vmid++; -@@ -997,7 +997,7 @@ static void check_kvm_target_cpu(void *ret) +@@ -980,7 +980,7 @@ static void check_kvm_target_cpu(void *ret) /** * Initialize Hyp-mode and memory mappings on all CPUs. */ @@ -3594,17 +3499,17 @@ index 3e58d71..029817c 100644 /* See rational for this in __copy_to_user() above. */ if (n < 64) diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c -index f7a07a5..258e1f7 100644 +index 9610792..4dfb851 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c -@@ -81,7 +81,7 @@ void __init at91_init_sram(int bank, unsigned long base, unsigned int length) +@@ -83,7 +83,7 @@ void __init at91_init_sram(int bank, unsigned long base, unsigned int length) desc->pfn = __phys_to_pfn(base); desc->length = length; - desc->type = MT_MEMORY_RWX_NONCACHED; + desc->type = MT_MEMORY_RW_NONCACHED; - pr_info("AT91: sram at 0x%lx of 0x%x mapped at 0x%lx\n", + pr_info("sram at 0x%lx of 0x%x mapped at 0x%lx\n", base, length, desc->virtual); diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c index 7f352de..6dc0929 100644 @@ -3620,7 +3525,7 @@ index 7f352de..6dc0929 100644 static int keystone_platform_notifier(struct notifier_block *nb, diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c -index 2bdc323..cf1c607 100644 +index c31f4c0..c86224d 100644 --- a/arch/arm/mach-mvebu/coherency.c +++ b/arch/arm/mach-mvebu/coherency.c @@ -316,7 +316,7 @@ static void __init armada_370_coherency_init(struct device_node *np) @@ -3642,20 +3547,20 @@ index 2bdc323..cf1c607 100644 return __arm_ioremap_caller(phys_addr, size, mtype, caller); } diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c -index aead77a..a2253fa 100644 +index 97767a2..9233746 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c -@@ -568,7 +568,7 @@ static int n8x0_menelaus_late_init(struct device *dev) +@@ -569,7 +569,7 @@ static int n8x0_menelaus_late_init(struct device *dev) } #endif --static struct menelaus_platform_data n8x0_menelaus_platform_data __initdata = { -+static struct menelaus_platform_data n8x0_menelaus_platform_data __initconst = { +-struct menelaus_platform_data n8x0_menelaus_platform_data __initdata = { ++struct menelaus_platform_data n8x0_menelaus_platform_data __initconst = { .late_init = n8x0_menelaus_late_init, }; diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c -index 2f97228..6ce10e1 100644 +index 5fa3755..1e8c247 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -151,7 +151,6 @@ struct omap3_gpmc_regs { @@ -3702,19 +3607,19 @@ index 2f97228..6ce10e1 100644 gpmc_client_irq[1].bitmask = GPMC_IRQ_COUNT_EVENT; diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c -index 4001325..b14e2a0 100644 +index 6944ae3..bc587ca 100644 --- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c +++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c -@@ -84,7 +84,7 @@ struct cpu_pm_ops { - int (*finish_suspend)(unsigned long cpu_state); +@@ -86,7 +86,7 @@ struct cpu_pm_ops { void (*resume)(void); void (*scu_prepare)(unsigned int cpu_id, unsigned int cpu_state); + void (*hotplug_restart)(void); -}; +} __no_const; static DEFINE_PER_CPU(struct omap4_cpu_pm_info, omap4_pm_info); static struct powerdomain *mpuss_pd; -@@ -102,7 +102,7 @@ static void dummy_cpu_resume(void) +@@ -105,7 +105,7 @@ static void dummy_cpu_resume(void) static void dummy_scu_prepare(unsigned int cpu_id, unsigned int cpu_state) {} @@ -3724,10 +3629,10 @@ index 4001325..b14e2a0 100644 .resume = dummy_cpu_resume, .scu_prepare = dummy_scu_prepare, diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c -index 37843a7..a98df13 100644 +index f961c46..4a453dc 100644 --- a/arch/arm/mach-omap2/omap-wakeupgen.c +++ b/arch/arm/mach-omap2/omap-wakeupgen.c -@@ -343,7 +343,7 @@ static int irq_cpu_hotplug_notify(struct notifier_block *self, +@@ -344,7 +344,7 @@ static int irq_cpu_hotplug_notify(struct notifier_block *self, return NOTIFY_OK; } @@ -3737,7 +3642,7 @@ index 37843a7..a98df13 100644 }; diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c -index d22c30d..23697a1 100644 +index 8c58b71..95b655f 100644 --- a/arch/arm/mach-omap2/omap_device.c +++ b/arch/arm/mach-omap2/omap_device.c @@ -510,7 +510,7 @@ void omap_device_delete(struct omap_device *od) @@ -3778,7 +3683,7 @@ index 78c02b3..c94109a 100644 struct omap_device *omap_device_alloc(struct platform_device *pdev, struct omap_hwmod **ohs, int oh_cnt); diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c -index 9e91a4e..357ed0d 100644 +index 716247e..8df346d 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -194,10 +194,10 @@ struct omap_hwmod_soc_ops { @@ -3818,7 +3723,7 @@ index 95fee54..cfa9cf1 100644 pwrdm_register_pwrdms(powerdomains_am43xx); pwrdm_complete_init(); diff --git a/arch/arm/mach-omap2/wd_timer.c b/arch/arm/mach-omap2/wd_timer.c -index 97d6607..8429d14 100644 +index ff0a68c..b312aa0 100644 --- a/arch/arm/mach-omap2/wd_timer.c +++ b/arch/arm/mach-omap2/wd_timer.c @@ -110,7 +110,9 @@ static int __init omap_init_wdt(void) @@ -3976,10 +3881,10 @@ index 83792f4..c25d36b 100644 goto fault; \ } while (0) diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c -index 5f2c988..221412d 100644 +index 5e65ca8..879e7b3 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c -@@ -41,7 +41,7 @@ struct l2c_init_data { +@@ -42,7 +42,7 @@ struct l2c_init_data { void (*fixup)(void __iomem *, u32, struct outer_cache_fns *); void (*save)(void __iomem *); struct outer_cache_fns outer_cache; @@ -4287,7 +4192,7 @@ index cf08bdf..772656c 100644 unsigned long search_exception_table(unsigned long addr); diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c -index 659c75d..6f8c029 100644 +index 9481f85..6dae261 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c @@ -31,6 +31,8 @@ @@ -4474,7 +4379,7 @@ index 5e85ed3..b10a7ed 100644 } } diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c -index 8348ed6..b73a807 100644 +index 9f98cec..115fcb6 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -40,6 +40,22 @@ @@ -4858,10 +4763,18 @@ index 8348ed6..b73a807 100644 } diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c -index a37b989..5c9ae75 100644 +index e1268f9..a9755a7 100644 --- a/arch/arm/net/bpf_jit_32.c +++ b/arch/arm/net/bpf_jit_32.c -@@ -71,7 +71,11 @@ struct jit_ctx { +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + #include "bpf_jit_32.h" + +@@ -71,7 +72,11 @@ struct jit_ctx { #endif }; @@ -4873,14 +4786,17 @@ index a37b989..5c9ae75 100644 static u64 jit_get_skb_b(struct sk_buff *skb, unsigned offset) { -@@ -930,5 +934,6 @@ void bpf_jit_free(struct bpf_prog *fp) +@@ -178,8 +183,10 @@ static void jit_fill_hole(void *area, unsigned int size) { - if (fp->jited) - module_free(NULL, fp->bpf_func); -- kfree(fp); -+ -+ bpf_prog_unlock_free(fp); + u32 *ptr; + /* We are guaranteed to have aligned memory. */ ++ pax_open_kernel(); + for (ptr = area; size >= sizeof(u32); size -= sizeof(u32)) + *ptr++ = __opcode_to_mem_arm(ARM_INST_UDF); ++ pax_close_kernel(); } + + static void build_prologue(struct jit_ctx *ctx) diff --git a/arch/arm/plat-iop/setup.c b/arch/arm/plat-iop/setup.c index 5b217f4..c23f40e 100644 --- a/arch/arm/plat-iop/setup.c @@ -5097,7 +5013,7 @@ index 7caf25d..ee65ac5 100644 #define __read_mostly __attribute__((__section__(".data..read_mostly"))) diff --git a/arch/frv/include/asm/atomic.h b/arch/frv/include/asm/atomic.h -index f6c3a16..cd422a4 100644 +index 102190a..5334cea 100644 --- a/arch/frv/include/asm/atomic.h +++ b/arch/frv/include/asm/atomic.h @@ -181,6 +181,16 @@ static inline void atomic64_dec(atomic64_t *v) @@ -5218,10 +5134,10 @@ index 5441b14..039a446 100644 make_nr_irqs_h: FORCE $(Q)$(MAKE) $(build)=arch/ia64/kernel include/generated/nr-irqs.h diff --git a/arch/ia64/include/asm/atomic.h b/arch/ia64/include/asm/atomic.h -index 0f8bf48..40ea950 100644 +index 0bf0350..2ad1957 100644 --- a/arch/ia64/include/asm/atomic.h +++ b/arch/ia64/include/asm/atomic.h -@@ -209,4 +209,14 @@ atomic64_add_negative (__s64 i, atomic64_t *v) +@@ -193,4 +193,14 @@ atomic64_add_negative (__s64 i, atomic64_t *v) #define atomic64_inc(v) atomic64_add(1, (v)) #define atomic64_dec(v) atomic64_sub(1, (v)) @@ -5789,10 +5705,10 @@ index 4efe96a..60e8699 100644 #define SMP_CACHE_BYTES L1_CACHE_BYTES diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig -index 574c430..470200d 100644 +index 9536ef9..9333776 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig -@@ -2399,6 +2399,7 @@ source "kernel/Kconfig.preempt" +@@ -2413,6 +2413,7 @@ source "kernel/Kconfig.preempt" config KEXEC bool "Kexec system call" @@ -5814,7 +5730,7 @@ index 02f2444..506969c 100644 static dma_addr_t octeon_unity_phys_to_dma(struct device *dev, phys_addr_t paddr) diff --git a/arch/mips/include/asm/atomic.h b/arch/mips/include/asm/atomic.h -index 37b2bef..02122b8 100644 +index 6dd6bfc..903b0d6 100644 --- a/arch/mips/include/asm/atomic.h +++ b/arch/mips/include/asm/atomic.h @@ -21,15 +21,39 @@ @@ -5845,20 +5761,20 @@ index 37b2bef..02122b8 100644 * * Atomically reads the value of @v. */ --#define atomic_read(v) (*(volatile int *)&(v)->counter) +-#define atomic_read(v) ACCESS_ONCE((v)->counter) +static inline int atomic_read(const atomic_t *v) +{ -+ return (*(volatile const int *) &v->counter); ++ return ACCESS_ONCE(v->counter); +} + +static inline int atomic_read_unchecked(const atomic_unchecked_t *v) +{ -+ return (*(volatile const int *) &v->counter); ++ return ACCESS_ONCE(v->counter); +} /* * atomic_set - set atomic variable -@@ -38,7 +62,15 @@ +@@ -38,47 +62,77 @@ * * Atomically sets the value of @v to @i. */ @@ -5867,343 +5783,187 @@ index 37b2bef..02122b8 100644 +{ + v->counter = i; +} -+ + +-#define ATOMIC_OP(op, c_op, asm_op) \ +-static __inline__ void atomic_##op(int i, atomic_t * v) \ +static inline void atomic_set_unchecked(atomic_unchecked_t *v, int i) +{ + v->counter = i; +} - - /* - * atomic_add - add integer to atomic variable -@@ -47,7 +79,67 @@ - * - * Atomically adds @i to @v. - */ --static __inline__ void atomic_add(int i, atomic_t * v) -+static __inline__ void atomic_add(int i, atomic_t *v) -+{ -+ int temp; -+ -+ if (kernel_uses_llsc && R10000_LLSC_WAR) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: ll %0, %1 # atomic_add \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "2: add %0, %2 \n" -+#else -+ " addu %0, %2 \n" -+#endif -+ " sc %0, %1 \n" -+ " beqzl %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "3: \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ " .set mips0 \n" -+ : "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else if (kernel_uses_llsc) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: ll %0, %1 # atomic_add \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "2: add %0, %2 \n" -+#else -+ " addu %0, %2 \n" -+#endif -+ " sc %0, %1 \n" -+ " beqz %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "3: \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ " .set mips0 \n" -+ : "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else { -+ unsigned long flags; -+ -+ raw_local_irq_save(flags); -+ __asm__ __volatile__( -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "1: add %0, %1 \n" -+ "2: \n" -+ _ASM_EXTABLE(1b, 2b) -+#else -+ " addu %0, %1 \n" -+#endif -+ : "+r" (v->counter) : "Ir" (i)); -+ raw_local_irq_restore(flags); -+ } -+} -+ -+static __inline__ void atomic_add_unchecked(int i, atomic_unchecked_t *v) - { - if (kernel_uses_llsc && R10000_LLSC_WAR) { - int temp; -@@ -90,7 +182,67 @@ static __inline__ void atomic_add(int i, atomic_t * v) - * - * Atomically subtracts @i from @v. - */ --static __inline__ void atomic_sub(int i, atomic_t * v) -+static __inline__ void atomic_sub(int i, atomic_t *v) -+{ -+ int temp; -+ -+ if (kernel_uses_llsc && R10000_LLSC_WAR) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: ll %0, %1 # atomic64_sub \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "2: sub %0, %2 \n" -+#else -+ " subu %0, %2 \n" -+#endif -+ " sc %0, %1 \n" -+ " beqzl %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "3: \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ " .set mips0 \n" -+ : "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else if (kernel_uses_llsc) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: ll %0, %1 # atomic64_sub \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "2: sub %0, %2 \n" -+#else -+ " subu %0, %2 \n" -+#endif -+ " sc %0, %1 \n" -+ " beqz %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "3: \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ " .set mips0 \n" -+ : "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else { -+ unsigned long flags; -+ -+ raw_local_irq_save(flags); -+ __asm__ __volatile__( -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "1: sub %0, %1 \n" -+ "2: \n" -+ _ASM_EXTABLE(1b, 2b) -+#else -+ " subu %0, %1 \n" -+#endif -+ : "+r" (v->counter) : "Ir" (i)); -+ raw_local_irq_restore(flags); -+ } -+} -+ -+static __inline__ void atomic_sub_unchecked(long i, atomic_unchecked_t *v) - { - if (kernel_uses_llsc && R10000_LLSC_WAR) { - int temp; -@@ -129,7 +281,93 @@ static __inline__ void atomic_sub(int i, atomic_t * v) - /* - * Same as above, but return the result value - */ --static __inline__ int atomic_add_return(int i, atomic_t * v) -+static __inline__ int atomic_add_return(int i, atomic_t *v) -+{ -+ int result; -+ int temp; -+ -+ smp_mb__before_llsc(); -+ -+ if (kernel_uses_llsc && R10000_LLSC_WAR) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: ll %1, %2 # atomic_add_return \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "2: add %0, %1, %3 \n" -+#else -+ " addu %0, %1, %3 \n" -+#endif -+ " sc %0, %2 \n" -+ " beqzl %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ " b 4f \n" -+ " .set noreorder \n" -+ "3: b 5f \n" -+ " move %0, %1 \n" -+ " .set reorder \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ "4: addu %0, %1, %3 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "5: \n" -+#endif -+ " .set mips0 \n" -+ : "=&r" (result), "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else if (kernel_uses_llsc) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: ll %1, %2 # atomic_add_return \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "2: add %0, %1, %3 \n" -+#else -+ " addu %0, %1, %3 \n" -+#endif -+ " sc %0, %2 \n" -+ " bnez %0, 4f \n" -+ " b 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ " .set noreorder \n" -+ "3: b 5f \n" -+ " move %0, %1 \n" -+ " .set reorder \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ "4: addu %0, %1, %3 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "5: \n" -+#endif -+ " .set mips0 \n" -+ : "=&r" (result), "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else { -+ unsigned long flags; -+ -+ raw_local_irq_save(flags); -+ __asm__ __volatile__( -+ " lw %0, %1 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "1: add %0, %2 \n" -+#else -+ " addu %0, %2 \n" -+#endif -+ " sw %0, %1 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Note: Dest reg is not modified on overflow */ -+ "2: \n" -+ _ASM_EXTABLE(1b, 2b) -+#endif -+ : "=&r" (result), "+m" (v->counter) : "Ir" (i)); -+ raw_local_irq_restore(flags); -+ } -+ -+ smp_llsc_mb(); -+ -+ return result; -+} -+ -+static __inline__ int atomic_add_return_unchecked(int i, atomic_unchecked_t *v) - { - int result; - -@@ -178,7 +416,93 @@ static __inline__ int atomic_add_return(int i, atomic_t * v) - return result; - } - --static __inline__ int atomic_sub_return(int i, atomic_t * v) -+static __inline__ int atomic_sub_return(int i, atomic_t *v) -+{ -+ int result; -+ int temp; -+ -+ smp_mb__before_llsc(); + -+ if (kernel_uses_llsc && R10000_LLSC_WAR) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: ll %1, %2 # atomic_sub_return \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "2: sub %0, %1, %3 \n" -+#else -+ " subu %0, %1, %3 \n" -+#endif -+ " sc %0, %2 \n" -+ " beqzl %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ " b 4f \n" -+ " .set noreorder \n" -+ "3: b 5f \n" -+ " move %0, %1 \n" -+ " .set reorder \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ "4: subu %0, %1, %3 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "5: \n" -+#endif -+ " .set mips0 \n" -+ : "=&r" (result), "=&r" (temp), "=m" (v->counter) -+ : "Ir" (i), "m" (v->counter) -+ : "memory"); -+ } else if (kernel_uses_llsc) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: ll %1, %2 # atomic_sub_return \n" +#ifdef CONFIG_PAX_REFCOUNT -+ "2: sub %0, %1, %3 \n" ++#define __OVERFLOW_POST \ ++ " b 4f \n" \ ++ " .set noreorder \n" \ ++ "3: b 5f \n" \ ++ " move %0, %1 \n" \ ++ " .set reorder \n" ++#define __OVERFLOW_EXTABLE \ ++ "3:\n" \ ++ _ASM_EXTABLE(2b, 3b) +#else -+ " subu %0, %1, %3 \n" -+#endif -+ " sc %0, %2 \n" -+ " bnez %0, 4f \n" -+ " b 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ " .set noreorder \n" -+ "3: b 5f \n" -+ " move %0, %1 \n" -+ " .set reorder \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ "4: subu %0, %1, %3 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "5: \n" -+#endif -+ " .set mips0 \n" -+ : "=&r" (result), "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else { -+ unsigned long flags; -+ -+ raw_local_irq_save(flags); -+ __asm__ __volatile__( -+ " lw %0, %1 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "1: sub %0, %2 \n" -+#else -+ " subu %0, %2 \n" -+#endif -+ " sw %0, %1 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Note: Dest reg is not modified on overflow */ -+ "2: \n" -+ _ASM_EXTABLE(1b, 2b) -+#endif -+ : "=&r" (result), "+m" (v->counter) : "Ir" (i)); -+ raw_local_irq_restore(flags); -+ } -+ -+ smp_llsc_mb(); -+ -+ return result; -+} -+static __inline__ int atomic_sub_return_unchecked(int i, atomic_unchecked_t *v) - { - int result; ++#define __OVERFLOW_POST ++#define __OVERFLOW_EXTABLE ++#endif ++ ++#define __ATOMIC_OP(op, suffix, asm_op, extable) \ ++static inline void atomic_##op##suffix(int i, atomic##suffix##_t * v) \ + { \ + if (kernel_uses_llsc && R10000_LLSC_WAR) { \ + int temp; \ + \ + __asm__ __volatile__( \ +- " .set arch=r4000 \n" \ +- "1: ll %0, %1 # atomic_" #op " \n" \ +- " " #asm_op " %0, %2 \n" \ ++ " .set mips3 \n" \ ++ "1: ll %0, %1 # atomic_" #op #suffix "\n" \ ++ "2: " #asm_op " %0, %2 \n" \ + " sc %0, %1 \n" \ + " beqzl %0, 1b \n" \ ++ extable \ + " .set mips0 \n" \ + : "=&r" (temp), "+m" (v->counter) \ + : "Ir" (i)); \ + } else if (kernel_uses_llsc) { \ + int temp; \ + \ +- do { \ +- __asm__ __volatile__( \ +- " .set arch=r4000 \n" \ +- " ll %0, %1 # atomic_" #op "\n" \ +- " " #asm_op " %0, %2 \n" \ +- " sc %0, %1 \n" \ +- " .set mips0 \n" \ +- : "=&r" (temp), "+m" (v->counter) \ +- : "Ir" (i)); \ +- } while (unlikely(!temp)); \ ++ __asm__ __volatile__( \ ++ " .set mips3 \n" \ ++ " ll %0, %1 # atomic_" #op #suffix "\n" \ ++ "2: " #asm_op " %0, %2 \n" \ ++ " sc %0, %1 \n" \ ++ " beqz %0, 1b \n" \ ++ extable \ ++ " .set mips0 \n" \ ++ : "=&r" (temp), "+m" (v->counter) \ ++ : "Ir" (i)); \ + } else { \ + unsigned long flags; \ + \ + raw_local_irq_save(flags); \ +- v->counter c_op i; \ ++ __asm__ __volatile__( \ ++ "2: " #asm_op " %0, %1 \n" \ ++ extable \ ++ : "+r" (v->counter) : "Ir" (i)); \ + raw_local_irq_restore(flags); \ + } \ + } \ + +-#define ATOMIC_OP_RETURN(op, c_op, asm_op) \ +-static __inline__ int atomic_##op##_return(int i, atomic_t * v) \ ++#define ATOMIC_OP(op, asm_op) __ATOMIC_OP(op, , asm_op##u) \ ++ __ATOMIC_OP(op, _unchecked, asm_op) ++ ++#define __ATOMIC_OP_RETURN(op, suffix, asm_op, post_op, extable) \ ++static inline int atomic_##op##_return##suffix(int i, atomic##suffix##_t * v) \ + { \ + int result; \ + \ +@@ -88,37 +142,47 @@ static __inline__ int atomic_##op##_return(int i, atomic_t * v) \ + int temp; \ + \ + __asm__ __volatile__( \ +- " .set arch=r4000 \n" \ +- "1: ll %1, %2 # atomic_" #op "_return \n" \ +- " " #asm_op " %0, %1, %3 \n" \ ++ " .set mips3 \n" \ ++ "1: ll %1, %2 # atomic_" #op "_return" #suffix "\n" \ ++ "2: " #asm_op " %0, %1, %3 \n" \ + " sc %0, %2 \n" \ + " beqzl %0, 1b \n" \ +- " " #asm_op " %0, %1, %3 \n" \ ++ post_op \ ++ extable \ ++ "4: " #asm_op " %0, %1, %3 \n" \ ++ "5: \n" \ + " .set mips0 \n" \ + : "=&r" (result), "=&r" (temp), "+m" (v->counter) \ + : "Ir" (i)); \ + } else if (kernel_uses_llsc) { \ + int temp; \ + \ +- do { \ +- __asm__ __volatile__( \ +- " .set arch=r4000 \n" \ +- " ll %1, %2 # atomic_" #op "_return \n" \ +- " " #asm_op " %0, %1, %3 \n" \ +- " sc %0, %2 \n" \ +- " .set mips0 \n" \ +- : "=&r" (result), "=&r" (temp), "+m" (v->counter) \ +- : "Ir" (i)); \ +- } while (unlikely(!result)); \ ++ __asm__ __volatile__( \ ++ " .set mips3 \n" \ ++ "1: ll %1, %2 # atomic_" #op "_return" #suffix "\n" \ ++ "2: " #asm_op " %0, %1, %3 \n" \ ++ " sc %0, %2 \n" \ ++ " beqz %0, 1b \n" \ ++ post_op \ ++ extable \ ++ "4: " #asm_op " %0, %1, %3 \n" \ ++ "5: \n" \ ++ " .set mips0 \n" \ ++ : "=&r" (result), "=&r" (temp), "+m" (v->counter) \ ++ : "Ir" (i)); \ + \ + result = temp; result c_op i; \ + } else { \ + unsigned long flags; \ + \ + raw_local_irq_save(flags); \ +- result = v->counter; \ +- result c_op i; \ +- v->counter = result; \ ++ __asm__ __volatile__( \ ++ " lw %0, %1 \n" \ ++ "2: " #asm_op " %0, %1, %2 \n" \ ++ " sw %0, %1 \n" \ ++ "3: \n" \ ++ extable \ ++ : "=&r" (result), "+m" (v->counter) : "Ir" (i)); \ + raw_local_irq_restore(flags); \ + } \ + \ +@@ -127,16 +191,21 @@ static __inline__ int atomic_##op##_return(int i, atomic_t * v) \ + return result; \ + } + +-#define ATOMIC_OPS(op, c_op, asm_op) \ +- ATOMIC_OP(op, c_op, asm_op) \ +- ATOMIC_OP_RETURN(op, c_op, asm_op) ++#define ATOMIC_OP_RETURN(op, asm_op) __ATOMIC_OP_RETURN(op, , asm_op##u, , __OVERFLOW_EXTABLE) \ ++ __ATOMIC_OP_RETURN(op, _unchecked, asm_op, __OVERFLOW_POST, __OVERFLOW_EXTABLE) + +-ATOMIC_OPS(add, +=, addu) +-ATOMIC_OPS(sub, -=, subu) ++#define ATOMIC_OPS(op, asm_op) \ ++ ATOMIC_OP(op, asm_op) \ ++ ATOMIC_OP_RETURN(op, asm_op) ++ ++ATOMIC_OPS(add, add) ++ATOMIC_OPS(sub, sub) + + #undef ATOMIC_OPS + #undef ATOMIC_OP_RETURN ++#undef __ATOMIC_OP_RETURN + #undef ATOMIC_OP ++#undef __ATOMIC_OP -@@ -238,7 +562,7 @@ static __inline__ int atomic_sub_return(int i, atomic_t * v) + /* + * atomic_sub_if_positive - conditionally subtract integer from atomic variable +@@ -146,7 +215,7 @@ ATOMIC_OPS(sub, -=, subu) * Atomically test @v and subtract @i if @v is greater or equal than @i. * The function returns the old value of @v minus @i. */ @@ -6212,7 +5972,7 @@ index 37b2bef..02122b8 100644 { int result; -@@ -295,8 +619,26 @@ static __inline__ int atomic_sub_if_positive(int i, atomic_t * v) +@@ -203,8 +272,26 @@ static __inline__ int atomic_sub_if_positive(int i, atomic_t * v) return result; } @@ -6241,7 +6001,7 @@ index 37b2bef..02122b8 100644 /** * __atomic_add_unless - add unless the number is a given value -@@ -324,6 +666,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) +@@ -232,6 +319,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) #define atomic_dec_return(v) atomic_sub_return(1, (v)) #define atomic_inc_return(v) atomic_add_return(1, (v)) @@ -6252,7 +6012,7 @@ index 37b2bef..02122b8 100644 /* * atomic_sub_and_test - subtract value from variable and test result -@@ -345,6 +691,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) +@@ -253,6 +344,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) * other cases. */ #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0) @@ -6263,7 +6023,7 @@ index 37b2bef..02122b8 100644 /* * atomic_dec_and_test - decrement by 1 and test -@@ -369,6 +719,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) +@@ -277,6 +372,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) * Atomically increments @v by 1. */ #define atomic_inc(v) atomic_add(1, (v)) @@ -6274,7 +6034,7 @@ index 37b2bef..02122b8 100644 /* * atomic_dec - decrement and test -@@ -377,6 +731,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) +@@ -285,6 +384,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) * Atomically decrements @v by 1. */ #define atomic_dec(v) atomic_sub(1, (v)) @@ -6285,19 +6045,19 @@ index 37b2bef..02122b8 100644 /* * atomic_add_negative - add and test if negative -@@ -398,14 +756,30 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) +@@ -306,54 +409,77 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) * @v: pointer of type atomic64_t * */ --#define atomic64_read(v) (*(volatile long *)&(v)->counter) +-#define atomic64_read(v) ACCESS_ONCE((v)->counter) +static inline long atomic64_read(const atomic64_t *v) +{ -+ return (*(volatile const long *) &v->counter); ++ return ACCESS_ONCE(v->counter); +} + +static inline long atomic64_read_unchecked(const atomic64_unchecked_t *v) +{ -+ return (*(volatile const long *) &v->counter); ++ return ACCESS_ONCE(v->counter); +} /* @@ -6310,346 +6070,175 @@ index 37b2bef..02122b8 100644 +{ + v->counter = i; +} -+ + +-#define ATOMIC64_OP(op, c_op, asm_op) \ +-static __inline__ void atomic64_##op(long i, atomic64_t * v) \ +static inline void atomic64_set_unchecked(atomic64_unchecked_t *v, long i) +{ + v->counter = i; +} - - /* - * atomic64_add - add integer to atomic variable -@@ -414,7 +788,66 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) - * - * Atomically adds @i to @v. - */ --static __inline__ void atomic64_add(long i, atomic64_t * v) -+static __inline__ void atomic64_add(long i, atomic64_t *v) -+{ -+ long temp; -+ -+ if (kernel_uses_llsc && R10000_LLSC_WAR) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: lld %0, %1 # atomic64_add \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "2: dadd %0, %2 \n" -+#else -+ " daddu %0, %2 \n" -+#endif -+ " scd %0, %1 \n" -+ " beqzl %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "3: \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ " .set mips0 \n" -+ : "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else if (kernel_uses_llsc) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: lld %0, %1 # atomic64_add \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "2: dadd %0, %2 \n" -+#else -+ " daddu %0, %2 \n" -+#endif -+ " scd %0, %1 \n" -+ " beqz %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "3: \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ " .set mips0 \n" -+ : "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else { -+ unsigned long flags; -+ -+ raw_local_irq_save(flags); -+ __asm__ __volatile__( -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "1: dadd %0, %1 \n" -+ "2: \n" -+ _ASM_EXTABLE(1b, 2b) -+#else -+ " daddu %0, %1 \n" -+#endif -+ : "+r" (v->counter) : "Ir" (i)); -+ raw_local_irq_restore(flags); -+ } -+} -+static __inline__ void atomic64_add_unchecked(long i, atomic64_unchecked_t *v) - { - if (kernel_uses_llsc && R10000_LLSC_WAR) { - long temp; -@@ -457,7 +890,67 @@ static __inline__ void atomic64_add(long i, atomic64_t * v) - * - * Atomically subtracts @i from @v. - */ --static __inline__ void atomic64_sub(long i, atomic64_t * v) -+static __inline__ void atomic64_sub(long i, atomic64_t *v) -+{ -+ long temp; -+ -+ if (kernel_uses_llsc && R10000_LLSC_WAR) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: lld %0, %1 # atomic64_sub \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "2: dsub %0, %2 \n" -+#else -+ " dsubu %0, %2 \n" -+#endif -+ " scd %0, %1 \n" -+ " beqzl %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "3: \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ " .set mips0 \n" -+ : "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else if (kernel_uses_llsc) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: lld %0, %1 # atomic64_sub \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "2: dsub %0, %2 \n" -+#else -+ " dsubu %0, %2 \n" -+#endif -+ " scd %0, %1 \n" -+ " beqz %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "3: \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ " .set mips0 \n" -+ : "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else { -+ unsigned long flags; -+ -+ raw_local_irq_save(flags); -+ __asm__ __volatile__( -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "1: dsub %0, %1 \n" -+ "2: \n" -+ _ASM_EXTABLE(1b, 2b) -+#else -+ " dsubu %0, %1 \n" -+#endif -+ : "+r" (v->counter) : "Ir" (i)); -+ raw_local_irq_restore(flags); -+ } -+} -+ -+static __inline__ void atomic64_sub_unchecked(long i, atomic64_unchecked_t *v) - { - if (kernel_uses_llsc && R10000_LLSC_WAR) { - long temp; -@@ -496,7 +989,93 @@ static __inline__ void atomic64_sub(long i, atomic64_t * v) - /* - * Same as above, but return the result value - */ --static __inline__ long atomic64_add_return(long i, atomic64_t * v) -+static __inline__ long atomic64_add_return(long i, atomic64_t *v) -+{ -+ long result; -+ long temp; -+ -+ smp_mb__before_llsc(); -+ -+ if (kernel_uses_llsc && R10000_LLSC_WAR) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: lld %1, %2 # atomic64_add_return \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "2: dadd %0, %1, %3 \n" -+#else -+ " daddu %0, %1, %3 \n" -+#endif -+ " scd %0, %2 \n" -+ " beqzl %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ " b 4f \n" -+ " .set noreorder \n" -+ "3: b 5f \n" -+ " move %0, %1 \n" -+ " .set reorder \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ "4: daddu %0, %1, %3 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "5: \n" -+#endif -+ " .set mips0 \n" -+ : "=&r" (result), "=&r" (temp), "+m" (v->counter) -+ : "Ir" (i)); -+ } else if (kernel_uses_llsc) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: lld %1, %2 # atomic64_add_return \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "2: dadd %0, %1, %3 \n" -+#else -+ " daddu %0, %1, %3 \n" -+#endif -+ " scd %0, %2 \n" -+ " bnez %0, 4f \n" -+ " b 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ " .set noreorder \n" -+ "3: b 5f \n" -+ " move %0, %1 \n" -+ " .set reorder \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ "4: daddu %0, %1, %3 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "5: \n" -+#endif -+ " .set mips0 \n" -+ : "=&r" (result), "=&r" (temp), "=m" (v->counter) -+ : "Ir" (i), "m" (v->counter) -+ : "memory"); -+ } else { -+ unsigned long flags; -+ -+ raw_local_irq_save(flags); -+ __asm__ __volatile__( -+ " ld %0, %1 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "1: dadd %0, %2 \n" -+#else -+ " daddu %0, %2 \n" -+#endif -+ " sd %0, %1 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Note: Dest reg is not modified on overflow */ -+ "2: \n" -+ _ASM_EXTABLE(1b, 2b) -+#endif -+ : "=&r" (result), "+m" (v->counter) : "Ir" (i)); -+ raw_local_irq_restore(flags); -+ } -+ -+ smp_llsc_mb(); -+ -+ return result; -+} -+static __inline__ long atomic64_add_return_unchecked(long i, atomic64_unchecked_t *v) - { - long result; - -@@ -546,7 +1125,97 @@ static __inline__ long atomic64_add_return(long i, atomic64_t * v) - return result; - } - --static __inline__ long atomic64_sub_return(long i, atomic64_t * v) -+static __inline__ long atomic64_sub_return(long i, atomic64_t *v) -+{ -+ long result; -+ long temp; -+ -+ smp_mb__before_llsc(); -+ -+ if (kernel_uses_llsc && R10000_LLSC_WAR) { -+ long temp; + -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: lld %1, %2 # atomic64_sub_return \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "2: dsub %0, %1, %3 \n" -+#else -+ " dsubu %0, %1, %3 \n" -+#endif -+ " scd %0, %2 \n" -+ " beqzl %0, 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ " b 4f \n" -+ " .set noreorder \n" -+ "3: b 5f \n" -+ " move %0, %1 \n" -+ " .set reorder \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ "4: dsubu %0, %1, %3 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "5: \n" -+#endif -+ " .set mips0 \n" -+ : "=&r" (result), "=&r" (temp), "=m" (v->counter) -+ : "Ir" (i), "m" (v->counter) -+ : "memory"); -+ } else if (kernel_uses_llsc) { -+ __asm__ __volatile__( -+ " .set mips3 \n" -+ "1: lld %1, %2 # atomic64_sub_return \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "2: dsub %0, %1, %3 \n" -+#else -+ " dsubu %0, %1, %3 \n" -+#endif -+ " scd %0, %2 \n" -+ " bnez %0, 4f \n" -+ " b 1b \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ " .set noreorder \n" -+ "3: b 5f \n" -+ " move %0, %1 \n" -+ " .set reorder \n" -+ _ASM_EXTABLE(2b, 3b) -+#endif -+ "4: dsubu %0, %1, %3 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ "5: \n" -+#endif -+ " .set mips0 \n" -+ : "=&r" (result), "=&r" (temp), "=m" (v->counter) -+ : "Ir" (i), "m" (v->counter) -+ : "memory"); -+ } else { -+ unsigned long flags; -+ -+ raw_local_irq_save(flags); -+ __asm__ __volatile__( -+ " ld %0, %1 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Exception on overflow. */ -+ "1: dsub %0, %2 \n" -+#else -+ " dsubu %0, %2 \n" -+#endif -+ " sd %0, %1 \n" -+#ifdef CONFIG_PAX_REFCOUNT -+ /* Note: Dest reg is not modified on overflow */ -+ "2: \n" -+ _ASM_EXTABLE(1b, 2b) -+#endif -+ : "=&r" (result), "+m" (v->counter) : "Ir" (i)); -+ raw_local_irq_restore(flags); -+ } -+ -+ smp_llsc_mb(); -+ -+ return result; -+} -+ -+static __inline__ long atomic64_sub_return_unchecked(long i, atomic64_unchecked_t *v) - { - long result; ++#define __ATOMIC64_OP(op, suffix, asm_op, extable) \ ++static inline void atomic64_##op##suffix(long i, atomic64##suffix##_t * v) \ + { \ + if (kernel_uses_llsc && R10000_LLSC_WAR) { \ + long temp; \ + \ + __asm__ __volatile__( \ +- " .set arch=r4000 \n" \ +- "1: lld %0, %1 # atomic64_" #op " \n" \ +- " " #asm_op " %0, %2 \n" \ ++ " .set mips3 \n" \ ++ "1: lld %0, %1 # atomic64_" #op #suffix "\n" \ ++ "2: " #asm_op " %0, %2 \n" \ + " scd %0, %1 \n" \ + " beqzl %0, 1b \n" \ ++ extable \ + " .set mips0 \n" \ + : "=&r" (temp), "+m" (v->counter) \ + : "Ir" (i)); \ + } else if (kernel_uses_llsc) { \ + long temp; \ + \ +- do { \ +- __asm__ __volatile__( \ +- " .set arch=r4000 \n" \ +- " lld %0, %1 # atomic64_" #op "\n" \ +- " " #asm_op " %0, %2 \n" \ +- " scd %0, %1 \n" \ +- " .set mips0 \n" \ +- : "=&r" (temp), "+m" (v->counter) \ +- : "Ir" (i)); \ +- } while (unlikely(!temp)); \ ++ __asm__ __volatile__( \ ++ " .set mips3 \n" \ ++ " lld %0, %1 # atomic64_" #op #suffix "\n" \ ++ "2: " #asm_op " %0, %2 \n" \ ++ " scd %0, %1 \n" \ ++ " beqz %0, 1b \n" \ ++ extable \ ++ " .set mips0 \n" \ ++ : "=&r" (temp), "+m" (v->counter) \ ++ : "Ir" (i)); \ + } else { \ + unsigned long flags; \ + \ + raw_local_irq_save(flags); \ +- v->counter c_op i; \ ++ __asm__ __volatile__( \ ++ "2: " #asm_op " %0, %1 \n" \ ++ extable \ ++ : "+r" (v->counter) : "Ir" (i)); \ + raw_local_irq_restore(flags); \ + } \ + } \ + +-#define ATOMIC64_OP_RETURN(op, c_op, asm_op) \ +-static __inline__ long atomic64_##op##_return(long i, atomic64_t * v) \ ++#define ATOMIC64_OP(op, asm_op) __ATOMIC64_OP(op, , asm_op##u) \ ++ __ATOMIC64_OP(op, _unchecked, asm_op) ++ ++#define __ATOMIC64_OP_RETURN(op, suffix, asm_op, post_op, extable) \ ++static inline long atomic64_##op##_return##suffix(long i, atomic64##suffix##_t * v)\ + { \ + long result; \ + \ +@@ -363,38 +489,48 @@ static __inline__ long atomic64_##op##_return(long i, atomic64_t * v) \ + long temp; \ + \ + __asm__ __volatile__( \ +- " .set arch=r4000 \n" \ ++ " .set mips3 \n" \ + "1: lld %1, %2 # atomic64_" #op "_return\n" \ +- " " #asm_op " %0, %1, %3 \n" \ ++ "2: " #asm_op " %0, %1, %3 \n" \ + " scd %0, %2 \n" \ + " beqzl %0, 1b \n" \ +- " " #asm_op " %0, %1, %3 \n" \ ++ post_op \ ++ extable \ ++ "4: " #asm_op " %0, %1, %3 \n" \ ++ "5: \n" \ + " .set mips0 \n" \ + : "=&r" (result), "=&r" (temp), "+m" (v->counter) \ + : "Ir" (i)); \ + } else if (kernel_uses_llsc) { \ + long temp; \ + \ +- do { \ +- __asm__ __volatile__( \ +- " .set arch=r4000 \n" \ +- " lld %1, %2 # atomic64_" #op "_return\n" \ +- " " #asm_op " %0, %1, %3 \n" \ +- " scd %0, %2 \n" \ +- " .set mips0 \n" \ +- : "=&r" (result), "=&r" (temp), "=m" (v->counter) \ +- : "Ir" (i), "m" (v->counter) \ +- : "memory"); \ +- } while (unlikely(!result)); \ ++ __asm__ __volatile__( \ ++ " .set mips3 \n" \ ++ "1: lld %1, %2 # atomic64_" #op "_return" #suffix "\n" \ ++ "2: " #asm_op " %0, %1, %3 \n" \ ++ " scd %0, %2 \n" \ ++ " beqz %0, 1b \n" \ ++ post_op \ ++ extable \ ++ "4: " #asm_op " %0, %1, %3 \n" \ ++ "5: \n" \ ++ " .set mips0 \n" \ ++ : "=&r" (result), "=&r" (temp), "=m" (v->counter) \ ++ : "Ir" (i), "m" (v->counter) \ ++ : "memory"); \ + \ + result = temp; result c_op i; \ + } else { \ + unsigned long flags; \ + \ + raw_local_irq_save(flags); \ +- result = v->counter; \ +- result c_op i; \ +- v->counter = result; \ ++ __asm__ __volatile__( \ ++ " ld %0, %1 \n" \ ++ "2: " #asm_op " %0, %1, %2 \n" \ ++ " sd %0, %1 \n" \ ++ "3: \n" \ ++ extable \ ++ : "=&r" (result), "+m" (v->counter) : "Ir" (i)); \ + raw_local_irq_restore(flags); \ + } \ + \ +@@ -403,16 +539,23 @@ static __inline__ long atomic64_##op##_return(long i, atomic64_t * v) \ + return result; \ + } + +-#define ATOMIC64_OPS(op, c_op, asm_op) \ +- ATOMIC64_OP(op, c_op, asm_op) \ +- ATOMIC64_OP_RETURN(op, c_op, asm_op) ++#define ATOMIC64_OP_RETURN(op, asm_op) __ATOMIC64_OP_RETURN(op, , asm_op##u, , __OVERFLOW_EXTABLE) \ ++ __ATOMIC64_OP_RETURN(op, _unchecked, asm_op, __OVERFLOW_POST, __OVERFLOW_EXTABLE) + +-ATOMIC64_OPS(add, +=, daddu) +-ATOMIC64_OPS(sub, -=, dsubu) ++#define ATOMIC64_OPS(op, asm_op) \ ++ ATOMIC64_OP(op, asm_op) \ ++ ATOMIC64_OP_RETURN(op, asm_op) ++ ++ATOMIC64_OPS(add, dadd) ++ATOMIC64_OPS(sub, dsub) + + #undef ATOMIC64_OPS + #undef ATOMIC64_OP_RETURN ++#undef __ATOMIC64_OP_RETURN + #undef ATOMIC64_OP ++#undef __ATOMIC64_OP ++#undef __OVERFLOW_EXTABLE ++#undef __OVERFLOW_POST -@@ -605,7 +1274,7 @@ static __inline__ long atomic64_sub_return(long i, atomic64_t * v) + /* + * atomic64_sub_if_positive - conditionally subtract integer from atomic variable +@@ -422,7 +565,7 @@ ATOMIC64_OPS(sub, -=, dsubu) * Atomically test @v and subtract @i if @v is greater or equal than @i. * The function returns the old value of @v minus @i. */ @@ -6658,7 +6247,7 @@ index 37b2bef..02122b8 100644 { long result; -@@ -662,9 +1331,26 @@ static __inline__ long atomic64_sub_if_positive(long i, atomic64_t * v) +@@ -479,9 +622,26 @@ static __inline__ long atomic64_sub_if_positive(long i, atomic64_t * v) return result; } @@ -6688,7 +6277,7 @@ index 37b2bef..02122b8 100644 /** * atomic64_add_unless - add unless the number is a given value -@@ -694,6 +1380,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) +@@ -511,6 +671,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) #define atomic64_dec_return(v) atomic64_sub_return(1, (v)) #define atomic64_inc_return(v) atomic64_add_return(1, (v)) @@ -6696,7 +6285,7 @@ index 37b2bef..02122b8 100644 /* * atomic64_sub_and_test - subtract value from variable and test result -@@ -715,6 +1402,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) +@@ -532,6 +693,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) * other cases. */ #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0) @@ -6704,7 +6293,7 @@ index 37b2bef..02122b8 100644 /* * atomic64_dec_and_test - decrement by 1 and test -@@ -739,6 +1427,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) +@@ -556,6 +718,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) * Atomically increments @v by 1. */ #define atomic64_inc(v) atomic64_add(1, (v)) @@ -6712,7 +6301,7 @@ index 37b2bef..02122b8 100644 /* * atomic64_dec - decrement and test -@@ -747,6 +1436,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) +@@ -564,6 +727,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) * Atomically decrements @v by 1. */ #define atomic64_dec(v) atomic64_sub(1, (v)) @@ -6921,7 +6510,7 @@ index b336037..5b874cc 100644 /* diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h -index df49a30..c0d3dd6 100644 +index d6d1928..ce4f822 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h @@ -20,6 +20,9 @@ @@ -6977,7 +6566,7 @@ index 7de8658..c109224 100644 /* * We stash processor id into a COP0 register to retrieve it fast diff --git a/arch/mips/include/asm/uaccess.h b/arch/mips/include/asm/uaccess.h -index a109510..0a764f7 100644 +index 22a5624..7c96295 100644 --- a/arch/mips/include/asm/uaccess.h +++ b/arch/mips/include/asm/uaccess.h @@ -130,6 +130,7 @@ extern u64 __ua_limit; @@ -6988,32 +6577,6 @@ index a109510..0a764f7 100644 #define access_ok(type, addr, size) \ likely(__access_ok((addr), (size), __access_mask)) -@@ -301,7 +302,8 @@ do { \ - __get_kernel_common((x), size, __gu_ptr); \ - else \ - __get_user_common((x), size, __gu_ptr); \ -- } \ -+ } else \ -+ (x) = 0; \ - \ - __gu_err; \ - }) -@@ -316,6 +318,7 @@ do { \ - " .insn \n" \ - " .section .fixup,\"ax\" \n" \ - "3: li %0, %4 \n" \ -+ " move %1, $0 \n" \ - " j 2b \n" \ - " .previous \n" \ - " .section __ex_table,\"a\" \n" \ -@@ -630,6 +633,7 @@ do { \ - " .insn \n" \ - " .section .fixup,\"ax\" \n" \ - "3: li %0, %4 \n" \ -+ " move %1, $0 \n" \ - " j 2b \n" \ - " .previous \n" \ - " .section __ex_table,\"a\" \n" \ diff --git a/arch/mips/kernel/binfmt_elfn32.c b/arch/mips/kernel/binfmt_elfn32.c index 1188e00..41cf144 100644 --- a/arch/mips/kernel/binfmt_elfn32.c @@ -7154,7 +6717,7 @@ index 636b074..8fbb91f 100644 - return sp & ALMASK; -} diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c -index 645b3c4..909c75a 100644 +index 9d1487d..10c5da5 100644 --- a/arch/mips/kernel/ptrace.c +++ b/arch/mips/kernel/ptrace.c @@ -761,6 +761,10 @@ long arch_ptrace(struct task_struct *child, long request, @@ -7306,10 +6869,10 @@ index 22b19c2..c5cc8c4 100644 info.si_code = FPE_INTOVF; info.si_signo = SIGFPE; diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c -index cd71141..e02c4df 100644 +index e3b21e5..ea5ff7c 100644 --- a/arch/mips/kvm/mips.c +++ b/arch/mips/kvm/mips.c -@@ -839,7 +839,7 @@ long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) +@@ -805,7 +805,7 @@ long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) return r; } @@ -7466,18 +7029,6 @@ index f1baadd..5472dca 100644 int __virt_addr_valid(const volatile void *kaddr) { return pfn_valid(PFN_DOWN(virt_to_phys(kaddr))); -diff --git a/arch/mips/net/bpf_jit.c b/arch/mips/net/bpf_jit.c -index 9f7ecbd..6e370fc 100644 ---- a/arch/mips/net/bpf_jit.c -+++ b/arch/mips/net/bpf_jit.c -@@ -1428,5 +1428,6 @@ void bpf_jit_free(struct bpf_prog *fp) - { - if (fp->jited) - module_free(NULL, fp->bpf_func); -- kfree(fp); -+ -+ bpf_prog_unlock_free(fp); - } diff --git a/arch/mips/pci/pci-octeon.c b/arch/mips/pci/pci-octeon.c index 59cccd9..f39ac2f 100644 --- a/arch/mips/pci/pci-octeon.c @@ -7664,10 +7215,10 @@ index 4ce7a01..449202a 100644 #endif /* __ASM_OPENRISC_CACHE_H */ diff --git a/arch/parisc/include/asm/atomic.h b/arch/parisc/include/asm/atomic.h -index 0be2db2..1b0f26d 100644 +index 226f8ca..9d9b87d 100644 --- a/arch/parisc/include/asm/atomic.h +++ b/arch/parisc/include/asm/atomic.h -@@ -248,6 +248,16 @@ static inline long atomic64_dec_if_positive(atomic64_t *v) +@@ -273,6 +273,16 @@ static inline long atomic64_dec_if_positive(atomic64_t *v) return dec; } @@ -7777,10 +7328,10 @@ index 22b89d1..ce34230 100644 #define PAGE_KERNEL_EXEC __pgprot(_PAGE_KERNEL_EXEC) #define PAGE_KERNEL_RWX __pgprot(_PAGE_KERNEL_RWX) diff --git a/arch/parisc/include/asm/uaccess.h b/arch/parisc/include/asm/uaccess.h -index 4006964..fcb3cc2 100644 +index a5cb070..8604ddc 100644 --- a/arch/parisc/include/asm/uaccess.h +++ b/arch/parisc/include/asm/uaccess.h -@@ -246,10 +246,10 @@ static inline unsigned long __must_check copy_from_user(void *to, +@@ -243,10 +243,10 @@ static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long n) { @@ -8157,10 +7708,10 @@ index 3ca9c11..d163ef7 100644 /* * If for any reason at all we couldn't handle the fault, make diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig -index 4bc7b62..107e0b2 100644 +index 88eace4..4ba2591 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig -@@ -399,6 +399,7 @@ config PPC64_SUPPORTS_MEMORY_FAILURE +@@ -404,6 +404,7 @@ config PPC64_SUPPORTS_MEMORY_FAILURE config KEXEC bool "kexec system call" depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) @@ -8169,7 +7720,7 @@ index 4bc7b62..107e0b2 100644 kexec is a system call that implements the ability to shutdown your current kernel, and to start another kernel. It is like a reboot diff --git a/arch/powerpc/include/asm/atomic.h b/arch/powerpc/include/asm/atomic.h -index 28992d0..434c881 100644 +index 512d278..d31fadd 100644 --- a/arch/powerpc/include/asm/atomic.h +++ b/arch/powerpc/include/asm/atomic.h @@ -12,6 +12,11 @@ @@ -8184,7 +7735,7 @@ index 28992d0..434c881 100644 static __inline__ int atomic_read(const atomic_t *v) { int t; -@@ -21,16 +26,61 @@ static __inline__ int atomic_read(const atomic_t *v) +@@ -21,39 +26,80 @@ static __inline__ int atomic_read(const atomic_t *v) return t; } @@ -8202,199 +7753,102 @@ index 28992d0..434c881 100644 __asm__ __volatile__("stw%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i)); } +-#define ATOMIC_OP(op, asm_op) \ +-static __inline__ void atomic_##op(int a, atomic_t *v) \ +static __inline__ void atomic_set_unchecked(atomic_unchecked_t *v, int i) +{ + __asm__ __volatile__("stw%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i)); +} -+ - static __inline__ void atomic_add(int a, atomic_t *v) - { - int t; - - __asm__ __volatile__( -+"1: lwarx %0,0,%3 # atomic_add\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" mcrxr cr0\n" -+" addo. %0,%2,%0\n" -+" bf 4*cr0+so, 3f\n" -+"2:.long " "0x00c00b00""\n" -+#else -+" add %0,%2,%0\n" -+#endif -+ -+"3:\n" -+ PPC405_ERR77(0,%3) -+" stwcx. %0,0,%3 \n\ -+ bne- 1b" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+"\n4:\n" -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (t), "+m" (v->counter) -+ : "r" (a), "r" (&v->counter) -+ : "cc"); -+} -+ -+static __inline__ void atomic_add_unchecked(int a, atomic_unchecked_t *v) -+{ -+ int t; -+ -+ __asm__ __volatile__( - "1: lwarx %0,0,%3 # atomic_add\n\ - add %0,%2,%0\n" - PPC405_ERR77(0,%3) -@@ -41,12 +91,49 @@ static __inline__ void atomic_add(int a, atomic_t *v) - : "cc"); - } - -+/* Same as atomic_add but return the value */ - static __inline__ int atomic_add_return(int a, atomic_t *v) - { - int t; - - __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER -+"1: lwarx %0,0,%2 # atomic_add_return\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" mcrxr cr0\n" -+" addo. %0,%1,%0\n" -+" bf 4*cr0+so, 3f\n" -+"2:.long " "0x00c00b00""\n" -+#else -+" add %0,%1,%0\n" -+#endif -+ -+"3:\n" -+ PPC405_ERR77(0,%2) -+" stwcx. %0,0,%2 \n\ -+ bne- 1b\n" -+"4:" + +#ifdef CONFIG_PAX_REFCOUNT ++#define __REFCOUNT_OP(op) op##o. ++#define __OVERFLOW_PRE \ ++ " mcrxr cr0\n" ++#define __OVERFLOW_POST \ ++ " bf 4*cr0+so, 3f\n" \ ++ "2: .long 0x00c00b00\n" \ ++ "3:\n" ++#define __OVERFLOW_EXTABLE \ ++ "\n4:\n" + _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ PPC_ATOMIC_EXIT_BARRIER -+ : "=&r" (t) -+ : "r" (a), "r" (&v->counter) -+ : "cc", "memory"); -+ -+ return t; -+} -+ -+/* Same as atomic_add_unchecked but return the value */ -+static __inline__ int atomic_add_return_unchecked(int a, atomic_unchecked_t *v) -+{ -+ int t; -+ -+ __asm__ __volatile__( -+ PPC_ATOMIC_ENTRY_BARRIER - "1: lwarx %0,0,%2 # atomic_add_return\n\ - add %0,%1,%0\n" - PPC405_ERR77(0,%2) -@@ -67,6 +154,37 @@ static __inline__ void atomic_sub(int a, atomic_t *v) - int t; - - __asm__ __volatile__( -+"1: lwarx %0,0,%3 # atomic_sub\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" mcrxr cr0\n" -+" subfo. %0,%2,%0\n" -+" bf 4*cr0+so, 3f\n" -+"2:.long " "0x00c00b00""\n" +#else -+" subf %0,%2,%0\n" ++#define __REFCOUNT_OP(op) op ++#define __OVERFLOW_PRE ++#define __OVERFLOW_POST ++#define __OVERFLOW_EXTABLE +#endif + -+"3:\n" -+ PPC405_ERR77(0,%3) -+" stwcx. %0,0,%3 \n\ -+ bne- 1b\n" -+"4:" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (t), "+m" (v->counter) -+ : "r" (a), "r" (&v->counter) -+ : "cc"); -+} -+ -+static __inline__ void atomic_sub_unchecked(int a, atomic_unchecked_t *v) -+{ -+ int t; -+ -+ __asm__ __volatile__( - "1: lwarx %0,0,%3 # atomic_sub\n\ - subf %0,%2,%0\n" - PPC405_ERR77(0,%3) -@@ -77,12 +195,49 @@ static __inline__ void atomic_sub(int a, atomic_t *v) - : "cc"); - } - -+/* Same as atomic_sub but return the value */ - static __inline__ int atomic_sub_return(int a, atomic_t *v) - { - int t; ++#define __ATOMIC_OP(op, suffix, pre_op, asm_op, post_op, extable) \ ++static inline void atomic_##op##suffix(int a, atomic##suffix##_t *v) \ + { \ + int t; \ + \ + __asm__ __volatile__( \ +-"1: lwarx %0,0,%3 # atomic_" #op "\n" \ ++"1: lwarx %0,0,%3 # atomic_" #op #suffix "\n" \ ++ pre_op \ + #asm_op " %0,%2,%0\n" \ ++ post_op \ + PPC405_ERR77(0,%3) \ + " stwcx. %0,0,%3 \n" \ + " bne- 1b\n" \ ++ extable \ + : "=&r" (t), "+m" (v->counter) \ + : "r" (a), "r" (&v->counter) \ + : "cc"); \ + } \ - __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER -+"1: lwarx %0,0,%2 # atomic_sub_return\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" mcrxr cr0\n" -+" subfo. %0,%1,%0\n" -+" bf 4*cr0+so, 3f\n" -+"2:.long " "0x00c00b00""\n" -+#else -+" subf %0,%1,%0\n" -+#endif -+ -+"3:\n" -+ PPC405_ERR77(0,%2) -+" stwcx. %0,0,%2 \n\ -+ bne- 1b\n" -+ PPC_ATOMIC_EXIT_BARRIER -+"4:" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (t) -+ : "r" (a), "r" (&v->counter) -+ : "cc", "memory"); -+ -+ return t; -+} -+ -+/* Same as atomic_sub_unchecked but return the value */ -+static __inline__ int atomic_sub_return_unchecked(int a, atomic_unchecked_t *v) -+{ -+ int t; +-#define ATOMIC_OP_RETURN(op, asm_op) \ +-static __inline__ int atomic_##op##_return(int a, atomic_t *v) \ ++#define ATOMIC_OP(op, asm_op) __ATOMIC_OP(op, , , asm_op, , ) \ ++ __ATOMIC_OP(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE) + -+ __asm__ __volatile__( -+ PPC_ATOMIC_ENTRY_BARRIER - "1: lwarx %0,0,%2 # atomic_sub_return\n\ - subf %0,%1,%0\n" - PPC405_ERR77(0,%2) -@@ -96,38 +251,23 @@ static __inline__ int atomic_sub_return(int a, atomic_t *v) - return t; - } ++#define __ATOMIC_OP_RETURN(op, suffix, pre_op, asm_op, post_op, extable)\ ++static inline int atomic_##op##_return##suffix(int a, atomic##suffix##_t *v)\ + { \ + int t; \ + \ + __asm__ __volatile__( \ + PPC_ATOMIC_ENTRY_BARRIER \ +-"1: lwarx %0,0,%2 # atomic_" #op "_return\n" \ ++"1: lwarx %0,0,%2 # atomic_" #op "_return" #suffix "\n" \ ++ pre_op \ + #asm_op " %0,%1,%0\n" \ ++ post_op \ + PPC405_ERR77(0,%2) \ + " stwcx. %0,0,%2 \n" \ + " bne- 1b\n" \ ++ extable \ + PPC_ATOMIC_EXIT_BARRIER \ + : "=&r" (t) \ + : "r" (a), "r" (&v->counter) \ +@@ -62,6 +108,9 @@ static __inline__ int atomic_##op##_return(int a, atomic_t *v) \ + return t; \ + } + ++#define ATOMIC_OP_RETURN(op, asm_op) __ATOMIC_OP_RETURN(op, , , asm_op, , )\ ++ __ATOMIC_OP_RETURN(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE) ++ + #define ATOMIC_OPS(op, asm_op) ATOMIC_OP(op, asm_op) ATOMIC_OP_RETURN(op, asm_op) + + ATOMIC_OPS(add, add) +@@ -69,42 +118,29 @@ ATOMIC_OPS(sub, subf) + + #undef ATOMIC_OPS + #undef ATOMIC_OP_RETURN ++#undef __ATOMIC_OP_RETURN + #undef ATOMIC_OP ++#undef __ATOMIC_OP + + #define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) -static __inline__ void atomic_inc(atomic_t *v) -{ - int t; -+/* ++/* + * atomic_inc - increment atomic variable + * @v: pointer of type atomic_t -+ * ++ * + * Automatically increments @v by 1 + */ +#define atomic_inc(v) atomic_add(1, (v)) @@ -8409,13 +7863,13 @@ index 28992d0..434c881 100644 - : "=&r" (t), "+m" (v->counter) - : "r" (&v->counter) - : "cc", "xer"); -+static __inline__ void atomic_inc_unchecked(atomic_unchecked_t *v) ++static inline void atomic_inc_unchecked(atomic_unchecked_t *v) +{ + atomic_add_unchecked(1, v); } -static __inline__ int atomic_inc_return(atomic_t *v) -+static __inline__ int atomic_inc_return_unchecked(atomic_unchecked_t *v) ++static inline int atomic_inc_return_unchecked(atomic_unchecked_t *v) { - int t; - @@ -8436,7 +7890,7 @@ index 28992d0..434c881 100644 } /* -@@ -140,43 +280,38 @@ static __inline__ int atomic_inc_return(atomic_t *v) +@@ -117,43 +153,38 @@ static __inline__ int atomic_inc_return(atomic_t *v) */ #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0) @@ -8503,7 +7957,37 @@ index 28992d0..434c881 100644 /** * __atomic_add_unless - add unless the number is a given value * @v: pointer of type atomic_t -@@ -271,6 +406,11 @@ static __inline__ int atomic_dec_if_positive(atomic_t *v) +@@ -171,11 +202,27 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) + PPC_ATOMIC_ENTRY_BARRIER + "1: lwarx %0,0,%1 # __atomic_add_unless\n\ + cmpw 0,%0,%3 \n\ +- beq- 2f \n\ +- add %0,%2,%0 \n" ++ beq- 2f \n" ++ ++#ifdef CONFIG_PAX_REFCOUNT ++" mcrxr cr0\n" ++" addo. %0,%2,%0\n" ++" bf 4*cr0+so, 4f\n" ++"3:.long " "0x00c00b00""\n" ++"4:\n" ++#else ++ "add %0,%2,%0 \n" ++#endif ++ + PPC405_ERR77(0,%2) + " stwcx. %0,0,%1 \n\ + bne- 1b \n" ++"5:" ++ ++#ifdef CONFIG_PAX_REFCOUNT ++ _ASM_EXTABLE(3b, 5b) ++#endif ++ + PPC_ATOMIC_EXIT_BARRIER + " subf %0,%2,%0 \n\ + 2:" +@@ -248,6 +295,11 @@ static __inline__ int atomic_dec_if_positive(atomic_t *v) } #define atomic_dec_if_positive atomic_dec_if_positive @@ -8515,7 +7999,7 @@ index 28992d0..434c881 100644 #ifdef __powerpc64__ #define ATOMIC64_INIT(i) { (i) } -@@ -284,11 +424,25 @@ static __inline__ long atomic64_read(const atomic64_t *v) +@@ -261,37 +313,60 @@ static __inline__ long atomic64_read(const atomic64_t *v) return t; } @@ -8533,180 +8017,84 @@ index 28992d0..434c881 100644 __asm__ __volatile__("std%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i)); } +-#define ATOMIC64_OP(op, asm_op) \ +-static __inline__ void atomic64_##op(long a, atomic64_t *v) \ +static __inline__ void atomic64_set_unchecked(atomic64_unchecked_t *v, long i) +{ + __asm__ __volatile__("std%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i)); +} + - static __inline__ void atomic64_add(long a, atomic64_t *v) - { - long t; -@@ -303,12 +457,76 @@ static __inline__ void atomic64_add(long a, atomic64_t *v) - : "cc"); - } - -+static __inline__ void atomic64_add_unchecked(long a, atomic64_unchecked_t *v) -+{ -+ long t; -+ -+ __asm__ __volatile__( -+"1: ldarx %0,0,%3 # atomic64_add\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" mcrxr cr0\n" -+" addo. %0,%2,%0\n" -+" bf 4*cr0+so, 3f\n" -+"2:.long " "0x00c00b00""\n" -+#else -+" add %0,%2,%0\n" -+#endif -+ -+"3:\n" -+" stdcx. %0,0,%3 \n\ -+ bne- 1b\n" -+"4:" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (t), "+m" (v->counter) -+ : "r" (a), "r" (&v->counter) -+ : "cc"); -+} -+ - static __inline__ long atomic64_add_return(long a, atomic64_t *v) - { - long t; - - __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER -+"1: ldarx %0,0,%2 # atomic64_add_return\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" mcrxr cr0\n" -+" addo. %0,%1,%0\n" -+" bf 4*cr0+so, 3f\n" -+"2:.long " "0x00c00b00""\n" -+#else -+" add %0,%1,%0\n" -+#endif -+ -+"3:\n" -+" stdcx. %0,0,%2 \n\ -+ bne- 1b\n" -+ PPC_ATOMIC_EXIT_BARRIER -+"4:" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (t) -+ : "r" (a), "r" (&v->counter) -+ : "cc", "memory"); -+ -+ return t; -+} -+ -+static __inline__ long atomic64_add_return_unchecked(long a, atomic64_unchecked_t *v) -+{ -+ long t; -+ -+ __asm__ __volatile__( -+ PPC_ATOMIC_ENTRY_BARRIER - "1: ldarx %0,0,%2 # atomic64_add_return\n\ - add %0,%1,%0\n\ - stdcx. %0,0,%2 \n\ -@@ -328,6 +546,36 @@ static __inline__ void atomic64_sub(long a, atomic64_t *v) - long t; - - __asm__ __volatile__( -+"1: ldarx %0,0,%3 # atomic64_sub\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" mcrxr cr0\n" -+" subfo. %0,%2,%0\n" -+" bf 4*cr0+so, 3f\n" -+"2:.long " "0x00c00b00""\n" -+#else -+" subf %0,%2,%0\n" -+#endif -+ -+"3:\n" -+" stdcx. %0,0,%3 \n\ -+ bne- 1b" -+"4:" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (t), "+m" (v->counter) -+ : "r" (a), "r" (&v->counter) -+ : "cc"); -+} -+ -+static __inline__ void atomic64_sub_unchecked(long a, atomic64_unchecked_t *v) -+{ -+ long t; -+ -+ __asm__ __volatile__( - "1: ldarx %0,0,%3 # atomic64_sub\n\ - subf %0,%2,%0\n\ - stdcx. %0,0,%3 \n\ -@@ -343,6 +591,40 @@ static __inline__ long atomic64_sub_return(long a, atomic64_t *v) ++#define __ATOMIC64_OP(op, suffix, pre_op, asm_op, post_op, extable) \ ++static inline void atomic64_##op##suffix(long a, atomic64##suffix##_t *v)\ + { \ + long t; \ + \ + __asm__ __volatile__( \ + "1: ldarx %0,0,%3 # atomic64_" #op "\n" \ ++ pre_op \ + #asm_op " %0,%2,%0\n" \ ++ post_op \ + " stdcx. %0,0,%3 \n" \ + " bne- 1b\n" \ ++ extable \ + : "=&r" (t), "+m" (v->counter) \ + : "r" (a), "r" (&v->counter) \ + : "cc"); \ + } + +-#define ATOMIC64_OP_RETURN(op, asm_op) \ +-static __inline__ long atomic64_##op##_return(long a, atomic64_t *v) \ ++#define ATOMIC64_OP(op, asm_op) __ATOMIC64_OP(op, , , asm_op, , ) \ ++ __ATOMIC64_OP(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE) ++ ++#define __ATOMIC64_OP_RETURN(op, suffix, pre_op, asm_op, post_op, extable)\ ++static inline long atomic64_##op##_return##suffix(long a, atomic64##suffix##_t *v)\ + { \ + long t; \ + \ + __asm__ __volatile__( \ + PPC_ATOMIC_ENTRY_BARRIER \ + "1: ldarx %0,0,%2 # atomic64_" #op "_return\n" \ ++ pre_op \ + #asm_op " %0,%1,%0\n" \ ++ post_op \ + " stdcx. %0,0,%2 \n" \ + " bne- 1b\n" \ ++ extable \ + PPC_ATOMIC_EXIT_BARRIER \ + : "=&r" (t) \ + : "r" (a), "r" (&v->counter) \ +@@ -300,6 +375,9 @@ static __inline__ long atomic64_##op##_return(long a, atomic64_t *v) \ + return t; \ + } + ++#define ATOMIC64_OP_RETURN(op, asm_op) __ATOMIC64_OP_RETURN(op, , , asm_op, , )\ ++ __ATOMIC64_OP_RETURN(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE) ++ + #define ATOMIC64_OPS(op, asm_op) ATOMIC64_OP(op, asm_op) ATOMIC64_OP_RETURN(op, asm_op) + + ATOMIC64_OPS(add, add) +@@ -307,40 +385,33 @@ ATOMIC64_OPS(sub, subf) + + #undef ATOMIC64_OPS + #undef ATOMIC64_OP_RETURN ++#undef __ATOMIC64_OP_RETURN + #undef ATOMIC64_OP ++#undef __ATOMIC64_OP ++#undef __OVERFLOW_EXTABLE ++#undef __OVERFLOW_POST ++#undef __OVERFLOW_PRE ++#undef __REFCOUNT_OP - __asm__ __volatile__( - PPC_ATOMIC_ENTRY_BARRIER -+"1: ldarx %0,0,%2 # atomic64_sub_return\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+" mcrxr cr0\n" -+" subfo. %0,%1,%0\n" -+" bf 4*cr0+so, 3f\n" -+"2:.long " "0x00c00b00""\n" -+#else -+" subf %0,%1,%0\n" -+#endif -+ -+"3:\n" -+" stdcx. %0,0,%2 \n\ -+ bne- 1b\n" -+ PPC_ATOMIC_EXIT_BARRIER -+"4:" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ _ASM_EXTABLE(2b, 4b) -+#endif -+ -+ : "=&r" (t) -+ : "r" (a), "r" (&v->counter) -+ : "cc", "memory"); -+ -+ return t; -+} -+ -+static __inline__ long atomic64_sub_return_unchecked(long a, atomic64_unchecked_t *v) -+{ -+ long t; -+ -+ __asm__ __volatile__( -+ PPC_ATOMIC_ENTRY_BARRIER - "1: ldarx %0,0,%2 # atomic64_sub_return\n\ - subf %0,%1,%0\n\ - stdcx. %0,0,%2 \n\ -@@ -355,36 +637,23 @@ static __inline__ long atomic64_sub_return(long a, atomic64_t *v) - return t; - } + #define atomic64_add_negative(a, v) (atomic64_add_return((a), (v)) < 0) -static __inline__ void atomic64_inc(atomic64_t *v) -{ - long t; -+/* ++/* + * atomic64_inc - increment atomic variable + * @v: pointer of type atomic64_t -+ * ++ * + * Automatically increments @v by 1 + */ +#define atomic64_inc(v) atomic64_add(1, (v)) @@ -8720,13 +8108,13 @@ index 28992d0..434c881 100644 - : "=&r" (t), "+m" (v->counter) - : "r" (&v->counter) - : "cc", "xer"); -+static __inline__ void atomic64_inc_unchecked(atomic64_unchecked_t *v) ++static inline void atomic64_inc_unchecked(atomic64_unchecked_t *v) +{ + atomic64_add_unchecked(1, v); } -static __inline__ long atomic64_inc_return(atomic64_t *v) -+static __inline__ int atomic64_inc_return_unchecked(atomic64_unchecked_t *v) ++static inline long atomic64_inc_return_unchecked(atomic64_unchecked_t *v) { - long t; - @@ -8746,7 +8134,7 @@ index 28992d0..434c881 100644 } /* -@@ -397,36 +666,18 @@ static __inline__ long atomic64_inc_return(atomic64_t *v) +@@ -353,36 +424,18 @@ static __inline__ long atomic64_inc_return(atomic64_t *v) */ #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0) @@ -8794,7 +8182,7 @@ index 28992d0..434c881 100644 } #define atomic64_sub_and_test(a, v) (atomic64_sub_return((a), (v)) == 0) -@@ -459,6 +710,16 @@ static __inline__ long atomic64_dec_if_positive(atomic64_t *v) +@@ -415,6 +468,16 @@ static __inline__ long atomic64_dec_if_positive(atomic64_t *v) #define atomic64_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n))) #define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) @@ -8811,6 +8199,39 @@ index 28992d0..434c881 100644 /** * atomic64_add_unless - add unless the number is a given value * @v: pointer of type atomic64_t +@@ -430,13 +493,29 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) + + __asm__ __volatile__ ( + PPC_ATOMIC_ENTRY_BARRIER +-"1: ldarx %0,0,%1 # __atomic_add_unless\n\ ++"1: ldarx %0,0,%1 # atomic64_add_unless\n\ + cmpd 0,%0,%3 \n\ +- beq- 2f \n\ +- add %0,%2,%0 \n" ++ beq- 2f \n" ++ ++#ifdef CONFIG_PAX_REFCOUNT ++" mcrxr cr0\n" ++" addo. %0,%2,%0\n" ++" bf 4*cr0+so, 4f\n" ++"3:.long " "0x00c00b00""\n" ++"4:\n" ++#else ++ "add %0,%2,%0 \n" ++#endif ++ + " stdcx. %0,0,%1 \n\ + bne- 1b \n" + PPC_ATOMIC_EXIT_BARRIER ++"5:" ++ ++#ifdef CONFIG_PAX_REFCOUNT ++ _ASM_EXTABLE(3b, 5b) ++#endif ++ + " subf %0,%2,%0 \n\ + 2:" + : "=&r" (t) diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h index bab79a1..4a3eabc 100644 --- a/arch/powerpc/include/asm/barrier.h @@ -9026,10 +8447,10 @@ index 26fe1ae..987ffc5 100644 /* * Use the top bit of the higher-level page table entries to indicate whether diff --git a/arch/powerpc/include/asm/page_64.h b/arch/powerpc/include/asm/page_64.h -index 88693ce..ac6f9ab 100644 +index d908a46..3753f71 100644 --- a/arch/powerpc/include/asm/page_64.h +++ b/arch/powerpc/include/asm/page_64.h -@@ -153,15 +153,18 @@ do { \ +@@ -172,15 +172,18 @@ do { \ * stack by default, so in the absence of a PT_GNU_STACK program header * we turn execute permission off. */ @@ -9083,7 +8504,7 @@ index 4b0be20..c15a27d 100644 static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte) diff --git a/arch/powerpc/include/asm/pgtable.h b/arch/powerpc/include/asm/pgtable.h -index d98c1ec..9f61569 100644 +index 316f9a5..ba05c77 100644 --- a/arch/powerpc/include/asm/pgtable.h +++ b/arch/powerpc/include/asm/pgtable.h @@ -2,6 +2,7 @@ @@ -9093,7 +8514,7 @@ index d98c1ec..9f61569 100644 +#include #ifndef __ASSEMBLY__ #include - #include /* For TASK_SIZE */ + #include diff --git a/arch/powerpc/include/asm/pte-hash32.h b/arch/powerpc/include/asm/pte-hash32.h index 4aad413..85d86bf 100644 --- a/arch/powerpc/include/asm/pte-hash32.h @@ -9107,7 +8528,7 @@ index 4aad413..85d86bf 100644 #define _PAGE_NO_CACHE 0x020 /* I: cache inhibit */ #define _PAGE_WRITETHRU 0x040 /* W: cache write-through */ diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h -index 0c05059..7e056e4 100644 +index c998279..d13a9f8 100644 --- a/arch/powerpc/include/asm/reg.h +++ b/arch/powerpc/include/asm/reg.h @@ -251,6 +251,7 @@ @@ -9404,7 +8825,7 @@ index 9485b43..3bd3c16 100644 static inline unsigned long clear_user(void __user *addr, unsigned long size) diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile -index 670c312..60c2b52 100644 +index 502cf69..822e63b 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -27,6 +27,8 @@ CFLAGS_REMOVE_ftrace.o = -pg -mno-sched-epilog @@ -9417,7 +8838,7 @@ index 670c312..60c2b52 100644 irq.o align.o signal_32.o pmc.o vdso.o \ process.o systbl.o idle.o \ diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S -index bb9cac6..5181202 100644 +index 3e68d1c..72a5ee6 100644 --- a/arch/powerpc/kernel/exceptions-64e.S +++ b/arch/powerpc/kernel/exceptions-64e.S @@ -1010,6 +1010,7 @@ storage_fault_common: @@ -9439,10 +8860,10 @@ index bb9cac6..5181202 100644 ld r4,_DAR(r1) bl bad_page_fault diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S -index 050f79a..f385bfe 100644 +index 72e783e..fe058e2 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S -@@ -1593,10 +1593,10 @@ handle_page_fault: +@@ -1588,10 +1588,10 @@ handle_page_fault: 11: ld r4,_DAR(r1) ld r5,_DSISR(r1) addi r3,r1,STACK_FRAME_OVERHEAD @@ -9455,7 +8876,7 @@ index 050f79a..f385bfe 100644 addi r3,r1,STACK_FRAME_OVERHEAD lwz r4,_DAR(r1) diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c -index 4c5891d..a5d88bb 100644 +index c143835..5a9697f 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c @@ -461,6 +461,8 @@ void migrate_irqs(void) @@ -9468,7 +8889,7 @@ index 4c5891d..a5d88bb 100644 { #ifdef CONFIG_DEBUG_STACKOVERFLOW @@ -473,6 +475,7 @@ static inline void check_stack_overflow(void) - printk("do_IRQ: stack overflow: %ld\n", + pr_err("do_IRQ: stack overflow: %ld\n", sp - sizeof(struct thread_info)); dump_stack(); + gr_handle_kernel_exploit(); @@ -9476,21 +8897,21 @@ index 4c5891d..a5d88bb 100644 #endif } diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c -index 6cff040..74ac5d1b 100644 +index c94d2e0..992a9ce 100644 --- a/arch/powerpc/kernel/module_32.c +++ b/arch/powerpc/kernel/module_32.c -@@ -161,7 +161,7 @@ int module_frob_arch_sections(Elf32_Ehdr *hdr, +@@ -158,7 +158,7 @@ int module_frob_arch_sections(Elf32_Ehdr *hdr, me->arch.core_plt_section = i; } if (!me->arch.core_plt_section || !me->arch.init_plt_section) { -- printk("Module doesn't contain .plt or .init.plt sections.\n"); -+ printk("Module %s doesn't contain .plt or .init.plt sections.\n", me->name); +- pr_err("Module doesn't contain .plt or .init.plt sections.\n"); ++ pr_err("Module $s doesn't contain .plt or .init.plt sections.\n", me->name); return -ENOEXEC; } -@@ -191,11 +191,16 @@ static uint32_t do_plt_call(void *location, +@@ -188,11 +188,16 @@ static uint32_t do_plt_call(void *location, - DEBUGP("Doing plt for call to 0x%x at 0x%x\n", val, (unsigned int)location); + pr_debug("Doing plt for call to 0x%x at 0x%x\n", val, (unsigned int)location); /* Init, or core PLT? */ - if (location >= mod->module_core - && location < mod->module_core + mod->core_size) @@ -9508,7 +8929,7 @@ index 6cff040..74ac5d1b 100644 /* Find this entry, or if that fails, the next avail. entry */ while (entry->jump[0]) { -@@ -299,7 +304,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, +@@ -296,7 +301,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, } #ifdef CONFIG_DYNAMIC_FTRACE module->arch.tramp = @@ -9518,10 +8939,10 @@ index 6cff040..74ac5d1b 100644 sechdrs, module); #endif diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c -index bf44ae9..6d2ce71 100644 +index 923cd2d..ae782a9 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c -@@ -1039,8 +1039,8 @@ void show_regs(struct pt_regs * regs) +@@ -1040,8 +1040,8 @@ void show_regs(struct pt_regs * regs) * Lookup NIP late so we have the best change of getting the * above info out without failing */ @@ -9532,7 +8953,7 @@ index bf44ae9..6d2ce71 100644 #endif show_stack(current, (unsigned long *) regs->gpr[1]); if (!user_mode(regs)) -@@ -1558,10 +1558,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) +@@ -1560,10 +1560,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) newsp = stack[0]; ip = stack[STACK_FRAME_LR_SAVE]; if (!firstframe || ip != lr) { @@ -9545,7 +8966,7 @@ index bf44ae9..6d2ce71 100644 (void *)current->ret_stack[curr_frame].ret); curr_frame--; } -@@ -1581,7 +1581,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) +@@ -1583,7 +1583,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) struct pt_regs *regs = (struct pt_regs *) (sp + STACK_FRAME_OVERHEAD); lr = regs->link; @@ -9554,7 +8975,7 @@ index bf44ae9..6d2ce71 100644 regs->trap, (void *)regs->nip, (void *)lr); firstframe = 1; } -@@ -1617,58 +1617,3 @@ void notrace __ppc64_runlatch_off(void) +@@ -1619,58 +1619,3 @@ void notrace __ppc64_runlatch_off(void) mtspr(SPRN_CTRLT, ctrl); } #endif /* CONFIG_PPC64 */ @@ -9614,7 +9035,7 @@ index bf44ae9..6d2ce71 100644 - return ret; -} diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c -index 2e3d2bf..35df241 100644 +index f21897b..28c0428 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c @@ -1762,6 +1762,10 @@ long arch_ptrace(struct task_struct *child, long request, @@ -9640,7 +9061,7 @@ index 2e3d2bf..35df241 100644 if (test_thread_flag(TIF_SYSCALL_TRACE) && tracehook_report_syscall_entry(regs)) /* -@@ -1808,6 +1817,11 @@ void do_syscall_trace_leave(struct pt_regs *regs) +@@ -1805,6 +1814,11 @@ void do_syscall_trace_leave(struct pt_regs *regs) { int step; @@ -9767,10 +9188,10 @@ index f174351..5722009 100644 rc = vdso_base; goto fail_mmapsem; diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c -index 4c79284..0e462c3 100644 +index c1f8f53..71a3b96 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c -@@ -1338,7 +1338,7 @@ void kvmppc_init_lpid(unsigned long nr_lpids_param) +@@ -1409,7 +1409,7 @@ void kvmppc_init_lpid(unsigned long nr_lpids_param) } EXPORT_SYMBOL_GPL(kvmppc_init_lpid); @@ -9815,13 +9236,13 @@ index 5eea6f3..5d10396 100644 EXPORT_SYMBOL(copy_in_user); diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c -index 51ab9e7..7d3c78b 100644 +index 08d659a..ab329f4 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c @@ -33,6 +33,10 @@ - #include #include #include + #include +#include +#include +#include @@ -9863,7 +9284,7 @@ index 51ab9e7..7d3c78b 100644 /* * Check whether the instruction at regs->nip is a store using * an update addressing form which will update r1. -@@ -216,7 +247,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address, +@@ -228,7 +259,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address, * indicate errors in DSISR but can validly be set in SRR1. */ if (trap == 0x400) @@ -9872,7 +9293,7 @@ index 51ab9e7..7d3c78b 100644 else is_write = error_code & DSISR_ISSTORE; #else -@@ -378,7 +409,7 @@ good_area: +@@ -390,7 +421,7 @@ good_area: * "undefined". Of those that can be set, this is the only * one which seems bad. */ @@ -9881,7 +9302,7 @@ index 51ab9e7..7d3c78b 100644 /* Guarded storage error. */ goto bad_area; #endif /* CONFIG_8xx */ -@@ -393,7 +424,7 @@ good_area: +@@ -405,7 +436,7 @@ good_area: * processors use the same I/D cache coherency mechanism * as embedded. */ @@ -9890,7 +9311,7 @@ index 51ab9e7..7d3c78b 100644 goto bad_area; #endif /* CONFIG_PPC_STD_MMU */ -@@ -483,6 +514,23 @@ bad_area: +@@ -495,6 +526,23 @@ bad_area: bad_area_nosemaphore: /* User mode accesses cause a SIGSEGV */ if (user_mode(regs)) { @@ -9976,10 +9397,10 @@ index cb8bdbe..cde4bc7 100644 } } diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c -index b0c75cc..ef7fb93 100644 +index ded0ea1..f213a9b 100644 --- a/arch/powerpc/mm/slice.c +++ b/arch/powerpc/mm/slice.c -@@ -103,7 +103,7 @@ static int slice_area_is_free(struct mm_struct *mm, unsigned long addr, +@@ -105,7 +105,7 @@ static int slice_area_is_free(struct mm_struct *mm, unsigned long addr, if ((mm->task_size - len) < addr) return 0; vma = find_vma(mm, addr); @@ -10013,18 +9434,6 @@ index b0c75cc..ef7fb93 100644 /* If hint, make sure it matches our alignment restrictions */ if (!fixed && addr) { addr = _ALIGN_UP(addr, 1ul << pshift); -diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c -index 3afa6f4..40c53ff 100644 ---- a/arch/powerpc/net/bpf_jit_comp.c -+++ b/arch/powerpc/net/bpf_jit_comp.c -@@ -697,5 +697,6 @@ void bpf_jit_free(struct bpf_prog *fp) - { - if (fp->jited) - module_free(NULL, fp->bpf_func); -- kfree(fp); -+ -+ bpf_prog_unlock_free(fp); - } diff --git a/arch/powerpc/platforms/cell/celleb_scc_pciex.c b/arch/powerpc/platforms/cell/celleb_scc_pciex.c index 4278acf..67fd0e6 100644 --- a/arch/powerpc/platforms/cell/celleb_scc_pciex.c @@ -10076,10 +9485,10 @@ index fa934fe..c296056 100644 + #endif /* __ARCH_S390_ATOMIC__ */ diff --git a/arch/s390/include/asm/barrier.h b/arch/s390/include/asm/barrier.h -index 19ff956..8d39cb1 100644 +index b5dce65..8aca09a 100644 --- a/arch/s390/include/asm/barrier.h +++ b/arch/s390/include/asm/barrier.h -@@ -37,7 +37,7 @@ +@@ -39,7 +39,7 @@ do { \ compiletime_assert_atomic_type(*p); \ barrier(); \ @@ -10105,10 +9514,10 @@ index 4d7ccac..d03d0ad 100644 #define __read_mostly __attribute__((__section__(".data..read_mostly"))) diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h -index 78f4f87..598ce39 100644 +index f6e43d3..5f57681 100644 --- a/arch/s390/include/asm/elf.h +++ b/arch/s390/include/asm/elf.h -@@ -162,8 +162,14 @@ extern unsigned int vdso_enabled; +@@ -163,8 +163,14 @@ extern unsigned int vdso_enabled; the loader. We need to make sure that it is out of the way of the program that it will "exec", and that there is sufficient room for the brk. */ @@ -10125,14 +9534,14 @@ index 78f4f87..598ce39 100644 /* This yields a mask that user programs can use to figure out what instruction set this CPU supports. */ -@@ -222,9 +228,6 @@ struct linux_binprm; +@@ -223,9 +229,6 @@ struct linux_binprm; #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 int arch_setup_additional_pages(struct linux_binprm *, int); -extern unsigned long arch_randomize_brk(struct mm_struct *mm); -#define arch_randomize_brk arch_randomize_brk - - void *fill_cpu_elf_notes(void *ptr, struct save_area *sa); + void *fill_cpu_elf_notes(void *ptr, struct save_area *sa, __vector128 *vxrs); #endif diff --git a/arch/s390/include/asm/exec.h b/arch/s390/include/asm/exec.h @@ -10263,10 +9672,10 @@ index b89b591..fd9609d 100644 if (r_type == R_390_GOTPC) rc = apply_rela_bits(loc, val, 1, 32, 0); diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c -index 93b9ca4..4ea1454 100644 +index ed84cc2..c05a9d2 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c -@@ -242,37 +242,3 @@ unsigned long get_wchan(struct task_struct *p) +@@ -218,37 +218,3 @@ unsigned long get_wchan(struct task_struct *p) } return 0; } @@ -10352,17 +9761,6 @@ index 9b436c2..54fbf0a 100644 mm->get_unmapped_area = s390_get_unmapped_area_topdown; } } -diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c -index 61e45b7..f2833c5 100644 ---- a/arch/s390/net/bpf_jit_comp.c -+++ b/arch/s390/net/bpf_jit_comp.c -@@ -887,5 +887,5 @@ void bpf_jit_free(struct bpf_prog *fp) - module_free(NULL, header); - - free_filter: -- kfree(fp); -+ bpf_prog_unlock_free(fp); - } diff --git a/arch/score/include/asm/cache.h b/arch/score/include/asm/cache.h index ae3d59f..f65f075 100644 --- a/arch/score/include/asm/cache.h @@ -10503,21 +9901,21 @@ index 6777177..cb5e44f 100644 addr = vm_unmapped_area(&info); } diff --git a/arch/sparc/include/asm/atomic_64.h b/arch/sparc/include/asm/atomic_64.h -index bb894c8..8141d5c 100644 +index 4082749..fd97781 100644 --- a/arch/sparc/include/asm/atomic_64.h +++ b/arch/sparc/include/asm/atomic_64.h -@@ -15,18 +15,40 @@ +@@ -15,18 +15,38 @@ #define ATOMIC64_INIT(i) { (i) } - #define atomic_read(v) (*(volatile int *)&(v)->counter) + #define atomic_read(v) ACCESS_ONCE((v)->counter) +static inline int atomic_read_unchecked(const atomic_unchecked_t *v) +{ -+ return v->counter; ++ return ACCESS_ONCE(v->counter); +} - #define atomic64_read(v) (*(volatile long *)&(v)->counter) + #define atomic64_read(v) ACCESS_ONCE((v)->counter) +static inline long atomic64_read_unchecked(const atomic64_unchecked_t *v) +{ -+ return v->counter; ++ return ACCESS_ONCE(v->counter); +} #define atomic_set(v, i) (((v)->counter) = i) @@ -10531,53 +9929,51 @@ index bb894c8..8141d5c 100644 + v->counter = i; +} - void atomic_add(int, atomic_t *); -+void atomic_add_unchecked(int, atomic_unchecked_t *); - void atomic64_add(long, atomic64_t *); -+void atomic64_add_unchecked(long, atomic64_unchecked_t *); - void atomic_sub(int, atomic_t *); -+void atomic_sub_unchecked(int, atomic_unchecked_t *); - void atomic64_sub(long, atomic64_t *); -+void atomic64_sub_unchecked(long, atomic64_unchecked_t *); +-#define ATOMIC_OP(op) \ +-void atomic_##op(int, atomic_t *); \ +-void atomic64_##op(long, atomic64_t *); ++#define __ATOMIC_OP(op, suffix) \ ++void atomic_##op##suffix(int, atomic##suffix##_t *); \ ++void atomic64_##op##suffix(long, atomic64##suffix##_t *); - int atomic_add_ret(int, atomic_t *); -+int atomic_add_ret_unchecked(int, atomic_unchecked_t *); - long atomic64_add_ret(long, atomic64_t *); -+long atomic64_add_ret_unchecked(long, atomic64_unchecked_t *); - int atomic_sub_ret(int, atomic_t *); - long atomic64_sub_ret(long, atomic64_t *); +-#define ATOMIC_OP_RETURN(op) \ +-int atomic_##op##_return(int, atomic_t *); \ +-long atomic64_##op##_return(long, atomic64_t *); ++#define ATOMIC_OP(op) __ATOMIC_OP(op, ) __ATOMIC_OP(op, _unchecked) ++ ++#define __ATOMIC_OP_RETURN(op, suffix) \ ++int atomic_##op##_return##suffix(int, atomic##suffix##_t *); \ ++long atomic64_##op##_return##suffix(long, atomic64##suffix##_t *); ++ ++#define ATOMIC_OP_RETURN(op) __ATOMIC_OP_RETURN(op, ) __ATOMIC_OP_RETURN(op, _unchecked) -@@ -34,13 +56,29 @@ long atomic64_sub_ret(long, atomic64_t *); - #define atomic64_dec_return(v) atomic64_sub_ret(1, v) + #define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op) - #define atomic_inc_return(v) atomic_add_ret(1, v) -+static inline int atomic_inc_return_unchecked(atomic_unchecked_t *v) -+{ -+ return atomic_add_ret_unchecked(1, v); -+} - #define atomic64_inc_return(v) atomic64_add_ret(1, v) -+static inline long atomic64_inc_return_unchecked(atomic64_unchecked_t *v) -+{ -+ return atomic64_add_ret_unchecked(1, v); -+} +@@ -35,13 +55,23 @@ ATOMIC_OPS(sub) - #define atomic_sub_return(i, v) atomic_sub_ret(i, v) - #define atomic64_sub_return(i, v) atomic64_sub_ret(i, v) + #undef ATOMIC_OPS + #undef ATOMIC_OP_RETURN ++#undef __ATOMIC_OP_RETURN + #undef ATOMIC_OP ++#undef __ATOMIC_OP - #define atomic_add_return(i, v) atomic_add_ret(i, v) -+static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v) + #define atomic_dec_return(v) atomic_sub_return(1, v) + #define atomic64_dec_return(v) atomic64_sub_return(1, v) + + #define atomic_inc_return(v) atomic_add_return(1, v) ++static inline int atomic_inc_return_unchecked(atomic_unchecked_t *v) +{ -+ return atomic_add_ret_unchecked(i, v); ++ return atomic_add_return_unchecked(1, v); +} - #define atomic64_add_return(i, v) atomic64_add_ret(i, v) -+static inline long atomic64_add_return_unchecked(long i, atomic64_unchecked_t *v) + #define atomic64_inc_return(v) atomic64_add_return(1, v) ++static inline long atomic64_inc_return_unchecked(atomic64_unchecked_t *v) +{ -+ return atomic64_add_ret_unchecked(i, v); ++ return atomic64_add_return_unchecked(1, v); +} /* * atomic_inc_and_test - increment and test -@@ -51,6 +89,10 @@ long atomic64_sub_ret(long, atomic64_t *); +@@ -52,6 +82,10 @@ ATOMIC_OPS(sub) * other cases. */ #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0) @@ -10587,9 +9983,9 @@ index bb894c8..8141d5c 100644 +} #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0) - #define atomic_sub_and_test(i, v) (atomic_sub_ret(i, v) == 0) -@@ -60,25 +102,60 @@ long atomic64_sub_ret(long, atomic64_t *); - #define atomic64_dec_and_test(v) (atomic64_sub_ret(1, v) == 0) + #define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0) +@@ -61,25 +95,60 @@ ATOMIC_OPS(sub) + #define atomic64_dec_and_test(v) (atomic64_sub_return(1, v) == 0) #define atomic_inc(v) atomic_add(1, v) +static inline void atomic_inc_unchecked(atomic_unchecked_t *v) @@ -10613,8 +10009,8 @@ index bb894c8..8141d5c 100644 + atomic64_sub_unchecked(1, v); +} - #define atomic_add_negative(i, v) (atomic_add_ret(i, v) < 0) - #define atomic64_add_negative(i, v) (atomic64_add_ret(i, v) < 0) + #define atomic_add_negative(i, v) (atomic_add_return(i, v) < 0) + #define atomic64_add_negative(i, v) (atomic64_add_return(i, v) < 0) #define atomic_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n))) +static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *v, int old, int new) @@ -10652,7 +10048,7 @@ index bb894c8..8141d5c 100644 if (likely(old == c)) break; c = old; -@@ -89,20 +166,35 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) +@@ -90,20 +159,35 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) #define atomic64_cmpxchg(v, o, n) \ ((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n))) #define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) @@ -10772,10 +10168,18 @@ index a3890da..f6a408e 100644 static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) diff --git a/arch/sparc/include/asm/pgalloc_64.h b/arch/sparc/include/asm/pgalloc_64.h -index 5e31871..b71c9d7 100644 +index 5e31871..13469c6 100644 --- a/arch/sparc/include/asm/pgalloc_64.h +++ b/arch/sparc/include/asm/pgalloc_64.h -@@ -38,6 +38,7 @@ static inline void __pud_populate(pud_t *pud, pmd_t *pmd) +@@ -21,6 +21,7 @@ static inline void __pgd_populate(pgd_t *pgd, pud_t *pud) + } + + #define pgd_populate(MM, PGD, PUD) __pgd_populate(PGD, PUD) ++#define pgd_populate_kernel(MM, PGD, PMD) pgd_populate((MM), (PGD), (PMD)) + + static inline pgd_t *pgd_alloc(struct mm_struct *mm) + { +@@ -38,6 +39,7 @@ static inline void __pud_populate(pud_t *pud, pmd_t *pmd) } #define pud_populate(MM, PUD, PMD) __pud_populate(PUD, PMD) @@ -10968,7 +10372,7 @@ index 9689176..63c18ea 100644 unsigned long mask, tmp1, tmp2, result; diff --git a/arch/sparc/include/asm/thread_info_32.h b/arch/sparc/include/asm/thread_info_32.h -index 96efa7a..16858bf 100644 +index 025c984..a216504 100644 --- a/arch/sparc/include/asm/thread_info_32.h +++ b/arch/sparc/include/asm/thread_info_32.h @@ -49,6 +49,8 @@ struct thread_info { @@ -10981,7 +10385,7 @@ index 96efa7a..16858bf 100644 /* diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h -index cc6275c..7eb8e21 100644 +index 798f027..b009941 100644 --- a/arch/sparc/include/asm/thread_info_64.h +++ b/arch/sparc/include/asm/thread_info_64.h @@ -63,6 +63,8 @@ struct thread_info { @@ -11008,7 +10412,7 @@ index cc6275c..7eb8e21 100644 /* NOTE: Thread flags >= 12 should be ones we have no interest * in using in assembly, else we can't use the mask as * an immediate value in instructions such as andcc. -@@ -215,12 +218,18 @@ register struct thread_info *current_thread_info_reg asm("g6"); +@@ -215,12 +218,17 @@ register struct thread_info *current_thread_info_reg asm("g6"); #define _TIF_SYSCALL_AUDIT (1<jited) - module_free(NULL, fp->bpf_func); -- kfree(fp); -+ -+ bpf_prog_unlock_free(fp); - } diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig -index 7fcd492..1311074 100644 +index 7cca418..53fc030 100644 --- a/arch/tile/Kconfig +++ b/arch/tile/Kconfig -@@ -191,6 +191,7 @@ source "kernel/Kconfig.hz" +@@ -192,6 +192,7 @@ source "kernel/Kconfig.hz" config KEXEC bool "kexec system call" @@ -13237,10 +12536,10 @@ index ad8f795..2c7eec6 100644 /* * Memory returned by kmalloc() may be used for DMA, so we must make diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 3632743..630a8bb 100644 +index 41a503c..cf98b04 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -130,7 +130,7 @@ config X86 +@@ -129,7 +129,7 @@ config X86 select RTC_LIB select HAVE_DEBUG_STACKOVERFLOW select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64 @@ -13249,7 +12548,7 @@ index 3632743..630a8bb 100644 select GENERIC_CPU_AUTOPROBE select HAVE_ARCH_AUDITSYSCALL select ARCH_SUPPORTS_ATOMIC_RMW -@@ -258,7 +258,7 @@ config X86_HT +@@ -262,7 +262,7 @@ config X86_HT config X86_32_LAZY_GS def_bool y @@ -13258,7 +12557,7 @@ index 3632743..630a8bb 100644 config ARCH_HWEIGHT_CFLAGS string -@@ -555,6 +555,7 @@ config SCHED_OMIT_FRAME_POINTER +@@ -600,6 +600,7 @@ config SCHED_OMIT_FRAME_POINTER menuconfig HYPERVISOR_GUEST bool "Linux guest support" @@ -13266,7 +12565,15 @@ index 3632743..630a8bb 100644 ---help--- Say Y here to enable options for running Linux under various hyper- visors. This option enables basic hypervisor detection and platform -@@ -1083,6 +1084,7 @@ choice +@@ -973,6 +974,7 @@ config VM86 + + config X86_16BIT + bool "Enable support for 16-bit segments" if EXPERT ++ depends on !GRKERNSEC + default y + ---help--- + This option is required by programs like Wine to run 16-bit +@@ -1128,6 +1130,7 @@ choice config NOHIGHMEM bool "off" @@ -13274,7 +12581,7 @@ index 3632743..630a8bb 100644 ---help--- Linux can use up to 64 Gigabytes of physical memory on x86 systems. However, the address space of 32-bit x86 processors is only 4 -@@ -1119,6 +1121,7 @@ config NOHIGHMEM +@@ -1164,6 +1167,7 @@ config NOHIGHMEM config HIGHMEM4G bool "4GB" @@ -13282,7 +12589,7 @@ index 3632743..630a8bb 100644 ---help--- Select this if you have a 32-bit processor and between 1 and 4 gigabytes of physical RAM. -@@ -1171,7 +1174,7 @@ config PAGE_OFFSET +@@ -1216,7 +1220,7 @@ config PAGE_OFFSET hex default 0xB0000000 if VMSPLIT_3G_OPT default 0x80000000 if VMSPLIT_2G @@ -13291,7 +12598,7 @@ index 3632743..630a8bb 100644 default 0x40000000 if VMSPLIT_1G default 0xC0000000 depends on X86_32 -@@ -1586,6 +1589,7 @@ source kernel/Kconfig.hz +@@ -1631,6 +1635,7 @@ source kernel/Kconfig.hz config KEXEC bool "kexec system call" @@ -13299,7 +12606,7 @@ index 3632743..630a8bb 100644 ---help--- kexec is a system call that implements the ability to shutdown your current kernel, and to start another kernel. It is like a reboot -@@ -1771,7 +1775,9 @@ config X86_NEED_RELOCS +@@ -1816,7 +1821,9 @@ config X86_NEED_RELOCS config PHYSICAL_ALIGN hex "Alignment value to which kernel should be aligned" @@ -13310,7 +12617,7 @@ index 3632743..630a8bb 100644 range 0x2000 0x1000000 if X86_32 range 0x200000 0x1000000 if X86_64 ---help--- -@@ -1854,6 +1860,7 @@ config COMPAT_VDSO +@@ -1899,6 +1906,7 @@ config COMPAT_VDSO def_bool n prompt "Disable the 32-bit vDSO (needed for glibc 2.3.3)" depends on X86_32 || IA32_EMULATION @@ -13372,10 +12679,10 @@ index 61bd2ad..50b625d 100644 This option helps catch unintended modifications to loadable kernel module's text and read-only data. It also prevents execution diff --git a/arch/x86/Makefile b/arch/x86/Makefile -index 60087ca..9d9500e 100644 +index 920e616..ac3d4df 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile -@@ -68,9 +68,6 @@ ifeq ($(CONFIG_X86_32),y) +@@ -65,9 +65,6 @@ ifeq ($(CONFIG_X86_32),y) # CPU-specific tuning. Anything which can be shared with UML should go here. include $(srctree)/arch/x86/Makefile_32.cpu KBUILD_CFLAGS += $(cflags-y) @@ -13385,7 +12692,7 @@ index 60087ca..9d9500e 100644 else BITS := 64 UTS_MACHINE := x86_64 -@@ -111,6 +108,9 @@ else +@@ -107,6 +104,9 @@ else KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args) endif @@ -13395,7 +12702,7 @@ index 60087ca..9d9500e 100644 # Make sure compiler does not have buggy stack-protector support. ifdef CONFIG_CC_STACKPROTECTOR cc_has_sp := $(srctree)/scripts/gcc-x86_$(BITS)-has-stack-protector.sh -@@ -184,6 +184,7 @@ archheaders: +@@ -180,6 +180,7 @@ archheaders: $(Q)$(MAKE) $(build)=arch/x86/syscalls all archprepare: @@ -13403,9 +12710,9 @@ index 60087ca..9d9500e 100644 ifeq ($(CONFIG_KEXEC_FILE),y) $(Q)$(MAKE) $(build)=arch/x86/purgatory arch/x86/purgatory/kexec-purgatory.c endif -@@ -274,3 +275,9 @@ define archhelp +@@ -263,3 +264,9 @@ define archhelp + echo ' FDARGS="..." arguments for the booted kernel' echo ' FDINITRD=file initrd for the booted kernel' - echo ' kvmconfig - Enable additional options for guest kernel support' endef + +define OLD_LD @@ -13414,10 +12721,10 @@ index 60087ca..9d9500e 100644 +*** Please upgrade your binutils to 2.18 or newer +endef diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile -index dbe8dd2..2f0a98f 100644 +index 5b016e2..04ef69c 100644 --- a/arch/x86/boot/Makefile +++ b/arch/x86/boot/Makefile -@@ -52,6 +52,9 @@ $(obj)/cpustr.h: $(obj)/mkcpustr FORCE +@@ -55,6 +55,9 @@ endif # --------------------------------------------------------------------------- KBUILD_CFLAGS := $(USERINCLUDE) $(REALMODE_CFLAGS) -D_SETUP @@ -13463,7 +12770,7 @@ index bd49ec6..94c7f58 100644 } diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile -index 14fe7cb..829b962 100644 +index 45abc36..97bea2d 100644 --- a/arch/x86/boot/compressed/Makefile +++ b/arch/x86/boot/compressed/Makefile @@ -16,6 +16,9 @@ KBUILD_CFLAGS += $(cflags-y) @@ -15285,7 +14592,7 @@ index a039d21..524b8b2 100644 ret ENDPROC(twofish_dec_blk) diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c -index d21ff89..6da8e6e 100644 +index df91466..74b31cb 100644 --- a/arch/x86/ia32/ia32_aout.c +++ b/arch/x86/ia32/ia32_aout.c @@ -153,6 +153,8 @@ static int aout_core_dump(struct coredump_params *cprm) @@ -15298,7 +14605,7 @@ index d21ff89..6da8e6e 100644 set_fs(KERNEL_DS); has_dumped = 1; diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c -index f9e181a..db313b5 100644 +index f9e181a..300544c 100644 --- a/arch/x86/ia32/ia32_signal.c +++ b/arch/x86/ia32/ia32_signal.c @@ -218,7 +218,7 @@ asmlinkage long sys32_sigreturn(void) @@ -15355,12 +14662,13 @@ index f9e181a..db313b5 100644 if (ksig->ka.sa.sa_flags & SA_RESTORER) restorer = ksig->ka.sa.sa_restorer; -- else + else if (current->mm->context.vdso) + /* Return stub is in 32bit vsyscall page */ - restorer = current->mm->context.vdso + - selected_vdso32->sym___kernel_rt_sigreturn; -+ else ++ restorer = (void __force_user *)(current->mm->context.vdso + ++ selected_vdso32->sym___kernel_rt_sigreturn); + else +- restorer = current->mm->context.vdso + +- selected_vdso32->sym___kernel_rt_sigreturn; + restorer = frame->retcode; put_user_ex(ptr_to_compat(restorer), &frame->pretcode); @@ -15374,7 +14682,7 @@ index f9e181a..db313b5 100644 err |= copy_siginfo_to_user32(&frame->info, &ksig->info); diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S -index 92a2e93..cd4d95f 100644 +index ffe7122..899bad3 100644 --- a/arch/x86/ia32/ia32entry.S +++ b/arch/x86/ia32/ia32entry.S @@ -15,8 +15,10 @@ @@ -15538,8 +14846,8 @@ index 92a2e93..cd4d95f 100644 RESTORE_ARGS 0,24,0,0,0,0 xorq %r8,%r8 @@ -205,6 +254,9 @@ sysexit_from_sys_call: - movl %eax,%esi /* 2nd arg: syscall number */ - movl $AUDIT_ARCH_I386,%edi /* 1st arg: audit arch */ + movl %ebx,%esi /* 2nd arg: 1st syscall arg */ + movl %eax,%edi /* 1st arg: syscall number */ call __audit_syscall_entry + + pax_erase_kstack @@ -15861,18 +15169,13 @@ index 20370c6..a2eb9b0 100644 "popl %%ebp\n\t" "popl %%edi\n\t" diff --git a/arch/x86/include/asm/atomic.h b/arch/x86/include/asm/atomic.h -index 6dd1c7dd..2edd216 100644 +index 5e5cd12..3d18208 100644 --- a/arch/x86/include/asm/atomic.h +++ b/arch/x86/include/asm/atomic.h -@@ -24,7 +24,18 @@ - */ - static inline int atomic_read(const atomic_t *v) - { -- return (*(volatile int *)&(v)->counter); -+ return (*(volatile const int *)&(v)->counter); -+} -+ -+/** +@@ -28,6 +28,17 @@ static inline int atomic_read(const atomic_t *v) + } + + /** + * atomic_read_unchecked - read atomic variable + * @v: pointer of type atomic_unchecked_t + * @@ -15880,10 +15183,13 @@ index 6dd1c7dd..2edd216 100644 + */ +static inline int __intentional_overflow(-1) atomic_read_unchecked(const atomic_unchecked_t *v) +{ -+ return (*(volatile const int *)&(v)->counter); - } - - /** ++ return ACCESS_ONCE((v)->counter); ++} ++ ++/** + * atomic_set - set atomic variable + * @v: pointer of type atomic_t + * @i: required value @@ -40,6 +51,18 @@ static inline void atomic_set(atomic_t *v, int i) } @@ -16072,10 +15378,13 @@ index 6dd1c7dd..2edd216 100644 } /** -@@ -154,6 +274,18 @@ static inline int atomic_add_negative(int i, atomic_t *v) +@@ -152,7 +272,19 @@ static inline int atomic_add_negative(int i, atomic_t *v) + * + * Atomically adds @i to @v and returns @i + @v */ - static inline int atomic_add_return(int i, atomic_t *v) - { +-static inline int atomic_add_return(int i, atomic_t *v) ++static inline int __intentional_overflow(-1) atomic_add_return(int i, atomic_t *v) ++{ + return i + xadd_check_overflow(&v->counter, i); +} + @@ -16087,11 +15396,17 @@ index 6dd1c7dd..2edd216 100644 + * Atomically adds @i to @v and returns @i + @v + */ +static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v) -+{ + { return i + xadd(&v->counter, i); } - -@@ -170,9 +302,18 @@ static inline int atomic_sub_return(int i, atomic_t *v) +@@ -164,15 +296,24 @@ static inline int atomic_add_return(int i, atomic_t *v) + * + * Atomically subtracts @i from @v and returns @v - @i + */ +-static inline int atomic_sub_return(int i, atomic_t *v) ++static inline int __intentional_overflow(-1) atomic_sub_return(int i, atomic_t *v) + { + return atomic_add_return(-i, v); } #define atomic_inc_return(v) (atomic_add_return(1, v)) @@ -16205,8 +15520,8 @@ index 6dd1c7dd..2edd216 100644 * atomic_inc_short - increment of a short integer * @v: pointer to type int * -@@ -235,14 +437,37 @@ static inline void atomic_or_long(unsigned long *v1, unsigned long v2) - #endif +@@ -220,14 +422,37 @@ static inline short int atomic_inc_short(short int *v) + } /* These are x86-specific, used by some header files */ -#define atomic_clear_mask(mask, addr) \ @@ -16426,18 +15741,13 @@ index b154de7..bf18a5a 100644 * @i: integer value to subtract * @v: pointer to type atomic64_t diff --git a/arch/x86/include/asm/atomic64_64.h b/arch/x86/include/asm/atomic64_64.h -index 46e9052..ae45136 100644 +index f8d273e..02f39f3 100644 --- a/arch/x86/include/asm/atomic64_64.h +++ b/arch/x86/include/asm/atomic64_64.h -@@ -18,7 +18,19 @@ - */ - static inline long atomic64_read(const atomic64_t *v) - { -- return (*(volatile long *)&(v)->counter); -+ return (*(volatile const long *)&(v)->counter); -+} -+ -+/** +@@ -22,6 +22,18 @@ static inline long atomic64_read(const atomic64_t *v) + } + + /** + * atomic64_read_unchecked - read atomic64 variable + * @v: pointer of type atomic64_unchecked_t + * @@ -16446,10 +15756,13 @@ index 46e9052..ae45136 100644 + */ +static inline long __intentional_overflow(-1) atomic64_read_unchecked(const atomic64_unchecked_t *v) +{ -+ return (*(volatile const long *)&(v)->counter); - } - - /** ++ return ACCESS_ONCE((v)->counter); ++} ++ ++/** + * atomic64_set - set atomic64 variable + * @v: pointer to type atomic64_t + * @i: required value @@ -34,6 +46,18 @@ static inline void atomic64_set(atomic64_t *v, long i) } @@ -16862,10 +16175,10 @@ index 9863ee3..4a1f8e1 100644 return _PAGE_CACHE_WC; else if (pg_flags == _PGMT_UC_MINUS) diff --git a/arch/x86/include/asm/calling.h b/arch/x86/include/asm/calling.h -index cb4c73b..c473c29 100644 +index 76659b6..72b8439 100644 --- a/arch/x86/include/asm/calling.h +++ b/arch/x86/include/asm/calling.h -@@ -82,103 +82,113 @@ For 32-bit we have the following conventions - kernel is built with +@@ -82,107 +82,117 @@ For 32-bit we have the following conventions - kernel is built with #define RSP 152 #define SS 160 @@ -16873,7 +16186,7 @@ index cb4c73b..c473c29 100644 -#define SWFRAME ORIG_RAX +#define ARGOFFSET R15 - .macro SAVE_ARGS addskip=0, save_rcx=1, save_r891011=1 + .macro SAVE_ARGS addskip=0, save_rcx=1, save_r891011=1, rax_enosys=0 - subq $9*8+\addskip, %rsp - CFI_ADJUST_CFA_OFFSET 9*8+\addskip - movq_cfi rdi, 8*8 @@ -16890,8 +16203,13 @@ index cb4c73b..c473c29 100644 + movq_cfi rcx, RCX .endif + .if \rax_enosys +- movq $-ENOSYS, 4*8(%rsp) ++ movq $-ENOSYS, RAX(%rsp) + .else - movq_cfi rax, 4*8 + movq_cfi rax, RAX + .endif .if \save_r891011 - movq_cfi r8, 3*8 @@ -16984,7 +16302,7 @@ index cb4c73b..c473c29 100644 .if \skiprax .else - movq \offset+72(%rsp), %rax -+ movq RAX(%rsp), %rax ++ movq ORIG_RAX(%rsp), %rax .endif .endm @@ -17150,18 +16468,19 @@ index 59c6c40..5e0b22c 100644 struct compat_timespec { compat_time_t tv_sec; diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h -index bb9b258..5fad1bf 100644 +index 0bb1335..8f1aec7 100644 --- a/arch/x86/include/asm/cpufeature.h +++ b/arch/x86/include/asm/cpufeature.h -@@ -203,14 +203,14 @@ +@@ -207,7 +207,7 @@ #define X86_FEATURE_PAUSEFILTER ( 8*32+13) /* AMD filtered pause intercept */ #define X86_FEATURE_PFTHRESHOLD ( 8*32+14) /* AMD pause filter threshold */ - + #define X86_FEATURE_VMMCALL ( 8*32+15) /* Prefer vmmcall to vmcall */ - +#define X86_FEATURE_STRONGUDEREF (8*32+31) /* PaX PCID based strong UDEREF */ + /* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */ #define X86_FEATURE_FSGSBASE ( 9*32+ 0) /* {RD/WR}{FS/GS}BASE instructions*/ - #define X86_FEATURE_TSC_ADJUST ( 9*32+ 1) /* TSC adjustment MSR 0x3b */ +@@ -215,7 +215,7 @@ #define X86_FEATURE_BMI1 ( 9*32+ 3) /* 1st group bit manipulation extensions */ #define X86_FEATURE_HLE ( 9*32+ 4) /* Hardware Lock Elision */ #define X86_FEATURE_AVX2 ( 9*32+ 5) /* AVX2 instructions */ @@ -17170,15 +16489,15 @@ index bb9b258..5fad1bf 100644 #define X86_FEATURE_BMI2 ( 9*32+ 8) /* 2nd group bit manipulation extensions */ #define X86_FEATURE_ERMS ( 9*32+ 9) /* Enhanced REP MOVSB/STOSB */ #define X86_FEATURE_INVPCID ( 9*32+10) /* Invalidate Processor Context ID */ -@@ -370,6 +370,7 @@ extern const char * const x86_bug_flags[NBUGINTS*32]; - #undef cpu_has_centaur_mcr - #define cpu_has_centaur_mcr 0 - +@@ -383,6 +383,7 @@ extern const char * const x86_bug_flags[NBUGINTS*32]; + #define cpu_has_cx16 boot_cpu_has(X86_FEATURE_CX16) + #define cpu_has_eager_fpu boot_cpu_has(X86_FEATURE_EAGER_FPU) + #define cpu_has_topoext boot_cpu_has(X86_FEATURE_TOPOEXT) +#define cpu_has_pcid boot_cpu_has(X86_FEATURE_PCID) - #endif /* CONFIG_X86_64 */ #if __GNUC__ >= 4 -@@ -422,7 +423,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit) + extern void warn_pre_alternatives(void); +@@ -434,7 +435,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit) #ifdef CONFIG_X86_DEBUG_STATIC_CPU_HAS t_warn: @@ -17188,7 +16507,7 @@ index bb9b258..5fad1bf 100644 return false; #endif -@@ -442,7 +444,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit) +@@ -454,7 +456,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit) ".section .discard,\"aw\",@progbits\n" " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */ ".previous\n" @@ -17197,7 +16516,7 @@ index bb9b258..5fad1bf 100644 "3: movb $1,%0\n" "4:\n" ".previous\n" -@@ -479,7 +481,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit) +@@ -491,7 +493,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit) " .byte 2b - 1b\n" /* src len */ " .byte 4f - 3f\n" /* repl len */ ".previous\n" @@ -17206,7 +16525,7 @@ index bb9b258..5fad1bf 100644 "3: .byte 0xe9\n .long %l[t_no] - 2b\n" "4:\n" ".previous\n" -@@ -512,7 +514,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit) +@@ -524,7 +526,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit) ".section .discard,\"aw\",@progbits\n" " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */ ".previous\n" @@ -17215,7 +16534,7 @@ index bb9b258..5fad1bf 100644 "3: movb $0,%0\n" "4:\n" ".previous\n" -@@ -526,7 +528,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit) +@@ -538,7 +540,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit) ".section .discard,\"aw\",@progbits\n" " .byte 0xff + (6f-5f) - (4b-3b)\n" /* size check */ ".previous\n" @@ -17611,7 +16930,7 @@ index 1c7eefe..d0e4702 100644 }; diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h -index 412ecec..c1ea43a 100644 +index e97622f..d0ba77a 100644 --- a/arch/x86/include/asm/fpu-internal.h +++ b/arch/x86/include/asm/fpu-internal.h @@ -124,8 +124,11 @@ static inline void sanitize_i387_state(struct task_struct *tsk) @@ -17810,10 +17129,10 @@ index 0a8b519..80e7d5b 100644 #define INTERRUPT_RETURN iret #define ENABLE_INTERRUPTS_SYSEXIT sti; sysexit diff --git a/arch/x86/include/asm/kprobes.h b/arch/x86/include/asm/kprobes.h -index 53cdfb2..d1369e6 100644 +index 4421b5d..8543006 100644 --- a/arch/x86/include/asm/kprobes.h +++ b/arch/x86/include/asm/kprobes.h -@@ -38,13 +38,8 @@ typedef u8 kprobe_opcode_t; +@@ -37,13 +37,8 @@ typedef u8 kprobe_opcode_t; #define RELATIVEJUMP_SIZE 5 #define RELATIVECALL_OPCODE 0xe8 #define RELATIVE_ADDR_SIZE 4 @@ -17829,6 +17148,18 @@ index 53cdfb2..d1369e6 100644 #define flush_insn_slot(p) do { } while (0) +diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h +index 6ed0c30..74fb6c3 100644 +--- a/arch/x86/include/asm/kvm_host.h ++++ b/arch/x86/include/asm/kvm_host.h +@@ -51,6 +51,7 @@ + | X86_CR0_NW | X86_CR0_CD | X86_CR0_PG)) + + #define CR3_L_MODE_RESERVED_BITS 0xFFFFFF0000000000ULL ++#define CR3_PCID_INVD (1UL << 63) + #define CR4_RESERVED_BITS \ + (~(unsigned long)(X86_CR4_VME | X86_CR4_PVI | X86_CR4_TSD | X86_CR4_DE\ + | X86_CR4_PSE | X86_CR4_PAE | X86_CR4_MCE \ diff --git a/arch/x86/include/asm/local.h b/arch/x86/include/asm/local.h index 4ad6560..75c7bdd 100644 --- a/arch/x86/include/asm/local.h @@ -18880,7 +18211,7 @@ index aa97a07..5c53c32 100644 static inline int page_level_shift(enum pg_level level) { diff --git a/arch/x86/include/asm/pgtable_32.h b/arch/x86/include/asm/pgtable_32.h -index 9ee3221..b979c6b 100644 +index b6c0b40..3535d47 100644 --- a/arch/x86/include/asm/pgtable_32.h +++ b/arch/x86/include/asm/pgtable_32.h @@ -25,9 +25,6 @@ @@ -18893,7 +18224,7 @@ index 9ee3221..b979c6b 100644 static inline void pgtable_cache_init(void) { } static inline void check_pgt_cache(void) { } void paging_init(void); -@@ -48,6 +45,12 @@ extern void set_pmd_pfn(unsigned long, unsigned long, pgprot_t); +@@ -45,6 +42,12 @@ void paging_init(void); # include #endif @@ -18906,7 +18237,7 @@ index 9ee3221..b979c6b 100644 #if defined(CONFIG_HIGHPTE) #define pte_offset_map(dir, address) \ ((pte_t *)kmap_atomic(pmd_page(*(dir))) + \ -@@ -62,12 +65,17 @@ extern void set_pmd_pfn(unsigned long, unsigned long, pgprot_t); +@@ -59,12 +62,17 @@ void paging_init(void); /* Clear a kernel PTE and flush it from the TLB */ #define kpte_clear_flush(ptep, vaddr) \ do { \ @@ -18958,7 +18289,7 @@ index ed5903b..c7fe163 100644 #define MODULES_END VMALLOC_END #define MODULES_LEN (MODULES_VADDR - MODULES_END) diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h -index 3874693..d7906ac 100644 +index 4572b2f..4430113 100644 --- a/arch/x86/include/asm/pgtable_64.h +++ b/arch/x86/include/asm/pgtable_64.h @@ -16,11 +16,16 @@ @@ -19034,10 +18365,10 @@ index 7166e25..baaa6fe 100644 #endif /* _ASM_X86_PGTABLE_64_DEFS_H */ diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h -index f216963..6bd7c21 100644 +index 0778964..0e94758 100644 --- a/arch/x86/include/asm/pgtable_types.h +++ b/arch/x86/include/asm/pgtable_types.h -@@ -111,8 +111,10 @@ +@@ -110,8 +110,10 @@ #if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE) #define _PAGE_NX (_AT(pteval_t, 1) << _PAGE_BIT_NX) @@ -19049,7 +18380,7 @@ index f216963..6bd7c21 100644 #endif #define _PAGE_FILE (_AT(pteval_t, 1) << _PAGE_BIT_FILE) -@@ -151,6 +153,9 @@ +@@ -150,6 +152,9 @@ #define PAGE_READONLY_EXEC __pgprot(_PAGE_PRESENT | _PAGE_USER | \ _PAGE_ACCESSED) @@ -19059,7 +18390,7 @@ index f216963..6bd7c21 100644 #define __PAGE_KERNEL_EXEC \ (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_GLOBAL) #define __PAGE_KERNEL (__PAGE_KERNEL_EXEC | _PAGE_NX) -@@ -161,7 +166,7 @@ +@@ -160,7 +165,7 @@ #define __PAGE_KERNEL_WC (__PAGE_KERNEL | _PAGE_CACHE_WC) #define __PAGE_KERNEL_NOCACHE (__PAGE_KERNEL | _PAGE_PCD | _PAGE_PWT) #define __PAGE_KERNEL_UC_MINUS (__PAGE_KERNEL | _PAGE_PCD) @@ -19068,7 +18399,7 @@ index f216963..6bd7c21 100644 #define __PAGE_KERNEL_VVAR (__PAGE_KERNEL_RO | _PAGE_USER) #define __PAGE_KERNEL_VVAR_NOCACHE (__PAGE_KERNEL_VVAR | _PAGE_PCD | _PAGE_PWT) #define __PAGE_KERNEL_LARGE (__PAGE_KERNEL | _PAGE_PSE) -@@ -218,7 +223,7 @@ +@@ -217,7 +222,7 @@ #ifdef CONFIG_X86_64 #define __PAGE_KERNEL_IDENT_LARGE_EXEC __PAGE_KERNEL_LARGE_EXEC #else @@ -19077,7 +18408,7 @@ index f216963..6bd7c21 100644 #define PDE_IDENT_ATTR 0x063 /* PRESENT+RW+DIRTY+ACCESSED */ #define PGD_IDENT_ATTR 0x001 /* PRESENT (no other attributes) */ #endif -@@ -257,7 +262,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd) +@@ -256,7 +261,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd) { return native_pgd_val(pgd) & PTE_FLAGS_MASK; } @@ -19095,7 +18426,7 @@ index f216963..6bd7c21 100644 #if PAGETABLE_LEVELS > 3 typedef struct { pudval_t pud; } pud_t; -@@ -271,8 +286,6 @@ static inline pudval_t native_pud_val(pud_t pud) +@@ -270,8 +285,6 @@ static inline pudval_t native_pud_val(pud_t pud) return pud.pud; } #else @@ -19104,7 +18435,7 @@ index f216963..6bd7c21 100644 static inline pudval_t native_pud_val(pud_t pud) { return native_pgd_val(pud.pgd); -@@ -292,8 +305,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd) +@@ -291,8 +304,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd) return pmd.pmd; } #else @@ -19113,7 +18444,7 @@ index f216963..6bd7c21 100644 static inline pmdval_t native_pmd_val(pmd_t pmd) { return native_pgd_val(pmd.pud.pgd); -@@ -333,7 +344,6 @@ typedef struct page *pgtable_t; +@@ -346,7 +357,6 @@ typedef struct page *pgtable_t; extern pteval_t __supported_pte_mask; extern void set_nx(void); @@ -19122,7 +18453,7 @@ index f216963..6bd7c21 100644 #define pgprot_writecombine pgprot_writecombine extern pgprot_t pgprot_writecombine(pgprot_t prot); diff --git a/arch/x86/include/asm/preempt.h b/arch/x86/include/asm/preempt.h -index 7024c12..71c46b9 100644 +index 4008734..48f0d81 100644 --- a/arch/x86/include/asm/preempt.h +++ b/arch/x86/include/asm/preempt.h @@ -87,7 +87,7 @@ static __always_inline void __preempt_count_sub(int val) @@ -19330,10 +18661,10 @@ index eb71ec7..f06532a 100644 void df_debug(struct pt_regs *regs, long error_code); #endif /* _ASM_X86_PROCESSOR_H */ diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h -index 6205f0c..688a3a9 100644 +index 86fc2bb..bd5049a 100644 --- a/arch/x86/include/asm/ptrace.h +++ b/arch/x86/include/asm/ptrace.h -@@ -84,28 +84,29 @@ static inline unsigned long regs_return_value(struct pt_regs *regs) +@@ -89,28 +89,29 @@ static inline unsigned long regs_return_value(struct pt_regs *regs) } /* @@ -19369,7 +18700,7 @@ index 6205f0c..688a3a9 100644 #endif } -@@ -121,15 +122,16 @@ static inline int v8086_mode(struct pt_regs *regs) +@@ -126,15 +127,16 @@ static inline int v8086_mode(struct pt_regs *regs) #ifdef CONFIG_X86_64 static inline bool user_64bit_mode(struct pt_regs *regs) { @@ -19388,7 +18719,7 @@ index 6205f0c..688a3a9 100644 #endif } -@@ -180,9 +182,11 @@ static inline unsigned long regs_get_register(struct pt_regs *regs, +@@ -185,9 +187,11 @@ static inline unsigned long regs_get_register(struct pt_regs *regs, * Traps from the kernel do not save sp and ss. * Use the helper function to retrieve sp. */ @@ -19887,7 +19218,7 @@ index 8d3120f..352b440 100644 static __always_inline void clac(void) diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h -index 8cd27e0..7f05ec8 100644 +index 8cd1cc3..827e09e 100644 --- a/arch/x86/include/asm/smp.h +++ b/arch/x86/include/asm/smp.h @@ -35,7 +35,7 @@ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map); @@ -19908,7 +19239,7 @@ index 8cd27e0..7f05ec8 100644 /* Globals due to paravirt */ extern void set_cpu_sibling_map(int cpu); -@@ -190,14 +190,8 @@ extern unsigned disabled_cpus; +@@ -191,14 +191,8 @@ extern unsigned disabled_cpus; extern int safe_smp_processor_id(void); #elif defined(CONFIG_X86_64_SMP) @@ -19925,72 +19256,6 @@ index 8cd27e0..7f05ec8 100644 #define safe_smp_processor_id() smp_processor_id() #endif -diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h -index 54f1c80..39362a5 100644 ---- a/arch/x86/include/asm/spinlock.h -+++ b/arch/x86/include/asm/spinlock.h -@@ -223,6 +223,14 @@ static inline int arch_write_can_lock(arch_rwlock_t *lock) - static inline void arch_read_lock(arch_rwlock_t *rw) - { - asm volatile(LOCK_PREFIX READ_LOCK_SIZE(dec) " (%0)\n\t" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ "jno 0f\n" -+ LOCK_PREFIX READ_LOCK_SIZE(inc) " (%0)\n" -+ "int $4\n0:\n" -+ _ASM_EXTABLE(0b, 0b) -+#endif -+ - "jns 1f\n" - "call __read_lock_failed\n\t" - "1:\n" -@@ -232,6 +240,14 @@ static inline void arch_read_lock(arch_rwlock_t *rw) - static inline void arch_write_lock(arch_rwlock_t *rw) - { - asm volatile(LOCK_PREFIX WRITE_LOCK_SUB(%1) "(%0)\n\t" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ "jno 0f\n" -+ LOCK_PREFIX WRITE_LOCK_ADD(%1) "(%0)\n" -+ "int $4\n0:\n" -+ _ASM_EXTABLE(0b, 0b) -+#endif -+ - "jz 1f\n" - "call __write_lock_failed\n\t" - "1:\n" -@@ -261,13 +277,29 @@ static inline int arch_write_trylock(arch_rwlock_t *lock) - - static inline void arch_read_unlock(arch_rwlock_t *rw) - { -- asm volatile(LOCK_PREFIX READ_LOCK_SIZE(inc) " %0" -+ asm volatile(LOCK_PREFIX READ_LOCK_SIZE(inc) " %0\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ "jno 0f\n" -+ LOCK_PREFIX READ_LOCK_SIZE(dec) " %0\n" -+ "int $4\n0:\n" -+ _ASM_EXTABLE(0b, 0b) -+#endif -+ - :"+m" (rw->lock) : : "memory"); - } - - static inline void arch_write_unlock(arch_rwlock_t *rw) - { -- asm volatile(LOCK_PREFIX WRITE_LOCK_ADD(%1) "%0" -+ asm volatile(LOCK_PREFIX WRITE_LOCK_ADD(%1) "%0\n" -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ "jno 0f\n" -+ LOCK_PREFIX WRITE_LOCK_SUB(%1) "%0\n" -+ "int $4\n0:\n" -+ _ASM_EXTABLE(0b, 0b) -+#endif -+ - : "+m" (rw->write) : "i" (RW_LOCK_BIAS) : "memory"); - } - #else diff --git a/arch/x86/include/asm/stackprotector.h b/arch/x86/include/asm/stackprotector.h index 6a99859..03cb807 100644 --- a/arch/x86/include/asm/stackprotector.h @@ -20089,7 +19354,7 @@ index d7f3b3b..3cc39f1 100644 __switch_canary_iparam \ : "memory", "cc" __EXTRA_CLOBBER) diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h -index 8540538..4b0b5e9 100644 +index 547e344..6be1175 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h @@ -24,7 +24,6 @@ struct exec_domain; @@ -21288,10 +20553,10 @@ index 7e7a79a..0824666 100644 } diff --git a/arch/x86/include/uapi/asm/e820.h b/arch/x86/include/uapi/asm/e820.h -index bbae024..e1528f9 100644 +index d993e33..8db1b18 100644 --- a/arch/x86/include/uapi/asm/e820.h +++ b/arch/x86/include/uapi/asm/e820.h -@@ -63,7 +63,7 @@ struct e820map { +@@ -58,7 +58,7 @@ struct e820map { #define ISA_START_ADDRESS 0xa0000 #define ISA_END_ADDRESS 0x100000 @@ -21313,7 +20578,7 @@ index 7b0a55a..ad115bf 100644 /* top of stack page */ diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile -index ada2e2d..ca69e16 100644 +index 8f1e774..9b4c381 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -24,7 +24,7 @@ obj-y += time.o ioport.o ldt.o dumpstack.o nmi.o @@ -21552,7 +20817,7 @@ index 703130f..27a155d 100644 bp_int3_handler = handler; bp_int3_addr = (u8 *)addr + sizeof(int3); diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c -index 24b5894..6d9701b 100644 +index ba6cc04..06fd971 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -201,7 +201,7 @@ int first_system_vector = 0xfe; @@ -21622,7 +20887,7 @@ index c4a8d63..fe893ac 100644 .name = "bigsmp", .probe = probe_bigsmp, diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c -index 337ce5a..c8d98b4 100644 +index 1183d54..6158e47 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c @@ -1230,7 +1230,7 @@ out: @@ -21675,7 +20940,7 @@ index bda4886..f9c7195 100644 .name = "default", .probe = probe_default, diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c -index 6ce600f..cb44af8 100644 +index e658f21..b695a1a 100644 --- a/arch/x86/kernel/apic/x2apic_cluster.c +++ b/arch/x86/kernel/apic/x2apic_cluster.c @@ -182,7 +182,7 @@ update_clusterinfo(struct notifier_block *nfb, unsigned long action, void *hcpu) @@ -21710,10 +20975,10 @@ index 6fae733..5ca17af 100644 .name = "physical x2apic", .probe = x2apic_phys_probe, diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c -index 004f017..8fbc8b5 100644 +index 8e9dcfd..c61b3e4 100644 --- a/arch/x86/kernel/apic/x2apic_uv_x.c +++ b/arch/x86/kernel/apic/x2apic_uv_x.c -@@ -350,7 +350,7 @@ static int uv_probe(void) +@@ -348,7 +348,7 @@ static int uv_probe(void) return apic == &apic_x2apic_uv_x; } @@ -21850,7 +21115,7 @@ index e7c798b..2b2019b 100644 BLANK(); diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile -index 7fd54f0..0691410 100644 +index e27b49d..85b106c 100644 --- a/arch/x86/kernel/cpu/Makefile +++ b/arch/x86/kernel/cpu/Makefile @@ -8,10 +8,6 @@ CFLAGS_REMOVE_common.o = -pg @@ -21862,13 +21127,13 @@ index 7fd54f0..0691410 100644 -CFLAGS_common.o := $(nostackp) - obj-y := intel_cacheinfo.o scattered.o topology.o - obj-y += proc.o capflags.o powerflags.o common.o + obj-y += common.o obj-y += rdrand.o diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c -index 60e5497..8efbd2f 100644 +index 813d29d..6e542d4 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c -@@ -711,7 +711,7 @@ static void init_amd(struct cpuinfo_x86 *c) +@@ -718,7 +718,7 @@ static void init_amd(struct cpuinfo_x86 *c) static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size) { /* AMD errata T13 (order #21922) */ @@ -21878,7 +21143,7 @@ index 60e5497..8efbd2f 100644 if (c->x86_model == 3 && c->x86_mask == 0) size = 64; diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c -index 3126558..a1028f6 100644 +index cfa9b5b..19b5084 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -90,60 +90,6 @@ static const struct cpu_dev default_cpu = { @@ -21941,8 +21206,8 @@ index 3126558..a1028f6 100644 - static int __init x86_xsave_setup(char *s) { - setup_clear_cpu_cap(X86_FEATURE_XSAVE); -@@ -303,6 +249,59 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c) + if (strlen(s)) +@@ -305,6 +251,59 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c) } } @@ -22002,7 +21267,7 @@ index 3126558..a1028f6 100644 /* * Some CPU features depend on higher CPUID levels, which may not always * be available due to CPUID level capping or broken virtualization -@@ -403,7 +402,7 @@ void switch_to_new_gdt(int cpu) +@@ -405,7 +404,7 @@ void switch_to_new_gdt(int cpu) { struct desc_ptr gdt_descr; @@ -22011,7 +21276,7 @@ index 3126558..a1028f6 100644 gdt_descr.size = GDT_SIZE - 1; load_gdt(&gdt_descr); /* Reload the per-cpu base */ -@@ -893,6 +892,10 @@ static void identify_cpu(struct cpuinfo_x86 *c) +@@ -895,6 +894,10 @@ static void identify_cpu(struct cpuinfo_x86 *c) setup_smep(c); setup_smap(c); @@ -22022,7 +21287,7 @@ index 3126558..a1028f6 100644 /* * The vendor-specific functions might have changed features. * Now we do "generic changes." -@@ -901,6 +904,10 @@ static void identify_cpu(struct cpuinfo_x86 *c) +@@ -903,6 +906,10 @@ static void identify_cpu(struct cpuinfo_x86 *c) /* Filter out anything that depends on CPUID levels we don't have */ filter_cpuid_features(c, true); @@ -22033,7 +21298,7 @@ index 3126558..a1028f6 100644 /* If the model name is still unset, do table lookup. */ if (!c->x86_model_id[0]) { const char *p; -@@ -981,7 +988,7 @@ static void syscall32_cpu_init(void) +@@ -985,7 +992,7 @@ static void syscall32_cpu_init(void) void enable_sep_cpu(void) { int cpu = get_cpu(); @@ -22042,7 +21307,7 @@ index 3126558..a1028f6 100644 if (!boot_cpu_has(X86_FEATURE_SEP)) { put_cpu(); -@@ -1121,14 +1128,16 @@ static __init int setup_disablecpuid(char *arg) +@@ -1125,14 +1132,16 @@ static __init int setup_disablecpuid(char *arg) } __setup("clearcpuid=", setup_disablecpuid); @@ -22063,16 +21328,16 @@ index 3126558..a1028f6 100644 DEFINE_PER_CPU_FIRST(union irq_stack_union, irq_stack_union) __aligned(PAGE_SIZE) __visible; -@@ -1291,7 +1300,7 @@ void cpu_init(void) +@@ -1309,7 +1318,7 @@ void cpu_init(void) + */ load_ucode_ap(); - cpu = stack_smp_processor_id(); - t = &per_cpu(init_tss, cpu); + t = init_tss + cpu; oist = &per_cpu(orig_ist, cpu); #ifdef CONFIG_NUMA -@@ -1326,7 +1335,6 @@ void cpu_init(void) +@@ -1341,7 +1350,6 @@ void cpu_init(void) wrmsrl(MSR_KERNEL_GS_BASE, 0); barrier(); @@ -22080,7 +21345,7 @@ index 3126558..a1028f6 100644 enable_x2apic(); /* -@@ -1378,7 +1386,7 @@ void cpu_init(void) +@@ -1393,7 +1401,7 @@ void cpu_init(void) { int cpu = smp_processor_id(); struct task_struct *curr = current; @@ -22088,7 +21353,7 @@ index 3126558..a1028f6 100644 + struct tss_struct *t = init_tss + cpu; struct thread_struct *thread = &curr->thread; - show_ucode_info_early(); + wait_for_master_cpu(cpu); diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index c703507..28535e3 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c @@ -22181,7 +21446,7 @@ index c703507..28535e3 100644 "index%1lu", i); if (unlikely(retval)) { diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c -index bd9ccda..38314e7 100644 +index 61a9668ce..b446a37 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -45,6 +45,7 @@ @@ -22368,10 +21633,10 @@ index 7dc5564..1273569 100644 wmb(); diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c -index dd9d619..86e1d81 100644 +index 15c2909..2cef20c 100644 --- a/arch/x86/kernel/cpu/microcode/core.c +++ b/arch/x86/kernel/cpu/microcode/core.c -@@ -516,7 +516,7 @@ mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu) +@@ -518,7 +518,7 @@ mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu) return NOTIFY_OK; } @@ -22381,7 +21646,7 @@ index dd9d619..86e1d81 100644 }; diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c -index a276fa7..e66810f 100644 +index c6826d1..ad18e14a 100644 --- a/arch/x86/kernel/cpu/microcode/intel.c +++ b/arch/x86/kernel/cpu/microcode/intel.c @@ -293,13 +293,13 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device, @@ -22401,7 +21666,7 @@ index a276fa7..e66810f 100644 static void microcode_fini_cpu(int cpu) diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c -index f961de9..8a9d332 100644 +index ea5f363..cb0e905 100644 --- a/arch/x86/kernel/cpu/mtrr/main.c +++ b/arch/x86/kernel/cpu/mtrr/main.c @@ -66,7 +66,7 @@ static DEFINE_MUTEX(mtrr_mutex); @@ -22427,10 +21692,10 @@ index df5e41f..816c719 100644 extern int generic_get_free_region(unsigned long base, unsigned long size, int replace_reg); diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c -index 2879ecd..bb8c80b 100644 +index 143e5f5..5825081 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c -@@ -1372,7 +1372,7 @@ static void __init pmu_check_apic(void) +@@ -1374,7 +1374,7 @@ static void __init pmu_check_apic(void) } @@ -22439,7 +21704,7 @@ index 2879ecd..bb8c80b 100644 .name = "format", .attrs = NULL, }; -@@ -1471,7 +1471,7 @@ static struct attribute *events_attr[] = { +@@ -1473,7 +1473,7 @@ static struct attribute *events_attr[] = { NULL, }; @@ -22448,16 +21713,16 @@ index 2879ecd..bb8c80b 100644 .name = "events", .attrs = events_attr, }; -@@ -1995,7 +1995,7 @@ static unsigned long get_segment_base(unsigned int segment) +@@ -1997,7 +1997,7 @@ static unsigned long get_segment_base(unsigned int segment) if (idx > GDT_ENTRIES) return 0; -- desc = __this_cpu_ptr(&gdt_page.gdt[0]); +- desc = raw_cpu_ptr(gdt_page.gdt); + desc = get_cpu_gdt_table(smp_processor_id()); } return get_desc_base(desc + idx); -@@ -2085,7 +2085,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) +@@ -2087,7 +2087,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) break; perf_callchain_store(entry, frame.return_address); @@ -22480,7 +21745,7 @@ index 639d128..e92d7e5 100644 while (amd_iommu_v2_event_descs[i].attr.attr.name) diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c -index 2502d0d..e5cc05c 100644 +index 944bf01..4a4392f 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c @@ -2353,10 +2353,10 @@ __init int intel_pmu_init(void) @@ -22498,7 +21763,7 @@ index 2502d0d..e5cc05c 100644 intel_ds_init(); diff --git a/arch/x86/kernel/cpu/perf_event_intel_rapl.c b/arch/x86/kernel/cpu/perf_event_intel_rapl.c -index 619f769..d510008 100644 +index d64f275..26522ff 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c +++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c @@ -449,7 +449,7 @@ static struct attribute *rapl_events_hsw_attr[] = { @@ -22511,10 +21776,10 @@ index 619f769..d510008 100644 .attrs = NULL, /* patched at runtime */ }; diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c -index 0939f86..69730af 100644 +index 9762dbd..53d5d21 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c -@@ -3691,7 +3691,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types) +@@ -721,7 +721,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types) static int __init uncore_type_init(struct intel_uncore_type *type) { struct intel_uncore_pmu *pmus; @@ -22524,18 +21789,18 @@ index 0939f86..69730af 100644 int i, j; diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h -index 90236f0..54cb20d 100644 +index 18eb78b..18747cc 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h -@@ -503,7 +503,7 @@ struct intel_uncore_box { +@@ -114,7 +114,7 @@ struct intel_uncore_box { struct uncore_event_desc { struct kobj_attribute attr; const char *config; -}; +} __do_const; - #define INTEL_UNCORE_EVENT_DESC(_name, _config) \ - { \ + ssize_t uncore_event_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf); diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c index 3225ae6c..ee3c6db 100644 --- a/arch/x86/kernel/cpuid.c @@ -22550,7 +21815,7 @@ index 3225ae6c..ee3c6db 100644 .notifier_call = cpuid_class_cpu_callback, }; diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c -index a618fcd..200e95b 100644 +index f5ab56d..d3b201a 100644 --- a/arch/x86/kernel/crash.c +++ b/arch/x86/kernel/crash.c @@ -104,7 +104,7 @@ static void kdump_nmi_callback(int cpu, struct pt_regs *regs) @@ -22861,10 +22126,10 @@ index 5abd4cd..c65733b 100644 +EXPORT_SYMBOL(pax_check_alloca); +#endif diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c -index 1abcb50..6c8d702 100644 +index ff86f19..a20c62c 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c -@@ -154,12 +154,12 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, +@@ -153,12 +153,12 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, const struct stacktrace_ops *ops, void *data) { const unsigned cpu = get_cpu(); @@ -22878,7 +22143,7 @@ index 1abcb50..6c8d702 100644 if (!task) task = current; -@@ -180,7 +180,6 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, +@@ -179,7 +179,6 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, * current stack address. If the stacks consist of nested * exceptions */ @@ -22886,7 +22151,7 @@ index 1abcb50..6c8d702 100644 while (!done) { unsigned long *stack_end; enum stack_type stype; -@@ -203,7 +202,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, +@@ -202,7 +201,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, if (ops->stack(data, id) < 0) break; @@ -22895,7 +22160,7 @@ index 1abcb50..6c8d702 100644 data, stack_end, &graph); ops->stack(data, ""); /* -@@ -211,6 +210,8 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, +@@ -210,6 +209,8 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, * second-to-last pointer (index -2 to end) in the * exception stack: */ @@ -22904,7 +22169,7 @@ index 1abcb50..6c8d702 100644 stack = (unsigned long *) stack_end[-2]; done = 0; break; -@@ -219,7 +220,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, +@@ -218,7 +219,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, if (ops->stack(data, "IRQ") < 0) break; @@ -22913,7 +22178,7 @@ index 1abcb50..6c8d702 100644 ops, data, stack_end, &graph); /* * We link to the next stack (which would be -@@ -241,7 +242,9 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, +@@ -240,7 +241,9 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, /* * This handles the process stack: */ @@ -22924,7 +22189,7 @@ index 1abcb50..6c8d702 100644 put_cpu(); } EXPORT_SYMBOL(dump_trace); -@@ -350,3 +353,50 @@ int is_valid_bugaddr(unsigned long ip) +@@ -349,3 +352,50 @@ int is_valid_bugaddr(unsigned long ip) return ud2 == 0x0b0f; } @@ -22976,10 +22241,10 @@ index 1abcb50..6c8d702 100644 +EXPORT_SYMBOL(pax_check_alloca); +#endif diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c -index 988c00a..4f673b6 100644 +index 49f8864..1cc6d07 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c -@@ -803,8 +803,8 @@ unsigned long __init e820_end_of_low_ram_pfn(void) +@@ -802,8 +802,8 @@ unsigned long __init e820_end_of_low_ram_pfn(void) static void early_panic(char *msg) { @@ -23003,7 +22268,7 @@ index 01d1c18..8073693 100644 #include #include diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S -index 4b0e1df..884b67e 100644 +index 344b63f..ccdac7a 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S @@ -177,13 +177,153 @@ @@ -23305,17 +22570,17 @@ index 4b0e1df..884b67e 100644 PTGS_TO_GS ENABLE_INTERRUPTS_SYSEXIT -@@ -456,6 +640,9 @@ sysenter_audit: - movl %eax,%edx /* 2nd arg: syscall number */ - movl $AUDIT_ARCH_I386,%eax /* 1st arg: audit arch */ +@@ -453,6 +637,9 @@ sysenter_audit: + pushl_cfi PT_ESI(%esp) /* a3: 5th arg */ + pushl_cfi PT_EDX+4(%esp) /* a2: 4th arg */ call __audit_syscall_entry + + pax_erase_kstack + - pushl_cfi %ebx + popl_cfi %ecx /* get that remapped edx off the stack */ + popl_cfi %ecx /* get that remapped esi off the stack */ movl PT_EAX(%esp),%eax /* reload syscall number */ - jmp sysenter_do_call -@@ -481,10 +668,16 @@ sysexit_audit: +@@ -479,10 +666,16 @@ sysexit_audit: CFI_ENDPROC .pushsection .fixup,"ax" @@ -23334,7 +22599,7 @@ index 4b0e1df..884b67e 100644 PTGS_TO_GS_EX ENDPROC(ia32_sysenter_target) -@@ -495,6 +688,11 @@ ENTRY(system_call) +@@ -493,6 +686,11 @@ ENTRY(system_call) pushl_cfi %eax # save orig_eax SAVE_ALL GET_THREAD_INFO(%ebp) @@ -23346,7 +22611,7 @@ index 4b0e1df..884b67e 100644 # system call tracing in operation / emulation testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp) jnz syscall_trace_entry -@@ -514,6 +712,15 @@ syscall_exit: +@@ -512,6 +710,15 @@ syscall_exit: testl $_TIF_ALLWORK_MASK, %ecx # current->work jne syscall_exit_work @@ -23362,7 +22627,7 @@ index 4b0e1df..884b67e 100644 restore_all: TRACE_IRQS_IRET restore_all_notrace: -@@ -568,14 +775,34 @@ ldt_ss: +@@ -566,14 +773,34 @@ ldt_ss: * compensating for the offset by changing to the ESPFIX segment with * a base address that matches for the difference. */ @@ -23400,7 +22665,7 @@ index 4b0e1df..884b67e 100644 pushl_cfi $__ESPFIX_SS pushl_cfi %eax /* new kernel esp */ /* Disable interrupts, but do not irqtrace this section: we -@@ -605,20 +832,18 @@ work_resched: +@@ -603,20 +830,18 @@ work_resched: movl TI_flags(%ebp), %ecx andl $_TIF_WORK_MASK, %ecx # is there any work to be done other # than syscall tracing? @@ -23423,7 +22688,7 @@ index 4b0e1df..884b67e 100644 #endif TRACE_IRQS_ON ENABLE_INTERRUPTS(CLBR_NONE) -@@ -639,7 +864,7 @@ work_notifysig_v86: +@@ -637,7 +862,7 @@ work_notifysig_v86: movl %eax, %esp jmp 1b #endif @@ -23432,7 +22697,7 @@ index 4b0e1df..884b67e 100644 # perform syscall exit tracing ALIGN -@@ -647,11 +872,14 @@ syscall_trace_entry: +@@ -645,11 +870,14 @@ syscall_trace_entry: movl $-ENOSYS,PT_EAX(%esp) movl %esp, %eax call syscall_trace_enter @@ -23448,7 +22713,7 @@ index 4b0e1df..884b67e 100644 # perform syscall exit tracing ALIGN -@@ -664,26 +892,30 @@ syscall_exit_work: +@@ -662,26 +890,30 @@ syscall_exit_work: movl %esp, %eax call syscall_trace_leave jmp resume_userspace @@ -23483,7 +22748,7 @@ index 4b0e1df..884b67e 100644 CFI_ENDPROC .macro FIXUP_ESPFIX_STACK -@@ -696,8 +928,15 @@ END(sysenter_badsys) +@@ -694,8 +926,15 @@ END(sysenter_badsys) */ #ifdef CONFIG_X86_ESPFIX32 /* fixup the stack */ @@ -23501,7 +22766,7 @@ index 4b0e1df..884b67e 100644 shl $16, %eax addl %esp, %eax /* the adjusted stack pointer */ pushl_cfi $__KERNEL_DS -@@ -753,7 +992,7 @@ vector=vector+1 +@@ -751,7 +990,7 @@ vector=vector+1 .endr 2: jmp common_interrupt .endr @@ -23510,7 +22775,7 @@ index 4b0e1df..884b67e 100644 .previous END(interrupt) -@@ -810,7 +1049,7 @@ ENTRY(coprocessor_error) +@@ -808,7 +1047,7 @@ ENTRY(coprocessor_error) pushl_cfi $do_coprocessor_error jmp error_code CFI_ENDPROC @@ -23519,7 +22784,7 @@ index 4b0e1df..884b67e 100644 ENTRY(simd_coprocessor_error) RING0_INT_FRAME -@@ -823,7 +1062,7 @@ ENTRY(simd_coprocessor_error) +@@ -821,7 +1060,7 @@ ENTRY(simd_coprocessor_error) .section .altinstructions,"a" altinstruction_entry 661b, 663f, X86_FEATURE_XMM, 662b-661b, 664f-663f .previous @@ -23528,7 +22793,7 @@ index 4b0e1df..884b67e 100644 663: pushl $do_simd_coprocessor_error 664: .previous -@@ -832,7 +1071,7 @@ ENTRY(simd_coprocessor_error) +@@ -830,7 +1069,7 @@ ENTRY(simd_coprocessor_error) #endif jmp error_code CFI_ENDPROC @@ -23537,7 +22802,7 @@ index 4b0e1df..884b67e 100644 ENTRY(device_not_available) RING0_INT_FRAME -@@ -841,18 +1080,18 @@ ENTRY(device_not_available) +@@ -839,18 +1078,18 @@ ENTRY(device_not_available) pushl_cfi $do_device_not_available jmp error_code CFI_ENDPROC @@ -23559,7 +22824,7 @@ index 4b0e1df..884b67e 100644 #endif ENTRY(overflow) -@@ -862,7 +1101,7 @@ ENTRY(overflow) +@@ -860,7 +1099,7 @@ ENTRY(overflow) pushl_cfi $do_overflow jmp error_code CFI_ENDPROC @@ -23568,7 +22833,7 @@ index 4b0e1df..884b67e 100644 ENTRY(bounds) RING0_INT_FRAME -@@ -871,7 +1110,7 @@ ENTRY(bounds) +@@ -869,7 +1108,7 @@ ENTRY(bounds) pushl_cfi $do_bounds jmp error_code CFI_ENDPROC @@ -23577,7 +22842,7 @@ index 4b0e1df..884b67e 100644 ENTRY(invalid_op) RING0_INT_FRAME -@@ -880,7 +1119,7 @@ ENTRY(invalid_op) +@@ -878,7 +1117,7 @@ ENTRY(invalid_op) pushl_cfi $do_invalid_op jmp error_code CFI_ENDPROC @@ -23586,7 +22851,7 @@ index 4b0e1df..884b67e 100644 ENTRY(coprocessor_segment_overrun) RING0_INT_FRAME -@@ -889,7 +1128,7 @@ ENTRY(coprocessor_segment_overrun) +@@ -887,7 +1126,7 @@ ENTRY(coprocessor_segment_overrun) pushl_cfi $do_coprocessor_segment_overrun jmp error_code CFI_ENDPROC @@ -23595,7 +22860,7 @@ index 4b0e1df..884b67e 100644 ENTRY(invalid_TSS) RING0_EC_FRAME -@@ -897,7 +1136,7 @@ ENTRY(invalid_TSS) +@@ -895,7 +1134,7 @@ ENTRY(invalid_TSS) pushl_cfi $do_invalid_TSS jmp error_code CFI_ENDPROC @@ -23604,7 +22869,7 @@ index 4b0e1df..884b67e 100644 ENTRY(segment_not_present) RING0_EC_FRAME -@@ -905,7 +1144,7 @@ ENTRY(segment_not_present) +@@ -903,7 +1142,7 @@ ENTRY(segment_not_present) pushl_cfi $do_segment_not_present jmp error_code CFI_ENDPROC @@ -23613,7 +22878,7 @@ index 4b0e1df..884b67e 100644 ENTRY(stack_segment) RING0_EC_FRAME -@@ -913,7 +1152,7 @@ ENTRY(stack_segment) +@@ -911,7 +1150,7 @@ ENTRY(stack_segment) pushl_cfi $do_stack_segment jmp error_code CFI_ENDPROC @@ -23622,7 +22887,7 @@ index 4b0e1df..884b67e 100644 ENTRY(alignment_check) RING0_EC_FRAME -@@ -921,7 +1160,7 @@ ENTRY(alignment_check) +@@ -919,7 +1158,7 @@ ENTRY(alignment_check) pushl_cfi $do_alignment_check jmp error_code CFI_ENDPROC @@ -23631,7 +22896,7 @@ index 4b0e1df..884b67e 100644 ENTRY(divide_error) RING0_INT_FRAME -@@ -930,7 +1169,7 @@ ENTRY(divide_error) +@@ -928,7 +1167,7 @@ ENTRY(divide_error) pushl_cfi $do_divide_error jmp error_code CFI_ENDPROC @@ -23640,7 +22905,7 @@ index 4b0e1df..884b67e 100644 #ifdef CONFIG_X86_MCE ENTRY(machine_check) -@@ -940,7 +1179,7 @@ ENTRY(machine_check) +@@ -938,7 +1177,7 @@ ENTRY(machine_check) pushl_cfi machine_check_vector jmp error_code CFI_ENDPROC @@ -23649,7 +22914,7 @@ index 4b0e1df..884b67e 100644 #endif ENTRY(spurious_interrupt_bug) -@@ -950,7 +1189,7 @@ ENTRY(spurious_interrupt_bug) +@@ -948,7 +1187,7 @@ ENTRY(spurious_interrupt_bug) pushl_cfi $do_spurious_interrupt_bug jmp error_code CFI_ENDPROC @@ -23658,7 +22923,7 @@ index 4b0e1df..884b67e 100644 #ifdef CONFIG_XEN /* Xen doesn't set %esp to be precisely what the normal sysenter -@@ -1056,7 +1295,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR, +@@ -1054,7 +1293,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR, ENTRY(mcount) ret @@ -23667,7 +22932,7 @@ index 4b0e1df..884b67e 100644 ENTRY(ftrace_caller) pushl %eax -@@ -1086,7 +1325,7 @@ ftrace_graph_call: +@@ -1084,7 +1323,7 @@ ftrace_graph_call: .globl ftrace_stub ftrace_stub: ret @@ -23676,7 +22941,7 @@ index 4b0e1df..884b67e 100644 ENTRY(ftrace_regs_caller) pushf /* push flags before compare (in cs location) */ -@@ -1184,7 +1423,7 @@ trace: +@@ -1182,7 +1421,7 @@ trace: popl %ecx popl %eax jmp ftrace_stub @@ -23685,7 +22950,7 @@ index 4b0e1df..884b67e 100644 #endif /* CONFIG_DYNAMIC_FTRACE */ #endif /* CONFIG_FUNCTION_TRACER */ -@@ -1202,7 +1441,7 @@ ENTRY(ftrace_graph_caller) +@@ -1200,7 +1439,7 @@ ENTRY(ftrace_graph_caller) popl %ecx popl %eax ret @@ -23694,7 +22959,7 @@ index 4b0e1df..884b67e 100644 .globl return_to_handler return_to_handler: -@@ -1263,15 +1502,18 @@ error_code: +@@ -1261,15 +1500,18 @@ error_code: movl $-1, PT_ORIG_EAX(%esp) # no syscall to restart REG_TO_PTGS %ecx SET_KERNEL_GS %ecx @@ -23715,7 +22980,7 @@ index 4b0e1df..884b67e 100644 /* * Debug traps and NMI can happen at the one SYSENTER instruction -@@ -1314,7 +1556,7 @@ debug_stack_correct: +@@ -1312,7 +1554,7 @@ debug_stack_correct: call do_debug jmp ret_from_exception CFI_ENDPROC @@ -23724,7 +22989,7 @@ index 4b0e1df..884b67e 100644 /* * NMI is doubly nasty. It can happen _while_ we're handling -@@ -1354,6 +1596,9 @@ nmi_stack_correct: +@@ -1352,6 +1594,9 @@ nmi_stack_correct: xorl %edx,%edx # zero error code movl %esp,%eax # pt_regs pointer call do_nmi @@ -23734,7 +22999,7 @@ index 4b0e1df..884b67e 100644 jmp restore_all_notrace CFI_ENDPROC -@@ -1391,13 +1636,16 @@ nmi_espfix_stack: +@@ -1389,13 +1634,16 @@ nmi_espfix_stack: FIXUP_ESPFIX_STACK # %eax == %esp xorl %edx,%edx # zero error code call do_nmi @@ -23752,7 +23017,7 @@ index 4b0e1df..884b67e 100644 ENTRY(int3) RING0_INT_FRAME -@@ -1410,14 +1658,14 @@ ENTRY(int3) +@@ -1408,14 +1656,14 @@ ENTRY(int3) call do_int3 jmp ret_from_exception CFI_ENDPROC @@ -23769,7 +23034,7 @@ index 4b0e1df..884b67e 100644 #ifdef CONFIG_KVM_GUEST ENTRY(async_page_fault) -@@ -1426,6 +1674,6 @@ ENTRY(async_page_fault) +@@ -1424,6 +1672,6 @@ ENTRY(async_page_fault) pushl_cfi $do_async_page_fault jmp error_code CFI_ENDPROC @@ -23778,7 +23043,7 @@ index 4b0e1df..884b67e 100644 #endif diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S -index 2fac134..b020fca 100644 +index c0226ab..96a8ab7 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -59,6 +59,8 @@ @@ -24411,7 +23676,7 @@ index 2fac134..b020fca 100644 movq %rsp,PER_CPU_VAR(old_rsp) movq PER_CPU_VAR(kernel_stack),%rsp -+ SAVE_ARGS 8*6,0 ++ SAVE_ARGS 8*6, 0, rax_enosys=1 + pax_enter_kernel_user + +#ifdef CONFIG_PAX_RANDKSTACK @@ -24423,8 +23688,8 @@ index 2fac134..b020fca 100644 * and short: */ ENABLE_INTERRUPTS(CLBR_NONE) -- SAVE_ARGS 8,0 - movq %rax,ORIG_RAX-ARGOFFSET(%rsp) +- SAVE_ARGS 8, 0, rax_enosys=1 + movq_cfi rax,(ORIG_RAX-ARGOFFSET) movq %rcx,RIP-ARGOFFSET(%rsp) CFI_REL_OFFSET rip,RIP-ARGOFFSET - testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET) @@ -24448,35 +23713,33 @@ index 2fac134..b020fca 100644 /* * sysretq will re-enable interrupts: */ -@@ -494,6 +963,9 @@ auditsys: - movq %rax,%rsi /* 2nd arg: syscall number */ - movl $AUDIT_ARCH_X86_64,%edi /* 1st arg: audit arch */ - call __audit_syscall_entry -+ -+ pax_erase_kstack -+ - LOAD_ARGS 0 /* reload call-clobbered registers */ - jmp system_call_fastpath +@@ -494,12 +963,15 @@ sysret_audit: -@@ -515,7 +987,7 @@ sysret_audit: /* Do syscall tracing */ tracesys: - #ifdef CONFIG_AUDITSYSCALL -- testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET) -+ testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%rcx) - jz auditsys - #endif - SAVE_REST -@@ -523,12 +995,15 @@ tracesys: - FIXUP_TOP_OF_STACK %rdi - movq %rsp,%rdi - call syscall_trace_enter +- leaq -REST_SKIP(%rsp), %rdi ++ movq %rsp, %rdi + movq $AUDIT_ARCH_X86_64, %rsi + call syscall_trace_enter_phase1 + test %rax, %rax + jnz tracesys_phase2 /* if needed, run the slow path */ +- LOAD_ARGS 0 /* else restore clobbered regs */ + ++ pax_erase_kstack ++ ++ LOAD_ARGS /* else restore clobbered regs */ + jmp system_call_fastpath /* and return to the fast path */ + + tracesys_phase2: +@@ -510,12 +982,14 @@ tracesys_phase2: + movq %rax,%rdx + call syscall_trace_enter_phase2 + + pax_erase_kstack + /* * Reload arg registers from stack in case ptrace changed them. - * We don't reload %rax because syscall_trace_enter() returned + * We don't reload %rax because syscall_trace_entry_phase2() returned * the value it wants us to use in the table lookup. */ - LOAD_ARGS ARGOFFSET, 1 @@ -24484,7 +23747,7 @@ index 2fac134..b020fca 100644 RESTORE_REST #if __SYSCALL_MASK == ~0 cmpq $__NR_syscall_max,%rax -@@ -558,7 +1033,9 @@ GLOBAL(int_with_check) +@@ -545,7 +1019,9 @@ GLOBAL(int_with_check) andl %edi,%edx jnz int_careful andl $~TS_COMPAT,TI_status(%rcx) @@ -24495,7 +23758,7 @@ index 2fac134..b020fca 100644 /* Either reschedule or signal or syscall exit tracking needed. */ /* First do a reschedule test. */ -@@ -604,7 +1081,7 @@ int_restore_rest: +@@ -591,7 +1067,7 @@ int_restore_rest: TRACE_IRQS_OFF jmp int_with_check CFI_ENDPROC @@ -24504,7 +23767,7 @@ index 2fac134..b020fca 100644 .macro FORK_LIKE func ENTRY(stub_\func) -@@ -617,9 +1094,10 @@ ENTRY(stub_\func) +@@ -604,9 +1080,10 @@ ENTRY(stub_\func) DEFAULT_FRAME 0 8 /* offset 8: return address */ call sys_\func RESTORE_TOP_OF_STACK %r11, 8 @@ -24517,7 +23780,7 @@ index 2fac134..b020fca 100644 .endm .macro FIXED_FRAME label,func -@@ -629,9 +1107,10 @@ ENTRY(\label) +@@ -616,9 +1093,10 @@ ENTRY(\label) FIXUP_TOP_OF_STACK %r11, 8-ARGOFFSET call \func RESTORE_TOP_OF_STACK %r11, 8-ARGOFFSET @@ -24529,7 +23792,7 @@ index 2fac134..b020fca 100644 .endm FORK_LIKE clone -@@ -639,19 +1118,6 @@ END(\label) +@@ -626,19 +1104,6 @@ END(\label) FORK_LIKE vfork FIXED_FRAME stub_iopl, sys_iopl @@ -24549,7 +23812,7 @@ index 2fac134..b020fca 100644 ENTRY(stub_execve) CFI_STARTPROC addq $8, %rsp -@@ -663,7 +1129,7 @@ ENTRY(stub_execve) +@@ -650,7 +1115,7 @@ ENTRY(stub_execve) RESTORE_REST jmp int_ret_from_sys_call CFI_ENDPROC @@ -24558,7 +23821,7 @@ index 2fac134..b020fca 100644 /* * sigreturn is special because it needs to restore all registers on return. -@@ -680,7 +1146,7 @@ ENTRY(stub_rt_sigreturn) +@@ -667,7 +1132,7 @@ ENTRY(stub_rt_sigreturn) RESTORE_REST jmp int_ret_from_sys_call CFI_ENDPROC @@ -24567,7 +23830,7 @@ index 2fac134..b020fca 100644 #ifdef CONFIG_X86_X32_ABI ENTRY(stub_x32_rt_sigreturn) -@@ -694,7 +1160,7 @@ ENTRY(stub_x32_rt_sigreturn) +@@ -681,7 +1146,7 @@ ENTRY(stub_x32_rt_sigreturn) RESTORE_REST jmp int_ret_from_sys_call CFI_ENDPROC @@ -24576,7 +23839,7 @@ index 2fac134..b020fca 100644 ENTRY(stub_x32_execve) CFI_STARTPROC -@@ -708,7 +1174,7 @@ ENTRY(stub_x32_execve) +@@ -695,7 +1160,7 @@ ENTRY(stub_x32_execve) RESTORE_REST jmp int_ret_from_sys_call CFI_ENDPROC @@ -24585,7 +23848,7 @@ index 2fac134..b020fca 100644 #endif -@@ -745,7 +1211,7 @@ vector=vector+1 +@@ -732,7 +1197,7 @@ vector=vector+1 2: jmp common_interrupt .endr CFI_ENDPROC @@ -24594,7 +23857,7 @@ index 2fac134..b020fca 100644 .previous END(interrupt) -@@ -762,8 +1228,8 @@ END(interrupt) +@@ -749,8 +1214,8 @@ END(interrupt) /* 0(%rsp): ~(interrupt number) */ .macro interrupt func /* reserve pt_regs for scratch regs and rbp */ @@ -24605,7 +23868,7 @@ index 2fac134..b020fca 100644 SAVE_ARGS_IRQ call \func .endm -@@ -786,14 +1252,14 @@ ret_from_intr: +@@ -773,14 +1238,14 @@ ret_from_intr: /* Restore saved previous stack */ popq %rsi @@ -24624,7 +23887,7 @@ index 2fac134..b020fca 100644 je retint_kernel /* Interrupt came from user space */ -@@ -815,12 +1281,35 @@ retint_swapgs: /* return to user-space */ +@@ -802,12 +1267,35 @@ retint_swapgs: /* return to user-space */ * The iretq could re-enable interrupts: */ DISABLE_INTERRUPTS(CLBR_ANY) @@ -24660,32 +23923,37 @@ index 2fac134..b020fca 100644 /* * The iretq could re-enable interrupts: */ -@@ -933,7 +1422,7 @@ ENTRY(retint_kernel) +@@ -845,15 +1333,15 @@ native_irq_return_ldt: + SWAPGS + movq PER_CPU_VAR(espfix_waddr),%rdi + movq %rax,(0*8)(%rdi) /* RAX */ +- movq (2*8)(%rsp),%rax /* RIP */ ++ movq (2*8 + RIP-RIP)(%rsp),%rax /* RIP */ + movq %rax,(1*8)(%rdi) +- movq (3*8)(%rsp),%rax /* CS */ ++ movq (2*8 + CS-RIP)(%rsp),%rax /* CS */ + movq %rax,(2*8)(%rdi) +- movq (4*8)(%rsp),%rax /* RFLAGS */ ++ movq (2*8 + EFLAGS-RIP)(%rsp),%rax /* RFLAGS */ + movq %rax,(3*8)(%rdi) +- movq (6*8)(%rsp),%rax /* SS */ ++ movq (2*8 + SS-RIP)(%rsp),%rax /* SS */ + movq %rax,(5*8)(%rdi) +- movq (5*8)(%rsp),%rax /* RSP */ ++ movq (2*8 + RSP-RIP)(%rsp),%rax /* RSP */ + movq %rax,(4*8)(%rdi) + andl $0xffff0000,%eax + popq_cfi %rdi +@@ -907,7 +1395,7 @@ ENTRY(retint_kernel) jmp exit_intr #endif CFI_ENDPROC -END(common_interrupt) +ENDPROC(common_interrupt) - /* - * If IRET takes a fault on the espfix stack, then we -@@ -955,13 +1444,13 @@ __do_double_fault: - cmpq $native_irq_return_iret,%rax - jne do_double_fault /* This shouldn't happen... */ - movq PER_CPU_VAR(kernel_stack),%rax -- subq $(6*8-KERNEL_STACK_OFFSET),%rax /* Reset to original stack */ -+ subq $(6*8),%rax /* Reset to original stack */ - movq %rax,RSP(%rdi) - movq $0,(%rax) /* Missing (lost) #GP error code */ - movq $general_protection,RIP(%rdi) - retq - CFI_ENDPROC --END(__do_double_fault) -+ENDPROC(__do_double_fault) - #else - # define __do_double_fault do_double_fault - #endif -@@ -978,7 +1467,7 @@ ENTRY(\sym) + /* + * APIC interrupts. +@@ -921,7 +1409,7 @@ ENTRY(\sym) interrupt \do_sym jmp ret_from_intr CFI_ENDPROC @@ -24694,7 +23962,7 @@ index 2fac134..b020fca 100644 .endm #ifdef CONFIG_TRACING -@@ -1051,7 +1540,7 @@ apicinterrupt IRQ_WORK_VECTOR \ +@@ -994,7 +1482,7 @@ apicinterrupt IRQ_WORK_VECTOR \ /* * Exception entry points. */ @@ -24703,7 +23971,7 @@ index 2fac134..b020fca 100644 .macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1 ENTRY(\sym) -@@ -1102,6 +1591,12 @@ ENTRY(\sym) +@@ -1045,6 +1533,12 @@ ENTRY(\sym) .endif .if \shift_ist != -1 @@ -24716,7 +23984,7 @@ index 2fac134..b020fca 100644 subq $EXCEPTION_STKSZ, INIT_TSS_IST(\shift_ist) .endif -@@ -1118,7 +1613,7 @@ ENTRY(\sym) +@@ -1061,7 +1555,7 @@ ENTRY(\sym) .endif CFI_ENDPROC @@ -24725,7 +23993,7 @@ index 2fac134..b020fca 100644 .endm #ifdef CONFIG_TRACING -@@ -1159,9 +1654,10 @@ gs_change: +@@ -1102,9 +1596,10 @@ gs_change: 2: mfence /* workaround */ SWAPGS popfq_cfi @@ -24737,7 +24005,7 @@ index 2fac134..b020fca 100644 _ASM_EXTABLE(gs_change,bad_gs) .section .fixup,"ax" -@@ -1189,9 +1685,10 @@ ENTRY(do_softirq_own_stack) +@@ -1132,9 +1627,10 @@ ENTRY(do_softirq_own_stack) CFI_DEF_CFA_REGISTER rsp CFI_ADJUST_CFA_OFFSET -8 decl PER_CPU_VAR(irq_count) @@ -24749,7 +24017,7 @@ index 2fac134..b020fca 100644 #ifdef CONFIG_XEN idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0 -@@ -1229,7 +1726,7 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs) +@@ -1172,7 +1668,7 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs) decl PER_CPU_VAR(irq_count) jmp error_exit CFI_ENDPROC @@ -24758,7 +24026,7 @@ index 2fac134..b020fca 100644 /* * Hypervisor uses this for application faults while it executes. -@@ -1288,7 +1785,7 @@ ENTRY(xen_failsafe_callback) +@@ -1231,7 +1727,7 @@ ENTRY(xen_failsafe_callback) SAVE_ALL jmp error_exit CFI_ENDPROC @@ -24767,7 +24035,7 @@ index 2fac134..b020fca 100644 apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \ xen_hvm_callback_vector xen_evtchn_do_upcall -@@ -1335,18 +1832,33 @@ ENTRY(paranoid_exit) +@@ -1278,18 +1774,33 @@ ENTRY(paranoid_exit) DEFAULT_FRAME DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF_DEBUG @@ -24803,7 +24071,7 @@ index 2fac134..b020fca 100644 jmp irq_return paranoid_userspace: GET_THREAD_INFO(%rcx) -@@ -1375,7 +1887,7 @@ paranoid_schedule: +@@ -1318,7 +1829,7 @@ paranoid_schedule: TRACE_IRQS_OFF jmp paranoid_userspace CFI_ENDPROC @@ -24812,7 +24080,7 @@ index 2fac134..b020fca 100644 /* * Exception entry point. This expects an error code/orig_rax on the stack. -@@ -1402,12 +1914,23 @@ ENTRY(error_entry) +@@ -1345,12 +1856,23 @@ ENTRY(error_entry) movq %r14, R14+8(%rsp) movq %r15, R15+8(%rsp) xorl %ebx,%ebx @@ -24837,16 +24105,16 @@ index 2fac134..b020fca 100644 ret /* -@@ -1435,7 +1958,7 @@ bstep_iret: - movq %rcx,RIP+8(%rsp) - jmp error_swapgs +@@ -1385,7 +1907,7 @@ error_bad_iret: + decl %ebx /* Return to usergs */ + jmp error_sti CFI_ENDPROC -END(error_entry) +ENDPROC(error_entry) /* ebx: no swapgs flag (1: don't need swapgs, 0: need it) */ -@@ -1446,7 +1969,7 @@ ENTRY(error_exit) +@@ -1396,7 +1918,7 @@ ENTRY(error_exit) DISABLE_INTERRUPTS(CLBR_NONE) TRACE_IRQS_OFF GET_THREAD_INFO(%rcx) @@ -24855,7 +24123,7 @@ index 2fac134..b020fca 100644 jne retint_kernel LOCKDEP_SYS_EXIT_IRQ movl TI_flags(%rcx),%edx -@@ -1455,7 +1978,7 @@ ENTRY(error_exit) +@@ -1405,7 +1927,7 @@ ENTRY(error_exit) jnz retint_careful jmp retint_swapgs CFI_ENDPROC @@ -24864,7 +24132,7 @@ index 2fac134..b020fca 100644 /* * Test if a given stack is an NMI stack or not. -@@ -1513,9 +2036,11 @@ ENTRY(nmi) +@@ -1463,9 +1985,11 @@ ENTRY(nmi) * If %cs was not the kernel segment, then the NMI triggered in user * space, which means it is definitely not nested. */ @@ -24877,7 +24145,7 @@ index 2fac134..b020fca 100644 /* * Check the special variable on the stack to see if NMIs are * executing. -@@ -1549,8 +2074,7 @@ nested_nmi: +@@ -1499,8 +2023,7 @@ nested_nmi: 1: /* Set up the interrupted NMIs stack to jump to repeat_nmi */ @@ -24887,7 +24155,7 @@ index 2fac134..b020fca 100644 CFI_ADJUST_CFA_OFFSET 1*8 leaq -10*8(%rsp), %rdx pushq_cfi $__KERNEL_DS -@@ -1568,6 +2092,7 @@ nested_nmi_out: +@@ -1518,6 +2041,7 @@ nested_nmi_out: CFI_RESTORE rdx /* No need to check faults here */ @@ -24895,7 +24163,7 @@ index 2fac134..b020fca 100644 INTERRUPT_RETURN CFI_RESTORE_STATE -@@ -1664,13 +2189,13 @@ end_repeat_nmi: +@@ -1614,13 +2138,13 @@ end_repeat_nmi: subq $ORIG_RAX-R15, %rsp CFI_ADJUST_CFA_OFFSET ORIG_RAX-R15 /* @@ -24911,7 +24179,7 @@ index 2fac134..b020fca 100644 DEFAULT_FRAME 0 /* -@@ -1680,9 +2205,9 @@ end_repeat_nmi: +@@ -1630,9 +2154,9 @@ end_repeat_nmi: * NMI itself takes a page fault, the page fault that was preempted * will read the information from the NMI page fault and not the * origin fault. Save it off and restore it if it changes. @@ -24923,7 +24191,7 @@ index 2fac134..b020fca 100644 /* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */ movq %rsp,%rdi -@@ -1691,29 +2216,34 @@ end_repeat_nmi: +@@ -1641,29 +2165,34 @@ end_repeat_nmi: /* Did the NMI take a page fault? Restore cr2 if it did */ movq %cr2, %rcx @@ -24964,10 +24232,42 @@ index 2fac134..b020fca 100644 +ENDPROC(ignore_sysret) diff --git a/arch/x86/kernel/espfix_64.c b/arch/x86/kernel/espfix_64.c -index 94d857f..bf1f0bf 100644 +index 94d857f..5bce89c 100644 --- a/arch/x86/kernel/espfix_64.c +++ b/arch/x86/kernel/espfix_64.c -@@ -197,7 +197,7 @@ void init_espfix_ap(void) +@@ -70,8 +70,7 @@ static DEFINE_MUTEX(espfix_init_mutex); + #define ESPFIX_MAX_PAGES DIV_ROUND_UP(CONFIG_NR_CPUS, ESPFIX_STACKS_PER_PAGE) + static void *espfix_pages[ESPFIX_MAX_PAGES]; + +-static __page_aligned_bss pud_t espfix_pud_page[PTRS_PER_PUD] +- __aligned(PAGE_SIZE); ++static pud_t espfix_pud_page[PTRS_PER_PUD] __page_aligned_rodata; + + static unsigned int page_random, slot_random; + +@@ -122,14 +121,17 @@ static void init_espfix_random(void) + void __init init_espfix_bsp(void) + { + pgd_t *pgd_p; +- pteval_t ptemask; +- +- ptemask = __supported_pte_mask; ++ unsigned long index = pgd_index(ESPFIX_BASE_ADDR); + + /* Install the espfix pud into the kernel page directory */ +- pgd_p = &init_level4_pgt[pgd_index(ESPFIX_BASE_ADDR)]; ++ pgd_p = &init_level4_pgt[index]; + pgd_populate(&init_mm, pgd_p, (pud_t *)espfix_pud_page); + ++#ifdef CONFIG_PAX_PER_CPU_PGD ++ clone_pgd_range(get_cpu_pgd(0, kernel) + index, swapper_pg_dir + index, 1); ++ clone_pgd_range(get_cpu_pgd(0, user) + index, swapper_pg_dir + index, 1); ++#endif ++ + /* Randomize the locations */ + init_espfix_random(); + +@@ -197,7 +199,7 @@ void init_espfix_ap(void) set_pte(&pte_p[n*PTE_STRIDE], pte); /* Job is done for this CPU and any CPU which shares this page */ @@ -25801,7 +25101,7 @@ index a9a4229..6f4d476 100644 /* diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c -index 8af8171..f8c1169 100644 +index e7cc537..67d7372 100644 --- a/arch/x86/kernel/i8259.c +++ b/arch/x86/kernel/i8259.c @@ -110,7 +110,7 @@ static int i8259A_irq_pending(unsigned int irq) @@ -25810,10 +25110,10 @@ index 8af8171..f8c1169 100644 disable_irq_nosync(irq); - io_apic_irqs &= ~(1<handle_irq(irq, desc); diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c -index 4d1c746..55a22d6 100644 +index e4b503d..824fce8 100644 --- a/arch/x86/kernel/irq_64.c +++ b/arch/x86/kernel/irq_64.c @@ -26,6 +26,8 @@ EXPORT_PER_CPU_SYMBOL(irq_stat); @@ -26510,7 +25810,7 @@ index c37886d..d851d32 100644 error = -EINVAL; goto out_unlock; diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c -index 1667b1d..16492c5 100644 +index 72e8e31..f2f1605 100644 --- a/arch/x86/kernel/machine_kexec_32.c +++ b/arch/x86/kernel/machine_kexec_32.c @@ -25,7 +25,7 @@ @@ -27079,6 +26379,34 @@ index 548d25f..f8fb99c 100644 }; EXPORT_SYMBOL_GPL(pv_time_ops); +diff --git a/arch/x86/kernel/paravirt_patch_64.c b/arch/x86/kernel/paravirt_patch_64.c +index a1da673..b6f5831 100644 +--- a/arch/x86/kernel/paravirt_patch_64.c ++++ b/arch/x86/kernel/paravirt_patch_64.c +@@ -9,7 +9,11 @@ DEF_NATIVE(pv_irq_ops, save_fl, "pushfq; popq %rax"); + DEF_NATIVE(pv_mmu_ops, read_cr2, "movq %cr2, %rax"); + DEF_NATIVE(pv_mmu_ops, read_cr3, "movq %cr3, %rax"); + DEF_NATIVE(pv_mmu_ops, write_cr3, "movq %rdi, %cr3"); ++ ++#ifndef CONFIG_PAX_MEMORY_UDEREF + DEF_NATIVE(pv_mmu_ops, flush_tlb_single, "invlpg (%rdi)"); ++#endif ++ + DEF_NATIVE(pv_cpu_ops, clts, "clts"); + DEF_NATIVE(pv_cpu_ops, wbinvd, "wbinvd"); + +@@ -57,7 +61,11 @@ unsigned native_patch(u8 type, u16 clobbers, void *ibuf, + PATCH_SITE(pv_mmu_ops, read_cr3); + PATCH_SITE(pv_mmu_ops, write_cr3); + PATCH_SITE(pv_cpu_ops, clts); ++ ++#ifndef CONFIG_PAX_MEMORY_UDEREF + PATCH_SITE(pv_mmu_ops, flush_tlb_single); ++#endif ++ + PATCH_SITE(pv_cpu_ops, wbinvd); + + patch_site: diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index 0497f71..7186c0d 100644 --- a/arch/x86/kernel/pci-calgary_64.c @@ -27118,35 +26446,8 @@ index 77dd0ad..9ec4723 100644 else dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs); } -diff --git a/arch/x86/kernel/preempt.S b/arch/x86/kernel/preempt.S -index ca7f0d5..8996469 100644 ---- a/arch/x86/kernel/preempt.S -+++ b/arch/x86/kernel/preempt.S -@@ -3,12 +3,14 @@ - #include - #include - #include -+#include - - ENTRY(___preempt_schedule) - CFI_STARTPROC - SAVE_ALL - call preempt_schedule - RESTORE_ALL -+ pax_force_retaddr - ret - CFI_ENDPROC - -@@ -19,6 +21,7 @@ ENTRY(___preempt_schedule_context) - SAVE_ALL - call preempt_schedule_context - RESTORE_ALL -+ pax_force_retaddr - ret - CFI_ENDPROC - diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c -index f804dc9..7c62095 100644 +index e127dda..94e384d 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -36,7 +36,8 @@ @@ -27159,7 +26460,7 @@ index f804dc9..7c62095 100644 #ifdef CONFIG_X86_64 static DEFINE_PER_CPU(unsigned char, is_idle); -@@ -92,7 +93,7 @@ void arch_task_cache_init(void) +@@ -94,7 +95,7 @@ void arch_task_cache_init(void) task_xstate_cachep = kmem_cache_create("task_xstate", xstate_size, __alignof__(union thread_xstate), @@ -27168,7 +26469,7 @@ index f804dc9..7c62095 100644 setup_xstate_comp(); } -@@ -106,7 +107,7 @@ void exit_thread(void) +@@ -108,7 +109,7 @@ void exit_thread(void) unsigned long *bp = t->io_bitmap_ptr; if (bp) { @@ -27177,7 +26478,7 @@ index f804dc9..7c62095 100644 t->io_bitmap_ptr = NULL; clear_thread_flag(TIF_IO_BITMAP); -@@ -126,6 +127,9 @@ void flush_thread(void) +@@ -128,6 +129,9 @@ void flush_thread(void) { struct task_struct *tsk = current; @@ -27187,7 +26488,7 @@ index f804dc9..7c62095 100644 flush_ptrace_hw_breakpoint(tsk); memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); drop_init_fpu(tsk); -@@ -272,7 +276,7 @@ static void __exit_idle(void) +@@ -274,7 +278,7 @@ static void __exit_idle(void) void exit_idle(void) { /* idle loop has pid 0 */ @@ -27196,7 +26497,7 @@ index f804dc9..7c62095 100644 return; __exit_idle(); } -@@ -325,7 +329,7 @@ bool xen_set_default_idle(void) +@@ -327,7 +331,7 @@ bool xen_set_default_idle(void) return ret; } #endif @@ -27205,7 +26506,7 @@ index f804dc9..7c62095 100644 { local_irq_disable(); /* -@@ -454,16 +458,37 @@ static int __init idle_setup(char *str) +@@ -456,16 +460,37 @@ static int __init idle_setup(char *str) } early_param("idle", idle_setup); @@ -27254,7 +26555,7 @@ index f804dc9..7c62095 100644 +} +#endif diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c -index 7bc86bb..0ea06e8 100644 +index 8f3ebfe..e6ced5a 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c @@ -64,6 +64,7 @@ asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread"); @@ -27288,7 +26589,7 @@ index 7bc86bb..0ea06e8 100644 print_symbol("EIP is at %s\n", regs->ip); printk(KERN_DEFAULT "EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", -@@ -132,20 +132,21 @@ void release_thread(struct task_struct *dead_task) +@@ -132,21 +132,22 @@ void release_thread(struct task_struct *dead_task) int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long arg, struct task_struct *p) { @@ -27300,6 +26601,7 @@ index 7bc86bb..0ea06e8 100644 p->thread.sp = (unsigned long) childregs; p->thread.sp0 = (unsigned long) (childregs+1); + p->tinfo.lowest_stack = (unsigned long)task_stack_page(p); + memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps)); if (unlikely(p->flags & PF_KTHREAD)) { /* kernel thread */ @@ -27314,7 +26616,7 @@ index 7bc86bb..0ea06e8 100644 childregs->fs = __KERNEL_PERCPU; childregs->bx = sp; /* function */ childregs->bp = arg; -@@ -252,7 +253,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) +@@ -248,7 +249,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) struct thread_struct *prev = &prev_p->thread, *next = &next_p->thread; int cpu = smp_processor_id(); @@ -27323,7 +26625,7 @@ index 7bc86bb..0ea06e8 100644 fpu_switch_t fpu; /* never put a printk in __switch_to... printk() calls wake_up*() indirectly */ -@@ -276,6 +277,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) +@@ -272,6 +273,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) */ lazy_save_gs(prev->gs); @@ -27334,7 +26636,7 @@ index 7bc86bb..0ea06e8 100644 /* * Load the per-thread Thread-Local Storage descriptor. */ -@@ -314,9 +319,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) +@@ -310,9 +315,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) */ arch_end_context_switch(next_p); @@ -27347,7 +26649,7 @@ index 7bc86bb..0ea06e8 100644 /* * Restore %gs if needed (which is common) -@@ -326,8 +331,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) +@@ -322,8 +327,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) switch_fpu_finish(next_p, fpu); @@ -27356,13 +26658,13 @@ index 7bc86bb..0ea06e8 100644 return prev_p; } -@@ -357,4 +360,3 @@ unsigned long get_wchan(struct task_struct *p) +@@ -353,4 +356,3 @@ unsigned long get_wchan(struct task_struct *p) } while (count++ < 16); return 0; } - diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c -index ca5b02d..c0b2f6a 100644 +index 5a2c029..a7f67d3 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -158,10 +158,11 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, @@ -27376,9 +26678,9 @@ index ca5b02d..c0b2f6a 100644 p->thread.usersp = me->thread.usersp; + p->tinfo.lowest_stack = (unsigned long)task_stack_page(p); set_tsk_thread_flag(p, TIF_FORK); - p->thread.fpu_counter = 0; p->thread.io_bitmap_ptr = NULL; -@@ -172,6 +173,8 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, + +@@ -171,6 +172,8 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, p->thread.fs = p->thread.fsindex ? 0 : me->thread.fs; savesegment(es, p->thread.es); savesegment(ds, p->thread.ds); @@ -27387,7 +26689,7 @@ index ca5b02d..c0b2f6a 100644 memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps)); if (unlikely(p->flags & PF_KTHREAD)) { -@@ -280,7 +283,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) +@@ -277,7 +280,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) struct thread_struct *prev = &prev_p->thread; struct thread_struct *next = &next_p->thread; int cpu = smp_processor_id(); @@ -27396,17 +26698,18 @@ index ca5b02d..c0b2f6a 100644 unsigned fsindex, gsindex; fpu_switch_t fpu; -@@ -303,6 +306,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) +@@ -331,6 +334,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) if (unlikely(next->ds | prev->ds)) loadsegment(ds, next->ds); + savesegment(ss, prev->ss); + if (unlikely(next->ss != prev->ss)) + loadsegment(ss, next->ss); - - /* We must save %fs and %gs before load_TLS() because - * %fs and %gs may be cleared by load_TLS(). -@@ -362,6 +368,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) ++ + /* + * Switch FS and GS. + * +@@ -404,6 +411,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) prev->usersp = this_cpu_read(old_rsp); this_cpu_write(old_rsp, next->usersp); this_cpu_write(current_task, next_p); @@ -27414,7 +26717,7 @@ index ca5b02d..c0b2f6a 100644 /* * If it were not for PREEMPT_ACTIVE we could guarantee that the -@@ -371,9 +378,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) +@@ -413,9 +421,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) task_thread_info(prev_p)->saved_preempt_count = this_cpu_read(__preempt_count); this_cpu_write(__preempt_count, task_thread_info(next_p)->saved_preempt_count); @@ -27425,7 +26728,7 @@ index ca5b02d..c0b2f6a 100644 /* * Now maybe reload the debug registers and handle I/O bitmaps -@@ -443,12 +448,11 @@ unsigned long get_wchan(struct task_struct *p) +@@ -485,12 +491,11 @@ unsigned long get_wchan(struct task_struct *p) if (!p || p == current || p->state == TASK_RUNNING) return 0; stack = (unsigned long)task_stack_page(p); @@ -27441,7 +26744,7 @@ index ca5b02d..c0b2f6a 100644 ip = *(u64 *)(fp+8); if (!in_sched_functions(ip)) diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c -index b1a5dfa..ed94526 100644 +index e510618..5165ac0 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c @@ -186,10 +186,10 @@ unsigned long kernel_stack_pointer(struct pt_regs *regs) @@ -27549,8 +26852,8 @@ index b1a5dfa..ed94526 100644 } void user_single_step_siginfo(struct task_struct *tsk, -@@ -1441,6 +1455,10 @@ void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, - force_sig_info(SIGTRAP, &info, tsk); +@@ -1455,6 +1469,10 @@ static void do_audit_syscall_entry(struct pt_regs *regs, u32 arch) + } } +#ifdef CONFIG_GRKERNSEC_SETXID @@ -27558,11 +26861,11 @@ index b1a5dfa..ed94526 100644 +#endif + /* - * We must return the syscall number to actually look up in the table. - * This can be -1L to skip running any syscall at all. -@@ -1451,6 +1469,11 @@ long syscall_trace_enter(struct pt_regs *regs) + * 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 +@@ -1562,6 +1580,11 @@ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch, - user_exit(); + BUG_ON(regs != task_pt_regs(current)); +#ifdef CONFIG_GRKERNSEC_SETXID + if (unlikely(test_and_clear_thread_flag(TIF_GRSEC_SETXID))) @@ -27572,7 +26875,7 @@ index b1a5dfa..ed94526 100644 /* * If we stepped into a sysenter/syscall insn, it trapped in * kernel mode; do_debug() cleared TF and set TIF_SINGLESTEP. -@@ -1506,6 +1529,11 @@ void syscall_trace_leave(struct pt_regs *regs) +@@ -1620,6 +1643,11 @@ void syscall_trace_leave(struct pt_regs *regs) */ user_exit(); @@ -27746,7 +27049,7 @@ index 3fd2c69..a444264 100644 identity_mapped: /* set return address to 0 if not preserving context */ diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index 41ead8d..7ccde23 100644 +index ab08aa2..6d74a3a 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -110,6 +110,7 @@ @@ -27842,7 +27145,7 @@ index 41ead8d..7ccde23 100644 early_reserve_initrd(); -@@ -946,14 +989,14 @@ void __init setup_arch(char **cmdline_p) +@@ -955,14 +998,14 @@ void __init setup_arch(char **cmdline_p) if (!boot_params.hdr.root_flags) root_mountflags &= ~MS_RDONLY; @@ -28032,10 +27335,10 @@ index be8e1bd..a3d93fa 100644 .smp_prepare_cpus = native_smp_prepare_cpus, .smp_cpus_done = native_smp_cpus_done, diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c -index 42a2dca..35a07aa 100644 +index 668d8f2..84a9d54 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c -@@ -226,14 +226,17 @@ static void notrace start_secondary(void *unused) +@@ -194,14 +194,17 @@ static void notrace start_secondary(void *unused) enable_start_cpu0 = 0; @@ -28057,7 +27360,7 @@ index 42a2dca..35a07aa 100644 /* * Check TSC synchronization with the BP: */ -@@ -760,8 +763,9 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) +@@ -765,8 +768,9 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) alternatives_enable_smp(); idle->thread.sp = (unsigned long) (((struct pt_regs *) @@ -28068,7 +27371,7 @@ index 42a2dca..35a07aa 100644 #ifdef CONFIG_X86_32 /* Stack for startup_32 can be just as for start_secondary onwards */ -@@ -770,10 +774,10 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) +@@ -775,10 +779,10 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle) clear_tsk_thread_flag(idle, TIF_FORK); initial_gs = per_cpu_offset(cpu); #endif @@ -28082,7 +27385,7 @@ index 42a2dca..35a07aa 100644 initial_code = (unsigned long)start_secondary; stack_start = idle->thread.sp; -@@ -919,6 +923,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle) +@@ -918,6 +922,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle) /* the FPU context is blank, nobody can own it */ __cpu_disable_lazy_restore(cpu); @@ -28511,10 +27814,10 @@ index 0fa2960..91eabbe 100644 return pc; } diff --git a/arch/x86/kernel/tls.c b/arch/x86/kernel/tls.c -index f7fec09..9991981 100644 +index 4e942f3..d0f623f 100644 --- a/arch/x86/kernel/tls.c +++ b/arch/x86/kernel/tls.c -@@ -84,6 +84,11 @@ int do_set_thread_area(struct task_struct *p, int idx, +@@ -118,6 +118,11 @@ int do_set_thread_area(struct task_struct *p, int idx, if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX) return -EINVAL; @@ -28526,7 +27829,7 @@ index f7fec09..9991981 100644 set_tls_desc(p, idx, &info, 1); return 0; -@@ -200,7 +205,7 @@ int regset_tls_set(struct task_struct *target, const struct user_regset *regset, +@@ -235,7 +240,7 @@ int regset_tls_set(struct task_struct *target, const struct user_regset *regset, if (kbuf) info = kbuf; @@ -28554,7 +27857,7 @@ index 1c113db..287b42e 100644 static int trace_irq_vector_refcount; static DEFINE_MUTEX(irq_vector_mutex); diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c -index 0d0e922..0886373 100644 +index 07ab8e9..99c8456 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -67,7 +67,7 @@ @@ -28633,7 +27936,7 @@ index 0d0e922..0886373 100644 regs->ip, regs->sp, error_code); print_vma_addr(" in ", regs->ip); pr_cont("\n"); -@@ -266,6 +278,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) +@@ -274,6 +286,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) tsk->thread.error_code = error_code; tsk->thread.trap_nr = X86_TRAP_DF; @@ -28645,7 +27948,7 @@ index 0d0e922..0886373 100644 #ifdef CONFIG_DOUBLEFAULT df_debug(regs, error_code); #endif -@@ -288,7 +305,7 @@ do_general_protection(struct pt_regs *regs, long error_code) +@@ -296,7 +313,7 @@ do_general_protection(struct pt_regs *regs, long error_code) conditional_sti(regs); #ifdef CONFIG_X86_32 @@ -28654,7 +27957,7 @@ index 0d0e922..0886373 100644 local_irq_enable(); handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code); goto exit; -@@ -296,18 +313,42 @@ do_general_protection(struct pt_regs *regs, long error_code) +@@ -304,18 +321,42 @@ do_general_protection(struct pt_regs *regs, long error_code) #endif tsk = current; @@ -28699,7 +28002,25 @@ index 0d0e922..0886373 100644 tsk->thread.error_code = error_code; tsk->thread.trap_nr = X86_TRAP_GP; -@@ -481,7 +522,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code) +@@ -427,13 +468,16 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s) + container_of(task_pt_regs(current), + struct bad_iret_stack, regs); + ++ if ((current->thread.sp0 ^ (unsigned long)s) < THREAD_SIZE) ++ new_stack = s; ++ + /* Copy the IRET target to the new stack. */ + memmove(&new_stack->regs.ip, (void *)s->regs.sp, 5*8); + + /* Copy the remainder of the stack from the current stack. */ + memmove(new_stack, s, offsetof(struct bad_iret_stack, regs.ip)); + +- BUG_ON(!user_mode_vm(&new_stack->regs)); ++ BUG_ON(!user_mode(&new_stack->regs)); + return new_stack; + } + NOKPROBE_SYMBOL(fixup_bad_iret); +@@ -519,7 +563,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code) /* It's safe to allow irq's after DR6 has been saved */ preempt_conditional_sti(regs); @@ -28708,7 +28029,7 @@ index 0d0e922..0886373 100644 handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code, X86_TRAP_DB); preempt_conditional_cli(regs); -@@ -496,7 +537,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code) +@@ -534,7 +578,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code) * We already checked v86 mode above, so we can check for kernel mode * by just checking the CPL of CS. */ @@ -28717,7 +28038,7 @@ index 0d0e922..0886373 100644 tsk->thread.debugreg6 &= ~DR_STEP; set_tsk_thread_flag(tsk, TIF_SINGLESTEP); regs->flags &= ~X86_EFLAGS_TF; -@@ -529,7 +570,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr) +@@ -567,7 +611,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr) return; conditional_sti(regs); @@ -29106,7 +28427,7 @@ index 49edf2d..c0d1362 100644 #ifdef CONFIG_SMP diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c -index e1e1e80..1400089 100644 +index 957779f..74e405c 100644 --- a/arch/x86/kernel/vsyscall_64.c +++ b/arch/x86/kernel/vsyscall_64.c @@ -54,15 +54,13 @@ @@ -29252,10 +28573,10 @@ index 4c540c4..0b985b0 100644 if ((unsigned long)buf % 64 || fx_only) { u64 init_bv = pcntxt_mask & ~XSTATE_FPSSE; diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c -index 38a0afe..94421a9 100644 +index 976e3a5..8bb998c 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c -@@ -166,15 +166,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu, +@@ -175,15 +175,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid, struct kvm_cpuid_entry2 __user *entries) { @@ -29279,7 +28600,7 @@ index 38a0afe..94421a9 100644 vcpu->arch.cpuid_nent = cpuid->nent; kvm_apic_set_version(vcpu); kvm_x86_ops->cpuid_update(vcpu); -@@ -189,15 +194,19 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu, +@@ -196,15 +201,19 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid, struct kvm_cpuid_entry2 __user *entries) { @@ -29302,8 +28623,30 @@ index 38a0afe..94421a9 100644 return 0; out: +diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c +index 9f8a2fa..2df3c3f 100644 +--- a/arch/x86/kvm/emulate.c ++++ b/arch/x86/kvm/emulate.c +@@ -3519,7 +3519,7 @@ static int check_cr_write(struct x86_emulate_ctxt *ctxt) + int cr = ctxt->modrm_reg; + u64 efer = 0; + +- static u64 cr_reserved_bits[] = { ++ static const u64 cr_reserved_bits[] = { + 0xffffffff00000000ULL, + 0, 0, 0, /* CR3 checked later */ + CR4_RESERVED_BITS, +@@ -3554,7 +3554,7 @@ static int check_cr_write(struct x86_emulate_ctxt *ctxt) + + ctxt->ops->get_msr(ctxt, MSR_EFER, &efer); + if (efer & EFER_LMA) +- rsvd = CR3_L_MODE_RESERVED_BITS; ++ rsvd = CR3_L_MODE_RESERVED_BITS & ~CR3_PCID_INVD; + + if (new_val & rsvd) + return emulate_gp(ctxt, 0); diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c -index 08e8a89..0e9183e 100644 +index b8345dd..f225d71 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -55,7 +55,7 @@ @@ -29316,10 +28659,10 @@ index 08e8a89..0e9183e 100644 #define APIC_LVT_NUM 6 /* 14 is the version for Xeon and Pentium 8.4.8*/ diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h -index 4107765..d9eb358 100644 +index fd49c86..77e1aa0 100644 --- a/arch/x86/kvm/paging_tmpl.h +++ b/arch/x86/kvm/paging_tmpl.h -@@ -331,7 +331,7 @@ retry_walk: +@@ -343,7 +343,7 @@ retry_walk: if (unlikely(kvm_is_error_hva(host_addr))) goto error; @@ -29329,10 +28672,10 @@ index 4107765..d9eb358 100644 goto error; walker->ptep_user[walker->level - 1] = ptep_user; diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c -index 78dadc3..fd84599 100644 +index 7527cef..c63a838e 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c -@@ -3547,7 +3547,11 @@ static void reload_tss(struct kvm_vcpu *vcpu) +@@ -3564,7 +3564,11 @@ static void reload_tss(struct kvm_vcpu *vcpu) int cpu = raw_smp_processor_id(); struct svm_cpu_data *sd = per_cpu(svm_data, cpu); @@ -29344,7 +28687,7 @@ index 78dadc3..fd84599 100644 load_TR_desc(); } -@@ -3948,6 +3952,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) +@@ -3965,6 +3969,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) #endif #endif @@ -29356,10 +28699,10 @@ index 78dadc3..fd84599 100644 local_irq_disable(); diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c -index 41a5426..c0b3c00 100644 +index 3e556c6..08bbf7f 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c -@@ -1341,12 +1341,12 @@ static void vmcs_write64(unsigned long field, u64 value) +@@ -1366,12 +1366,12 @@ static void vmcs_write64(unsigned long field, u64 value) #endif } @@ -29374,7 +28717,7 @@ index 41a5426..c0b3c00 100644 { vmcs_writel(field, vmcs_readl(field) | mask); } -@@ -1606,7 +1606,11 @@ static void reload_tss(void) +@@ -1631,7 +1631,11 @@ static void reload_tss(void) struct desc_struct *descs; descs = (void *)gdt->address; @@ -29386,7 +28729,7 @@ index 41a5426..c0b3c00 100644 load_TR_desc(); } -@@ -1834,6 +1838,10 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu) +@@ -1859,6 +1863,10 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu) vmcs_writel(HOST_TR_BASE, kvm_read_tr_base()); /* 22.2.4 */ vmcs_writel(HOST_GDTR_BASE, gdt->address); /* 22.2.4 */ @@ -29397,7 +28740,7 @@ index 41a5426..c0b3c00 100644 rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp); vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */ vmx->loaded_vmcs->cpu = cpu; -@@ -2123,7 +2131,7 @@ static void setup_msrs(struct vcpu_vmx *vmx) +@@ -2148,7 +2156,7 @@ static void setup_msrs(struct vcpu_vmx *vmx) * reads and returns guest's timestamp counter "register" * guest_tsc = host_tsc + tsc_offset -- 21.3 */ @@ -29406,9 +28749,15 @@ index 41a5426..c0b3c00 100644 { u64 host_tsc, tsc_offset; -@@ -3114,8 +3122,11 @@ static __init int hardware_setup(void) - if (!cpu_has_vmx_flexpriority()) - flexpriority_enabled = 0; +@@ -3146,11 +3154,16 @@ static __init int hardware_setup(void) + * page upon invalidation. No need to do anything if the + * processor does not have the APIC_ACCESS_ADDR VMCS field. + */ +- kvm_x86_ops->set_apic_access_page_addr = NULL; ++ pax_open_kernel(); ++ *(void **)&kvm_x86_ops->set_apic_access_page_addr = NULL; ++ pax_close_kernel(); + } - if (!cpu_has_vmx_tpr_shadow()) - kvm_x86_ops->update_cr8_intercept = NULL; @@ -29420,7 +28769,7 @@ index 41a5426..c0b3c00 100644 if (enable_ept && !cpu_has_vmx_ept_2m_page()) kvm_disable_largepages(); -@@ -3126,13 +3137,15 @@ static __init int hardware_setup(void) +@@ -3161,13 +3174,15 @@ static __init int hardware_setup(void) if (!cpu_has_vmx_apicv()) enable_apicv = 0; @@ -29440,7 +28789,7 @@ index 41a5426..c0b3c00 100644 if (nested) nested_vmx_setup_ctls_msrs(); -@@ -4242,7 +4255,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) +@@ -4274,7 +4289,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) unsigned long cr4; vmcs_writel(HOST_CR0, read_cr0() & ~X86_CR0_TS); /* 22.2.3 */ @@ -29451,7 +28800,7 @@ index 41a5426..c0b3c00 100644 /* Save the most likely value for this task's CR4 in the VMCS. */ cr4 = read_cr4(); -@@ -4269,7 +4285,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) +@@ -4301,7 +4319,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) vmcs_writel(HOST_IDTR_BASE, dt.address); /* 22.2.4 */ vmx->host_idt_base = dt.address; @@ -29460,7 +28809,7 @@ index 41a5426..c0b3c00 100644 rdmsr(MSR_IA32_SYSENTER_CS, low32, high32); vmcs_write32(HOST_IA32_SYSENTER_CS, low32); -@@ -7475,6 +7491,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) +@@ -7622,6 +7640,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) "jmp 2f \n\t" "1: " __ex(ASM_VMX_VMRESUME) "\n\t" "2: " @@ -29473,7 +28822,7 @@ index 41a5426..c0b3c00 100644 /* Save guest registers, load host registers, keep flags */ "mov %0, %c[wordsize](%%" _ASM_SP ") \n\t" "pop %0 \n\t" -@@ -7527,6 +7549,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) +@@ -7674,6 +7698,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) #endif [cr2]"i"(offsetof(struct vcpu_vmx, vcpu.arch.cr2)), [wordsize]"i"(sizeof(ulong)) @@ -29485,7 +28834,7 @@ index 41a5426..c0b3c00 100644 : "cc", "memory" #ifdef CONFIG_X86_64 , "rax", "rbx", "rdi", "rsi" -@@ -7540,7 +7567,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) +@@ -7687,7 +7716,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) if (debugctlmsr) update_debugctlmsr(debugctlmsr); @@ -29494,7 +28843,7 @@ index 41a5426..c0b3c00 100644 /* * The sysexit path does not restore ds/es, so we must set them to * a reasonable value ourselves. -@@ -7549,8 +7576,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) +@@ -7696,8 +7725,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) * may be executed in interrupt context, which saves and restore segments * around it, nullifying its effect. */ @@ -29516,10 +28865,19 @@ index 41a5426..c0b3c00 100644 vcpu->arch.regs_avail = ~((1 << VCPU_REGS_RIP) | (1 << VCPU_REGS_RSP) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c -index d6aeccf..cea125a 100644 +index 0033df3..db6236d 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c -@@ -1857,8 +1857,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data) +@@ -732,6 +732,8 @@ EXPORT_SYMBOL_GPL(kvm_set_cr4); + + int kvm_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3) + { ++ cr3 &= ~CR3_PCID_INVD; ++ + if (cr3 == kvm_read_cr3(vcpu) && !pdptrs_changed(vcpu)) { + kvm_mmu_sync_roots(vcpu); + kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu); +@@ -1878,8 +1880,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data) { struct kvm *kvm = vcpu->kvm; int lm = is_long_mode(vcpu); @@ -29530,7 +28888,7 @@ index d6aeccf..cea125a 100644 u8 blob_size = lm ? kvm->arch.xen_hvm_config.blob_size_64 : kvm->arch.xen_hvm_config.blob_size_32; u32 page_num = data & ~PAGE_MASK; -@@ -2779,6 +2779,8 @@ long kvm_arch_dev_ioctl(struct file *filp, +@@ -2806,6 +2808,8 @@ long kvm_arch_dev_ioctl(struct file *filp, if (n < msr_list.nmsrs) goto out; r = -EFAULT; @@ -29539,7 +28897,7 @@ index d6aeccf..cea125a 100644 if (copy_to_user(user_msr_list->indices, &msrs_to_save, num_msrs_to_save * sizeof(u32))) goto out; -@@ -5639,7 +5641,7 @@ static struct notifier_block pvclock_gtod_notifier = { +@@ -5670,7 +5674,7 @@ static struct notifier_block pvclock_gtod_notifier = { }; #endif @@ -30334,18 +29692,27 @@ index f2145cf..cea889d 100644 .byte (clear_page_c - clear_page) - (2f - 1b) /* offset */ 2: .byte 0xeb /* jmp */ diff --git a/arch/x86/lib/cmpxchg16b_emu.S b/arch/x86/lib/cmpxchg16b_emu.S -index 1e572c5..2a162cd 100644 +index 40a1725..5d12ac4 100644 --- a/arch/x86/lib/cmpxchg16b_emu.S +++ b/arch/x86/lib/cmpxchg16b_emu.S -@@ -53,11 +53,13 @@ this_cpu_cmpxchg16b_emu: +@@ -8,6 +8,7 @@ + #include + #include + #include ++#include + + .text - popf +@@ -46,12 +47,14 @@ CFI_STARTPROC + CFI_REMEMBER_STATE + popfq_cfi mov $1, %al + pax_force_retaddr ret - not_same: - popf + CFI_RESTORE_STATE + .Lnot_same: + popfq_cfi xor %al,%al + pax_force_retaddr ret @@ -30692,10 +30059,10 @@ index 2419d5f..fe52d0e 100644 CFI_RESTORE_STATE diff --git a/arch/x86/lib/csum-wrappers_64.c b/arch/x86/lib/csum-wrappers_64.c -index 7609e0e..b449b98 100644 +index 1318f75..44c30fd 100644 --- a/arch/x86/lib/csum-wrappers_64.c +++ b/arch/x86/lib/csum-wrappers_64.c -@@ -53,10 +53,12 @@ csum_partial_copy_from_user(const void __user *src, void *dst, +@@ -52,10 +52,12 @@ csum_partial_copy_from_user(const void __user *src, void *dst, len -= 2; } } @@ -30709,7 +30076,7 @@ index 7609e0e..b449b98 100644 if (unlikely(*errp)) goto out_err; -@@ -110,10 +112,12 @@ csum_partial_copy_to_user(const void *src, void __user *dst, +@@ -109,10 +111,12 @@ csum_partial_copy_to_user(const void *src, void __user *dst, } *errp = 0; @@ -31549,80 +30916,6 @@ index fc6ba17..d4d989d 100644 #endif xor %eax,%eax EXIT -diff --git a/arch/x86/lib/rwlock.S b/arch/x86/lib/rwlock.S -index 1cad221..de671ee 100644 ---- a/arch/x86/lib/rwlock.S -+++ b/arch/x86/lib/rwlock.S -@@ -16,13 +16,34 @@ ENTRY(__write_lock_failed) - FRAME - 0: LOCK_PREFIX - WRITE_LOCK_ADD($RW_LOCK_BIAS) (%__lock_ptr) -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ jno 1234f -+ LOCK_PREFIX -+ WRITE_LOCK_SUB($RW_LOCK_BIAS) (%__lock_ptr) -+ int $4 -+1234: -+ _ASM_EXTABLE(1234b, 1234b) -+#endif -+ - 1: rep; nop - cmpl $WRITE_LOCK_CMP, (%__lock_ptr) - jne 1b - LOCK_PREFIX - WRITE_LOCK_SUB($RW_LOCK_BIAS) (%__lock_ptr) -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ jno 1234f -+ LOCK_PREFIX -+ WRITE_LOCK_ADD($RW_LOCK_BIAS) (%__lock_ptr) -+ int $4 -+1234: -+ _ASM_EXTABLE(1234b, 1234b) -+#endif -+ - jnz 0b - ENDFRAME -+ pax_force_retaddr - ret - CFI_ENDPROC - END(__write_lock_failed) -@@ -32,13 +53,34 @@ ENTRY(__read_lock_failed) - FRAME - 0: LOCK_PREFIX - READ_LOCK_SIZE(inc) (%__lock_ptr) -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ jno 1234f -+ LOCK_PREFIX -+ READ_LOCK_SIZE(dec) (%__lock_ptr) -+ int $4 -+1234: -+ _ASM_EXTABLE(1234b, 1234b) -+#endif -+ - 1: rep; nop - READ_LOCK_SIZE(cmp) $1, (%__lock_ptr) - js 1b - LOCK_PREFIX - READ_LOCK_SIZE(dec) (%__lock_ptr) -+ -+#ifdef CONFIG_PAX_REFCOUNT -+ jno 1234f -+ LOCK_PREFIX -+ READ_LOCK_SIZE(inc) (%__lock_ptr) -+ int $4 -+1234: -+ _ASM_EXTABLE(1234b, 1234b) -+#endif -+ - js 0b - ENDFRAME -+ pax_force_retaddr - ret - CFI_ENDPROC - END(__read_lock_failed) diff --git a/arch/x86/lib/rwsem.S b/arch/x86/lib/rwsem.S index 5dff5f0..cadebf4 100644 --- a/arch/x86/lib/rwsem.S @@ -31662,7 +30955,7 @@ index 5dff5f0..cadebf4 100644 CFI_ENDPROC ENDPROC(call_rwsem_downgrade_wake) diff --git a/arch/x86/lib/thunk_64.S b/arch/x86/lib/thunk_64.S -index 92d9fea..b2762c8 100644 +index b30b5eb..2b57052 100644 --- a/arch/x86/lib/thunk_64.S +++ b/arch/x86/lib/thunk_64.S @@ -9,6 +9,7 @@ @@ -31688,7 +30981,7 @@ index 92d9fea..b2762c8 100644 .endif call \func -@@ -40,9 +41,10 @@ +@@ -47,9 +48,10 @@ /* SAVE_ARGS below is used only for the .cfi directives it contains. */ CFI_STARTPROC @@ -32411,10 +31704,10 @@ index 903ec1e..c4166b2 100644 } diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c -index a241946..d7a04cf 100644 +index d973e61..fb868e9 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c -@@ -14,12 +14,19 @@ +@@ -13,12 +13,19 @@ #include /* hstate_index_to_shift */ #include /* prefetchw */ #include /* exception_enter(), ... */ @@ -32434,7 +31727,7 @@ index a241946..d7a04cf 100644 #define CREATE_TRACE_POINTS #include -@@ -60,7 +67,7 @@ static nokprobe_inline int kprobes_fault(struct pt_regs *regs) +@@ -59,7 +66,7 @@ static nokprobe_inline int kprobes_fault(struct pt_regs *regs) int ret = 0; /* kprobe_running() needs smp_processor_id() */ @@ -32443,7 +31736,7 @@ index a241946..d7a04cf 100644 preempt_disable(); if (kprobe_running() && kprobe_fault_handler(regs, 14)) ret = 1; -@@ -121,7 +128,10 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr, +@@ -120,7 +127,10 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr, return !instr_lo || (instr_lo>>1) == 1; case 0x00: /* Prefetch instruction is 0x0F0D or 0x0F18 */ @@ -32455,7 +31748,7 @@ index a241946..d7a04cf 100644 return 0; *prefetch = (instr_lo == 0xF) && -@@ -155,7 +165,10 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr) +@@ -154,7 +164,10 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr) while (instr < max_instr) { unsigned char opcode; @@ -32467,7 +31760,7 @@ index a241946..d7a04cf 100644 break; instr++; -@@ -186,6 +199,34 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address, +@@ -185,6 +198,34 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address, force_sig_info(si_signo, &info, tsk); } @@ -32502,7 +31795,7 @@ index a241946..d7a04cf 100644 DEFINE_SPINLOCK(pgd_lock); LIST_HEAD(pgd_list); -@@ -236,10 +277,27 @@ void vmalloc_sync_all(void) +@@ -235,10 +276,27 @@ void vmalloc_sync_all(void) for (address = VMALLOC_START & PMD_MASK; address >= TASK_SIZE && address < FIXADDR_TOP; address += PMD_SIZE) { @@ -32530,7 +31823,7 @@ index a241946..d7a04cf 100644 spinlock_t *pgt_lock; pmd_t *ret; -@@ -247,8 +305,14 @@ void vmalloc_sync_all(void) +@@ -246,8 +304,14 @@ void vmalloc_sync_all(void) pgt_lock = &pgd_page_get_mm(page)->page_table_lock; spin_lock(pgt_lock); @@ -32546,7 +31839,7 @@ index a241946..d7a04cf 100644 if (!ret) break; -@@ -282,6 +346,12 @@ static noinline int vmalloc_fault(unsigned long address) +@@ -281,6 +345,12 @@ static noinline int vmalloc_fault(unsigned long address) * an interrupt in the middle of a task switch.. */ pgd_paddr = read_cr3(); @@ -32559,7 +31852,7 @@ index a241946..d7a04cf 100644 pmd_k = vmalloc_sync_one(__va(pgd_paddr), address); if (!pmd_k) return -1; -@@ -378,11 +448,25 @@ static noinline int vmalloc_fault(unsigned long address) +@@ -377,11 +447,25 @@ static noinline int vmalloc_fault(unsigned long address) * happen within a race in page table update. In the later * case just flush: */ @@ -32586,7 +31879,7 @@ index a241946..d7a04cf 100644 if (pgd_none(*pgd)) { set_pgd(pgd, *pgd_ref); arch_flush_lazy_mmu_mode(); -@@ -549,7 +633,7 @@ static int is_errata93(struct pt_regs *regs, unsigned long address) +@@ -548,7 +632,7 @@ static int is_errata93(struct pt_regs *regs, unsigned long address) static int is_errata100(struct pt_regs *regs, unsigned long address) { #ifdef CONFIG_X86_64 @@ -32595,7 +31888,7 @@ index a241946..d7a04cf 100644 return 1; #endif return 0; -@@ -576,9 +660,9 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address) +@@ -575,9 +659,9 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address) } static const char nx_warning[] = KERN_CRIT @@ -32607,7 +31900,7 @@ index a241946..d7a04cf 100644 static void show_fault_oops(struct pt_regs *regs, unsigned long error_code, -@@ -587,7 +671,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, +@@ -586,7 +670,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, if (!oops_may_print()) return; @@ -32616,7 +31909,7 @@ index a241946..d7a04cf 100644 unsigned int level; pgd_t *pgd; pte_t *pte; -@@ -598,13 +682,25 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, +@@ -597,13 +681,25 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, pte = lookup_address_in_pgd(pgd, address, &level); if (pte && pte_present(*pte) && !pte_exec(*pte)) @@ -32644,7 +31937,7 @@ index a241946..d7a04cf 100644 printk(KERN_ALERT "BUG: unable to handle kernel "); if (address < PAGE_SIZE) printk(KERN_CONT "NULL pointer dereference"); -@@ -785,6 +881,22 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, +@@ -782,6 +878,22 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, return; } #endif @@ -32667,7 +31960,7 @@ index a241946..d7a04cf 100644 /* Kernel addresses are always protection faults: */ if (address >= TASK_SIZE) error_code |= PF_PROT; -@@ -870,7 +982,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, +@@ -867,7 +979,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) { printk(KERN_ERR "MCE: Killing %s:%d due to hardware memory corruption fault at %lx\n", @@ -32676,7 +31969,7 @@ index a241946..d7a04cf 100644 code = BUS_MCEERR_AR; } #endif -@@ -924,6 +1036,99 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte) +@@ -921,6 +1033,99 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte) return 1; } @@ -32776,7 +32069,7 @@ index a241946..d7a04cf 100644 /* * Handle a spurious fault caused by a stale TLB entry. * -@@ -991,6 +1196,9 @@ int show_unhandled_signals = 1; +@@ -1006,6 +1211,9 @@ int show_unhandled_signals = 1; static inline int access_error(unsigned long error_code, struct vm_area_struct *vma) { @@ -32786,7 +32079,7 @@ index a241946..d7a04cf 100644 if (error_code & PF_WRITE) { /* write, present and write, not present: */ if (unlikely(!(vma->vm_flags & VM_WRITE))) -@@ -1025,7 +1233,7 @@ static inline bool smap_violation(int error_code, struct pt_regs *regs) +@@ -1040,7 +1248,7 @@ static inline bool smap_violation(int error_code, struct pt_regs *regs) if (error_code & PF_USER) return false; @@ -32795,7 +32088,7 @@ index a241946..d7a04cf 100644 return false; return true; -@@ -1053,6 +1261,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, +@@ -1068,6 +1276,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, tsk = current; mm = tsk->mm; @@ -32818,7 +32111,7 @@ index a241946..d7a04cf 100644 /* * Detect and handle instructions that would cause a page fault for * both a tracked kernel page and a userspace page. -@@ -1130,7 +1354,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, +@@ -1145,7 +1369,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, * User-mode registers count as a user access even for any * potential system fault or CPU buglet: */ @@ -32827,7 +32120,7 @@ index a241946..d7a04cf 100644 local_irq_enable(); error_code |= PF_USER; flags |= FAULT_FLAG_USER; -@@ -1177,6 +1401,11 @@ retry: +@@ -1192,6 +1416,11 @@ retry: might_sleep(); } @@ -32839,7 +32132,7 @@ index a241946..d7a04cf 100644 vma = find_vma(mm, address); if (unlikely(!vma)) { bad_area(regs, error_code, address); -@@ -1188,18 +1417,24 @@ retry: +@@ -1203,18 +1432,24 @@ retry: bad_area(regs, error_code, address); return; } @@ -32875,7 +32168,7 @@ index a241946..d7a04cf 100644 if (unlikely(expand_stack(vma, address))) { bad_area(regs, error_code, address); return; -@@ -1316,3 +1551,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code) +@@ -1331,3 +1566,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code) } NOKPROBE_SYMBOL(trace_do_page_fault); #endif /* CONFIG_TRACING */ @@ -33511,7 +32804,7 @@ index 66dba36..f8082ec 100644 (unsigned long)(&__init_begin), (unsigned long)(&__init_end)); diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c -index 7d05565..bfc5338 100644 +index c8140e1..59257fc 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c @@ -62,33 +62,6 @@ static noinline int do_test_wp_bit(void); @@ -33720,8 +33013,8 @@ index 7d05565..bfc5338 100644 + permanent_kmaps_init(swapper_pg_dir); } --pteval_t __supported_pte_mask __read_mostly = ~(_PAGE_NX | _PAGE_GLOBAL | _PAGE_IOMAP); -+pteval_t __supported_pte_mask __read_only = ~(_PAGE_NX | _PAGE_GLOBAL | _PAGE_IOMAP); +-pteval_t __supported_pte_mask __read_mostly = ~(_PAGE_NX | _PAGE_GLOBAL); ++pteval_t __supported_pte_mask __read_only = ~(_PAGE_NX | _PAGE_GLOBAL); EXPORT_SYMBOL_GPL(__supported_pte_mask); /* user-defined highmem size */ @@ -33764,19 +33057,19 @@ index 7d05565..bfc5338 100644 printk(KERN_INFO "Write protecting the kernel text: %luk\n", size >> 10); diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c -index 5621c47..5e17b7390 100644 +index 4e5dfec..6fd6dc5 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -151,7 +151,7 @@ early_param("gbpages", parse_direct_gbpages_on); * around without checking the pgd every time. */ --pteval_t __supported_pte_mask __read_mostly = ~_PAGE_IOMAP; -+pteval_t __supported_pte_mask __read_only = ~(_PAGE_NX | _PAGE_IOMAP); +-pteval_t __supported_pte_mask __read_mostly = ~0; ++pteval_t __supported_pte_mask __read_only = ~_PAGE_NX; EXPORT_SYMBOL_GPL(__supported_pte_mask); int force_personality32; -@@ -184,12 +184,29 @@ void sync_global_pgds(unsigned long start, unsigned long end) +@@ -184,7 +184,12 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) for (address = start; address <= end; address += PGDIR_SIZE) { const pgd_t *pgd_ref = pgd_offset_k(address); @@ -33787,7 +33080,9 @@ index 5621c47..5e17b7390 100644 struct page *page; +#endif - if (pgd_none(*pgd_ref)) + /* + * When it is called after memory hot remove, pgd_none() +@@ -195,6 +200,25 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) continue; spin_lock(&pgd_lock); @@ -33796,27 +33091,34 @@ index 5621c47..5e17b7390 100644 + for (cpu = 0; cpu < nr_cpu_ids; ++cpu) { + pgd_t *pgd = pgd_offset_cpu(cpu, user, address); + -+ if (pgd_none(*pgd)) -+ set_pgd(pgd, *pgd_ref); -+ else ++ if (!pgd_none(*pgd_ref) && !pgd_none(*pgd)) + BUG_ON(pgd_page_vaddr(*pgd) + != pgd_page_vaddr(*pgd_ref)); ++ ++ if (removed) { ++ if (pgd_none(*pgd_ref) && !pgd_none(*pgd)) ++ pgd_clear(pgd); ++ } else { ++ if (pgd_none(*pgd)) ++ set_pgd(pgd, *pgd_ref); ++ } ++ + pgd = pgd_offset_cpu(cpu, kernel, address); +#else list_for_each_entry(page, &pgd_list, lru) { pgd_t *pgd; spinlock_t *pgt_lock; -@@ -198,6 +215,7 @@ void sync_global_pgds(unsigned long start, unsigned long end) +@@ -203,6 +227,7 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) /* the pgt_lock only for Xen */ pgt_lock = &pgd_page_get_mm(page)->page_table_lock; spin_lock(pgt_lock); +#endif - if (pgd_none(*pgd)) - set_pgd(pgd, *pgd_ref); -@@ -205,7 +223,10 @@ void sync_global_pgds(unsigned long start, unsigned long end) + if (!pgd_none(*pgd_ref) && !pgd_none(*pgd)) BUG_ON(pgd_page_vaddr(*pgd) - != pgd_page_vaddr(*pgd_ref)); +@@ -216,7 +241,10 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed) + set_pgd(pgd, *pgd_ref); + } +#ifndef CONFIG_PAX_PER_CPU_PGD spin_unlock(pgt_lock); @@ -33825,7 +33127,7 @@ index 5621c47..5e17b7390 100644 } spin_unlock(&pgd_lock); } -@@ -238,7 +259,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr) +@@ -249,7 +277,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr) { if (pgd_none(*pgd)) { pud_t *pud = (pud_t *)spp_getpage(); @@ -33834,7 +33136,7 @@ index 5621c47..5e17b7390 100644 if (pud != pud_offset(pgd, 0)) printk(KERN_ERR "PAGETABLE BUG #00! %p <-> %p\n", pud, pud_offset(pgd, 0)); -@@ -250,7 +271,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr) +@@ -261,7 +289,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr) { if (pud_none(*pud)) { pmd_t *pmd = (pmd_t *) spp_getpage(); @@ -33843,7 +33145,7 @@ index 5621c47..5e17b7390 100644 if (pmd != pmd_offset(pud, 0)) printk(KERN_ERR "PAGETABLE BUG #01! %p <-> %p\n", pmd, pmd_offset(pud, 0)); -@@ -279,7 +300,9 @@ void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte) +@@ -290,7 +318,9 @@ void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte) pmd = fill_pmd(pud, vaddr); pte = fill_pte(pmd, vaddr); @@ -33853,7 +33155,7 @@ index 5621c47..5e17b7390 100644 /* * It's enough to flush this one mapping. -@@ -338,14 +361,12 @@ static void __init __init_extra_mapping(unsigned long phys, unsigned long size, +@@ -349,14 +379,12 @@ static void __init __init_extra_mapping(unsigned long phys, unsigned long size, pgd = pgd_offset_k((unsigned long)__va(phys)); if (pgd_none(*pgd)) { pud = (pud_t *) spp_getpage(); @@ -33870,7 +33172,7 @@ index 5621c47..5e17b7390 100644 } pmd = pmd_offset(pud, phys); BUG_ON(!pmd_none(*pmd)); -@@ -586,7 +607,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end, +@@ -597,7 +625,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end, prot); spin_lock(&init_mm.page_table_lock); @@ -33879,7 +33181,7 @@ index 5621c47..5e17b7390 100644 spin_unlock(&init_mm.page_table_lock); } __flush_tlb_all(); -@@ -627,7 +648,7 @@ kernel_physical_mapping_init(unsigned long start, +@@ -638,7 +666,7 @@ kernel_physical_mapping_init(unsigned long start, page_size_mask); spin_lock(&init_mm.page_table_lock); @@ -33888,7 +33190,7 @@ index 5621c47..5e17b7390 100644 spin_unlock(&init_mm.page_table_lock); pgd_changed = true; } -@@ -1196,8 +1217,8 @@ static struct vm_operations_struct gate_vma_ops = { +@@ -1217,8 +1245,8 @@ static struct vm_operations_struct gate_vma_ops = { static struct vm_area_struct gate_vma = { .vm_start = VSYSCALL_ADDR, .vm_end = VSYSCALL_ADDR + PAGE_SIZE, @@ -33916,7 +33218,7 @@ index 7b179b49..6bd17777 100644 return (void *)vaddr; diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c -index baff1da..2816ef4 100644 +index af78e50..0790b03 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -56,8 +56,8 @@ static int __ioremap_check_ram(unsigned long start_pfn, unsigned long nr_pages, @@ -33930,7 +33232,7 @@ index baff1da..2816ef4 100644 return 1; WARN_ONCE(1, "ioremap on RAM pfn 0x%lx\n", start_pfn); -@@ -268,7 +268,7 @@ EXPORT_SYMBOL(ioremap_prot); +@@ -280,7 +280,7 @@ EXPORT_SYMBOL(ioremap_prot); * * Caller must ensure there is only one unmapping for the same pointer. */ @@ -33939,7 +33241,7 @@ index baff1da..2816ef4 100644 { struct vm_struct *p, *o; -@@ -322,6 +322,9 @@ void *xlate_dev_mem_ptr(unsigned long phys) +@@ -334,6 +334,9 @@ void *xlate_dev_mem_ptr(unsigned long phys) /* If page is RAM, we can use __va. Otherwise ioremap and unmap. */ if (page_is_ram(start >> PAGE_SHIFT)) @@ -33949,7 +33251,7 @@ index baff1da..2816ef4 100644 return __va(phys); addr = (void __force *)ioremap_cache(start, PAGE_SIZE); -@@ -334,13 +337,16 @@ void *xlate_dev_mem_ptr(unsigned long phys) +@@ -346,13 +349,16 @@ void *xlate_dev_mem_ptr(unsigned long phys) void unxlate_dev_mem_ptr(unsigned long phys, void *addr) { if (page_is_ram(phys >> PAGE_SHIFT)) @@ -33967,7 +33269,7 @@ index baff1da..2816ef4 100644 static inline pmd_t * __init early_ioremap_pmd(unsigned long addr) { -@@ -376,8 +382,7 @@ void __init early_ioremap_init(void) +@@ -388,8 +394,7 @@ void __init early_ioremap_init(void) early_ioremap_setup(); pmd = early_ioremap_pmd(fix_to_virt(FIX_BTMAP_BEGIN)); @@ -33978,7 +33280,7 @@ index baff1da..2816ef4 100644 /* * The boot-ioremap range spans multiple pmds, for which diff --git a/arch/x86/mm/kmemcheck/kmemcheck.c b/arch/x86/mm/kmemcheck/kmemcheck.c -index dd89a13..d77bdcc 100644 +index b4f2e7e..96c9c3e 100644 --- a/arch/x86/mm/kmemcheck/kmemcheck.c +++ b/arch/x86/mm/kmemcheck/kmemcheck.c @@ -628,9 +628,9 @@ bool kmemcheck_fault(struct pt_regs *regs, unsigned long address, @@ -34120,11 +33422,11 @@ index 0057a7a..95c7edd 100644 might_sleep(); if (is_enabled()) /* recheck and proper locking in *_core() */ diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c -index a32b706..efb308b 100644 +index 1a88370..3f598b5 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c -@@ -478,7 +478,7 @@ static bool __init numa_meminfo_cover_memory(const struct numa_meminfo *mi) - return true; +@@ -499,7 +499,7 @@ static void __init numa_clear_kernel_node_hotplug(void) + } } -static int __init numa_register_memblks(struct numa_meminfo *mi) @@ -34610,7 +33912,7 @@ index 6fb6927..4fc13c0 100644 paravirt_pgd_free(mm, pgd); free_page((unsigned long)pgd); diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c -index 4dd8cf6..f9d143e 100644 +index 75cc097..79a097f 100644 --- a/arch/x86/mm/pgtable_32.c +++ b/arch/x86/mm/pgtable_32.c @@ -47,10 +47,13 @@ void set_pte_vaddr(unsigned long vaddr, pte_t pteval) @@ -34831,12 +34133,12 @@ index 6440221..f84b5c7 100644 + pax_force_retaddr ret diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c -index c881ba8..71aca2e 100644 +index 3f62734..a57894f 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c -@@ -15,7 +15,11 @@ +@@ -13,7 +13,11 @@ #include - #include + #include +#ifdef CONFIG_GRKERNSEC_BPF_HARDEN +int bpf_jit_enable __read_only; @@ -34846,55 +34148,17 @@ index c881ba8..71aca2e 100644 /* * assembly code in arch/x86/net/bpf_jit.S -@@ -109,36 +113,32 @@ static inline void bpf_flush_icache(void *start, void *end) - #define CHOOSE_LOAD_FUNC(K, func) \ - ((int)K < 0 ? ((int)K >= SKF_LL_OFF ? func##_negative_offset : func) : func##_positive_offset) - --struct bpf_binary_header { -- unsigned int pages; -- /* Note : for security reasons, bpf code will follow a randomly -- * sized amount of int3 instructions -- */ -- u8 image[]; --}; -- --static struct bpf_binary_header *bpf_alloc_binary(unsigned int proglen, -+/* Note : for security reasons, bpf code will follow a randomly -+ * sized amount of int3 instructions -+ */ -+static u8 *bpf_alloc_binary(unsigned int proglen, - u8 **image_ptr) +@@ -174,7 +178,9 @@ static inline u8 add_2reg(u8 byte, u32 dst_reg, u32 src_reg) + static void jit_fill_hole(void *area, unsigned int size) { - unsigned int sz, hole; -- struct bpf_binary_header *header; -+ u8 *header; - - /* Most of BPF filters are really small, - * but if some of them fill a page, allow at least - * 128 extra bytes to insert a random section of int3 - */ -- sz = round_up(proglen + sizeof(*header) + 128, PAGE_SIZE); -- header = module_alloc(sz); -+ sz = round_up(proglen + 128, PAGE_SIZE); -+ header = module_alloc_exec(sz); - if (!header) - return NULL; - + /* fill whole space with int3 instructions */ + pax_open_kernel(); - memset(header, 0xcc, sz); /* fill whole space with int3 instructions */ + memset(area, 0xcc, size); + pax_close_kernel(); - -- header->pages = sz / PAGE_SIZE; -- hole = min(sz - (proglen + sizeof(*header)), PAGE_SIZE - sizeof(*header)); -+ hole = PAGE_SIZE - (proglen & ~PAGE_MASK); - - /* insert a random number of int3 instructions before BPF code */ -- *image_ptr = &header->image[prandom_u32() % hole]; -+ *image_ptr = &header[prandom_u32() % hole]; - return header; } -@@ -864,7 +864,9 @@ common_load: + struct jit_context { +@@ -894,7 +900,9 @@ common_load: pr_err("bpf_jit_compile fatal error\n"); return -EFAULT; } @@ -34904,64 +34168,28 @@ index c881ba8..71aca2e 100644 } proglen += ilen; addrs[i] = proglen; -@@ -879,7 +881,7 @@ void bpf_jit_compile(struct bpf_prog *prog) - - void bpf_int_jit_compile(struct bpf_prog *prog) - { -- struct bpf_binary_header *header = NULL; -+ u8 *header = NULL; - int proglen, oldproglen = 0; - struct jit_context ctx = {}; - u8 *image = NULL; -@@ -911,7 +913,7 @@ void bpf_int_jit_compile(struct bpf_prog *prog) - if (proglen <= 0) { - image = NULL; - if (header) -- module_free(NULL, header); -+ module_free_exec(NULL, image); - goto out; - } - if (image) { -@@ -935,7 +937,6 @@ void bpf_int_jit_compile(struct bpf_prog *prog) +@@ -966,7 +974,6 @@ void bpf_int_jit_compile(struct bpf_prog *prog) if (image) { bpf_flush_icache(header, image + proglen); - set_memory_ro((unsigned long)header, header->pages); prog->bpf_func = (void *)image; - prog->jited = 1; + prog->jited = true; } -@@ -943,23 +944,15 @@ out: - kfree(addrs); - } +@@ -979,12 +986,8 @@ void bpf_jit_free(struct bpf_prog *fp) + unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK; + struct bpf_binary_header *header = (void *)addr; + +- if (!fp->jited) +- goto free_filter; ++ if (fp->jited) ++ bpf_jit_binary_free(header); --static void bpf_jit_free_deferred(struct work_struct *work) --{ -- struct bpf_prog *fp = container_of(work, struct bpf_prog, work); -- unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK; -- struct bpf_binary_header *header = (void *)addr; -- - set_memory_rw(addr, header->pages); -- module_free(NULL, header); -- kfree(fp); --} +- bpf_jit_binary_free(header); - - void bpf_jit_free(struct bpf_prog *fp) - { -- if (fp->jited) { -- INIT_WORK(&fp->work, bpf_jit_free_deferred); -- schedule_work(&fp->work); -- } else { -- kfree(fp); -- } -+ unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK; -+ -+ if (!fp->jited) -+ goto free_filter; -+ -+ module_free_exec(NULL, (void *)addr); -+ -+free_filter: -+ bpf_prog_unlock_free(fp); +-free_filter: + bpf_prog_unlock_free(fp); } diff --git a/arch/x86/oprofile/backtrace.c b/arch/x86/oprofile/backtrace.c index 5d04be5..2beeaa2 100644 @@ -35000,7 +34228,7 @@ index 5d04be5..2beeaa2 100644 if (depth) dump_trace(NULL, regs, (unsigned long *)stack, 0, diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c -index 379e8bd..6386e09 100644 +index 1d2e639..f6ef82a 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c @@ -23,6 +23,7 @@ @@ -35136,19 +34364,19 @@ index eb500c2..eab9e70 100644 .callback = fix_broken_hp_bios_irq9, .ident = "HP Pavilion N5400 Series Laptop", diff --git a/arch/x86/pci/pcbios.c b/arch/x86/pci/pcbios.c -index c77b24a..c979855 100644 +index 9b83b90..4112152 100644 --- a/arch/x86/pci/pcbios.c +++ b/arch/x86/pci/pcbios.c @@ -79,7 +79,7 @@ union bios32 { static struct { unsigned long address; unsigned short segment; --} bios32_indirect = { 0, __KERNEL_CS }; -+} bios32_indirect __read_only = { 0, __PCIBIOS_CS }; +-} bios32_indirect __initdata = { 0, __KERNEL_CS }; ++} bios32_indirect __initconst = { 0, __PCIBIOS_CS }; /* * Returns the entry point for the given service, NULL on error -@@ -92,37 +92,80 @@ static unsigned long bios32_service(unsigned long service) +@@ -92,37 +92,80 @@ static unsigned long __init bios32_service(unsigned long service) unsigned long length; /* %ecx */ unsigned long entry; /* %edx */ unsigned long flags; @@ -35239,9 +34467,9 @@ index c77b24a..c979855 100644 -static int pci_bios_present; +static int pci_bios_present __read_only; - static int check_pcibios(void) + static int __init check_pcibios(void) { -@@ -131,11 +174,13 @@ static int check_pcibios(void) +@@ -131,11 +174,13 @@ static int __init check_pcibios(void) unsigned long flags, pcibios_entry; if ((pcibios_entry = bios32_service(PCI_SERVICE))) { @@ -35258,7 +34486,7 @@ index c77b24a..c979855 100644 "jc 1f\n\t" "xor %%ah, %%ah\n" "1:" -@@ -144,7 +189,8 @@ static int check_pcibios(void) +@@ -144,7 +189,8 @@ static int __init check_pcibios(void) "=b" (ebx), "=c" (ecx) : "1" (PCIBIOS_PCI_BIOS_PRESENT), @@ -35438,10 +34666,10 @@ index c77b24a..c979855 100644 } EXPORT_SYMBOL(pcibios_set_irq_routing); diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c -index 9ee3491..872192f 100644 +index 40e7cda..c7e6672 100644 --- a/arch/x86/platform/efi/efi_32.c +++ b/arch/x86/platform/efi/efi_32.c -@@ -59,11 +59,22 @@ void efi_call_phys_prelog(void) +@@ -61,11 +61,22 @@ void __init efi_call_phys_prolog(void) { struct desc_ptr gdt_descr; @@ -35464,7 +34692,7 @@ index 9ee3491..872192f 100644 gdt_descr.address = __pa(get_cpu_gdt_table(0)); gdt_descr.size = GDT_SIZE - 1; load_gdt(&gdt_descr); -@@ -73,11 +84,24 @@ void efi_call_phys_epilog(void) +@@ -75,11 +86,24 @@ void __init efi_call_phys_epilog(void) { struct desc_ptr gdt_descr; @@ -35490,10 +34718,10 @@ index 9ee3491..872192f 100644 local_irq_restore(efi_rt_eflags); diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c -index 290d397..e09d270 100644 +index 35aecb6..46177db 100644 --- a/arch/x86/platform/efi/efi_64.c +++ b/arch/x86/platform/efi/efi_64.c -@@ -99,6 +99,11 @@ void __init efi_call_phys_prelog(void) +@@ -99,6 +99,11 @@ void __init efi_call_phys_prolog(void) vaddress = (unsigned long)__va(pgd * PGDIR_SIZE); set_pgd(pgd_offset_k(pgd * PGDIR_SIZE), *pgd_offset_k(vaddress)); } @@ -35517,7 +34745,7 @@ index 290d397..e09d270 100644 __flush_tlb_all(); local_irq_restore(efi_flags); early_code_mapping_set_exec(0); -@@ -146,8 +156,23 @@ int efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) +@@ -146,8 +156,23 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) unsigned npages; pgd_t *pgd; @@ -35543,7 +34771,7 @@ index 290d397..e09d270 100644 efi_scratch.efi_pgt = (pgd_t *)(unsigned long)real_mode_header->trampoline_pgd; pgd = __va(efi_scratch.efi_pgt); diff --git a/arch/x86/platform/efi/efi_stub_32.S b/arch/x86/platform/efi/efi_stub_32.S -index fbe66e6..eae5e38 100644 +index 040192b..7d3300f 100644 --- a/arch/x86/platform/efi/efi_stub_32.S +++ b/arch/x86/platform/efi/efi_stub_32.S @@ -6,7 +6,9 @@ @@ -35566,7 +34794,7 @@ index fbe66e6..eae5e38 100644 /* * 0. The function can only be called in Linux kernel. So CS has been @@ -36,10 +38,24 @@ ENTRY(efi_call_phys) - * The mapping of lower virtual memory has been created in prelog and + * The mapping of lower virtual memory has been created in prolog and * epilog. */ - movl $1f, %edx @@ -35719,20 +34947,16 @@ index 1bbedc4..eb795b5 100644 static unsigned long __init intel_mid_calibrate_tsc(void) diff --git a/arch/x86/platform/intel-mid/intel_mid_weak_decls.h b/arch/x86/platform/intel-mid/intel_mid_weak_decls.h -index 46aa25c..59a68ed 100644 +index 3c1c386..59a68ed 100644 --- a/arch/x86/platform/intel-mid/intel_mid_weak_decls.h +++ b/arch/x86/platform/intel-mid/intel_mid_weak_decls.h -@@ -10,10 +10,9 @@ - */ - - --/* __attribute__((weak)) makes these declarations overridable */ +@@ -13,6 +13,6 @@ /* For every CPU addition a new get__ops interface needs * to be added. */ --extern void *get_penwell_ops(void) __attribute__((weak)); --extern void *get_cloverview_ops(void) __attribute__((weak)); --extern void *get_tangier_ops(void) __attribute__((weak)); +-extern void *get_penwell_ops(void); +-extern void *get_cloverview_ops(void); +-extern void *get_tangier_ops(void); +extern const void *get_penwell_ops(void); +extern const void *get_cloverview_ops(void); +extern const void *get_tangier_ops(void); @@ -35963,7 +35187,7 @@ index 604a37e..e49702a 100644 relocs-objs := relocs_32.o relocs_64.o relocs_common.o PHONY += relocs diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c -index bbb1d22..e505211 100644 +index a5efb21..97490e9 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c @@ -1,5 +1,7 @@ @@ -36216,6 +35440,19 @@ index 5a4affe..9e2d522 100644 $(call cc-ldoption, -Wl$(comma)--build-id) -Wl,-Bsymbolic $(LTO_CFLAGS) GCOV_PROFILE := n +diff --git a/arch/x86/vdso/vdso2c.h b/arch/x86/vdso/vdso2c.h +index 0224987..c7d65a5 100644 +--- a/arch/x86/vdso/vdso2c.h ++++ b/arch/x86/vdso/vdso2c.h +@@ -12,7 +12,7 @@ static void BITSFUNC(go)(void *raw_addr, size_t raw_len, + unsigned long load_size = -1; /* Work around bogus warning */ + unsigned long mapping_size; + ELF(Ehdr) *hdr = (ELF(Ehdr) *)raw_addr; +- int i; ++ unsigned int i; + unsigned long j; + ELF(Shdr) *symtab_hdr = NULL, *strtab_hdr, *secstrings_hdr, + *alt_sec = NULL; diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c index e904c27..b9eaa03 100644 --- a/arch/x86/vdso/vdso32-setup.c @@ -36351,7 +35588,7 @@ index e88fda8..76ce7ce 100644 This is the Linux Xen port. Enabling this will allow the kernel to boot in a paravirtualized environment under the diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c -index c0cb11f..bed56ff 100644 +index fac5e4f..5b5cf4f 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c @@ -123,8 +123,6 @@ EXPORT_SYMBOL_GPL(xen_start_info); @@ -36439,7 +35676,7 @@ index c0cb11f..bed56ff 100644 { if (pm_power_off) pm_power_off(); -@@ -1568,7 +1564,17 @@ asmlinkage __visible void __init xen_start_kernel(void) +@@ -1573,7 +1569,17 @@ asmlinkage __visible void __init xen_start_kernel(void) __userpte_alloc_gfp &= ~__GFP_HIGHMEM; /* Work out if we support NX */ @@ -36458,7 +35695,7 @@ index c0cb11f..bed56ff 100644 /* Get mfn list */ xen_build_dynamic_phys_to_machine(); -@@ -1596,13 +1602,6 @@ asmlinkage __visible void __init xen_start_kernel(void) +@@ -1601,13 +1607,6 @@ asmlinkage __visible void __init xen_start_kernel(void) machine_ops = xen_machine_ops; @@ -36473,7 +35710,7 @@ index c0cb11f..bed56ff 100644 #ifdef CONFIG_ACPI_NUMA diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c -index 16fb009..02b7801 100644 +index a8a1a3d..8216142 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c @@ -379,7 +379,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t val) @@ -36485,7 +35722,7 @@ index 16fb009..02b7801 100644 { if (val & _PAGE_PRESENT) { unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT; -@@ -1904,7 +1904,11 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) +@@ -1867,7 +1867,11 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) * L3_k[511] -> level2_fixmap_pgt */ convert_pfn_mfn(level3_kernel_pgt); @@ -36497,7 +35734,7 @@ index 16fb009..02b7801 100644 convert_pfn_mfn(level2_fixmap_pgt); } /* We get [511][511] and have Xen's version of level2_kernel_pgt */ -@@ -1929,11 +1933,16 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) +@@ -1892,11 +1896,16 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) set_page_prot(init_level4_pgt, PAGE_KERNEL_RO); set_page_prot(level3_ident_pgt, PAGE_KERNEL_RO); set_page_prot(level3_kernel_pgt, PAGE_KERNEL_RO); @@ -36514,7 +35751,7 @@ index 16fb009..02b7801 100644 /* Pin down new L4 */ pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE, -@@ -2117,6 +2126,7 @@ static void __init xen_post_allocator_init(void) +@@ -2080,6 +2089,7 @@ static void __init xen_post_allocator_init(void) pv_mmu_ops.set_pud = xen_set_pud; #if PAGETABLE_LEVELS == 4 pv_mmu_ops.set_pgd = xen_set_pgd; @@ -36522,7 +35759,7 @@ index 16fb009..02b7801 100644 #endif /* This will work as long as patching hasn't happened yet -@@ -2195,6 +2205,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = { +@@ -2158,6 +2168,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = { .pud_val = PV_CALLEE_SAVE(xen_pud_val), .make_pud = PV_CALLEE_SAVE(xen_make_pud), .set_pgd = xen_set_pgd_hyper, @@ -36531,10 +35768,10 @@ index 16fb009..02b7801 100644 .alloc_pud = xen_alloc_pmd_init, .release_pud = xen_release_pmd_init, diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c -index 7005974..54fb05f 100644 +index 4c071ae..00e7049 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c -@@ -283,17 +283,13 @@ static void __init xen_smp_prepare_boot_cpu(void) +@@ -288,17 +288,13 @@ static void __init xen_smp_prepare_boot_cpu(void) if (xen_pv_domain()) { if (!xen_feature(XENFEAT_writable_page_tables)) @@ -36554,17 +35791,17 @@ index 7005974..54fb05f 100644 #endif xen_filter_cpu_maps(); -@@ -372,7 +368,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle) +@@ -379,7 +375,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle) #ifdef CONFIG_X86_32 /* Note: PVH is not yet supported on x86_32. */ ctxt->user_regs.fs = __KERNEL_PERCPU; - ctxt->user_regs.gs = __KERNEL_STACK_CANARY; + savesegment(gs, ctxt->user_regs.gs); #endif - ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle; + memset(&ctxt->fpu_ctxt, 0, sizeof(ctxt->fpu_ctxt)); -@@ -381,8 +377,8 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle) - if (!xen_feature(XENFEAT_auto_translated_physmap)) { +@@ -387,8 +383,8 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle) + ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle; ctxt->flags = VGCF_IN_KERNEL; ctxt->user_regs.eflags = 0x1000; /* IOPL_RING1 */ - ctxt->user_regs.ds = __USER_DS; @@ -36574,7 +35811,7 @@ index 7005974..54fb05f 100644 ctxt->user_regs.ss = __KERNEL_DS; xen_copy_trap_info(ctxt->trap_ctxt); -@@ -437,14 +433,13 @@ static int xen_cpu_up(unsigned int cpu, struct task_struct *idle) +@@ -446,14 +442,13 @@ static int xen_cpu_up(unsigned int cpu, struct task_struct *idle) int rc; per_cpu(current_task, cpu) = idle; @@ -36591,7 +35828,7 @@ index 7005974..54fb05f 100644 xen_setup_runstate_info(cpu); xen_setup_timer(cpu); -@@ -720,7 +715,7 @@ static const struct smp_ops xen_smp_ops __initconst = { +@@ -732,7 +727,7 @@ static const struct smp_ops xen_smp_ops __initconst = { void __init xen_smp_init(void) { @@ -36614,7 +35851,7 @@ index fd92a64..1f72641 100644 #else movl %ss:xen_vcpu, %eax diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S -index 485b695..fda3e7c 100644 +index 674b2225..f1f5dc1 100644 --- a/arch/x86/xen/xen-head.S +++ b/arch/x86/xen/xen-head.S @@ -39,6 +39,17 @@ ENTRY(startup_xen) @@ -36710,10 +35947,10 @@ index af00795..2bb8105 100644 #define XCHAL_ICACHE_SIZE 32768 /* I-cache size in bytes or 0 */ #define XCHAL_DCACHE_SIZE 32768 /* D-cache size in bytes or 0 */ diff --git a/block/bio.c b/block/bio.c -index 3e6331d..f970433 100644 +index 3e6e198..5c65199 100644 --- a/block/bio.c +++ b/block/bio.c -@@ -1160,7 +1160,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q, +@@ -1163,7 +1163,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q, /* * Overflow, abort */ @@ -36722,7 +35959,7 @@ index 3e6331d..f970433 100644 return ERR_PTR(-EINVAL); nr_pages += end - start; -@@ -1294,7 +1294,7 @@ static struct bio *__bio_map_user_iov(struct request_queue *q, +@@ -1297,7 +1297,7 @@ static struct bio *__bio_map_user_iov(struct request_queue *q, /* * Overflow, abort */ @@ -36731,7 +35968,7 @@ index 3e6331d..f970433 100644 return ERR_PTR(-EINVAL); nr_pages += end - start; -@@ -1556,7 +1556,7 @@ static void bio_copy_kern_endio(struct bio *bio, int err) +@@ -1559,7 +1559,7 @@ static void bio_copy_kern_endio(struct bio *bio, int err) const int read = bio_data_dir(bio) == READ; struct bio_map_data *bmd = bio->bi_private; int i; @@ -36740,28 +35977,6 @@ index 3e6331d..f970433 100644 bio_for_each_segment_all(bvec, bio, i) { char *addr = page_address(bvec->bv_page); -diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c -index e17da94..e01cce1 100644 ---- a/block/blk-cgroup.c -+++ b/block/blk-cgroup.c -@@ -822,7 +822,7 @@ static void blkcg_css_free(struct cgroup_subsys_state *css) - static struct cgroup_subsys_state * - blkcg_css_alloc(struct cgroup_subsys_state *parent_css) - { -- static atomic64_t id_seq = ATOMIC64_INIT(0); -+ static atomic64_unchecked_t id_seq = ATOMIC64_INIT(0); - struct blkcg *blkcg; - - if (!parent_css) { -@@ -836,7 +836,7 @@ blkcg_css_alloc(struct cgroup_subsys_state *parent_css) - - blkcg->cfq_weight = CFQ_WEIGHT_DEFAULT; - blkcg->cfq_leaf_weight = CFQ_WEIGHT_DEFAULT; -- blkcg->id = atomic64_inc_return(&id_seq); /* root is 0, start from 1 */ -+ blkcg->id = atomic64_inc_return_unchecked(&id_seq); /* root is 0, start from 1 */ - done: - spin_lock_init(&blkcg->lock); - INIT_RADIX_TREE(&blkcg->blkg_tree, GFP_ATOMIC); diff --git a/block/blk-iopoll.c b/block/blk-iopoll.c index 0736729..2ec3b48 100644 --- a/block/blk-iopoll.c @@ -36802,7 +36017,7 @@ index 53b1737..08177d2e 100644 struct list_head *cpu_list, local_list; diff --git a/block/bsg.c b/block/bsg.c -index ff46add..c4ba8ee 100644 +index 276e869..6fe4c61 100644 --- a/block/bsg.c +++ b/block/bsg.c @@ -176,16 +176,24 @@ static int blk_fill_sgv4_hdr_rq(struct request_queue *q, struct request *rq, @@ -36833,7 +36048,7 @@ index ff46add..c4ba8ee 100644 if (blk_verify_command(rq->cmd, has_write_perm)) return -EPERM; diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c -index 18b282c..050dbe5 100644 +index f678c73..f35aa18 100644 --- a/block/compat_ioctl.c +++ b/block/compat_ioctl.c @@ -156,7 +156,7 @@ static int compat_cdrom_generic_command(struct block_device *bdev, fmode_t mode, @@ -36855,7 +36070,7 @@ index 18b282c..050dbe5 100644 err = -EFAULT; goto out; diff --git a/block/genhd.c b/block/genhd.c -index e6723bd..703e4ac 100644 +index bd30606..bbc9b90 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -469,21 +469,24 @@ static char *bdevt_str(dev_t devt, char *buf) @@ -36912,7 +36127,7 @@ index 56d08fd..2e07090 100644 (u8 *) pte, count) < count) { kfree(pte); diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c -index a6d6270..c4bb72f 100644 +index b0c2a61..10bb6ec 100644 --- a/block/scsi_ioctl.c +++ b/block/scsi_ioctl.c @@ -67,7 +67,7 @@ static int scsi_get_bus(struct request_queue *q, int __user *p) @@ -36946,7 +36161,7 @@ index a6d6270..c4bb72f 100644 if (blk_verify_command(rq->cmd, mode & FMODE_WRITE)) return -EPERM; -@@ -432,6 +444,8 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode, +@@ -431,6 +443,8 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode, int err; unsigned int in_len, out_len, bytes, opcode, cmdlen; char *buffer = NULL, sense[SCSI_SENSE_BUFFERSIZE]; @@ -36955,7 +36170,7 @@ index a6d6270..c4bb72f 100644 if (!sic) return -EINVAL; -@@ -470,9 +484,18 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode, +@@ -469,9 +483,18 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode, */ err = -EFAULT; rq->cmd_len = cmdlen; @@ -36997,20 +36212,6 @@ index e592c90..c566114 100644 static void cryptd_queue_worker(struct work_struct *work); -diff --git a/crypto/cts.c b/crypto/cts.c -index 042223f..133f087 100644 ---- a/crypto/cts.c -+++ b/crypto/cts.c -@@ -202,7 +202,8 @@ static int cts_cbc_decrypt(struct crypto_cts_ctx *ctx, - /* 5. Append the tail (BB - Ln) bytes of Xn (tmp) to Cn to create En */ - memcpy(s + bsize + lastn, tmp + lastn, bsize - lastn); - /* 6. Decrypt En to create Pn-1 */ -- memset(iv, 0, sizeof(iv)); -+ memzero_explicit(iv, sizeof(iv)); -+ - sg_set_buf(&sgsrc[0], s + bsize, bsize); - sg_set_buf(&sgdst[0], d, bsize); - err = crypto_blkcipher_decrypt_iv(&lcldesc, sgdst, sgsrc, bsize); diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c index 309d345..1632720 100644 --- a/crypto/pcrypt.c @@ -37024,118 +36225,6 @@ index 309d345..1632720 100644 if (!ret) kobject_uevent(&pinst->kobj, KOBJ_ADD); -diff --git a/crypto/sha1_generic.c b/crypto/sha1_generic.c -index 4279480..7bb0474 100644 ---- a/crypto/sha1_generic.c -+++ b/crypto/sha1_generic.c -@@ -64,7 +64,7 @@ int crypto_sha1_update(struct shash_desc *desc, const u8 *data, - src = data + done; - } while (done + SHA1_BLOCK_SIZE <= len); - -- memset(temp, 0, sizeof(temp)); -+ memzero_explicit(temp, sizeof(temp)); - partial = 0; - } - memcpy(sctx->buffer + partial, src, len - done); -diff --git a/crypto/sha256_generic.c b/crypto/sha256_generic.c -index 5433667..32c5e5e 100644 ---- a/crypto/sha256_generic.c -+++ b/crypto/sha256_generic.c -@@ -210,10 +210,9 @@ static void sha256_transform(u32 *state, const u8 *input) - - /* clear any sensitive info... */ - a = b = c = d = e = f = g = h = t1 = t2 = 0; -- memset(W, 0, 64 * sizeof(u32)); -+ memzero_explicit(W, 64 * sizeof(u32)); - } - -- - static int sha224_init(struct shash_desc *desc) - { - struct sha256_state *sctx = shash_desc_ctx(desc); -@@ -316,7 +315,7 @@ static int sha224_final(struct shash_desc *desc, u8 *hash) - sha256_final(desc, D); - - memcpy(hash, D, SHA224_DIGEST_SIZE); -- memset(D, 0, SHA256_DIGEST_SIZE); -+ memzero_explicit(D, SHA256_DIGEST_SIZE); - - return 0; - } -diff --git a/crypto/sha512_generic.c b/crypto/sha512_generic.c -index 6ed124f..04d295a 100644 ---- a/crypto/sha512_generic.c -+++ b/crypto/sha512_generic.c -@@ -238,7 +238,7 @@ static int sha384_final(struct shash_desc *desc, u8 *hash) - sha512_final(desc, D); - - memcpy(hash, D, 48); -- memset(D, 0, 64); -+ memzero_explicit(D, 64); - - return 0; - } -diff --git a/crypto/tgr192.c b/crypto/tgr192.c -index 8740355..3c7af0d 100644 ---- a/crypto/tgr192.c -+++ b/crypto/tgr192.c -@@ -612,7 +612,7 @@ static int tgr160_final(struct shash_desc *desc, u8 * out) - - tgr192_final(desc, D); - memcpy(out, D, TGR160_DIGEST_SIZE); -- memset(D, 0, TGR192_DIGEST_SIZE); -+ memzero_explicit(D, TGR192_DIGEST_SIZE); - - return 0; - } -@@ -623,7 +623,7 @@ static int tgr128_final(struct shash_desc *desc, u8 * out) - - tgr192_final(desc, D); - memcpy(out, D, TGR128_DIGEST_SIZE); -- memset(D, 0, TGR192_DIGEST_SIZE); -+ memzero_explicit(D, TGR192_DIGEST_SIZE); - - return 0; - } -diff --git a/crypto/vmac.c b/crypto/vmac.c -index 2eb11a3..d84c24b 100644 ---- a/crypto/vmac.c -+++ b/crypto/vmac.c -@@ -613,7 +613,7 @@ static int vmac_final(struct shash_desc *pdesc, u8 *out) - } - mac = vmac(ctx->partial, ctx->partial_size, nonce, NULL, ctx); - memcpy(out, &mac, sizeof(vmac_t)); -- memset(&mac, 0, sizeof(vmac_t)); -+ memzero_explicit(&mac, sizeof(vmac_t)); - memset(&ctx->__vmac_ctx, 0, sizeof(struct vmac_ctx)); - ctx->partial_size = 0; - return 0; -diff --git a/crypto/wp512.c b/crypto/wp512.c -index 180f1d6..ec64e77 100644 ---- a/crypto/wp512.c -+++ b/crypto/wp512.c -@@ -1102,8 +1102,8 @@ static int wp384_final(struct shash_desc *desc, u8 *out) - u8 D[64]; - - wp512_final(desc, D); -- memcpy (out, D, WP384_DIGEST_SIZE); -- memset (D, 0, WP512_DIGEST_SIZE); -+ memcpy(out, D, WP384_DIGEST_SIZE); -+ memzero_explicit(D, WP512_DIGEST_SIZE); - - return 0; - } -@@ -1113,8 +1113,8 @@ static int wp256_final(struct shash_desc *desc, u8 *out) - u8 D[64]; - - wp512_final(desc, D); -- memcpy (out, D, WP256_DIGEST_SIZE); -- memset (D, 0, WP512_DIGEST_SIZE); -+ memcpy(out, D, WP256_DIGEST_SIZE); -+ memzero_explicit(D, WP512_DIGEST_SIZE); - - return 0; - } diff --git a/drivers/acpi/acpica/hwxfsleep.c b/drivers/acpi/acpica/hwxfsleep.c index 6921c7f..78e1af7 100644 --- a/drivers/acpi/acpica/hwxfsleep.c @@ -37211,7 +36300,7 @@ index a83e3c6..c3d617f 100644 bgrt_kobj = kobject_create_and_add("bgrt", acpi_kobj); if (!bgrt_kobj) diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c -index 36eb42e..3b2f47e 100644 +index 7556e7c..89a96bd 100644 --- a/drivers/acpi/blacklist.c +++ b/drivers/acpi/blacklist.c @@ -51,7 +51,7 @@ struct acpi_blacklist_item { @@ -37247,6 +36336,35 @@ index c68e724..e863008 100644 if (!(*ppos)) { /* parse the table header to get the table length */ if (count <= sizeof(struct acpi_table_header)) +diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c +index 7db1931..302dd5f 100644 +--- a/drivers/acpi/device_pm.c ++++ b/drivers/acpi/device_pm.c +@@ -1021,6 +1021,8 @@ EXPORT_SYMBOL_GPL(acpi_subsys_freeze); + + #endif /* CONFIG_PM_SLEEP */ + ++static void acpi_dev_pm_detach(struct device *dev, bool power_off); ++ + static struct dev_pm_domain acpi_general_pm_domain = { + .ops = { + #ifdef CONFIG_PM_RUNTIME +@@ -1039,6 +1041,7 @@ static struct dev_pm_domain acpi_general_pm_domain = { + .restore_early = acpi_subsys_resume_early, + #endif + }, ++ .detach = acpi_dev_pm_detach + }; + + /** +@@ -1108,7 +1111,6 @@ int acpi_dev_pm_attach(struct device *dev, bool power_on) + acpi_device_wakeup(adev, ACPI_STATE_S0, false); + } + +- dev->pm_domain->detach = acpi_dev_pm_detach; + return 0; + } + EXPORT_SYMBOL_GPL(acpi_dev_pm_attach); diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 17f9ec5..d9a455e 100644 --- a/drivers/acpi/processor_idle.c @@ -37261,7 +36379,7 @@ index 17f9ec5..d9a455e 100644 if (!pr->flags.power_setup_done) diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c -index 38cb978..352c761 100644 +index 13e577c..cef11ee 100644 --- a/drivers/acpi/sysfs.c +++ b/drivers/acpi/sysfs.c @@ -423,11 +423,11 @@ static u32 num_counters; @@ -37279,7 +36397,7 @@ index 38cb978..352c761 100644 static void delete_gpe_attr_array(void) { diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c -index b784e9d..a69a049 100644 +index 97683e4..655f6ba 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -1252,7 +1252,7 @@ int ahci_kick_engine(struct ata_port *ap) @@ -37292,7 +36410,7 @@ index b784e9d..a69a049 100644 unsigned long timeout_msec) { diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c -index 6f67490..f951ead 100644 +index c5ba15a..75ec7a8 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -99,7 +99,7 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev); @@ -37377,7 +36495,7 @@ index 5f4e0cc..ff2c347 100644 extern int libata_fua; extern int libata_noacpi; diff --git a/drivers/ata/pata_arasan_cf.c b/drivers/ata/pata_arasan_cf.c -index 4edb1a8..84e1658 100644 +index 38216b9..4ec6aeb 100644 --- a/drivers/ata/pata_arasan_cf.c +++ b/drivers/ata/pata_arasan_cf.c @@ -865,7 +865,9 @@ static int arasan_cf_probe(struct platform_device *pdev) @@ -38009,7 +37127,7 @@ index 4217f29..88f547a 100644 vcc->tx_quota = vcc->tx_quota * 3 / 4; printk("Tx1: vcc->tx_quota = %d \n", (u32)vcc->tx_quota ); diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c -index fa7d7019..1e404c7 100644 +index 93eaf8d..b4ca7da 100644 --- a/drivers/atm/lanai.c +++ b/drivers/atm/lanai.c @@ -1303,7 +1303,7 @@ static void lanai_send_one_aal5(struct lanai_dev *lanai, @@ -38272,7 +37390,7 @@ index 9988ac9..7c52585 100644 } diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c -index 7652e8d..db45069 100644 +index 21b0bc6..b5f40ba 100644 --- a/drivers/atm/solos-pci.c +++ b/drivers/atm/solos-pci.c @@ -838,7 +838,7 @@ static void solos_bh(unsigned long card_arg) @@ -38438,10 +37556,10 @@ index 25798db..15f130e 100644 while (1) { spin_lock(&req_lock); diff --git a/drivers/base/node.c b/drivers/base/node.c -index d51c49c..28908df 100644 +index 472168c..4af587e 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c -@@ -623,7 +623,7 @@ static ssize_t print_nodes_state(enum node_states state, char *buf) +@@ -620,7 +620,7 @@ static ssize_t print_nodes_state(enum node_states state, char *buf) struct node_attr { struct device_attribute attr; enum node_states state; @@ -38451,44 +37569,32 @@ index d51c49c..28908df 100644 static ssize_t show_node_state(struct device *dev, struct device_attribute *attr, char *buf) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c -index eee55c1..b8c9393 100644 +index fb83d4a..4aa50ec 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c -@@ -1821,9 +1821,9 @@ int __pm_genpd_remove_callbacks(struct device *dev, bool clear_td) - - if (dev->power.subsys_data->domain_data) { - gpd_data = to_gpd_data(dev->power.subsys_data->domain_data); -- gpd_data->ops = (struct gpd_dev_ops){ NULL }; -+ memset(&gpd_data->ops, 0, sizeof(gpd_data->ops)); - if (clear_td) -- gpd_data->td = (struct gpd_timing_data){ 0 }; -+ memset(&gpd_data->td, 0, sizeof(gpd_data->td)); - - if (--gpd_data->refcount == 0) { - dev->power.subsys_data->domain_data = NULL; -@@ -1862,7 +1862,7 @@ int pm_genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state) +@@ -1725,7 +1725,7 @@ int pm_genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state) { struct cpuidle_driver *cpuidle_drv; - struct gpd_cpu_data *cpu_data; + struct gpd_cpuidle_data *cpuidle_data; - struct cpuidle_state *idle_state; + cpuidle_state_no_const *idle_state; int ret = 0; if (IS_ERR_OR_NULL(genpd) || state < 0) -@@ -1930,7 +1930,7 @@ int pm_genpd_name_attach_cpuidle(const char *name, int state) +@@ -1793,7 +1793,7 @@ int pm_genpd_name_attach_cpuidle(const char *name, int state) int pm_genpd_detach_cpuidle(struct generic_pm_domain *genpd) { - struct gpd_cpu_data *cpu_data; + struct gpd_cpuidle_data *cpuidle_data; - struct cpuidle_state *idle_state; + cpuidle_state_no_const *idle_state; int ret = 0; if (IS_ERR_OR_NULL(genpd)) diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c -index 95b181d1..c4f0e19 100644 +index a9d26ed..74b8405 100644 --- a/drivers/base/power/sysfs.c +++ b/drivers/base/power/sysfs.c -@@ -185,7 +185,7 @@ static ssize_t rtpm_status_show(struct device *dev, +@@ -182,7 +182,7 @@ static ssize_t rtpm_status_show(struct device *dev, return -EIO; } } @@ -38498,10 +37604,10 @@ index 95b181d1..c4f0e19 100644 static DEVICE_ATTR(runtime_status, 0444, rtpm_status_show, NULL); diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c -index eb1bd2e..2667d3a 100644 +index c2744b3..08fac19 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c -@@ -29,14 +29,14 @@ bool events_check_enabled __read_mostly; +@@ -32,14 +32,14 @@ static bool pm_abort_suspend __read_mostly; * They need to be modified together atomically, so it's better to use one * atomic variable to hold them both. */ @@ -38518,7 +37624,7 @@ index eb1bd2e..2667d3a 100644 *cnt = (comb >> IN_PROGRESS_BITS); *inpr = comb & MAX_IN_PROGRESS; -@@ -401,7 +401,7 @@ static void wakeup_source_activate(struct wakeup_source *ws) +@@ -404,7 +404,7 @@ static void wakeup_source_activate(struct wakeup_source *ws) ws->start_prevent_time = ws->last_time; /* Increment the counter of events in progress. */ @@ -38527,7 +37633,7 @@ index eb1bd2e..2667d3a 100644 trace_wakeup_source_activate(ws->name, cec); } -@@ -527,7 +527,7 @@ static void wakeup_source_deactivate(struct wakeup_source *ws) +@@ -530,7 +530,7 @@ static void wakeup_source_deactivate(struct wakeup_source *ws) * Increment the counter of registered wakeup events and decrement the * couter of wakeup events in progress simultaneously. */ @@ -38537,7 +37643,7 @@ index eb1bd2e..2667d3a 100644 split_counters(&cnt, &inpr); diff --git a/drivers/base/syscore.c b/drivers/base/syscore.c -index dbb8350..4762f4c 100644 +index 8d98a32..61d3165 100644 --- a/drivers/base/syscore.c +++ b/drivers/base/syscore.c @@ -22,7 +22,7 @@ static DEFINE_MUTEX(syscore_ops_lock); @@ -38866,7 +37972,7 @@ index be73e9d..7fbf140 100644 cmdlist_t *reqQ; cmdlist_t *cmpQ; diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bitmap.c -index 426c97a..8c58607 100644 +index 434c77d..6d3219a 100644 --- a/drivers/block/drbd/drbd_bitmap.c +++ b/drivers/block/drbd/drbd_bitmap.c @@ -1036,7 +1036,7 @@ static void bm_page_io_async(struct drbd_bm_aio_ctx *ctx, int page_nr) __must_ho @@ -38879,10 +37985,10 @@ index 426c97a..8c58607 100644 } diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h -index 1a00001..c0d4253 100644 +index 9b22f8f..f2932af 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h -@@ -387,7 +387,7 @@ struct drbd_epoch { +@@ -385,7 +385,7 @@ struct drbd_epoch { struct drbd_connection *connection; struct list_head list; unsigned int barrier_nr; @@ -38891,7 +37997,7 @@ index 1a00001..c0d4253 100644 atomic_t active; /* increased on every req. added, and dec on every finished. */ unsigned long flags; }; -@@ -948,7 +948,7 @@ struct drbd_device { +@@ -946,7 +946,7 @@ struct drbd_device { unsigned int al_tr_number; int al_tr_cycle; wait_queue_head_t seq_wait; @@ -38900,7 +38006,7 @@ index 1a00001..c0d4253 100644 unsigned int peer_seq; spinlock_t peer_seq_lock; unsigned long comm_bm_set; /* communicated number of set bits. */ -@@ -957,8 +957,8 @@ struct drbd_device { +@@ -955,8 +955,8 @@ struct drbd_device { struct mutex own_state_mutex; struct mutex *state_mutex; /* either own_state_mutex or first_peer_device(device)->connection->cstate_mutex */ char congestion_reason; /* Why we where congested... */ @@ -38911,7 +38017,7 @@ index 1a00001..c0d4253 100644 int rs_last_sect_ev; /* counter to compare with */ int rs_last_events; /* counter of read or write "events" (unit sectors) * on the lower level device when we last looked. */ -@@ -1569,7 +1569,7 @@ static inline int drbd_setsockopt(struct socket *sock, int level, int optname, +@@ -1567,7 +1567,7 @@ static inline int drbd_setsockopt(struct socket *sock, int level, int optname, char __user *uoptval; int err; @@ -38920,25 +38026,8 @@ index 1a00001..c0d4253 100644 set_fs(KERNEL_DS); if (level == SOL_SOCKET) -diff --git a/drivers/block/drbd/drbd_interval.c b/drivers/block/drbd/drbd_interval.c -index 04a14e0..5b8f0aa 100644 ---- a/drivers/block/drbd/drbd_interval.c -+++ b/drivers/block/drbd/drbd_interval.c -@@ -67,9 +67,9 @@ static void augment_rotate(struct rb_node *rb_old, struct rb_node *rb_new) - } - - static const struct rb_augment_callbacks augment_callbacks = { -- augment_propagate, -- augment_copy, -- augment_rotate, -+ .propagate = augment_propagate, -+ .copy = augment_copy, -+ .rotate = augment_rotate, - }; - - /** diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c -index 9b465bb..00034ecf 100644 +index 973c185..05d8b1a 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -1328,7 +1328,7 @@ static int _drbd_send_ack(struct drbd_peer_device *peer_device, enum drbd_packet @@ -39002,7 +38091,7 @@ index 1cd47df..57c53c0 100644 if (!msg) goto failed; diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c -index 9342b8d..b6a6825 100644 +index 6960fb0..215d76b 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -870,7 +870,7 @@ int drbd_connected(struct drbd_peer_device *peer_device) @@ -39155,7 +38244,7 @@ index 9342b8d..b6a6825 100644 static struct asender_cmd asender_tbl[] = { [P_PING] = { 0, got_Ping }, diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c -index 50776b3..1477c3f 100644 +index d2d1f97..6a1188f 100644 --- a/drivers/block/drbd/drbd_worker.c +++ b/drivers/block/drbd/drbd_worker.c @@ -408,7 +408,7 @@ static int read_for_csum(struct drbd_peer_device *peer_device, sector_t sector, @@ -39201,7 +38290,7 @@ index 6cb1beb..bf490f7 100644 file_end_write(file); if (likely(bw == len)) diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c -index 02351e2..a9ea617 100644 +index e2bb8af..44b8aef 100644 --- a/drivers/block/nvme-core.c +++ b/drivers/block/nvme-core.c @@ -73,7 +73,6 @@ static LIST_HEAD(dev_list); @@ -39212,7 +38301,7 @@ index 02351e2..a9ea617 100644 static void nvme_reset_failed_dev(struct work_struct *ws); -@@ -2925,6 +2924,10 @@ static struct pci_driver nvme_driver = { +@@ -2926,6 +2925,10 @@ static struct pci_driver nvme_driver = { .err_handler = &nvme_err_handler, }; @@ -39223,7 +38312,7 @@ index 02351e2..a9ea617 100644 static int __init nvme_init(void) { int result; -@@ -2941,7 +2944,6 @@ static int __init nvme_init(void) +@@ -2942,7 +2945,6 @@ static int __init nvme_init(void) else if (result > 0) nvme_major = result; @@ -39232,7 +38321,7 @@ index 02351e2..a9ea617 100644 if (result) goto unregister_blkdev; diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c -index 758ac44..58087fd 100644 +index 09e628da..7607aaa 100644 --- a/drivers/block/pktcdvd.c +++ b/drivers/block/pktcdvd.c @@ -108,7 +108,7 @@ static int pkt_seq_show(struct seq_file *m, void *p); @@ -39244,7 +38333,7 @@ index 758ac44..58087fd 100644 } /* -@@ -1888,7 +1888,7 @@ static noinline_for_stack int pkt_probe_settings(struct pktcdvd_device *pd) +@@ -1890,7 +1890,7 @@ static noinline_for_stack int pkt_probe_settings(struct pktcdvd_device *pd) return -EROFS; } pd->settings.fp = ti.fp; @@ -39337,7 +38426,7 @@ index f038dba..bb74c08 100644 int err; diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c -index 898b84b..86f74b9 100644 +index 5d28a45..a538f90 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c @@ -610,7 +610,6 @@ int register_cdrom(struct cdrom_device_info *cdi) @@ -39401,7 +38490,7 @@ index 584bc31..e64a12c 100644 static int gdrom_bdops_open(struct block_device *bdev, fmode_t mode) diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig -index 6e9f74a..50c7cea 100644 +index efefd12..4f1d494 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig @@ -8,7 +8,8 @@ source "drivers/tty/Kconfig" @@ -39482,21 +38571,8 @@ index d5d4cd8..22d561d 100644 struct hpet_info *info) { struct hpet_timer __iomem *timer; -diff --git a/drivers/char/hw_random/intel-rng.c b/drivers/char/hw_random/intel-rng.c -index 86fe45c..c0ea948 100644 ---- a/drivers/char/hw_random/intel-rng.c -+++ b/drivers/char/hw_random/intel-rng.c -@@ -314,7 +314,7 @@ PFX "RNG, try using the 'no_fwh_detect' option.\n"; - - if (no_fwh_detect) - return -ENODEV; -- printk(warning); -+ printk("%s", warning); - return -EBUSY; - } - diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c -index e6db938..835e3a2 100644 +index f816211..89eadea 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -438,7 +438,7 @@ struct ipmi_smi { @@ -39520,7 +38596,7 @@ index e6db938..835e3a2 100644 static int is_lan_addr(struct ipmi_addr *addr) { -@@ -2926,7 +2926,7 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers, +@@ -2925,7 +2925,7 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers, INIT_LIST_HEAD(&intf->cmd_rcvrs); init_waitqueue_head(&intf->waitq); for (i = 0; i < IPMI_NUM_STATS; i++) @@ -39530,7 +38606,7 @@ index e6db938..835e3a2 100644 intf->proc_dir = NULL; diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c -index 5d66568..c9d93c3 100644 +index 5c4e1f6..0ea58f9 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c @@ -285,7 +285,7 @@ struct smi_info { @@ -39554,7 +38630,7 @@ index 5d66568..c9d93c3 100644 #define SI_MAX_PARMS 4 -@@ -3374,7 +3374,7 @@ static int try_smi_init(struct smi_info *new_smi) +@@ -3377,7 +3377,7 @@ static int try_smi_init(struct smi_info *new_smi) atomic_set(&new_smi->req_events, 0); new_smi->run_to_completion = false; for (i = 0; i < SI_NUM_STATS; i++) @@ -39564,7 +38640,7 @@ index 5d66568..c9d93c3 100644 new_smi->interrupt_disabled = true; atomic_set(&new_smi->stop_operation, 0); diff --git a/drivers/char/mem.c b/drivers/char/mem.c -index 917403f..dddd899 100644 +index 524b707..29d07c1 100644 --- a/drivers/char/mem.c +++ b/drivers/char/mem.c @@ -18,6 +18,7 @@ @@ -39689,7 +38765,7 @@ index 917403f..dddd899 100644 return -EFAULT; buf += sz; p += sz; -@@ -827,6 +874,9 @@ static const struct memdev { +@@ -797,6 +844,9 @@ static const struct memdev { #ifdef CONFIG_PRINTK [11] = { "kmsg", 0644, &kmsg_fops, NULL }, #endif @@ -39699,7 +38775,7 @@ index 917403f..dddd899 100644 }; static int memory_open(struct inode *inode, struct file *filp) -@@ -898,7 +948,7 @@ static int __init chr_dev_init(void) +@@ -868,7 +918,7 @@ static int __init chr_dev_init(void) continue; device_create(mem_class, NULL, MKDEV(MEM_MAJOR, minor), @@ -39794,7 +38870,7 @@ index 0ea9986..e7b07e4 100644 if (cmd != SIOCWANDEV) diff --git a/drivers/char/random.c b/drivers/char/random.c -index 8c86a95..7c499f3 100644 +index 04645c0..560e350 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -289,9 +289,6 @@ @@ -39949,7 +39025,7 @@ index 3a56a13..f8cbd25 100644 return 0; } diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c -index b585b47..488f43e 100644 +index cf7a561..c319ce0 100644 --- a/drivers/char/virtio_console.c +++ b/drivers/char/virtio_console.c @@ -684,7 +684,7 @@ static ssize_t fill_readbuf(struct port *port, char *out_buf, size_t out_count, @@ -40093,11 +39169,26 @@ index b0c18ed..1713a80 100644 cpu_notifier_register_begin(); +diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c +index f657c57..31d97ae 100644 +--- a/drivers/cpufreq/cpufreq-dt.c ++++ b/drivers/cpufreq/cpufreq-dt.c +@@ -362,7 +362,9 @@ static int dt_cpufreq_probe(struct platform_device *pdev) + if (!IS_ERR(cpu_reg)) + regulator_put(cpu_reg); + +- dt_cpufreq_driver.driver_data = dev_get_platdata(&pdev->dev); ++ pax_open_kernel(); ++ *(void **)&dt_cpufreq_driver.driver_data = dev_get_platdata(&pdev->dev); ++ pax_close_kernel(); + + ret = cpufreq_register_driver(&dt_cpufreq_driver); + if (ret) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c -index 07c8276..38bd07c 100644 +index 4473eba..a4c9dc2 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c -@@ -2107,7 +2107,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor) +@@ -2122,7 +2122,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor) } mutex_lock(&cpufreq_governor_mutex); @@ -40106,7 +39197,7 @@ index 07c8276..38bd07c 100644 mutex_unlock(&cpufreq_governor_mutex); return; } -@@ -2323,7 +2323,7 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb, +@@ -2338,7 +2338,7 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb, return NOTIFY_OK; } @@ -40115,7 +39206,7 @@ index 07c8276..38bd07c 100644 .notifier_call = cpufreq_cpu_callback, }; -@@ -2363,13 +2363,17 @@ int cpufreq_boost_trigger_state(int state) +@@ -2378,13 +2378,17 @@ int cpufreq_boost_trigger_state(int state) return 0; write_lock_irqsave(&cpufreq_driver_lock, flags); @@ -40135,7 +39226,7 @@ index 07c8276..38bd07c 100644 write_unlock_irqrestore(&cpufreq_driver_lock, flags); pr_err("%s: Cannot %s BOOST\n", -@@ -2426,8 +2430,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) +@@ -2441,8 +2445,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) pr_debug("trying to register driver %s\n", driver_data->name); @@ -40149,7 +39240,7 @@ index 07c8276..38bd07c 100644 write_lock_irqsave(&cpufreq_driver_lock, flags); if (cpufreq_driver) { -@@ -2442,8 +2449,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) +@@ -2457,8 +2464,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) * Check if driver provides function to enable boost - * if not, use cpufreq_boost_set_sw as default */ @@ -40503,7 +39594,7 @@ index e431d11..d0b997e 100644 snprintf(state->name, CPUIDLE_NAME_LEN, "POLL"); snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE"); diff --git a/drivers/cpuidle/governor.c b/drivers/cpuidle/governor.c -index ca89412..a7b9c49 100644 +index fb9f511..213e6cc 100644 --- a/drivers/cpuidle/governor.c +++ b/drivers/cpuidle/governor.c @@ -87,7 +87,7 @@ int cpuidle_register_governor(struct cpuidle_governor *gov) @@ -40551,7 +39642,7 @@ index 8d2a772..33826c9 100644 err = pci_request_regions(pdev, name); if (err) diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c -index 9f90369..bfcacdb 100644 +index 30b538d8..1610d75 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -673,7 +673,7 @@ int devfreq_add_governor(struct devfreq_governor *governor) @@ -40919,10 +40010,10 @@ index 5b53d61..72cee96 100644 EXPORT_SYMBOL_GPL(cper_next_record_id); diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c -index 64ecbb5..d921eb3 100644 +index 8590099..d83627a 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c -@@ -126,14 +126,16 @@ static struct attribute_group efi_subsys_attr_group = { +@@ -148,14 +148,16 @@ static struct attribute_group efi_subsys_attr_group = { }; static struct efivars generic_efivars; @@ -41026,10 +40117,10 @@ index dbf28fa..04dad4e 100644 return -EINVAL; } diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c -index c68d037..2f4f9a9 100644 +index e8e98ca..10f416e 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c -@@ -529,8 +529,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) +@@ -537,8 +537,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) } if (gpiochip->irqchip) { @@ -41042,7 +40133,7 @@ index c68d037..2f4f9a9 100644 gpiochip->irqchip = NULL; } } -@@ -596,8 +598,11 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip, +@@ -604,8 +606,11 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip, gpiochip->irqchip = NULL; return -EINVAL; } @@ -41057,10 +40148,10 @@ index c68d037..2f4f9a9 100644 /* * Prepare the mapping since the irqchip shall be orthogonal to diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c -index 90e7730..3b41807 100644 +index e79c8d3..a9370bc 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c -@@ -3861,7 +3861,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev, +@@ -3900,7 +3900,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev, goto done; } @@ -41070,10 +40161,10 @@ index 90e7730..3b41807 100644 ret = -EFAULT; goto done; diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c -index 3242e20..7e4f621 100644 +index bc3da32..7289357 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c -@@ -463,7 +463,7 @@ void drm_unplug_dev(struct drm_device *dev) +@@ -443,7 +443,7 @@ void drm_unplug_dev(struct drm_device *dev) drm_device_set_unplugged(dev); @@ -41083,7 +40174,7 @@ index 3242e20..7e4f621 100644 } mutex_unlock(&drm_global_mutex); diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c -index 79d5221..7ff73496 100644 +index ed7bc68..0d536af 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c @@ -89,7 +89,7 @@ int drm_open(struct inode *inode, struct file *filp) @@ -41104,7 +40195,7 @@ index 79d5221..7ff73496 100644 drm_minor_release(minor); return retcode; } -@@ -384,7 +384,7 @@ int drm_release(struct inode *inode, struct file *filp) +@@ -376,7 +376,7 @@ int drm_release(struct inode *inode, struct file *filp) mutex_lock(&drm_global_mutex); @@ -41113,7 +40204,7 @@ index 79d5221..7ff73496 100644 mutex_lock(&dev->struct_mutex); list_del(&file_priv->lhead); -@@ -397,10 +397,10 @@ int drm_release(struct inode *inode, struct file *filp) +@@ -389,10 +389,10 @@ int drm_release(struct inode *inode, struct file *filp) * Begin inline drm_release */ @@ -41126,7 +40217,7 @@ index 79d5221..7ff73496 100644 /* Release any auth tokens that might point to this file_priv, (do that under the drm_global_mutex) */ -@@ -471,7 +471,7 @@ int drm_release(struct inode *inode, struct file *filp) +@@ -465,7 +465,7 @@ int drm_release(struct inode *inode, struct file *filp) * End inline drm_release */ @@ -41197,10 +40288,10 @@ index 3d2e91c..d31c4c9 100644 item->object = NULL; } diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c -index ecaf0fa..a49cee9 100644 +index 51efebd..2b70935 100644 --- a/drivers/gpu/drm/drm_info.c +++ b/drivers/gpu/drm/drm_info.c -@@ -73,10 +73,13 @@ int drm_vm_info(struct seq_file *m, void *data) +@@ -76,10 +76,13 @@ int drm_vm_info(struct seq_file *m, void *data) struct drm_local_map *map; struct drm_map_list *r_list; @@ -41218,7 +40309,7 @@ index ecaf0fa..a49cee9 100644 const char *type; int i; -@@ -87,7 +90,7 @@ int drm_vm_info(struct seq_file *m, void *data) +@@ -90,7 +93,7 @@ int drm_vm_info(struct seq_file *m, void *data) map = r_list->map; if (!map) continue; @@ -41227,18 +40318,6 @@ index ecaf0fa..a49cee9 100644 type = "??"; else type = types[map->type]; -@@ -259,7 +262,11 @@ int drm_vma_info(struct seq_file *m, void *data) - vma->vm_flags & VM_MAYSHARE ? 's' : 'p', - vma->vm_flags & VM_LOCKED ? 'l' : '-', - vma->vm_flags & VM_IO ? 'i' : '-', -+#ifdef CONFIG_GRKERNSEC_HIDESYM -+ 0); -+#else - vma->vm_pgoff); -+#endif - - #if defined(__i386__) - pgprot = pgprot_val(vma->vm_page_prot); diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c index 2f4c4343..dd12cd2 100644 --- a/drivers/gpu/drm/drm_ioc32.c @@ -41292,7 +40371,7 @@ index 2f4c4343..dd12cd2 100644 ret = drm_ioctl(filp, cmd, arg); diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c -index 40be746..fd78faf 100644 +index 00587a1..57a65ca 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -642,7 +642,7 @@ long drm_ioctl(struct file *filp, @@ -41305,10 +40384,10 @@ index 40be746..fd78faf 100644 int retcode = -EINVAL; char stack_kdata[128]; diff --git a/drivers/gpu/drm/i810/i810_drv.h b/drivers/gpu/drm/i810/i810_drv.h -index d4d16ed..8fb0b51 100644 +index 93ec5dc..82acbaf 100644 --- a/drivers/gpu/drm/i810/i810_drv.h +++ b/drivers/gpu/drm/i810/i810_drv.h -@@ -108,8 +108,8 @@ typedef struct drm_i810_private { +@@ -110,8 +110,8 @@ typedef struct drm_i810_private { int page_flipping; wait_queue_head_t irq_queue; @@ -41320,10 +40399,10 @@ index d4d16ed..8fb0b51 100644 int front_offset; } drm_i810_private_t; diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c -index 9933c26..32cc097 100644 +index 318ade9..1f5de55 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c -@@ -1292,7 +1292,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev) +@@ -1294,7 +1294,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev) * locking inversion with the driver load path. And the access here is * completely racy anyway. So don't bother with locking for now. */ @@ -41333,21 +40412,24 @@ index 9933c26..32cc097 100644 static const struct vga_switcheroo_client_ops i915_switcheroo_ops = { diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c -index 60998fc..3b244bc 100644 +index 1a0611b..dd1fbfc 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c -@@ -891,9 +891,9 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec) - +@@ -866,12 +866,12 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec) static int - validate_exec_list(struct drm_i915_gem_exec_object2 *exec, + validate_exec_list(struct drm_device *dev, + struct drm_i915_gem_exec_object2 *exec, - int count) + unsigned int count) { -- int i; -+ unsigned int i; unsigned relocs_total = 0; unsigned relocs_max = UINT_MAX / sizeof(struct drm_i915_gem_relocation_entry); + unsigned invalid_flags; +- int i; ++ unsigned int i; + invalid_flags = __EXEC_OBJECT_UNKNOWN_FLAGS; + if (USES_FULL_PPGTT(dev)) diff --git a/drivers/gpu/drm/i915/i915_ioc32.c b/drivers/gpu/drm/i915/i915_ioc32.c index 2e0613e..a8b94d9 100644 --- a/drivers/gpu/drm/i915/i915_ioc32.c @@ -41384,10 +40466,10 @@ index 2e0613e..a8b94d9 100644 return ret; diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index b71a026..8b6cc10 100644 +index 9cb5c95..9228666 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c -@@ -12437,13 +12437,13 @@ struct intel_quirk { +@@ -12811,13 +12811,13 @@ struct intel_quirk { int subsystem_vendor; int subsystem_device; void (*hook)(struct drm_device *dev); @@ -41403,7 +40485,7 @@ index b71a026..8b6cc10 100644 static int intel_dmi_reverse_brightness(const struct dmi_system_id *id) { -@@ -12451,18 +12451,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id) +@@ -12825,18 +12825,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id) return 1; } @@ -41435,10 +40517,10 @@ index b71a026..8b6cc10 100644 }, }; diff --git a/drivers/gpu/drm/mga/mga_drv.h b/drivers/gpu/drm/mga/mga_drv.h -index fe45321..836fdca 100644 +index b4a2014..219ab78 100644 --- a/drivers/gpu/drm/mga/mga_drv.h +++ b/drivers/gpu/drm/mga/mga_drv.h -@@ -120,9 +120,9 @@ typedef struct drm_mga_private { +@@ -122,9 +122,9 @@ typedef struct drm_mga_private { u32 clear_cmd; u32 maccess; @@ -41539,10 +40621,10 @@ index dae2c96..324dbe4 100644 #define BIT_TABLE(id, funcid) ((struct bit_table){ id, parse_bit_##funcid##_tbl_entry }) diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.h b/drivers/gpu/drm/nouveau/nouveau_drm.h -index b02b024..aed7bad 100644 +index 8ae36f2..1147a30 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.h +++ b/drivers/gpu/drm/nouveau/nouveau_drm.h -@@ -119,7 +119,6 @@ struct nouveau_drm { +@@ -121,7 +121,6 @@ struct nouveau_drm { struct drm_global_reference mem_global_ref; struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_device bdev; @@ -41564,10 +40646,10 @@ index 462679a..88e32a7 100644 if (nr < DRM_COMMAND_BASE) diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c -index 53874b7..1db0a68 100644 +index 753a6de..dd66b98 100644 --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c -@@ -127,11 +127,11 @@ nouveau_vram_manager_debug(struct ttm_mem_type_manager *man, const char *prefix) +@@ -126,11 +126,11 @@ nouveau_vram_manager_debug(struct ttm_mem_type_manager *man, const char *prefix) } const struct ttm_mem_type_manager_func nouveau_vram_manager = { @@ -41584,7 +40666,7 @@ index 53874b7..1db0a68 100644 }; static int -@@ -196,11 +196,11 @@ nouveau_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix) +@@ -194,11 +194,11 @@ nouveau_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix) } const struct ttm_mem_type_manager_func nouveau_gart_manager = { @@ -41601,7 +40683,7 @@ index 53874b7..1db0a68 100644 }; /*XXX*/ -@@ -270,11 +270,11 @@ nv04_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix) +@@ -267,11 +267,11 @@ nv04_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix) } const struct ttm_mem_type_manager_func nv04_gart_manager = { @@ -41632,7 +40714,7 @@ index c7592ec..dd45ebc 100644 static const struct vga_switcheroo_client_ops diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c -index eb89653..613cf71 100644 +index 9782364..89bd954 100644 --- a/drivers/gpu/drm/qxl/qxl_cmd.c +++ b/drivers/gpu/drm/qxl/qxl_cmd.c @@ -285,27 +285,27 @@ static int wait_for_io_cmd_user(struct qxl_device *qdev, uint8_t val, long port, @@ -41670,7 +40752,7 @@ index eb89653..613cf71 100644 if (ret > 0) ret = 0; diff --git a/drivers/gpu/drm/qxl/qxl_debugfs.c b/drivers/gpu/drm/qxl/qxl_debugfs.c -index c3c2bbd..bc3c0fb 100644 +index 6911b8c..89d6867 100644 --- a/drivers/gpu/drm/qxl/qxl_debugfs.c +++ b/drivers/gpu/drm/qxl/qxl_debugfs.c @@ -42,10 +42,10 @@ qxl_debugfs_irq_received(struct seq_file *m, void *data) @@ -41689,7 +40771,7 @@ index c3c2bbd..bc3c0fb 100644 return 0; } diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h -index 36ed40b..0397633 100644 +index 7c6cafe..460f542 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h @@ -290,10 +290,10 @@ struct qxl_device { @@ -41787,7 +40869,7 @@ index 0bf1e20..42a7310 100644 ret = drm_irq_install(qdev->ddev, qdev->ddev->pdev->irq); qdev->ram_header->int_mask = QXL_INTERRUPT_MASK; diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c -index 71a1bae..cb1f103 100644 +index 0cbc4c9..0e46686 100644 --- a/drivers/gpu/drm/qxl/qxl_ttm.c +++ b/drivers/gpu/drm/qxl/qxl_ttm.c @@ -103,7 +103,7 @@ static void qxl_ttm_global_fini(struct qxl_device *qdev) @@ -41810,7 +40892,7 @@ index 71a1bae..cb1f103 100644 } vma->vm_ops = &qxl_ttm_vm_ops; return 0; -@@ -555,25 +557,23 @@ static int qxl_mm_dump_table(struct seq_file *m, void *data) +@@ -464,25 +466,23 @@ static int qxl_mm_dump_table(struct seq_file *m, void *data) static int qxl_ttm_debugfs_init(struct qxl_device *qdev) { #if defined(CONFIG_DEBUG_FS) @@ -41852,7 +40934,7 @@ index 71a1bae..cb1f103 100644 return 0; #endif diff --git a/drivers/gpu/drm/r128/r128_cce.c b/drivers/gpu/drm/r128/r128_cce.c -index 59459fe..be26b31 100644 +index 2c45ac9..5d740f8 100644 --- a/drivers/gpu/drm/r128/r128_cce.c +++ b/drivers/gpu/drm/r128/r128_cce.c @@ -377,7 +377,7 @@ static int r128_do_init_cce(struct drm_device *dev, drm_r128_init_t *init) @@ -41865,10 +40947,10 @@ index 59459fe..be26b31 100644 /* We don't support anything other than bus-mastering ring mode, * but the ring can be in either AGP or PCI space for the ring diff --git a/drivers/gpu/drm/r128/r128_drv.h b/drivers/gpu/drm/r128/r128_drv.h -index 5bf3f5f..7000661 100644 +index 723e5d6..102dbaf 100644 --- a/drivers/gpu/drm/r128/r128_drv.h +++ b/drivers/gpu/drm/r128/r128_drv.h -@@ -90,14 +90,14 @@ typedef struct drm_r128_private { +@@ -93,14 +93,14 @@ typedef struct drm_r128_private { int is_pci; unsigned long cce_buffers_offset; @@ -41981,7 +41063,7 @@ index 4a85bb6..aaea819 100644 if (regcomp (&mask_rex, "(0x[0-9a-fA-F]*) *([_a-zA-Z0-9]*)", REG_EXTENDED)) { diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c -index 5d4416f..80b7fc4 100644 +index 995a8b1..b7cb898 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -1214,7 +1214,7 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev) @@ -41994,10 +41076,10 @@ index 5d4416f..80b7fc4 100644 static const struct vga_switcheroo_client_ops radeon_switcheroo_ops = { diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h -index dafd812..1bf20c7 100644 +index 46bd393..6ae4719 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.h +++ b/drivers/gpu/drm/radeon/radeon_drv.h -@@ -262,7 +262,7 @@ typedef struct drm_radeon_private { +@@ -264,7 +264,7 @@ typedef struct drm_radeon_private { /* SW interrupt */ wait_queue_head_t swi_queue; @@ -42075,7 +41157,7 @@ index 244b19b..c19226d 100644 dev->max_vblank_count = 0x001fffff; diff --git a/drivers/gpu/drm/radeon/radeon_state.c b/drivers/gpu/drm/radeon/radeon_state.c -index 23bb64f..69d7234 100644 +index 535403e..5dd655b 100644 --- a/drivers/gpu/drm/radeon/radeon_state.c +++ b/drivers/gpu/drm/radeon/radeon_state.c @@ -2168,7 +2168,7 @@ static int radeon_cp_clear(struct drm_device *dev, void *data, struct drm_file * @@ -42097,10 +41179,10 @@ index 23bb64f..69d7234 100644 DRM_DEBUG("pid=%d\n", DRM_CURRENTPID); diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c -index 72afe82..056a57a 100644 +index 8624979..65e5243 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c -@@ -801,7 +801,7 @@ void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size) +@@ -936,7 +936,7 @@ void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size) man->size = size >> PAGE_SHIFT; } @@ -42109,7 +41191,7 @@ index 72afe82..056a57a 100644 static const struct vm_operations_struct *ttm_vm_ops = NULL; static int radeon_ttm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) -@@ -842,8 +842,10 @@ int radeon_mmap(struct file *filp, struct vm_area_struct *vma) +@@ -977,8 +977,10 @@ int radeon_mmap(struct file *filp, struct vm_area_struct *vma) } if (unlikely(ttm_vm_ops == NULL)) { ttm_vm_ops = vma->vm_ops; @@ -42121,10 +41203,10 @@ index 72afe82..056a57a 100644 vma->vm_ops = &radeon_ttm_vm_ops; return 0; diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c -index 6553fd2..aecd29c 100644 +index 054a79f..30d9ac4 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c -@@ -1243,7 +1243,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor) +@@ -1242,7 +1242,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor) } for (i = 0; i < ARRAY_SIZE(debugfs_files); i++) @@ -42160,10 +41242,10 @@ index ffe2654..03c7b1c 100644 struct dentry *debugfs; }; diff --git a/drivers/gpu/drm/ttm/ttm_bo_manager.c b/drivers/gpu/drm/ttm/ttm_bo_manager.c -index 9e103a48..0e117f3 100644 +index 964387f..4eafc00 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_manager.c +++ b/drivers/gpu/drm/ttm/ttm_bo_manager.c -@@ -147,10 +147,10 @@ static void ttm_bo_man_debug(struct ttm_mem_type_manager *man, +@@ -146,10 +146,10 @@ static void ttm_bo_man_debug(struct ttm_mem_type_manager *man, } const struct ttm_mem_type_manager_func ttm_bo_manager_func = { @@ -42180,7 +41262,7 @@ index 9e103a48..0e117f3 100644 }; EXPORT_SYMBOL(ttm_bo_manager_func); diff --git a/drivers/gpu/drm/ttm/ttm_memory.c b/drivers/gpu/drm/ttm/ttm_memory.c -index dbc2def..0a9f710 100644 +index a1803fb..c53f6b0 100644 --- a/drivers/gpu/drm/ttm/ttm_memory.c +++ b/drivers/gpu/drm/ttm/ttm_memory.c @@ -264,7 +264,7 @@ static int ttm_mem_init_kernel_zone(struct ttm_mem_global *glob, @@ -42192,7 +41274,7 @@ index dbc2def..0a9f710 100644 if (unlikely(ret != 0)) { kobject_put(&zone->kobj); return ret; -@@ -347,7 +347,7 @@ static int ttm_mem_init_dma32_zone(struct ttm_mem_global *glob, +@@ -348,7 +348,7 @@ static int ttm_mem_init_dma32_zone(struct ttm_mem_global *glob, zone->glob = glob; glob->zone_dma32 = zone; ret = kobject_init_and_add( @@ -42201,8 +41283,161 @@ index dbc2def..0a9f710 100644 if (unlikely(ret != 0)) { kobject_put(&zone->kobj); return ret; +diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c +index 09874d6..d6da1de 100644 +--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c ++++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c +@@ -54,7 +54,7 @@ + + #define NUM_PAGES_TO_ALLOC (PAGE_SIZE/sizeof(struct page *)) + #define SMALL_ALLOCATION 16 +-#define FREE_ALL_PAGES (~0U) ++#define FREE_ALL_PAGES (~0UL) + /* times are in msecs */ + #define PAGE_FREE_INTERVAL 1000 + +@@ -299,14 +299,13 @@ static void ttm_pool_update_free_locked(struct ttm_page_pool *pool, + * @free_all: If set to true will free all pages in pool + * @gfp: GFP flags. + **/ +-static int ttm_page_pool_free(struct ttm_page_pool *pool, unsigned nr_free, ++static unsigned long ttm_page_pool_free(struct ttm_page_pool *pool, unsigned long nr_free, + gfp_t gfp) + { + unsigned long irq_flags; + struct page *p; + struct page **pages_to_free; +- unsigned freed_pages = 0, +- npages_to_free = nr_free; ++ unsigned long freed_pages = 0, npages_to_free = nr_free; + + if (NUM_PAGES_TO_ALLOC < nr_free) + npages_to_free = NUM_PAGES_TO_ALLOC; +@@ -366,7 +365,8 @@ restart: + __list_del(&p->lru, &pool->list); + + ttm_pool_update_free_locked(pool, freed_pages); +- nr_free -= freed_pages; ++ if (likely(nr_free != FREE_ALL_PAGES)) ++ nr_free -= freed_pages; + } + + spin_unlock_irqrestore(&pool->lock, irq_flags); +@@ -395,7 +395,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) + unsigned i; + unsigned pool_offset; + struct ttm_page_pool *pool; +- int shrink_pages = sc->nr_to_scan; ++ unsigned long shrink_pages = sc->nr_to_scan; + unsigned long freed = 0; + + if (!mutex_trylock(&lock)) +@@ -403,7 +403,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) + pool_offset = ++start_pool % NUM_POOLS; + /* select start pool in round robin fashion */ + for (i = 0; i < NUM_POOLS; ++i) { +- unsigned nr_free = shrink_pages; ++ unsigned long nr_free = shrink_pages; + if (shrink_pages == 0) + break; + pool = &_manager->pools[(i + pool_offset)%NUM_POOLS]; +@@ -669,7 +669,7 @@ out: + } + + /* Put all pages in pages list to correct pool to wait for reuse */ +-static void ttm_put_pages(struct page **pages, unsigned npages, int flags, ++static void ttm_put_pages(struct page **pages, unsigned long npages, int flags, + enum ttm_caching_state cstate) + { + unsigned long irq_flags; +@@ -724,7 +724,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, + struct list_head plist; + struct page *p = NULL; + gfp_t gfp_flags = GFP_USER; +- unsigned count; ++ unsigned long count; + int r; + + /* set zero flag for page allocation if required */ +diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c +index c96db43..c367557 100644 +--- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c ++++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c +@@ -56,7 +56,7 @@ + + #define NUM_PAGES_TO_ALLOC (PAGE_SIZE/sizeof(struct page *)) + #define SMALL_ALLOCATION 4 +-#define FREE_ALL_PAGES (~0U) ++#define FREE_ALL_PAGES (~0UL) + /* times are in msecs */ + #define IS_UNDEFINED (0) + #define IS_WC (1<<1) +@@ -413,15 +413,14 @@ static void ttm_dma_page_put(struct dma_pool *pool, struct dma_page *d_page) + * @nr_free: If set to true will free all pages in pool + * @gfp: GFP flags. + **/ +-static unsigned ttm_dma_page_pool_free(struct dma_pool *pool, unsigned nr_free, ++static unsigned long ttm_dma_page_pool_free(struct dma_pool *pool, unsigned long nr_free, + gfp_t gfp) + { + unsigned long irq_flags; + struct dma_page *dma_p, *tmp; + struct page **pages_to_free; + struct list_head d_pages; +- unsigned freed_pages = 0, +- npages_to_free = nr_free; ++ unsigned long freed_pages = 0, npages_to_free = nr_free; + + if (NUM_PAGES_TO_ALLOC < nr_free) + npages_to_free = NUM_PAGES_TO_ALLOC; +@@ -494,7 +493,8 @@ restart: + /* remove range of pages from the pool */ + if (freed_pages) { + ttm_pool_update_free_locked(pool, freed_pages); +- nr_free -= freed_pages; ++ if (likely(nr_free != FREE_ALL_PAGES)) ++ nr_free -= freed_pages; + } + + spin_unlock_irqrestore(&pool->lock, irq_flags); +@@ -929,7 +929,7 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev) + struct dma_page *d_page, *next; + enum pool_type type; + bool is_cached = false; +- unsigned count = 0, i, npages = 0; ++ unsigned long count = 0, i, npages = 0; + unsigned long irq_flags; + + type = ttm_to_type(ttm->page_flags, ttm->caching_state); +@@ -1007,7 +1007,7 @@ ttm_dma_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) + static unsigned start_pool; + unsigned idx = 0; + unsigned pool_offset; +- unsigned shrink_pages = sc->nr_to_scan; ++ unsigned long shrink_pages = sc->nr_to_scan; + struct device_pools *p; + unsigned long freed = 0; + +@@ -1020,7 +1020,7 @@ ttm_dma_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) + goto out; + pool_offset = ++start_pool % _manager->npools; + list_for_each_entry(p, &_manager->pools, pools) { +- unsigned nr_free; ++ unsigned long nr_free; + + if (!p->dev) + continue; +@@ -1034,7 +1034,7 @@ ttm_dma_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) + sc->gfp_mask); + freed += nr_free - shrink_pages; + +- pr_debug("%s: (%s:%d) Asked to shrink %d, have %d more to go\n", ++ pr_debug("%s: (%s:%d) Asked to shrink %lu, have %lu more to go\n", + p->pool->dev_name, p->pool->name, current->pid, + nr_free, shrink_pages); + } diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c -index d1da339..829235e 100644 +index 8cbcb45..a4d9cf7 100644 --- a/drivers/gpu/drm/udl/udl_fb.c +++ b/drivers/gpu/drm/udl/udl_fb.c @@ -367,7 +367,6 @@ static int udl_fb_release(struct fb_info *info, int user) @@ -42214,10 +41449,10 @@ index d1da339..829235e 100644 pr_warn("released /dev/fb%d user=%d count=%d\n", diff --git a/drivers/gpu/drm/via/via_drv.h b/drivers/gpu/drm/via/via_drv.h -index ad02732..144f5ed 100644 +index ef8c500..01030c8 100644 --- a/drivers/gpu/drm/via/via_drv.h +++ b/drivers/gpu/drm/via/via_drv.h -@@ -51,7 +51,7 @@ typedef struct drm_via_ring_buffer { +@@ -53,7 +53,7 @@ typedef struct drm_via_ring_buffer { typedef uint32_t maskarray_t[5]; typedef struct drm_via_irq { @@ -42226,7 +41461,7 @@ index ad02732..144f5ed 100644 uint32_t pending_mask; uint32_t enable_mask; wait_queue_head_t irq_queue; -@@ -75,7 +75,7 @@ typedef struct drm_via_private { +@@ -77,7 +77,7 @@ typedef struct drm_via_private { struct timeval last_vblank; int last_vblank_valid; unsigned usec_per_vblank; @@ -42310,10 +41545,10 @@ index 1319433..a993b0c 100644 case VIA_IRQ_ABSOLUTE: break; diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h -index 99f7317..33a835b 100644 +index 4ee799b..69fc0d1 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h -@@ -447,7 +447,7 @@ struct vmw_private { +@@ -446,7 +446,7 @@ struct vmw_private { * Fencing and IRQs. */ @@ -42323,7 +41558,7 @@ index 99f7317..33a835b 100644 wait_queue_head_t fifo_queue; int fence_queue_waiters; /* Protected by hw_mutex */ diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c -index 6eae14d..aa311b3 100644 +index 09e10ae..cb76c60 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c @@ -154,7 +154,7 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo) @@ -42335,7 +41570,7 @@ index 6eae14d..aa311b3 100644 iowrite32(dev_priv->last_read_seqno, fifo_mem + SVGA_FIFO_FENCE); vmw_marker_queue_init(&fifo->marker_queue); return vmw_fifo_send_fence(dev_priv, &dummy); -@@ -373,7 +373,7 @@ void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes) +@@ -378,7 +378,7 @@ void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes) if (reserveable) iowrite32(bytes, fifo_mem + SVGA_FIFO_RESERVED); @@ -42344,7 +41579,7 @@ index 6eae14d..aa311b3 100644 } else { need_bounce = true; } -@@ -493,7 +493,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno) +@@ -498,7 +498,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno) fm = vmw_fifo_reserve(dev_priv, bytes); if (unlikely(fm == NULL)) { @@ -42353,7 +41588,7 @@ index 6eae14d..aa311b3 100644 ret = -ENOMEM; (void)vmw_fallback_wait(dev_priv, false, true, *seqno, false, 3*HZ); -@@ -501,7 +501,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno) +@@ -506,7 +506,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno) } do { @@ -42363,10 +41598,10 @@ index 6eae14d..aa311b3 100644 if (!(fifo_state->capabilities & SVGA_FIFO_CAP_FENCE)) { diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c -index 26f8bdd..90a0008 100644 +index 170b61b..fec7348 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c -@@ -165,9 +165,9 @@ static void vmw_gmrid_man_debug(struct ttm_mem_type_manager *man, +@@ -164,9 +164,9 @@ static void vmw_gmrid_man_debug(struct ttm_mem_type_manager *man, } const struct ttm_mem_type_manager_func vmw_gmrid_manager_func = { @@ -42461,10 +41696,10 @@ index 37ac7b5..d52a5c9 100644 /* copy over all the bus versions */ if (dev->bus && dev->bus->pm) { diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c -index 12b6e67..ddd983c 100644 +index 3402033..50b562c 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c -@@ -2500,7 +2500,7 @@ EXPORT_SYMBOL_GPL(hid_ignore); +@@ -2506,7 +2506,7 @@ EXPORT_SYMBOL_GPL(hid_ignore); int hid_add_device(struct hid_device *hdev) { @@ -42473,7 +41708,7 @@ index 12b6e67..ddd983c 100644 int ret; if (WARN_ON(hdev->status & HID_STAT_ADDED)) -@@ -2542,7 +2542,7 @@ int hid_add_device(struct hid_device *hdev) +@@ -2548,7 +2548,7 @@ int hid_add_device(struct hid_device *hdev) /* XXX hack, any other cleaner solution after the driver core * is converted to allow more than 20 bytes as the device name? */ dev_set_name(&hdev->dev, "%04X:%04X:%04X.%04X", hdev->bus, @@ -42483,10 +41718,10 @@ index 12b6e67..ddd983c 100644 hid_debug_register(hdev, dev_name(&hdev->dev)); ret = device_add(&hdev->dev); diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c -index 9bf8637..f462416 100644 +index 71f5692..147d3da 100644 --- a/drivers/hid/hid-logitech-dj.c +++ b/drivers/hid/hid-logitech-dj.c -@@ -682,6 +682,12 @@ static int logi_dj_raw_event(struct hid_device *hdev, +@@ -658,6 +658,12 @@ static int logi_dj_raw_event(struct hid_device *hdev, * device (via hid_input_report() ) and return 1 so hid-core does not do * anything else with it. */ @@ -42499,6 +41734,304 @@ index 9bf8637..f462416 100644 /* case 1) */ if (data[0] != REPORT_ID_DJ_SHORT) +diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c +index bc4269e..b6e6102 100644 +--- a/drivers/hid/hid-sony.c ++++ b/drivers/hid/hid-sony.c +@@ -798,6 +798,12 @@ union sixaxis_output_report_01 { + __u8 buf[36]; + }; + ++#define DS4_REPORT_0x02_SIZE 37 ++#define DS4_REPORT_0x05_SIZE 32 ++#define DS4_REPORT_0x11_SIZE 78 ++#define DS4_REPORT_0x81_SIZE 7 ++#define SIXAXIS_REPORT_0xF2_SIZE 18 ++ + static spinlock_t sony_dev_list_lock; + static LIST_HEAD(sony_device_list); + static DEFINE_IDA(sony_device_id_allocator); +@@ -811,6 +817,7 @@ struct sony_sc { + struct work_struct state_worker; + struct power_supply battery; + int device_id; ++ __u8 *output_report_dmabuf; + + #ifdef CONFIG_SONY_FF + __u8 left; +@@ -1142,9 +1149,20 @@ static int sixaxis_set_operational_usb(struct hid_device *hdev) + + static int sixaxis_set_operational_bt(struct hid_device *hdev) + { +- unsigned char buf[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 }; +- return hid_hw_raw_request(hdev, buf[0], buf, sizeof(buf), ++ static const __u8 report[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 }; ++ __u8 *buf; ++ int ret; ++ ++ buf = kmemdup(report, sizeof(report), GFP_KERNEL); ++ if (!buf) ++ return -ENOMEM; ++ ++ ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(report), + HID_FEATURE_REPORT, HID_REQ_SET_REPORT); ++ ++ kfree(buf); ++ ++ return ret; + } + + /* +@@ -1153,10 +1171,19 @@ static int sixaxis_set_operational_bt(struct hid_device *hdev) + */ + static int dualshock4_set_operational_bt(struct hid_device *hdev) + { +- __u8 buf[37] = { 0 }; ++ __u8 *buf; ++ int ret; + +- return hid_hw_raw_request(hdev, 0x02, buf, sizeof(buf), ++ buf = kmalloc(DS4_REPORT_0x02_SIZE, GFP_KERNEL); ++ if (!buf) ++ return -ENOMEM; ++ ++ ret = hid_hw_raw_request(hdev, 0x02, buf, DS4_REPORT_0x02_SIZE, + HID_FEATURE_REPORT, HID_REQ_GET_REPORT); ++ ++ kfree(buf); ++ ++ return ret; + } + + static void sixaxis_set_leds_from_id(int id, __u8 values[MAX_LEDS]) +@@ -1471,9 +1498,7 @@ error_leds: + + static void sixaxis_state_worker(struct work_struct *work) + { +- struct sony_sc *sc = container_of(work, struct sony_sc, state_worker); +- int n; +- union sixaxis_output_report_01 report = { ++ static const union sixaxis_output_report_01 default_report = { + .buf = { + 0x01, + 0x00, 0xff, 0x00, 0xff, 0x00, +@@ -1485,20 +1510,27 @@ static void sixaxis_state_worker(struct work_struct *work) + 0x00, 0x00, 0x00, 0x00, 0x00 + } + }; ++ struct sony_sc *sc = container_of(work, struct sony_sc, state_worker); ++ struct sixaxis_output_report *report = ++ (struct sixaxis_output_report *)sc->output_report_dmabuf; ++ int n; ++ ++ /* Initialize the report with default values */ ++ memcpy(report, &default_report, sizeof(struct sixaxis_output_report)); + + #ifdef CONFIG_SONY_FF +- report.data.rumble.right_motor_on = sc->right ? 1 : 0; +- report.data.rumble.left_motor_force = sc->left; ++ report->rumble.right_motor_on = sc->right ? 1 : 0; ++ report->rumble.left_motor_force = sc->left; + #endif + +- report.data.leds_bitmap |= sc->led_state[0] << 1; +- report.data.leds_bitmap |= sc->led_state[1] << 2; +- report.data.leds_bitmap |= sc->led_state[2] << 3; +- report.data.leds_bitmap |= sc->led_state[3] << 4; ++ report->leds_bitmap |= sc->led_state[0] << 1; ++ report->leds_bitmap |= sc->led_state[1] << 2; ++ report->leds_bitmap |= sc->led_state[2] << 3; ++ report->leds_bitmap |= sc->led_state[3] << 4; + + /* Set flag for all leds off, required for 3rd party INTEC controller */ +- if ((report.data.leds_bitmap & 0x1E) == 0) +- report.data.leds_bitmap |= 0x20; ++ if ((report->leds_bitmap & 0x1E) == 0) ++ report->leds_bitmap |= 0x20; + + /* + * The LEDs in the report are indexed in reverse order to their +@@ -1511,28 +1543,30 @@ static void sixaxis_state_worker(struct work_struct *work) + */ + for (n = 0; n < 4; n++) { + if (sc->led_delay_on[n] || sc->led_delay_off[n]) { +- report.data.led[3 - n].duty_off = sc->led_delay_off[n]; +- report.data.led[3 - n].duty_on = sc->led_delay_on[n]; ++ report->led[3 - n].duty_off = sc->led_delay_off[n]; ++ report->led[3 - n].duty_on = sc->led_delay_on[n]; + } + } + +- hid_hw_raw_request(sc->hdev, report.data.report_id, report.buf, +- sizeof(report), HID_OUTPUT_REPORT, HID_REQ_SET_REPORT); ++ hid_hw_raw_request(sc->hdev, report->report_id, (__u8 *)report, ++ sizeof(struct sixaxis_output_report), ++ HID_OUTPUT_REPORT, HID_REQ_SET_REPORT); + } + + static void dualshock4_state_worker(struct work_struct *work) + { + struct sony_sc *sc = container_of(work, struct sony_sc, state_worker); + struct hid_device *hdev = sc->hdev; ++ __u8 *buf = sc->output_report_dmabuf; + int offset; + +- __u8 buf[78] = { 0 }; +- + if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) { ++ memset(buf, 0, DS4_REPORT_0x05_SIZE); + buf[0] = 0x05; + buf[1] = 0xFF; + offset = 4; + } else { ++ memset(buf, 0, DS4_REPORT_0x11_SIZE); + buf[0] = 0x11; + buf[1] = 0xB0; + buf[3] = 0x0F; +@@ -1560,12 +1594,33 @@ static void dualshock4_state_worker(struct work_struct *work) + buf[offset++] = sc->led_delay_off[3]; + + if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) +- hid_hw_output_report(hdev, buf, 32); ++ hid_hw_output_report(hdev, buf, DS4_REPORT_0x05_SIZE); + else +- hid_hw_raw_request(hdev, 0x11, buf, 78, ++ hid_hw_raw_request(hdev, 0x11, buf, DS4_REPORT_0x11_SIZE, + HID_OUTPUT_REPORT, HID_REQ_SET_REPORT); + } + ++static int sony_allocate_output_report(struct sony_sc *sc) ++{ ++ if (sc->quirks & SIXAXIS_CONTROLLER) ++ sc->output_report_dmabuf = ++ kmalloc(sizeof(union sixaxis_output_report_01), ++ GFP_KERNEL); ++ else if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) ++ sc->output_report_dmabuf = kmalloc(DS4_REPORT_0x11_SIZE, ++ GFP_KERNEL); ++ else if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) ++ sc->output_report_dmabuf = kmalloc(DS4_REPORT_0x05_SIZE, ++ GFP_KERNEL); ++ else ++ return 0; ++ ++ if (!sc->output_report_dmabuf) ++ return -ENOMEM; ++ ++ return 0; ++} ++ + #ifdef CONFIG_SONY_FF + static int sony_play_effect(struct input_dev *dev, void *data, + struct ff_effect *effect) +@@ -1754,6 +1809,7 @@ static int sony_get_bt_devaddr(struct sony_sc *sc) + + static int sony_check_add(struct sony_sc *sc) + { ++ __u8 *buf = NULL; + int n, ret; + + if ((sc->quirks & DUALSHOCK4_CONTROLLER_BT) || +@@ -1769,36 +1825,44 @@ static int sony_check_add(struct sony_sc *sc) + return 0; + } + } else if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) { +- __u8 buf[7]; ++ buf = kmalloc(DS4_REPORT_0x81_SIZE, GFP_KERNEL); ++ if (!buf) ++ return -ENOMEM; + + /* + * The MAC address of a DS4 controller connected via USB can be + * retrieved with feature report 0x81. The address begins at + * offset 1. + */ +- ret = hid_hw_raw_request(sc->hdev, 0x81, buf, sizeof(buf), +- HID_FEATURE_REPORT, HID_REQ_GET_REPORT); ++ ret = hid_hw_raw_request(sc->hdev, 0x81, buf, ++ DS4_REPORT_0x81_SIZE, HID_FEATURE_REPORT, ++ HID_REQ_GET_REPORT); + +- if (ret != 7) { ++ if (ret != DS4_REPORT_0x81_SIZE) { + hid_err(sc->hdev, "failed to retrieve feature report 0x81 with the DualShock 4 MAC address\n"); +- return ret < 0 ? ret : -EINVAL; ++ ret = ret < 0 ? ret : -EINVAL; ++ goto out_free; + } + + memcpy(sc->mac_address, &buf[1], sizeof(sc->mac_address)); + } else if (sc->quirks & SIXAXIS_CONTROLLER_USB) { +- __u8 buf[18]; ++ buf = kmalloc(SIXAXIS_REPORT_0xF2_SIZE, GFP_KERNEL); ++ if (!buf) ++ return -ENOMEM; + + /* + * The MAC address of a Sixaxis controller connected via USB can + * be retrieved with feature report 0xf2. The address begins at + * offset 4. + */ +- ret = hid_hw_raw_request(sc->hdev, 0xf2, buf, sizeof(buf), +- HID_FEATURE_REPORT, HID_REQ_GET_REPORT); ++ ret = hid_hw_raw_request(sc->hdev, 0xf2, buf, ++ SIXAXIS_REPORT_0xF2_SIZE, HID_FEATURE_REPORT, ++ HID_REQ_GET_REPORT); + +- if (ret != 18) { ++ if (ret != SIXAXIS_REPORT_0xF2_SIZE) { + hid_err(sc->hdev, "failed to retrieve feature report 0xf2 with the Sixaxis MAC address\n"); +- return ret < 0 ? ret : -EINVAL; ++ ret = ret < 0 ? ret : -EINVAL; ++ goto out_free; + } + + /* +@@ -1811,7 +1875,13 @@ static int sony_check_add(struct sony_sc *sc) + return 0; + } + +- return sony_check_add_dev_list(sc); ++ ret = sony_check_add_dev_list(sc); ++ ++out_free: ++ ++ kfree(buf); ++ ++ return ret; + } + + static int sony_set_device_id(struct sony_sc *sc) +@@ -1895,6 +1965,12 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id) + return ret; + } + ++ ret = sony_allocate_output_report(sc); ++ if (ret < 0) { ++ hid_err(hdev, "failed to allocate the output report buffer\n"); ++ goto err_stop; ++ } ++ + ret = sony_set_device_id(sc); + if (ret < 0) { + hid_err(hdev, "failed to allocate the device id\n"); +@@ -1984,6 +2060,7 @@ err_stop: + if (sc->quirks & SONY_BATTERY_SUPPORT) + sony_battery_remove(sc); + sony_cancel_work_sync(sc); ++ kfree(sc->output_report_dmabuf); + sony_remove_dev_list(sc); + sony_release_device_id(sc); + hid_hw_stop(hdev); +@@ -2004,6 +2081,8 @@ static void sony_remove(struct hid_device *hdev) + + sony_cancel_work_sync(sc); + ++ kfree(sc->output_report_dmabuf); ++ + sony_remove_dev_list(sc); + + sony_release_device_id(sc); diff --git a/drivers/hid/hid-wiimote-debug.c b/drivers/hid/hid-wiimote-debug.c index c13fb5b..55a3802 100644 --- a/drivers/hid/hid-wiimote-debug.c @@ -42512,39 +42045,8 @@ index c13fb5b..55a3802 100644 return -EFAULT; *off += size; -diff --git a/drivers/hid/uhid.c b/drivers/hid/uhid.c -index 0cb92e3..c7d453d 100644 ---- a/drivers/hid/uhid.c -+++ b/drivers/hid/uhid.c -@@ -47,7 +47,7 @@ struct uhid_device { - struct mutex report_lock; - wait_queue_head_t report_wait; - atomic_t report_done; -- atomic_t report_id; -+ atomic_unchecked_t report_id; - struct uhid_event report_buf; - }; - -@@ -163,7 +163,7 @@ static int uhid_hid_get_raw(struct hid_device *hid, unsigned char rnum, - - spin_lock_irqsave(&uhid->qlock, flags); - ev->type = UHID_FEATURE; -- ev->u.feature.id = atomic_inc_return(&uhid->report_id); -+ ev->u.feature.id = atomic_inc_return_unchecked(&uhid->report_id); - ev->u.feature.rnum = rnum; - ev->u.feature.rtype = report_type; - -@@ -538,7 +538,7 @@ static int uhid_dev_feature_answer(struct uhid_device *uhid, - spin_lock_irqsave(&uhid->qlock, flags); - - /* id for old report; drop it silently */ -- if (atomic_read(&uhid->report_id) != ev->u.feature_answer.id) -+ if (atomic_read_unchecked(&uhid->report_id) != ev->u.feature_answer.id) - goto unlock; - if (atomic_read(&uhid->report_done)) - goto unlock; diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c -index 19bad59..ca24eaf 100644 +index 433f72a..2926005 100644 --- a/drivers/hv/channel.c +++ b/drivers/hv/channel.c @@ -366,8 +366,8 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer, @@ -42949,10 +42451,10 @@ index 8df43c5..b07b91d 100644 }; diff --git a/drivers/i2c/busses/i2c-amd756-s4882.c b/drivers/i2c/busses/i2c-amd756-s4882.c -index 41fc683..a39cfea 100644 +index 65e3240..e6c511d 100644 --- a/drivers/i2c/busses/i2c-amd756-s4882.c +++ b/drivers/i2c/busses/i2c-amd756-s4882.c -@@ -43,7 +43,7 @@ +@@ -39,7 +39,7 @@ extern struct i2c_adapter amd756_smbus; static struct i2c_adapter *s4882_adapter; @@ -42975,10 +42477,10 @@ index b19a310..d6eece0 100644 int ret = 0; int actual; diff --git a/drivers/i2c/busses/i2c-nforce2-s4985.c b/drivers/i2c/busses/i2c-nforce2-s4985.c -index b170bdf..3c76427 100644 +index 88eda09..cf40434 100644 --- a/drivers/i2c/busses/i2c-nforce2-s4985.c +++ b/drivers/i2c/busses/i2c-nforce2-s4985.c -@@ -41,7 +41,7 @@ +@@ -37,7 +37,7 @@ extern struct i2c_adapter *nforce2_smbus; static struct i2c_adapter *s4985_adapter; @@ -42988,10 +42490,10 @@ index b170bdf..3c76427 100644 /* Wrapper access functions for multiplexed SMBus */ static DEFINE_MUTEX(nforce2_lock); diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c -index 80b47e8..1a6040d9 100644 +index 71c7a39..71dd3e0 100644 --- a/drivers/i2c/i2c-dev.c +++ b/drivers/i2c/i2c-dev.c -@@ -277,7 +277,7 @@ static noinline int i2cdev_ioctl_rdrw(struct i2c_client *client, +@@ -272,7 +272,7 @@ static noinline int i2cdev_ioctl_rdrw(struct i2c_client *client, break; } @@ -43903,11 +43405,24 @@ index c00ae09..04e91be 100644 #include "qib_common.h" #include "qib_verbs.h" +diff --git a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c +index cdc7df4..a2fdfdb 100644 +--- a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c ++++ b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c +@@ -156,7 +156,7 @@ static size_t ipoib_get_size(const struct net_device *dev) + nla_total_size(2); /* IFLA_IPOIB_UMCAST */ + } + +-static struct rtnl_link_ops ipoib_link_ops __read_mostly = { ++static struct rtnl_link_ops ipoib_link_ops = { + .kind = "ipoib", + .maxtype = IFLA_IPOIB_MAX, + .policy = ipoib_policy, diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c -index 24c41ba..102d71f 100644 +index e29c04e..adbf68c 100644 --- a/drivers/input/gameport/gameport.c +++ b/drivers/input/gameport/gameport.c -@@ -490,14 +490,14 @@ EXPORT_SYMBOL(gameport_set_phys); +@@ -527,14 +527,14 @@ EXPORT_SYMBOL(gameport_set_phys); */ static void gameport_init_port(struct gameport *gameport) { @@ -43925,10 +43440,10 @@ index 24c41ba..102d71f 100644 gameport->dev.release = gameport_release_port; if (gameport->parent) diff --git a/drivers/input/input.c b/drivers/input/input.c -index 29ca0bb..f4bc2e3 100644 +index 0f175f5..4c481c0 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c -@@ -1774,7 +1774,7 @@ EXPORT_SYMBOL_GPL(input_class); +@@ -1775,7 +1775,7 @@ EXPORT_SYMBOL_GPL(input_class); */ struct input_dev *input_allocate_device(void) { @@ -43937,10 +43452,10 @@ index 29ca0bb..f4bc2e3 100644 struct input_dev *dev; dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL); -@@ -1789,7 +1789,7 @@ struct input_dev *input_allocate_device(void) +@@ -1790,7 +1790,7 @@ struct input_dev *input_allocate_device(void) INIT_LIST_HEAD(&dev->node); - dev_set_name(&dev->dev, "input%ld", + dev_set_name(&dev->dev, "input%lu", - (unsigned long) atomic_inc_return(&input_no) - 1); + (unsigned long) atomic_inc_return_unchecked(&input_no) - 1); @@ -43959,10 +43474,10 @@ index 4a95b22..874c182 100644 #include #include diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c -index 177602c..ec78499 100644 +index fc55f0d..11e2aa6 100644 --- a/drivers/input/joystick/xpad.c +++ b/drivers/input/joystick/xpad.c -@@ -850,7 +850,7 @@ static void xpad_led_set(struct led_classdev *led_cdev, +@@ -886,7 +886,7 @@ static void xpad_led_set(struct led_classdev *led_cdev, static int xpad_led_probe(struct usb_xpad *xpad) { @@ -43971,7 +43486,7 @@ index 177602c..ec78499 100644 long led_no; struct xpad_led *led; struct led_classdev *led_cdev; -@@ -863,7 +863,7 @@ static int xpad_led_probe(struct usb_xpad *xpad) +@@ -899,7 +899,7 @@ static int xpad_led_probe(struct usb_xpad *xpad) if (!led) return -ENOMEM; @@ -43981,7 +43496,7 @@ index 177602c..ec78499 100644 snprintf(led->name, sizeof(led->name), "xpad%ld", led_no); led->xpad = xpad; diff --git a/drivers/input/misc/ims-pcu.c b/drivers/input/misc/ims-pcu.c -index 719410f..1896169 100644 +index afed8e2..3aa8a18 100644 --- a/drivers/input/misc/ims-pcu.c +++ b/drivers/input/misc/ims-pcu.c @@ -1851,7 +1851,7 @@ static int ims_pcu_identify_type(struct ims_pcu *pcu, u8 *device_id) @@ -44003,10 +43518,10 @@ index 719410f..1896169 100644 /* * PCU-B devices, both GEN_1 and GEN_2 do not have OFN sensor diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h -index 2f0b39d..7370f13 100644 +index f4cf664..3204fda 100644 --- a/drivers/input/mouse/psmouse.h +++ b/drivers/input/mouse/psmouse.h -@@ -116,7 +116,7 @@ struct psmouse_attribute { +@@ -117,7 +117,7 @@ struct psmouse_attribute { ssize_t (*set)(struct psmouse *psmouse, void *data, const char *buf, size_t count); bool protect; @@ -44029,7 +43544,7 @@ index b604564..3f14ae4 100644 return count; diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c -index b29134d..394deb0 100644 +index d399b8b..4913ede 100644 --- a/drivers/input/serio/serio.c +++ b/drivers/input/serio/serio.c @@ -514,7 +514,7 @@ static void serio_release_port(struct device *dev) @@ -44044,9 +43559,9 @@ index b29134d..394deb0 100644 @@ -525,7 +525,7 @@ static void serio_init_port(struct serio *serio) mutex_init(&serio->drv_mutex); device_initialize(&serio->dev); - dev_set_name(&serio->dev, "serio%ld", -- (long)atomic_inc_return(&serio_no) - 1); -+ (long)atomic_inc_return_unchecked(&serio_no) - 1); + dev_set_name(&serio->dev, "serio%lu", +- (unsigned long)atomic_inc_return(&serio_no) - 1); ++ (unsigned long)atomic_inc_return_unchecked(&serio_no) - 1); serio->dev.bus = &serio_bus; serio->dev.release = serio_release_port; serio->dev.groups = serio_device_attr_groups; @@ -44072,11 +43587,39 @@ index c9a02fe..0debc75 100644 kref_init(&serio_raw->kref); INIT_LIST_HEAD(&serio_raw->client_list); init_waitqueue_head(&serio_raw->wait); +diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c +index 505a9ad..356734c 100644 +--- a/drivers/iommu/amd_iommu.c ++++ b/drivers/iommu/amd_iommu.c +@@ -823,11 +823,21 @@ static void copy_cmd_to_buffer(struct amd_iommu *iommu, + + static void build_completion_wait(struct iommu_cmd *cmd, u64 address) + { ++ phys_addr_t physaddr; + WARN_ON(address & 0x7ULL); + + memset(cmd, 0, sizeof(*cmd)); +- cmd->data[0] = lower_32_bits(__pa(address)) | CMD_COMPL_WAIT_STORE_MASK; +- cmd->data[1] = upper_32_bits(__pa(address)); ++ ++#ifdef CONFIG_GRKERNSEC_KSTACKOVERFLOW ++ if (object_starts_on_stack((void *)address)) { ++ void *adjbuf = (void *)address - current->stack + current->lowmem_stack; ++ physaddr = __pa((u64)adjbuf); ++ } else ++#endif ++ physaddr = __pa(address); ++ ++ cmd->data[0] = lower_32_bits(physaddr) | CMD_COMPL_WAIT_STORE_MASK; ++ cmd->data[1] = upper_32_bits(physaddr); + cmd->data[2] = 1; + CMD_SET_TYPE(cmd, CMD_COMPL_WAIT); + } diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c -index a83cc2a..64462e6 100644 +index 60558f7..5a02369 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c -@@ -921,7 +921,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain, +@@ -934,7 +934,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain, cfg->irptndx = cfg->cbndx; } @@ -44085,11 +43628,24 @@ index a83cc2a..64462e6 100644 arm_smmu_init_context_bank(smmu_domain); spin_unlock_irqrestore(&smmu_domain->lock, flags); +diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c +index ed8b048..7fbcc01 100644 +--- a/drivers/iommu/iommu.c ++++ b/drivers/iommu/iommu.c +@@ -802,7 +802,7 @@ static int iommu_bus_notifier(struct notifier_block *nb, + static int iommu_bus_init(struct bus_type *bus, const struct iommu_ops *ops) + { + int err; +- struct notifier_block *nb; ++ notifier_block_no_const *nb; + struct iommu_callback_data cb = { + .ops = ops, + }; diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c -index 33c4395..e06447e 100644 +index 74a1767..5a359e8 100644 --- a/drivers/iommu/irq_remapping.c +++ b/drivers/iommu/irq_remapping.c -@@ -354,7 +354,7 @@ int setup_hpet_msi_remapped(unsigned int irq, unsigned int id) +@@ -361,7 +361,7 @@ int setup_hpet_msi_remapped(unsigned int irq, unsigned int id) void panic_if_irq_remap(const char *msg) { if (irq_remapping_enabled) @@ -44098,7 +43654,7 @@ index 33c4395..e06447e 100644 } static void ir_ack_apic_edge(struct irq_data *data) -@@ -375,10 +375,12 @@ static void ir_print_prefix(struct irq_data *data, struct seq_file *p) +@@ -382,10 +382,12 @@ static void ir_print_prefix(struct irq_data *data, struct seq_file *p) void irq_remap_modify_chip_defaults(struct irq_chip *chip) { @@ -44116,7 +43672,7 @@ index 33c4395..e06447e 100644 bool setup_remapped_irq(int irq, struct irq_cfg *cfg, struct irq_chip *chip) diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c -index dda6dbc..f9adebb 100644 +index 38493ff..001538b 100644 --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c @@ -84,7 +84,7 @@ static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly; @@ -44128,7 +43684,7 @@ index dda6dbc..f9adebb 100644 .irq_eoi = NULL, .irq_mask = NULL, .irq_unmask = NULL, -@@ -312,7 +312,7 @@ static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc) +@@ -311,7 +311,7 @@ static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc) chained_irq_exit(chip, desc); } @@ -44192,7 +43748,7 @@ index 6a2df32..dc962f1 100644 capimsg_setu32(skb->data, 12, (u32)(long)skb->data);/* Data32 */ capimsg_setu16(skb->data, 16, len); /* Data length */ diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c -index b7ae0a0..04590fa 100644 +index aecec6d..11e13c5 100644 --- a/drivers/isdn/gigaset/bas-gigaset.c +++ b/drivers/isdn/gigaset/bas-gigaset.c @@ -2565,22 +2565,22 @@ static int gigaset_post_reset(struct usb_interface *intf) @@ -44306,10 +43862,10 @@ index 8c91fd5..14f13ce 100644 diff --git a/drivers/isdn/gigaset/usb-gigaset.c b/drivers/isdn/gigaset/usb-gigaset.c -index d0a41cb..b953e50 100644 +index a8e652d..edadaa4 100644 --- a/drivers/isdn/gigaset/usb-gigaset.c +++ b/drivers/isdn/gigaset/usb-gigaset.c -@@ -547,7 +547,7 @@ static int gigaset_brkchars(struct cardstate *cs, const unsigned char buf[6]) +@@ -548,7 +548,7 @@ static int gigaset_brkchars(struct cardstate *cs, const unsigned char buf[6]) gigaset_dbg_buffer(DEBUG_USBREQ, "brkchars", 6, buf); memcpy(cs->hw.usb->bchars, buf, 6); return usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x19, 0x41, @@ -44318,7 +43874,7 @@ index d0a41cb..b953e50 100644 } static void gigaset_freebcshw(struct bc_state *bcs) -@@ -869,22 +869,22 @@ static int gigaset_pre_reset(struct usb_interface *intf) +@@ -867,22 +867,22 @@ static int gigaset_pre_reset(struct usb_interface *intf) } static const struct gigaset_ops ops = { @@ -44410,10 +43966,10 @@ index 91d5730..336523e 100644 /* The following should better go into a dedicated source file such that diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c -index 3c5f249..5fac4d0 100644 +index bc91261..2ef7e36 100644 --- a/drivers/isdn/i4l/isdn_tty.c +++ b/drivers/isdn/i4l/isdn_tty.c -@@ -1508,9 +1508,9 @@ isdn_tty_open(struct tty_struct *tty, struct file *filp) +@@ -1503,9 +1503,9 @@ isdn_tty_open(struct tty_struct *tty, struct file *filp) #ifdef ISDN_DEBUG_MODEM_OPEN printk(KERN_DEBUG "isdn_tty_open %s, count = %d\n", tty->name, @@ -44425,7 +43981,7 @@ index 3c5f249..5fac4d0 100644 port->tty = tty; /* * Start up serial port -@@ -1554,7 +1554,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp) +@@ -1549,7 +1549,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp) #endif return; } @@ -44434,7 +43990,7 @@ index 3c5f249..5fac4d0 100644 /* * Uh, oh. tty->count is 1, which means that the tty * structure will be freed. Info->count should always -@@ -1563,15 +1563,15 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp) +@@ -1558,15 +1558,15 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp) * serial port won't be shutdown. */ printk(KERN_ERR "isdn_tty_close: bad port count; tty->count is 1, " @@ -44456,7 +44012,7 @@ index 3c5f249..5fac4d0 100644 #ifdef ISDN_DEBUG_MODEM_OPEN printk(KERN_DEBUG "isdn_tty_close after info->count != 0\n"); #endif -@@ -1625,7 +1625,7 @@ isdn_tty_hangup(struct tty_struct *tty) +@@ -1620,7 +1620,7 @@ isdn_tty_hangup(struct tty_struct *tty) if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_hangup")) return; isdn_tty_shutdown(info); @@ -44465,7 +44021,7 @@ index 3c5f249..5fac4d0 100644 port->flags &= ~ASYNC_NORMAL_ACTIVE; port->tty = NULL; wake_up_interruptible(&port->open_wait); -@@ -1970,7 +1970,7 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup) +@@ -1965,7 +1965,7 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup) for (i = 0; i < ISDN_MAX_CHANNELS; i++) { modem_info *info = &dev->mdm.info[i]; @@ -44515,10 +44071,10 @@ index 6a7447c..cae33fe 100644 } else memcpy(msg, buf, count); diff --git a/drivers/isdn/mISDN/dsp_cmx.c b/drivers/isdn/mISDN/dsp_cmx.c -index a4f05c5..1433bc5 100644 +index 87f7dff..7300125 100644 --- a/drivers/isdn/mISDN/dsp_cmx.c +++ b/drivers/isdn/mISDN/dsp_cmx.c -@@ -1628,7 +1628,7 @@ unsigned long dsp_spl_jiffies; /* calculate the next time to fire */ +@@ -1625,7 +1625,7 @@ unsigned long dsp_spl_jiffies; /* calculate the next time to fire */ static u16 dsp_count; /* last sample count */ static int dsp_count_valid; /* if we have last sample count */ @@ -44718,10 +44274,10 @@ index a08e3ee..df8ade2 100644 cl->fn = fn; cl->wq = wq; diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c -index 67f8b31..9418f2b 100644 +index da3604e..7789cb4c 100644 --- a/drivers/md/bitmap.c +++ b/drivers/md/bitmap.c -@@ -1775,7 +1775,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap) +@@ -1771,7 +1771,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap) chunk_kb ? "KB" : "B"); if (bitmap->storage.file) { seq_printf(seq, ", file: "); @@ -44731,7 +44287,7 @@ index 67f8b31..9418f2b 100644 seq_printf(seq, "\n"); diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c -index 5152142..623d141 100644 +index 0be9381..114262b 100644 --- a/drivers/md/dm-ioctl.c +++ b/drivers/md/dm-ioctl.c @@ -1769,7 +1769,7 @@ static int validate_params(uint cmd, struct dm_ioctl *param) @@ -44820,7 +44376,7 @@ index 7dfdb5c..4caada6 100644 return (test_bit(DM_RAID1_FLUSH_ERROR, &(m->error_type))) ? 'F' : diff --git a/drivers/md/dm-stats.c b/drivers/md/dm-stats.c -index 28a9012..9c0f6a5 100644 +index 87f86c7..a1a4100 100644 --- a/drivers/md/dm-stats.c +++ b/drivers/md/dm-stats.c @@ -382,7 +382,7 @@ do_sync_free: @@ -44844,7 +44400,7 @@ index 28a9012..9c0f6a5 100644 rcu_read_lock(); diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c -index d1600d2..4c3af3a 100644 +index f8b37d4..5c5cafd 100644 --- a/drivers/md/dm-stripe.c +++ b/drivers/md/dm-stripe.c @@ -21,7 +21,7 @@ struct stripe { @@ -44856,7 +44412,7 @@ index d1600d2..4c3af3a 100644 }; struct stripe_c { -@@ -186,7 +186,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv) +@@ -188,7 +188,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv) kfree(sc); return r; } @@ -44865,7 +44421,7 @@ index d1600d2..4c3af3a 100644 } ti->private = sc; -@@ -330,7 +330,7 @@ static void stripe_status(struct dm_target *ti, status_type_t type, +@@ -332,7 +332,7 @@ static void stripe_status(struct dm_target *ti, status_type_t type, DMEMIT("%d ", sc->stripes); for (i = 0; i < sc->stripes; i++) { DMEMIT("%s ", sc->stripe[i].dev->name); @@ -44874,7 +44430,7 @@ index d1600d2..4c3af3a 100644 'D' : 'A'; } buffer[i] = '\0'; -@@ -375,8 +375,8 @@ static int stripe_end_io(struct dm_target *ti, struct bio *bio, int error) +@@ -377,8 +377,8 @@ static int stripe_end_io(struct dm_target *ti, struct bio *bio, int error) */ for (i = 0; i < sc->stripes; i++) if (!strcmp(sc->stripe[i].dev->name, major_minor)) { @@ -44886,19 +44442,10 @@ index d1600d2..4c3af3a 100644 schedule_work(&sc->trigger_event); } diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c -index f9c6cb8..e272df6 100644 +index b2bd1eb..38f7a44 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c -@@ -274,7 +274,7 @@ static struct dm_dev_internal *find_device(struct list_head *l, dev_t dev) - static int open_dev(struct dm_dev_internal *d, dev_t dev, - struct mapped_device *md) - { -- static char *_claim_ptr = "I belong to device-mapper"; -+ static char _claim_ptr[] = "I belong to device-mapper"; - struct block_device *bdev; - - int r; -@@ -342,7 +342,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev, +@@ -303,7 +303,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev, if (!dev_size) return 0; @@ -44930,10 +44477,10 @@ index e9d33ad..dae9880d 100644 pmd->bl_info.value_type.inc = data_block_inc; pmd->bl_info.value_type.dec = data_block_dec; diff --git a/drivers/md/dm.c b/drivers/md/dm.c -index 32b958d..34011e8 100644 +index 58f3927..bfbad3e 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c -@@ -180,9 +180,9 @@ struct mapped_device { +@@ -183,9 +183,9 @@ struct mapped_device { /* * Event handling. */ @@ -44945,7 +44492,7 @@ index 32b958d..34011e8 100644 struct list_head uevent_list; spinlock_t uevent_lock; /* Protect access to uevent_list */ -@@ -1952,8 +1952,8 @@ static struct mapped_device *alloc_dev(int minor) +@@ -2071,8 +2071,8 @@ static struct mapped_device *alloc_dev(int minor) spin_lock_init(&md->deferred_lock); atomic_set(&md->holders, 1); atomic_set(&md->open_count, 0); @@ -44954,9 +44501,9 @@ index 32b958d..34011e8 100644 + atomic_set_unchecked(&md->event_nr, 0); + atomic_set_unchecked(&md->uevent_seq, 0); INIT_LIST_HEAD(&md->uevent_list); + INIT_LIST_HEAD(&md->table_devices); spin_lock_init(&md->uevent_lock); - -@@ -2107,7 +2107,7 @@ static void event_callback(void *context) +@@ -2228,7 +2228,7 @@ static void event_callback(void *context) dm_send_uevents(&uevents, &disk_to_dev(md->disk)->kobj); @@ -44965,7 +44512,7 @@ index 32b958d..34011e8 100644 wake_up(&md->eventq); } -@@ -2800,18 +2800,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action, +@@ -2921,18 +2921,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action, uint32_t dm_next_uevent_seq(struct mapped_device *md) { @@ -44988,10 +44535,10 @@ index 32b958d..34011e8 100644 void dm_uevent_add(struct mapped_device *md, struct list_head *elist) diff --git a/drivers/md/md.c b/drivers/md/md.c -index b7f603c..723d2bd 100644 +index 9233c71..ed5243a 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c -@@ -194,10 +194,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev); +@@ -190,10 +190,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev); * start build, activate spare */ static DECLARE_WAIT_QUEUE_HEAD(md_event_waiters); @@ -45004,7 +44551,7 @@ index b7f603c..723d2bd 100644 wake_up(&md_event_waiters); } EXPORT_SYMBOL_GPL(md_new_event); -@@ -207,7 +207,7 @@ EXPORT_SYMBOL_GPL(md_new_event); +@@ -203,7 +203,7 @@ EXPORT_SYMBOL_GPL(md_new_event); */ static void md_new_event_inintr(struct mddev *mddev) { @@ -45013,7 +44560,7 @@ index b7f603c..723d2bd 100644 wake_up(&md_event_waiters); } -@@ -1462,7 +1462,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_ +@@ -1426,7 +1426,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_ if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE) && (le32_to_cpu(sb->feature_map) & MD_FEATURE_NEW_OFFSET)) rdev->new_data_offset += (s32)le32_to_cpu(sb->new_offset); @@ -45022,7 +44569,7 @@ index b7f603c..723d2bd 100644 rdev->sb_size = le32_to_cpu(sb->max_dev) * 2 + 256; bmask = queue_logical_block_size(rdev->bdev->bd_disk->queue)-1; -@@ -1713,7 +1713,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev) +@@ -1677,7 +1677,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev) else sb->resync_offset = cpu_to_le64(0); @@ -45031,7 +44578,7 @@ index b7f603c..723d2bd 100644 sb->raid_disks = cpu_to_le32(mddev->raid_disks); sb->size = cpu_to_le64(mddev->dev_sectors); -@@ -2725,7 +2725,7 @@ __ATTR(state, S_IRUGO|S_IWUSR, state_show, state_store); +@@ -2547,7 +2547,7 @@ __ATTR(state, S_IRUGO|S_IWUSR, state_show, state_store); static ssize_t errors_show(struct md_rdev *rdev, char *page) { @@ -45040,7 +44587,7 @@ index b7f603c..723d2bd 100644 } static ssize_t -@@ -2734,7 +2734,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len) +@@ -2556,7 +2556,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len) char *e; unsigned long n = simple_strtoul(buf, &e, 10); if (*buf && (*e == 0 || *e == '\n')) { @@ -45049,7 +44596,7 @@ index b7f603c..723d2bd 100644 return len; } return -EINVAL; -@@ -3183,8 +3183,8 @@ int md_rdev_init(struct md_rdev *rdev) +@@ -3000,8 +3000,8 @@ int md_rdev_init(struct md_rdev *rdev) rdev->sb_loaded = 0; rdev->bb_page = NULL; atomic_set(&rdev->nr_pending, 0); @@ -45060,7 +44607,7 @@ index b7f603c..723d2bd 100644 INIT_LIST_HEAD(&rdev->same_set); init_waitqueue_head(&rdev->blocked_wait); -@@ -7072,7 +7072,7 @@ static int md_seq_show(struct seq_file *seq, void *v) +@@ -6855,7 +6855,7 @@ static int md_seq_show(struct seq_file *seq, void *v) spin_unlock(&pers_lock); seq_printf(seq, "\n"); @@ -45069,7 +44616,7 @@ index b7f603c..723d2bd 100644 return 0; } if (v == (void*)2) { -@@ -7175,7 +7175,7 @@ static int md_seq_open(struct inode *inode, struct file *file) +@@ -6958,7 +6958,7 @@ static int md_seq_open(struct inode *inode, struct file *file) return error; seq = file->private_data; @@ -45078,7 +44625,7 @@ index b7f603c..723d2bd 100644 return error; } -@@ -7192,7 +7192,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait) +@@ -6975,7 +6975,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait) /* always allow read */ mask = POLLIN | POLLRDNORM; @@ -45087,7 +44634,7 @@ index b7f603c..723d2bd 100644 mask |= POLLERR | POLLPRI; return mask; } -@@ -7236,7 +7236,7 @@ static int is_mddev_idle(struct mddev *mddev, int init) +@@ -7022,7 +7022,7 @@ static int is_mddev_idle(struct mddev *mddev, int init) struct gendisk *disk = rdev->bdev->bd_contains->bd_disk; curr_events = (int)part_stat_read(&disk->part0, sectors[0]) + (int)part_stat_read(&disk->part0, sectors[1]) - @@ -45097,7 +44644,7 @@ index b7f603c..723d2bd 100644 * as sync_io is counted when a request starts, and * disk_stats is counted when it completes. diff --git a/drivers/md/md.h b/drivers/md/md.h -index a49d991..3582bb7 100644 +index 03cec5b..0a658c1 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h @@ -94,13 +94,13 @@ struct md_rdev { @@ -45116,20 +44663,20 @@ index a49d991..3582bb7 100644 * for reporting to userspace and storing * in superblock. */ -@@ -449,7 +449,7 @@ static inline void rdev_dec_pending(struct md_rdev *rdev, struct mddev *mddev) +@@ -448,7 +448,7 @@ static inline void rdev_dec_pending(struct md_rdev *rdev, struct mddev *mddev) static inline void md_sync_acct(struct block_device *bdev, unsigned long nr_sectors) { -- atomic_add(nr_sectors, &bdev->bd_contains->bd_disk->sync_io); +- atomic_add(nr_sectors, &bdev->bd_contains->bd_disk->sync_io); + atomic_add_unchecked(nr_sectors, &bdev->bd_contains->bd_disk->sync_io); } struct md_personality diff --git a/drivers/md/persistent-data/dm-space-map-metadata.c b/drivers/md/persistent-data/dm-space-map-metadata.c -index 786b689..ea8c956 100644 +index f4e22bc..8f83114 100644 --- a/drivers/md/persistent-data/dm-space-map-metadata.c +++ b/drivers/md/persistent-data/dm-space-map-metadata.c -@@ -679,7 +679,7 @@ static int sm_metadata_extend(struct dm_space_map *sm, dm_block_t extra_blocks) +@@ -681,7 +681,7 @@ static int sm_metadata_extend(struct dm_space_map *sm, dm_block_t extra_blocks) * Flick into a mode where all blocks get allocated in the new area. */ smm->begin = old_len; @@ -45138,7 +44685,7 @@ index 786b689..ea8c956 100644 /* * Extend. -@@ -710,7 +710,7 @@ out: +@@ -712,7 +712,7 @@ out: /* * Switch back to normal behaviour. */ @@ -45160,10 +44707,10 @@ index 3e6d115..ffecdeb 100644 /*----------------------------------------------------------------*/ diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c -index 55de4f6..b1c57fe 100644 +index 40b35be..a327e11 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c -@@ -1936,7 +1936,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio) +@@ -1931,7 +1931,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio) if (r1_sync_page_io(rdev, sect, s, bio->bi_io_vec[idx].bv_page, READ) != 0) @@ -45172,7 +44719,7 @@ index 55de4f6..b1c57fe 100644 } sectors -= s; sect += s; -@@ -2170,7 +2170,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk, +@@ -2164,7 +2164,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk, !test_bit(Faulty, &rdev->flags)) { if (r1_sync_page_io(rdev, sect, s, conf->tmppage, READ)) { @@ -45182,10 +44729,10 @@ index 55de4f6..b1c57fe 100644 "md/raid1:%s: read error corrected " "(%d sectors at %llu on %s)\n", diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c -index 6703751..187af1e 100644 +index 32e282f..5cec803 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c -@@ -1948,7 +1948,7 @@ static void end_sync_read(struct bio *bio, int error) +@@ -1944,7 +1944,7 @@ static void end_sync_read(struct bio *bio, int error) /* The write handler will notice the lack of * R10BIO_Uptodate and record any errors etc */ @@ -45194,7 +44741,7 @@ index 6703751..187af1e 100644 &conf->mirrors[d].rdev->corrected_errors); /* for reconstruct, we always reschedule after a read. -@@ -2306,7 +2306,7 @@ static void check_decay_read_errors(struct mddev *mddev, struct md_rdev *rdev) +@@ -2301,7 +2301,7 @@ static void check_decay_read_errors(struct mddev *mddev, struct md_rdev *rdev) { struct timespec cur_time_mon; unsigned long hours_since_last; @@ -45203,7 +44750,7 @@ index 6703751..187af1e 100644 ktime_get_ts(&cur_time_mon); -@@ -2328,9 +2328,9 @@ static void check_decay_read_errors(struct mddev *mddev, struct md_rdev *rdev) +@@ -2323,9 +2323,9 @@ static void check_decay_read_errors(struct mddev *mddev, struct md_rdev *rdev) * overflowing the shift of read_errors by hours_since_last. */ if (hours_since_last >= 8 * sizeof(read_errors)) @@ -45215,7 +44762,7 @@ index 6703751..187af1e 100644 } static int r10_sync_page_io(struct md_rdev *rdev, sector_t sector, -@@ -2384,8 +2384,8 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10 +@@ -2379,8 +2379,8 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10 return; check_decay_read_errors(mddev, rdev); @@ -45226,7 +44773,7 @@ index 6703751..187af1e 100644 char b[BDEVNAME_SIZE]; bdevname(rdev->bdev, b); -@@ -2393,7 +2393,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10 +@@ -2388,7 +2388,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10 "md/raid10:%s: %s: Raid device exceeded " "read_error threshold [cur %d:max %d]\n", mdname(mddev), b, @@ -45235,7 +44782,7 @@ index 6703751..187af1e 100644 printk(KERN_NOTICE "md/raid10:%s: %s: Failing raid device\n", mdname(mddev), b); -@@ -2548,7 +2548,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10 +@@ -2543,7 +2543,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10 sect + choose_data_offset(r10_bio, rdev)), bdevname(rdev->bdev, b)); @@ -45245,10 +44792,10 @@ index 6703751..187af1e 100644 rdev_dec_pending(rdev, mddev); diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c -index 9f0fbec..991e7a1 100644 +index 9c66e59..42a8eac 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c -@@ -1735,6 +1735,10 @@ static int grow_one_stripe(struct r5conf *conf, int hash) +@@ -1730,6 +1730,10 @@ static int grow_one_stripe(struct r5conf *conf, int hash) return 1; } @@ -45259,7 +44806,7 @@ index 9f0fbec..991e7a1 100644 static int grow_stripes(struct r5conf *conf, int num) { struct kmem_cache *sc; -@@ -1746,7 +1750,11 @@ static int grow_stripes(struct r5conf *conf, int num) +@@ -1741,7 +1745,11 @@ static int grow_stripes(struct r5conf *conf, int num) "raid%d-%s", conf->level, mdname(conf->mddev)); else sprintf(conf->cache_name[0], @@ -45271,7 +44818,7 @@ index 9f0fbec..991e7a1 100644 sprintf(conf->cache_name[1], "%s-alt", conf->cache_name[0]); conf->active_name = 0; -@@ -2022,21 +2030,21 @@ static void raid5_end_read_request(struct bio * bi, int error) +@@ -2017,21 +2025,21 @@ static void raid5_end_read_request(struct bio * bi, int error) mdname(conf->mddev), STRIPE_SECTORS, (unsigned long long)s, bdevname(rdev->bdev, b)); @@ -45297,7 +44844,7 @@ index 9f0fbec..991e7a1 100644 if (test_bit(R5_ReadRepl, &sh->dev[i].flags)) printk_ratelimited( KERN_WARNING -@@ -2064,7 +2072,7 @@ static void raid5_end_read_request(struct bio * bi, int error) +@@ -2059,7 +2067,7 @@ static void raid5_end_read_request(struct bio * bi, int error) mdname(conf->mddev), (unsigned long long)s, bdn); @@ -45320,18 +44867,17 @@ index 983db75..ef9248c 100644 int minor; int id; diff --git a/drivers/media/dvb-frontends/af9033.h b/drivers/media/dvb-frontends/af9033.h -index 539f4db..cdd403b 100644 +index 6ad22b6..6e90e2a 100644 --- a/drivers/media/dvb-frontends/af9033.h +++ b/drivers/media/dvb-frontends/af9033.h -@@ -82,7 +82,7 @@ struct af9033_ops { +@@ -96,6 +96,6 @@ struct af9033_ops { int (*pid_filter_ctrl)(struct dvb_frontend *fe, int onoff); int (*pid_filter)(struct dvb_frontend *fe, int index, u16 pid, int onoff); -}; +} __no_const; - - #if IS_ENABLED(CONFIG_DVB_AF9033) + #endif /* AF9033_H */ diff --git a/drivers/media/dvb-frontends/dib3000.h b/drivers/media/dvb-frontends/dib3000.h index 9b6c3bb..baeb5c7 100644 --- a/drivers/media/dvb-frontends/dib3000.h @@ -45372,7 +44918,7 @@ index 84cc103..5780c54 100644 #if IS_ENABLED(CONFIG_DVB_DIB8000) void *dib8000_attach(struct dib8000_ops *ops); diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c -index ed8cb90..5ef7f79 100644 +index ce27e6d..b70435a 100644 --- a/drivers/media/pci/cx88/cx88-video.c +++ b/drivers/media/pci/cx88/cx88-video.c @@ -50,9 +50,9 @@ MODULE_VERSION(CX88_VERSION); @@ -45402,10 +44948,10 @@ index 802642d..5534900 100644 /* Parameter declarations */ static int cardtype[IVTV_MAX_CARDS]; diff --git a/drivers/media/pci/solo6x10/solo6x10-core.c b/drivers/media/pci/solo6x10/solo6x10-core.c -index 172583d..0f806f4 100644 +index 8cbe6b4..ea3601c 100644 --- a/drivers/media/pci/solo6x10/solo6x10-core.c +++ b/drivers/media/pci/solo6x10/solo6x10-core.c -@@ -430,7 +430,7 @@ static void solo_device_release(struct device *dev) +@@ -424,7 +424,7 @@ static void solo_device_release(struct device *dev) static int solo_sysfs_init(struct solo_dev *solo_dev) { @@ -45441,7 +44987,7 @@ index 8c84846..27b4f83 100644 p2m_id = -p2m_id; } diff --git a/drivers/media/pci/solo6x10/solo6x10.h b/drivers/media/pci/solo6x10/solo6x10.h -index c6154b0..73e4ae9 100644 +index 72017b7..dd37ae6 100644 --- a/drivers/media/pci/solo6x10/solo6x10.h +++ b/drivers/media/pci/solo6x10/solo6x10.h @@ -219,7 +219,7 @@ struct solo_dev { @@ -45453,8 +44999,21 @@ index c6154b0..73e4ae9 100644 int p2m_jiffies; unsigned int p2m_timeouts; +diff --git a/drivers/media/pci/tw68/tw68-core.c b/drivers/media/pci/tw68/tw68-core.c +index 63f0b64..a017c1c 100644 +--- a/drivers/media/pci/tw68/tw68-core.c ++++ b/drivers/media/pci/tw68/tw68-core.c +@@ -60,7 +60,7 @@ static unsigned int card[] = {[0 ... (TW68_MAXBOARDS - 1)] = UNSET }; + module_param_array(card, int, NULL, 0444); + MODULE_PARM_DESC(card, "card type"); + +-static atomic_t tw68_instance = ATOMIC_INIT(0); ++static atomic_unchecked_t tw68_instance = ATOMIC_INIT(0); + + /* ------------------------------------------------------------------ */ + diff --git a/drivers/media/platform/omap/omap_vout.c b/drivers/media/platform/omap/omap_vout.c -index 2d177fa..5b925a1 100644 +index 64ab6fb..ef4a8b9 100644 --- a/drivers/media/platform/omap/omap_vout.c +++ b/drivers/media/platform/omap/omap_vout.c @@ -63,7 +63,6 @@ enum omap_vout_channels { @@ -45465,7 +45024,7 @@ index 2d177fa..5b925a1 100644 /* Variables configurable through module params*/ static u32 video1_numbuffers = 3; static u32 video2_numbuffers = 3; -@@ -1014,6 +1013,12 @@ static int omap_vout_open(struct file *file) +@@ -1012,6 +1011,12 @@ static int omap_vout_open(struct file *file) { struct videobuf_queue *q; struct omap_vout_device *vout = NULL; @@ -45478,7 +45037,7 @@ index 2d177fa..5b925a1 100644 vout = video_drvdata(file); v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Entering %s\n", __func__); -@@ -1031,10 +1036,6 @@ static int omap_vout_open(struct file *file) +@@ -1029,10 +1034,6 @@ static int omap_vout_open(struct file *file) vout->type = V4L2_BUF_TYPE_VIDEO_OUTPUT; q = &vout->vbq; @@ -45641,21 +45200,6 @@ index c9388c4..ce71ece 100644 .release = mxr_vp_layer_release, .buffer_set = mxr_vp_buffer_set, .stream_set = mxr_vp_stream_set, -diff --git a/drivers/media/platform/vivi.c b/drivers/media/platform/vivi.c -index 8033371..de5bca0 100644 ---- a/drivers/media/platform/vivi.c -+++ b/drivers/media/platform/vivi.c -@@ -58,8 +58,8 @@ MODULE_AUTHOR("Mauro Carvalho Chehab, Ted Walther and John Sokol"); - MODULE_LICENSE("Dual BSD/GPL"); - MODULE_VERSION(VIVI_VERSION); - --static unsigned video_nr = -1; --module_param(video_nr, uint, 0644); -+static int video_nr = -1; -+module_param(video_nr, int, 0644); - MODULE_PARM_DESC(video_nr, "videoX start number, -1 is autodetect"); - - static unsigned n_devs = 1; diff --git a/drivers/media/radio/radio-cadet.c b/drivers/media/radio/radio-cadet.c index 82affae..42833ec 100644 --- a/drivers/media/radio/radio-cadet.c @@ -46234,7 +45778,7 @@ index 733a7ff..f8b52e3 100644 } EXPORT_SYMBOL(usb_cypress_load_firmware); diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c -index 2add8c5..c33b854 100644 +index 1a3df10..57997a5 100644 --- a/drivers/media/usb/dvb-usb/dw2102.c +++ b/drivers/media/usb/dvb-usb/dw2102.c @@ -118,7 +118,7 @@ struct su3000_state { @@ -46453,33 +45997,15 @@ index 6b0b8b6b..4038398 100644 } diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c -index cca6c2f..77b9a18 100644 +index e502a5f..2a27f40 100644 --- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c +++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c -@@ -328,7 +328,7 @@ struct v4l2_buffer32 { - __u32 reserved; - }; - --static int get_v4l2_plane32(struct v4l2_plane *up, struct v4l2_plane32 *up32, -+static int get_v4l2_plane32(struct v4l2_plane __user *up, struct v4l2_plane32 __user *up32, - enum v4l2_memory memory) - { - void __user *up_pln; -@@ -357,7 +357,7 @@ static int get_v4l2_plane32(struct v4l2_plane *up, struct v4l2_plane32 *up32, - return 0; - } - --static int put_v4l2_plane32(struct v4l2_plane *up, struct v4l2_plane32 *up32, -+static int put_v4l2_plane32(struct v4l2_plane __user *up, struct v4l2_plane32 __user *up32, - enum v4l2_memory memory) - { - if (copy_in_user(up32, up, 2 * sizeof(__u32)) || @@ -427,7 +427,7 @@ static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user * by passing a very big num_planes value */ uplane = compat_alloc_user_space(num_planes * sizeof(struct v4l2_plane)); -- kp->m.planes = uplane; -+ kp->m.planes = (struct v4l2_plane __force_kernel *)uplane; +- kp->m.planes = (__force struct v4l2_plane *)uplane; ++ kp->m.planes = (__force_kernel struct v4l2_plane *)uplane; while (--num_planes >= 0) { ret = get_v4l2_plane32(uplane, uplane32, kp->memory); @@ -46487,7 +46013,7 @@ index cca6c2f..77b9a18 100644 if (num_planes == 0) return 0; -- uplane = kp->m.planes; +- uplane = (__force struct v4l2_plane __user *)kp->m.planes; + uplane = (struct v4l2_plane __force_user *)kp->m.planes; if (get_user(p, &up->m.planes)) return -EFAULT; @@ -46496,8 +46022,8 @@ index cca6c2f..77b9a18 100644 get_user(kp->flags, &up->flags) || copy_from_user(&kp->fmt, &up->fmt, sizeof(up->fmt))) return -EFAULT; -- kp->base = compat_ptr(tmp); -+ kp->base = (void __force_kernel *)compat_ptr(tmp); +- kp->base = (__force void *)compat_ptr(tmp); ++ kp->base = (__force_kernel void *)compat_ptr(tmp); return 0; } @@ -46505,29 +46031,29 @@ index cca6c2f..77b9a18 100644 n * sizeof(struct v4l2_ext_control32))) return -EFAULT; kcontrols = compat_alloc_user_space(n * sizeof(struct v4l2_ext_control)); -- kp->controls = kcontrols; -+ kp->controls = (struct v4l2_ext_control __force_kernel *)kcontrols; +- kp->controls = (__force struct v4l2_ext_control *)kcontrols; ++ kp->controls = (__force_kernel struct v4l2_ext_control *)kcontrols; while (--n >= 0) { - if (copy_in_user(kcontrols, ucontrols, sizeof(*ucontrols))) - return -EFAULT; -@@ -689,7 +689,7 @@ static int get_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext - static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext_controls32 __user *up) + u32 id; + +@@ -694,7 +694,7 @@ static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext { struct v4l2_ext_control32 __user *ucontrols; -- struct v4l2_ext_control __user *kcontrols = kp->controls; -+ struct v4l2_ext_control __user *kcontrols = (struct v4l2_ext_control __force_user *)kp->controls; + struct v4l2_ext_control __user *kcontrols = +- (__force struct v4l2_ext_control __user *)kp->controls; ++ (struct v4l2_ext_control __force_user *)kp->controls; int n = kp->count; compat_caddr_t p; -@@ -783,7 +783,7 @@ static int put_v4l2_edid32(struct v4l2_edid *kp, struct v4l2_edid32 __user *up) - put_user(kp->start_block, &up->start_block) || - put_user(kp->blocks, &up->blocks) || - put_user(tmp, &up->edid) || -- copy_to_user(kp->reserved, up->reserved, sizeof(kp->reserved))) -+ copy_to_user(up->reserved, kp->reserved, sizeof(kp->reserved))) +@@ -778,7 +778,7 @@ static int get_v4l2_edid32(struct v4l2_edid *kp, struct v4l2_edid32 __user *up) + get_user(tmp, &up->edid) || + copy_from_user(kp->reserved, up->reserved, sizeof(kp->reserved))) return -EFAULT; +- kp->edid = (__force u8 *)compat_ptr(tmp); ++ kp->edid = (__force_kernel u8 *)compat_ptr(tmp); return 0; } + diff --git a/drivers/media/v4l2-core/v4l2-device.c b/drivers/media/v4l2-core/v4l2-device.c index 015f92a..59e311e 100644 --- a/drivers/media/v4l2-core/v4l2-device.c @@ -46545,7 +46071,7 @@ index 015f92a..59e311e 100644 if (basename[len - 1] >= '0' && basename[len - 1] <= '9') diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c -index d15e167..337f374 100644 +index 9ccb19a..d131468 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -2142,7 +2142,8 @@ struct v4l2_ioctl_info { @@ -46604,10 +46130,10 @@ index d15e167..337f374 100644 err = -EFAULT; goto out_array_args; diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c -index a896d94..a5d56b1 100644 +index 187f836..679544b 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c -@@ -6752,8 +6752,13 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v) +@@ -6746,8 +6746,13 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v) seq_printf(m, " MaxChainDepth = 0x%02x frames\n", ioc->facts.MaxChainDepth); seq_printf(m, " MinBlockSize = 0x%02x bytes\n", 4*ioc->facts.BlockSize); @@ -46621,7 +46147,7 @@ index a896d94..a5d56b1 100644 /* * Rounding UP to nearest 4-kB boundary here... */ -@@ -6766,7 +6771,11 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v) +@@ -6760,7 +6765,11 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v) ioc->facts.GlobalCredits); seq_printf(m, " Frames @ 0x%p (Dma @ 0x%p)\n", @@ -46890,7 +46416,7 @@ index b2c7e3b..85aa4764 100644 static u8 avg_sample = SAMPLE_16; diff --git a/drivers/mfd/max8925-i2c.c b/drivers/mfd/max8925-i2c.c -index ecbe78e..b2ca870 100644 +index c880c89..45a7c68 100644 --- a/drivers/mfd/max8925-i2c.c +++ b/drivers/mfd/max8925-i2c.c @@ -152,7 +152,7 @@ static int max8925_probe(struct i2c_client *client, @@ -46903,7 +46429,7 @@ index ecbe78e..b2ca870 100644 if (node && !pdata) { diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c -index f243e75..322176c 100644 +index 7612d89..70549c2 100644 --- a/drivers/mfd/tps65910.c +++ b/drivers/mfd/tps65910.c @@ -230,7 +230,7 @@ static int tps65910_irq_init(struct tps65910 *tps65910, int irq, @@ -46916,7 +46442,7 @@ index f243e75..322176c 100644 if (!irq) { dev_warn(tps65910->dev, "No interrupt support, no core IRQ\n"); diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c -index b1dabba..24a88f2 100644 +index 1b772ef..01e77d33 100644 --- a/drivers/mfd/twl4030-irq.c +++ b/drivers/mfd/twl4030-irq.c @@ -34,6 +34,7 @@ @@ -46927,7 +46453,7 @@ index b1dabba..24a88f2 100644 #include "twl-core.h" -@@ -725,10 +726,12 @@ int twl4030_init_irq(struct device *dev, int irq_num) +@@ -729,10 +730,12 @@ int twl4030_init_irq(struct device *dev, int irq_num) * Install an irq handler for each of the SIH modules; * clone dummy irq_chip since PIH can't *do* anything */ @@ -47352,7 +46878,7 @@ index 82dc574..8539ab2 100644 break; diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c -index ede41f0..744fbd9 100644 +index a11451f..9e1bbad 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -574,7 +574,7 @@ static int mmc_blk_ioctl_cmd(struct block_device *bdev, @@ -47365,10 +46891,10 @@ index ede41f0..744fbd9 100644 goto cmd_rel_host; } diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c -index f51b5ba..86614a7 100644 +index 7911e05..d0f9dda 100644 --- a/drivers/mmc/core/mmc_ops.c +++ b/drivers/mmc/core/mmc_ops.c -@@ -247,7 +247,7 @@ mmc_send_cxd_data(struct mmc_card *card, struct mmc_host *host, +@@ -267,7 +267,7 @@ mmc_send_cxd_data(struct mmc_card *card, struct mmc_host *host, void *data_buf; int is_on_stack; @@ -47378,10 +46904,10 @@ index f51b5ba..86614a7 100644 /* * dma onto stack is unsafe/nonportable, but callers to this diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h -index 08fd956..370487a 100644 +index 01b99e8..5c325e3 100644 --- a/drivers/mmc/host/dw_mmc.h +++ b/drivers/mmc/host/dw_mmc.h -@@ -262,5 +262,5 @@ struct dw_mci_drv_data { +@@ -265,5 +265,5 @@ struct dw_mci_drv_data { int (*parse_dt)(struct dw_mci *host); int (*execute_tuning)(struct dw_mci_slot *slot, u32 opcode, struct dw_mci_tuning_data *tuning_data); @@ -47389,10 +46915,10 @@ index 08fd956..370487a 100644 +} __do_const; #endif /* _DW_MMC_H_ */ diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c -index e4d4707..28262a3 100644 +index 43af791..86f4c48 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c -@@ -1612,7 +1612,9 @@ static int mmci_probe(struct amba_device *dev, +@@ -1628,7 +1628,9 @@ static int mmci_probe(struct amba_device *dev, mmc->caps |= MMC_CAP_CMD23; if (variant->busy_detect) { @@ -47403,11 +46929,26 @@ index e4d4707..28262a3 100644 mmci_write_datactrlreg(host, MCI_ST_DPSM_BUSYMODE); mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY; mmc->max_busy_timeout = 0; +diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c +index 9c2b9cb..cebb09a 100644 +--- a/drivers/mmc/host/omap_hsmmc.c ++++ b/drivers/mmc/host/omap_hsmmc.c +@@ -2113,7 +2113,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev) + + if (host->pdata->controller_flags & OMAP_HSMMC_BROKEN_MULTIBLOCK_READ) { + dev_info(&pdev->dev, "multiblock reads disabled due to 35xx erratum 2.1.1.128; MMC read performance may suffer\n"); +- omap_hsmmc_ops.multi_io_quirk = omap_hsmmc_multi_io_quirk; ++ pax_open_kernel(); ++ *(void **)&omap_hsmmc_ops.multi_io_quirk = omap_hsmmc_multi_io_quirk; ++ pax_close_kernel(); + } + + pm_runtime_enable(host->dev); diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c -index ccec0e3..199f9ce 100644 +index 587ee0e..b3bbcab 100644 --- a/drivers/mmc/host/sdhci-esdhc-imx.c +++ b/drivers/mmc/host/sdhci-esdhc-imx.c -@@ -1034,9 +1034,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) +@@ -1054,9 +1054,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) host->mmc->caps |= MMC_CAP_1_8V_DDR; } @@ -47423,7 +46964,7 @@ index ccec0e3..199f9ce 100644 if (imx_data->socdata->flags & ESDHC_FLAG_STD_TUNING) writel(readl(host->ioaddr + ESDHC_TUNING_CTRL) | diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c -index 1e47903..7683916 100644 +index 0ce6eb1..8dcce1b 100644 --- a/drivers/mmc/host/sdhci-s3c.c +++ b/drivers/mmc/host/sdhci-s3c.c @@ -584,9 +584,11 @@ static int sdhci_s3c_probe(struct platform_device *pdev) @@ -47455,7 +46996,7 @@ index 423666b..81ff5eb 100644 if (!ECCBUF_SIZE) { /* We should fall back to a general writev implementation. diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c -index 0b071a3..8ec3d5b 100644 +index b3b7ca1..5dd4634 100644 --- a/drivers/mtd/nand/denali.c +++ b/drivers/mtd/nand/denali.c @@ -24,6 +24,7 @@ @@ -47492,7 +47033,7 @@ index 51b9d6a..52af9a7 100644 #include #include diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c -index cf49c22..971b133 100644 +index c23184a..4115c41 100644 --- a/drivers/mtd/sm_ftl.c +++ b/drivers/mtd/sm_ftl.c @@ -56,7 +56,7 @@ static ssize_t sm_attr_show(struct device *dev, struct device_attribute *attr, @@ -47504,11 +47045,24 @@ index cf49c22..971b133 100644 struct attribute **attributes; struct sm_sysfs_attribute *vendor_attribute; char *vendor; +diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c +index a5115fb..81b03f6 100644 +--- a/drivers/net/bonding/bond_main.c ++++ b/drivers/net/bonding/bond_main.c +@@ -3749,7 +3749,7 @@ int bond_3ad_xor_xmit(struct sk_buff *skb, struct net_device *dev) + bond_dev_queue_xmit(bond, skb, slave->dev); + } else { + dev_kfree_skb_any(skb); +- atomic_long_inc(&dev->tx_dropped); ++ atomic_long_inc_unchecked(&dev->tx_dropped); + } + + return NETDEV_TX_OK; diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c -index d163e11..f517018 100644 +index 45f09a6..f154f8d 100644 --- a/drivers/net/bonding/bond_netlink.c +++ b/drivers/net/bonding/bond_netlink.c -@@ -548,7 +548,7 @@ nla_put_failure: +@@ -585,7 +585,7 @@ nla_put_failure: return -EMSGSIZE; } @@ -47517,8 +47071,21 @@ index d163e11..f517018 100644 .kind = "bond", .priv_size = sizeof(struct bonding), .setup = bond_setup, +diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c +index 5e40a8b..126bfda 100644 +--- a/drivers/net/caif/caif_hsi.c ++++ b/drivers/net/caif/caif_hsi.c +@@ -1445,7 +1445,7 @@ err: + return -ENODEV; + } + +-static struct rtnl_link_ops caif_hsi_link_ops __read_mostly = { ++static struct rtnl_link_ops caif_hsi_link_ops = { + .kind = "cfhsi", + .priv_size = sizeof(struct cfhsi), + .setup = cfhsi_setup, diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig -index 4168822..f38eeddf 100644 +index 98d73aa..63ef9da 100644 --- a/drivers/net/can/Kconfig +++ b/drivers/net/can/Kconfig @@ -98,7 +98,7 @@ config CAN_JANZ_ICAN3 @@ -47530,6 +47097,45 @@ index 4168822..f38eeddf 100644 ---help--- Say Y here if you want to support for Freescale FlexCAN. +diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c +index 2cfe501..477d4b5 100644 +--- a/drivers/net/can/dev.c ++++ b/drivers/net/can/dev.c +@@ -868,7 +868,7 @@ static int can_newlink(struct net *src_net, struct net_device *dev, + return -EOPNOTSUPP; + } + +-static struct rtnl_link_ops can_link_ops __read_mostly = { ++static struct rtnl_link_ops can_link_ops = { + .kind = "can", + .maxtype = IFLA_CAN_MAX, + .policy = can_policy, +diff --git a/drivers/net/can/vcan.c b/drivers/net/can/vcan.c +index 4e94057..32032ff 100644 +--- a/drivers/net/can/vcan.c ++++ b/drivers/net/can/vcan.c +@@ -166,7 +166,7 @@ static void vcan_setup(struct net_device *dev) + dev->destructor = free_netdev; + } + +-static struct rtnl_link_ops vcan_link_ops __read_mostly = { ++static struct rtnl_link_ops vcan_link_ops = { + .kind = "vcan", + .setup = vcan_setup, + }; +diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c +index ff435fb..d408b1f 100644 +--- a/drivers/net/dummy.c ++++ b/drivers/net/dummy.c +@@ -149,7 +149,7 @@ static int dummy_validate(struct nlattr *tb[], struct nlattr *data[]) + return 0; + } + +-static struct rtnl_link_ops dummy_link_ops __read_mostly = { ++static struct rtnl_link_ops dummy_link_ops = { + .kind = "dummy", + .setup = dummy_setup, + .validate = dummy_validate, diff --git a/drivers/net/ethernet/8390/ax88796.c b/drivers/net/ethernet/8390/ax88796.c index 1d162cc..b546a75 100644 --- a/drivers/net/ethernet/8390/ax88796.c @@ -47548,10 +47154,10 @@ index 1d162cc..b546a75 100644 if (!request_mem_region(mem->start, mem_size, pdev->name)) { diff --git a/drivers/net/ethernet/altera/altera_tse_main.c b/drivers/net/ethernet/altera/altera_tse_main.c -index 7330681..7e9e463 100644 +index 4efc435..4ab9e14 100644 --- a/drivers/net/ethernet/altera/altera_tse_main.c +++ b/drivers/net/ethernet/altera/altera_tse_main.c -@@ -1182,7 +1182,7 @@ static int tse_shutdown(struct net_device *dev) +@@ -1224,7 +1224,7 @@ static int tse_shutdown(struct net_device *dev) return 0; } @@ -47560,7 +47166,7 @@ index 7330681..7e9e463 100644 .ndo_open = tse_open, .ndo_stop = tse_shutdown, .ndo_start_xmit = tse_start_xmit, -@@ -1439,11 +1439,13 @@ static int altera_tse_probe(struct platform_device *pdev) +@@ -1461,11 +1461,13 @@ static int altera_tse_probe(struct platform_device *pdev) ndev->netdev_ops = &altera_tse_netdev_ops; altera_tse_set_ethtool_ops(ndev); @@ -47575,10 +47181,10 @@ index 7330681..7e9e463 100644 /* Scatter/gather IO is not supported, * so it is turned off diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h -index cc25a3a..c8d72d3 100644 +index caade30..3e257d9 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h -@@ -1083,14 +1083,14 @@ do { \ +@@ -1072,14 +1072,14 @@ do { \ * operations, everything works on mask values. */ #define XMDIO_READ(_pdata, _mmd, _reg) \ @@ -47596,10 +47202,10 @@ index cc25a3a..c8d72d3 100644 #define XMDIO_WRITE_BITS(_pdata, _mmd, _reg, _mask, _val) \ diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c b/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c -index 7d6a49b..e6d403b 100644 +index 8a50b01..39c1ad0 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c -@@ -188,7 +188,7 @@ static int xgbe_dcb_ieee_setets(struct net_device *netdev, +@@ -187,7 +187,7 @@ static int xgbe_dcb_ieee_setets(struct net_device *netdev, memcpy(pdata->ets, ets, sizeof(*pdata->ets)); @@ -47608,7 +47214,7 @@ index 7d6a49b..e6d403b 100644 return 0; } -@@ -227,7 +227,7 @@ static int xgbe_dcb_ieee_setpfc(struct net_device *netdev, +@@ -226,7 +226,7 @@ static int xgbe_dcb_ieee_setpfc(struct net_device *netdev, memcpy(pdata->pfc, pfc, sizeof(*pdata->pfc)); @@ -47618,10 +47224,10 @@ index 7d6a49b..e6d403b 100644 return 0; } diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c -index 1c5d62e..8e14d54 100644 +index 6fc5da0..61ac2cb 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c -@@ -236,7 +236,7 @@ err_ring: +@@ -235,7 +235,7 @@ err_ring: static void xgbe_wrapper_tx_descriptor_init(struct xgbe_prv_data *pdata) { @@ -47630,7 +47236,7 @@ index 1c5d62e..8e14d54 100644 struct xgbe_channel *channel; struct xgbe_ring *ring; struct xgbe_ring_data *rdata; -@@ -277,7 +277,7 @@ static void xgbe_wrapper_tx_descriptor_init(struct xgbe_prv_data *pdata) +@@ -276,7 +276,7 @@ static void xgbe_wrapper_tx_descriptor_init(struct xgbe_prv_data *pdata) static void xgbe_wrapper_rx_descriptor_init(struct xgbe_prv_data *pdata) { @@ -47639,7 +47245,7 @@ index 1c5d62e..8e14d54 100644 struct xgbe_channel *channel; struct xgbe_ring *ring; struct xgbe_ring_desc *rdesc; -@@ -506,7 +506,7 @@ err_out: +@@ -505,7 +505,7 @@ err_out: static void xgbe_realloc_skb(struct xgbe_channel *channel) { struct xgbe_prv_data *pdata = channel->pdata; @@ -47648,7 +47254,7 @@ index 1c5d62e..8e14d54 100644 struct xgbe_ring *ring = channel->rx_ring; struct xgbe_ring_data *rdata; struct sk_buff *skb = NULL; -@@ -550,17 +550,12 @@ static void xgbe_realloc_skb(struct xgbe_channel *channel) +@@ -546,17 +546,12 @@ static void xgbe_realloc_skb(struct xgbe_channel *channel) DBGPR("<--xgbe_realloc_skb\n"); } @@ -47676,10 +47282,10 @@ index 1c5d62e..8e14d54 100644 + .wrapper_rx_desc_init = xgbe_wrapper_rx_descriptor_init, +}; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c -index ea27383..faa8936 100644 +index 9da3a03..022f15c 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c -@@ -2463,7 +2463,7 @@ static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata) +@@ -2462,7 +2462,7 @@ static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata) static int xgbe_init(struct xgbe_prv_data *pdata) { @@ -47688,7 +47294,7 @@ index ea27383..faa8936 100644 int ret; DBGPR("-->xgbe_init\n"); -@@ -2525,101 +2525,96 @@ static int xgbe_init(struct xgbe_prv_data *pdata) +@@ -2524,101 +2524,96 @@ static int xgbe_init(struct xgbe_prv_data *pdata) return 0; } @@ -47864,10 +47470,10 @@ index ea27383..faa8936 100644 + .config_dcb_pfc = xgbe_config_dcb_pfc, +}; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c -index b26d758..b0d1c3b 100644 +index 2349ea9..a83a677 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c -@@ -155,7 +155,7 @@ static int xgbe_calc_rx_buf_size(struct net_device *netdev, unsigned int mtu) +@@ -154,7 +154,7 @@ static int xgbe_calc_rx_buf_size(struct net_device *netdev, unsigned int mtu) static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata) { @@ -47876,7 +47482,7 @@ index b26d758..b0d1c3b 100644 struct xgbe_channel *channel; enum xgbe_int int_id; unsigned int i; -@@ -177,7 +177,7 @@ static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata) +@@ -176,7 +176,7 @@ static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata) static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata) { @@ -47885,7 +47491,7 @@ index b26d758..b0d1c3b 100644 struct xgbe_channel *channel; enum xgbe_int int_id; unsigned int i; -@@ -200,7 +200,7 @@ static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata) +@@ -199,7 +199,7 @@ static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata) static irqreturn_t xgbe_isr(int irq, void *data) { struct xgbe_prv_data *pdata = data; @@ -47894,7 +47500,7 @@ index b26d758..b0d1c3b 100644 struct xgbe_channel *channel; unsigned int dma_isr, dma_ch_isr; unsigned int mac_isr, mac_tssr; -@@ -447,7 +447,7 @@ static void xgbe_napi_disable(struct xgbe_prv_data *pdata, unsigned int del) +@@ -446,7 +446,7 @@ static void xgbe_napi_disable(struct xgbe_prv_data *pdata, unsigned int del) void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata) { @@ -47903,7 +47509,7 @@ index b26d758..b0d1c3b 100644 DBGPR("-->xgbe_init_tx_coalesce\n"); -@@ -461,7 +461,7 @@ void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata) +@@ -460,7 +460,7 @@ void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata) void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata) { @@ -47912,7 +47518,7 @@ index b26d758..b0d1c3b 100644 DBGPR("-->xgbe_init_rx_coalesce\n"); -@@ -475,7 +475,7 @@ void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata) +@@ -474,7 +474,7 @@ void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata) static void xgbe_free_tx_skbuff(struct xgbe_prv_data *pdata) { @@ -47921,7 +47527,7 @@ index b26d758..b0d1c3b 100644 struct xgbe_channel *channel; struct xgbe_ring *ring; struct xgbe_ring_data *rdata; -@@ -500,7 +500,7 @@ static void xgbe_free_tx_skbuff(struct xgbe_prv_data *pdata) +@@ -499,7 +499,7 @@ static void xgbe_free_tx_skbuff(struct xgbe_prv_data *pdata) static void xgbe_free_rx_skbuff(struct xgbe_prv_data *pdata) { @@ -47930,7 +47536,7 @@ index b26d758..b0d1c3b 100644 struct xgbe_channel *channel; struct xgbe_ring *ring; struct xgbe_ring_data *rdata; -@@ -526,7 +526,7 @@ static void xgbe_free_rx_skbuff(struct xgbe_prv_data *pdata) +@@ -525,7 +525,7 @@ static void xgbe_free_rx_skbuff(struct xgbe_prv_data *pdata) static void xgbe_adjust_link(struct net_device *netdev) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -47939,7 +47545,7 @@ index b26d758..b0d1c3b 100644 struct phy_device *phydev = pdata->phydev; int new_state = 0; -@@ -634,7 +634,7 @@ static void xgbe_phy_exit(struct xgbe_prv_data *pdata) +@@ -633,7 +633,7 @@ static void xgbe_phy_exit(struct xgbe_prv_data *pdata) int xgbe_powerdown(struct net_device *netdev, unsigned int caller) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -47948,7 +47554,7 @@ index b26d758..b0d1c3b 100644 unsigned long flags; DBGPR("-->xgbe_powerdown\n"); -@@ -672,7 +672,7 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller) +@@ -671,7 +671,7 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller) int xgbe_powerup(struct net_device *netdev, unsigned int caller) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -47957,7 +47563,7 @@ index b26d758..b0d1c3b 100644 unsigned long flags; DBGPR("-->xgbe_powerup\n"); -@@ -709,7 +709,7 @@ int xgbe_powerup(struct net_device *netdev, unsigned int caller) +@@ -708,7 +708,7 @@ int xgbe_powerup(struct net_device *netdev, unsigned int caller) static int xgbe_start(struct xgbe_prv_data *pdata) { @@ -47966,7 +47572,7 @@ index b26d758..b0d1c3b 100644 struct net_device *netdev = pdata->netdev; DBGPR("-->xgbe_start\n"); -@@ -735,7 +735,7 @@ static int xgbe_start(struct xgbe_prv_data *pdata) +@@ -734,7 +734,7 @@ static int xgbe_start(struct xgbe_prv_data *pdata) static void xgbe_stop(struct xgbe_prv_data *pdata) { @@ -47975,7 +47581,7 @@ index b26d758..b0d1c3b 100644 struct net_device *netdev = pdata->netdev; DBGPR("-->xgbe_stop\n"); -@@ -755,7 +755,7 @@ static void xgbe_stop(struct xgbe_prv_data *pdata) +@@ -754,7 +754,7 @@ static void xgbe_stop(struct xgbe_prv_data *pdata) static void xgbe_restart_dev(struct xgbe_prv_data *pdata, unsigned int reset) { @@ -47984,7 +47590,7 @@ index b26d758..b0d1c3b 100644 DBGPR("-->xgbe_restart_dev\n"); -@@ -952,7 +952,7 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata, +@@ -951,7 +951,7 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata, return -ERANGE; } @@ -47993,7 +47599,7 @@ index b26d758..b0d1c3b 100644 memcpy(&pdata->tstamp_config, &config, sizeof(config)); -@@ -1090,8 +1090,8 @@ static void xgbe_packet_info(struct xgbe_prv_data *pdata, +@@ -1089,8 +1089,8 @@ static void xgbe_packet_info(struct xgbe_prv_data *pdata, static int xgbe_open(struct net_device *netdev) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -48004,7 +47610,7 @@ index b26d758..b0d1c3b 100644 int ret; DBGPR("-->xgbe_open\n"); -@@ -1171,8 +1171,8 @@ err_phy_init: +@@ -1170,8 +1170,8 @@ err_phy_init: static int xgbe_close(struct net_device *netdev) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -48015,7 +47621,7 @@ index b26d758..b0d1c3b 100644 DBGPR("-->xgbe_close\n"); -@@ -1206,8 +1206,8 @@ static int xgbe_close(struct net_device *netdev) +@@ -1205,8 +1205,8 @@ static int xgbe_close(struct net_device *netdev) static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -48026,7 +47632,7 @@ index b26d758..b0d1c3b 100644 struct xgbe_channel *channel; struct xgbe_ring *ring; struct xgbe_packet_data *packet; -@@ -1276,7 +1276,7 @@ tx_netdev_return: +@@ -1275,7 +1275,7 @@ tx_netdev_return: static void xgbe_set_rx_mode(struct net_device *netdev) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -48035,7 +47641,7 @@ index b26d758..b0d1c3b 100644 unsigned int pr_mode, am_mode; DBGPR("-->xgbe_set_rx_mode\n"); -@@ -1295,7 +1295,7 @@ static void xgbe_set_rx_mode(struct net_device *netdev) +@@ -1294,7 +1294,7 @@ static void xgbe_set_rx_mode(struct net_device *netdev) static int xgbe_set_mac_address(struct net_device *netdev, void *addr) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -48044,7 +47650,7 @@ index b26d758..b0d1c3b 100644 struct sockaddr *saddr = addr; DBGPR("-->xgbe_set_mac_address\n"); -@@ -1362,7 +1362,7 @@ static struct rtnl_link_stats64 *xgbe_get_stats64(struct net_device *netdev, +@@ -1361,7 +1361,7 @@ static struct rtnl_link_stats64 *xgbe_get_stats64(struct net_device *netdev, DBGPR("-->%s\n", __func__); @@ -48053,7 +47659,7 @@ index b26d758..b0d1c3b 100644 s->rx_packets = pstats->rxframecount_gb; s->rx_bytes = pstats->rxoctetcount_gb; -@@ -1389,7 +1389,7 @@ static int xgbe_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, +@@ -1388,7 +1388,7 @@ static int xgbe_vlan_rx_add_vid(struct net_device *netdev, __be16 proto, u16 vid) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -48062,7 +47668,7 @@ index b26d758..b0d1c3b 100644 DBGPR("-->%s\n", __func__); -@@ -1405,7 +1405,7 @@ static int xgbe_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, +@@ -1404,7 +1404,7 @@ static int xgbe_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid) { struct xgbe_prv_data *pdata = netdev_priv(netdev); @@ -48071,16 +47677,16 @@ index b26d758..b0d1c3b 100644 DBGPR("-->%s\n", __func__); -@@ -1465,7 +1465,7 @@ static int xgbe_set_features(struct net_device *netdev, +@@ -1464,7 +1464,7 @@ static int xgbe_set_features(struct net_device *netdev, netdev_features_t features) { struct xgbe_prv_data *pdata = netdev_priv(netdev); - struct xgbe_hw_if *hw_if = &pdata->hw_if; + struct xgbe_hw_if *hw_if = pdata->hw_if; - unsigned int rxcsum, rxvlan, rxvlan_filter; + netdev_features_t rxcsum, rxvlan, rxvlan_filter; rxcsum = pdata->netdev_features & NETIF_F_RXCSUM; -@@ -1521,7 +1521,7 @@ struct net_device_ops *xgbe_get_netdev_ops(void) +@@ -1520,7 +1520,7 @@ struct net_device_ops *xgbe_get_netdev_ops(void) static void xgbe_rx_refresh(struct xgbe_channel *channel) { struct xgbe_prv_data *pdata = channel->pdata; @@ -48089,7 +47695,7 @@ index b26d758..b0d1c3b 100644 struct xgbe_ring *ring = channel->rx_ring; struct xgbe_ring_data *rdata; -@@ -1537,8 +1537,8 @@ static void xgbe_rx_refresh(struct xgbe_channel *channel) +@@ -1536,8 +1536,8 @@ static void xgbe_rx_refresh(struct xgbe_channel *channel) static int xgbe_tx_poll(struct xgbe_channel *channel) { struct xgbe_prv_data *pdata = channel->pdata; @@ -48100,7 +47706,7 @@ index b26d758..b0d1c3b 100644 struct xgbe_ring *ring = channel->tx_ring; struct xgbe_ring_data *rdata; struct xgbe_ring_desc *rdesc; -@@ -1590,7 +1590,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel) +@@ -1589,7 +1589,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel) static int xgbe_rx_poll(struct xgbe_channel *channel, int budget) { struct xgbe_prv_data *pdata = channel->pdata; @@ -48110,7 +47716,7 @@ index b26d758..b0d1c3b 100644 struct xgbe_ring_data *rdata; struct xgbe_packet_data *packet; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c -index 46f6130..f37dde3 100644 +index 49508ec..2617cca 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c @@ -203,7 +203,7 @@ static void xgbe_get_ethtool_stats(struct net_device *netdev, @@ -48141,10 +47747,10 @@ index 46f6130..f37dde3 100644 unsigned int tx_frames, tx_usecs; diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c -index bdf9cfa..340aea1 100644 +index f5a8fa0..0bb58ff 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c -@@ -210,12 +210,6 @@ static void xgbe_default_config(struct xgbe_prv_data *pdata) +@@ -209,12 +209,6 @@ static void xgbe_default_config(struct xgbe_prv_data *pdata) DBGPR("<--xgbe_default_config\n"); } @@ -48157,7 +47763,7 @@ index bdf9cfa..340aea1 100644 static int xgbe_probe(struct platform_device *pdev) { struct xgbe_prv_data *pdata; -@@ -328,9 +322,8 @@ static int xgbe_probe(struct platform_device *pdev) +@@ -327,9 +321,8 @@ static int xgbe_probe(struct platform_device *pdev) netdev->base_addr = (unsigned long)pdata->xgmac_regs; /* Set all the function pointers */ @@ -48170,10 +47776,10 @@ index bdf9cfa..340aea1 100644 /* Issue software reset to device */ hw_if->exit(pdata); diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c -index 6d2221e..47d1325 100644 +index 363b210..b241389 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c -@@ -127,7 +127,7 @@ +@@ -126,7 +126,7 @@ static int xgbe_mdio_read(struct mii_bus *mii, int prtad, int mmd_reg) { struct xgbe_prv_data *pdata = mii->priv; @@ -48182,7 +47788,7 @@ index 6d2221e..47d1325 100644 int mmd_data; DBGPR_MDIO("-->xgbe_mdio_read: prtad=%#x mmd_reg=%#x\n", -@@ -144,7 +144,7 @@ static int xgbe_mdio_write(struct mii_bus *mii, int prtad, int mmd_reg, +@@ -143,7 +143,7 @@ static int xgbe_mdio_write(struct mii_bus *mii, int prtad, int mmd_reg, u16 mmd_val) { struct xgbe_prv_data *pdata = mii->priv; @@ -48192,10 +47798,10 @@ index 6d2221e..47d1325 100644 DBGPR_MDIO("-->xgbe_mdio_write: prtad=%#x mmd_reg=%#x mmd_data=%#x\n", diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c -index 37e64cf..c3b61cf 100644 +index a1bf9d1c..84adcab 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c -@@ -130,7 +130,7 @@ static cycle_t xgbe_cc_read(const struct cyclecounter *cc) +@@ -129,7 +129,7 @@ static cycle_t xgbe_cc_read(const struct cyclecounter *cc) tstamp_cc); u64 nsec; @@ -48204,7 +47810,7 @@ index 37e64cf..c3b61cf 100644 return nsec; } -@@ -159,7 +159,7 @@ static int xgbe_adjfreq(struct ptp_clock_info *info, s32 delta) +@@ -158,7 +158,7 @@ static int xgbe_adjfreq(struct ptp_clock_info *info, s32 delta) spin_lock_irqsave(&pdata->tstamp_lock, flags); @@ -48214,10 +47820,10 @@ index 37e64cf..c3b61cf 100644 spin_unlock_irqrestore(&pdata->tstamp_lock, flags); diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h -index e9fe6e6..875fbaf 100644 +index 789957d..d7d0245 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h -@@ -585,8 +585,8 @@ struct xgbe_prv_data { +@@ -583,8 +583,8 @@ struct xgbe_prv_data { int irq_number; @@ -48228,7 +47834,7 @@ index e9fe6e6..875fbaf 100644 /* AXI DMA settings */ unsigned int axdomain; -@@ -699,6 +699,9 @@ struct xgbe_prv_data { +@@ -697,6 +697,9 @@ struct xgbe_prv_data { #endif }; @@ -48239,10 +47845,10 @@ index e9fe6e6..875fbaf 100644 void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *); diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h -index 571427c..e9fe9e7 100644 +index adcacda..fa6e0ae 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h -@@ -1058,7 +1058,7 @@ static inline u8 bnx2x_get_path_func_num(struct bnx2x *bp) +@@ -1065,7 +1065,7 @@ static inline u8 bnx2x_get_path_func_num(struct bnx2x *bp) static inline void bnx2x_init_bp_objs(struct bnx2x *bp) { /* RX_MODE controlling object */ @@ -48252,7 +47858,7 @@ index 571427c..e9fe9e7 100644 /* multicast configuration controlling object */ bnx2x_init_mcast_obj(bp, &bp->mcast_obj, bp->fp->cl_id, bp->fp->cid, diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c -index b193604..8873bfd 100644 +index 7bc2924..2112002 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c @@ -2329,15 +2329,14 @@ int bnx2x_config_rx_mode(struct bnx2x *bp, @@ -48277,10 +47883,10 @@ index b193604..8873bfd 100644 } diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h -index 718ecd2..2183b2f 100644 +index e97275f..52e28bc 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h -@@ -1340,8 +1340,7 @@ int bnx2x_vlan_mac_move(struct bnx2x *bp, +@@ -1409,8 +1409,7 @@ int bnx2x_vlan_mac_move(struct bnx2x *bp, /********************* RX MODE ****************/ @@ -48303,10 +47909,10 @@ index 31c9f82..e65e986 100644 #define CHIPREV_ID_5752_A0_HW 0x5000 #define CHIPREV_ID_5752_A0 0x6000 diff --git a/drivers/net/ethernet/brocade/bna/bna_enet.c b/drivers/net/ethernet/brocade/bna/bna_enet.c -index 13f9636..228040f 100644 +index 903466e..b285864 100644 --- a/drivers/net/ethernet/brocade/bna/bna_enet.c +++ b/drivers/net/ethernet/brocade/bna/bna_enet.c -@@ -1690,10 +1690,10 @@ bna_cb_ioceth_reset(void *arg) +@@ -1693,10 +1693,10 @@ bna_cb_ioceth_reset(void *arg) } static struct bfa_ioc_cbfn bna_ioceth_cbfn = { @@ -48321,26 +47927,6 @@ index 13f9636..228040f 100644 }; static void bna_attr_init(struct bna_ioceth *ioceth) -diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c -index ffc92a4..40edc77 100644 ---- a/drivers/net/ethernet/brocade/bna/bnad.c -+++ b/drivers/net/ethernet/brocade/bna/bnad.c -@@ -552,6 +552,7 @@ bnad_cq_setup_skb_frags(struct bna_rcb *rcb, struct sk_buff *skb, - - len = (vec == nvecs) ? - last_fraglen : unmap->vector.len; -+ skb->truesize += unmap->vector.len; - totlen += len; - - skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags, -@@ -563,7 +564,6 @@ bnad_cq_setup_skb_frags(struct bna_rcb *rcb, struct sk_buff *skb, - - skb->len += totlen; - skb->data_len += totlen; -- skb->truesize += totlen; - } - - static inline void diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.h b/drivers/net/ethernet/chelsio/cxgb3/l2t.h index 8cffcdf..aadf043 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/l2t.h @@ -48355,10 +47941,10 @@ index 8cffcdf..aadf043 100644 #define L2T_SKB_CB(skb) ((struct l2t_skb_cb *)(skb)->cb) diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c -index 9f5f3c3..86d21a6 100644 +index 279873c..11e1921 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c -@@ -2359,7 +2359,7 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs, +@@ -2365,7 +2365,7 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs, int i; struct adapter *ap = netdev2adap(dev); @@ -48390,10 +47976,10 @@ index cf8b6ff..274271e 100644 break; } diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c -index 93ff8ef..01e0537 100644 +index 597c463..5cc1a7f 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c -@@ -533,7 +533,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val) +@@ -537,7 +537,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val) if (wrapped) newacc += 65536; @@ -48454,20 +48040,21 @@ index 5fd4b52..87aa34b 100644 smp_mb(); /* need lock to prevent incorrect read while modifying cyclecounter */ -diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c -index c14d4d8..66da603 100644 ---- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c -+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c -@@ -1259,6 +1259,9 @@ int ixgbe_ndo_set_vf_spoofchk(struct net_device *netdev, int vf, bool setting) - struct ixgbe_hw *hw = &adapter->hw; - u32 regval; - -+ if (vf >= adapter->num_vfs) -+ return -EINVAL; -+ - adapter->vfinfo[vf].spoofchk_enabled = setting; +diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c +index 454d9fe..59f0f0b 100644 +--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c ++++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c +@@ -458,8 +458,8 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev, + wmb(); + + /* we want to dirty this cache line once */ +- ACCESS_ONCE(ring->last_nr_txbb) = last_nr_txbb; +- ACCESS_ONCE(ring->cons) = ring_cons + txbbs_skipped; ++ ACCESS_ONCE_RW(ring->last_nr_txbb) = last_nr_txbb; ++ ACCESS_ONCE_RW(ring->cons) = ring_cons + txbbs_skipped; + + netdev_tx_completed_queue(ring->tx_queue, packets, bytes); - regval = IXGBE_READ_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg)); diff --git a/drivers/net/ethernet/neterion/vxge/vxge-config.c b/drivers/net/ethernet/neterion/vxge/vxge-config.c index 2bbd01f..e8baa64 100644 --- a/drivers/net/ethernet/neterion/vxge/vxge-config.c @@ -48494,10 +48081,10 @@ index 2bbd01f..e8baa64 100644 __vxge_hw_mempool_create(vpath->hldev, fifo->config->memblock_size, diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c -index 3172cdf..d01ab34 100644 +index 2bb48d5..d1a865d 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c -@@ -2190,7 +2190,9 @@ int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter) +@@ -2324,7 +2324,9 @@ int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter) max_tx_rings = QLCNIC_MAX_VNIC_TX_RINGS; } else if (ret == QLC_83XX_DEFAULT_OPMODE) { ahw->nic_mode = QLCNIC_DEFAULT_MODE; @@ -48553,10 +48140,10 @@ index c9f57fb..208bdc1 100644 u32 entry_offset, dump, no_entries, buf_offset = 0; int i, k, ops_cnt, ops_index, dump_size = 0; diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c -index 0921302..927f761 100644 +index cf154f7..c948d1b 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c -@@ -744,22 +744,22 @@ struct rtl8169_private { +@@ -788,22 +788,22 @@ struct rtl8169_private { struct mdio_ops { void (*write)(struct rtl8169_private *, int, int); int (*read)(struct rtl8169_private *, int); @@ -48612,7 +48199,7 @@ index 08c483b..2c4a553 100644 /* To mask all all interrupts.*/ diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h -index d5e07de..e3bf20a 100644 +index 2f48f79..8ae1a1a 100644 --- a/drivers/net/hyperv/hyperv_net.h +++ b/drivers/net/hyperv/hyperv_net.h @@ -171,7 +171,7 @@ struct rndis_device { @@ -48647,7 +48234,7 @@ index 2b86f0b..ecc996f 100644 /* Ignore return since this msg is optional. */ rndis_filter_send_request(dev, request); diff --git a/drivers/net/ieee802154/fakehard.c b/drivers/net/ieee802154/fakehard.c -index 9ce854f..e43fa17 100644 +index 6cbc56a..5f7e6c8 100644 --- a/drivers/net/ieee802154/fakehard.c +++ b/drivers/net/ieee802154/fakehard.c @@ -365,7 +365,7 @@ static int ieee802154fake_probe(struct platform_device *pdev) @@ -48659,11 +48246,24 @@ index 9ce854f..e43fa17 100644 priv = netdev_priv(dev); priv->phy = phy; +diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c +index 34f846b..4a0d5b1 100644 +--- a/drivers/net/ifb.c ++++ b/drivers/net/ifb.c +@@ -253,7 +253,7 @@ static int ifb_validate(struct nlattr *tb[], struct nlattr *data[]) + return 0; + } + +-static struct rtnl_link_ops ifb_link_ops __read_mostly = { ++static struct rtnl_link_ops ifb_link_ops = { + .kind = "ifb", + .priv_size = sizeof(struct ifb_private), + .setup = ifb_setup, diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c -index 5f17ad0..e0463c8 100644 +index bfb0b6e..5c396ce 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c -@@ -264,7 +264,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port, +@@ -335,7 +335,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port, free_nskb: kfree_skb(nskb); err: @@ -48671,8 +48271,8 @@ index 5f17ad0..e0463c8 100644 + atomic_long_inc_unchecked(&skb->dev->rx_dropped); } - /* called under rcu_read_lock() from netif_receive_skb */ -@@ -1150,13 +1150,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = { + static void macvlan_flush_sources(struct macvlan_port *port, +@@ -1454,13 +1454,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = { int macvlan_link_register(struct rtnl_link_ops *ops) { /* common fields */ @@ -48695,7 +48295,7 @@ index 5f17ad0..e0463c8 100644 return rtnl_link_register(ops); }; -@@ -1236,7 +1238,7 @@ static int macvlan_device_event(struct notifier_block *unused, +@@ -1540,7 +1542,7 @@ static int macvlan_device_event(struct notifier_block *unused, return NOTIFY_DONE; } @@ -48705,10 +48305,19 @@ index 5f17ad0..e0463c8 100644 }; diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c -index 07c942b..2d8b073 100644 +index 880cc09..6a68ba6 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c -@@ -1023,7 +1023,7 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd, +@@ -422,7 +422,7 @@ static void macvtap_setup(struct net_device *dev) + dev->tx_queue_len = TUN_READQ_SIZE; + } + +-static struct rtnl_link_ops macvtap_link_ops __read_mostly = { ++static struct rtnl_link_ops macvtap_link_ops = { + .kind = "macvtap", + .setup = macvtap_setup, + .newlink = macvtap_newlink, +@@ -1020,7 +1020,7 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd, } ret = 0; @@ -48717,7 +48326,7 @@ index 07c942b..2d8b073 100644 put_user(q->flags, &ifr->ifr_flags)) ret = -EFAULT; macvtap_put_vlan(vlan); -@@ -1193,7 +1193,7 @@ static int macvtap_device_event(struct notifier_block *unused, +@@ -1190,7 +1190,7 @@ static int macvtap_device_event(struct notifier_block *unused, return NOTIFY_DONE; } @@ -48726,8 +48335,21 @@ index 07c942b..2d8b073 100644 .notifier_call = macvtap_device_event, }; +diff --git a/drivers/net/nlmon.c b/drivers/net/nlmon.c +index 34924df..a747360 100644 +--- a/drivers/net/nlmon.c ++++ b/drivers/net/nlmon.c +@@ -154,7 +154,7 @@ static int nlmon_validate(struct nlattr *tb[], struct nlattr *data[]) + return 0; + } + +-static struct rtnl_link_ops nlmon_link_ops __read_mostly = { ++static struct rtnl_link_ops nlmon_link_ops = { + .kind = "nlmon", + .priv_size = sizeof(struct nlmon), + .setup = nlmon_setup, diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c -index 17ecdd6..79ad848 100644 +index 794a473..9fd437b 100644 --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c @@ -1020,7 +1020,6 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) @@ -48748,21 +48370,6 @@ index 17ecdd6..79ad848 100644 break; err = 0; break; -diff --git a/drivers/net/ppp/pptp.c b/drivers/net/ppp/pptp.c -index 1aff970..cc2ee29 100644 ---- a/drivers/net/ppp/pptp.c -+++ b/drivers/net/ppp/pptp.c -@@ -506,7 +506,9 @@ static int pptp_getname(struct socket *sock, struct sockaddr *uaddr, - int len = sizeof(struct sockaddr_pppox); - struct sockaddr_pppox sp; - -- sp.sa_family = AF_PPPOX; -+ memset(&sp.sa_addr, 0, sizeof(sp.sa_addr)); -+ -+ sp.sa_family = AF_PPPOX; - sp.sa_protocol = PX_PROTO_PPTP; - sp.sa_addr.pptp = pppox_sk(sock->sk)->proto.pptp.src_addr; - diff --git a/drivers/net/slip/slhc.c b/drivers/net/slip/slhc.c index 079f7ad..b2a2bfa7 100644 --- a/drivers/net/slip/slhc.c @@ -48777,10 +48384,19 @@ index 079f7ad..b2a2bfa7 100644 /* We've got a compressed packet; read the change byte */ diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c -index 1f76c2ea..9681171 100644 +index 2368395..bf6fe96 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c -@@ -2862,7 +2862,7 @@ static int team_device_event(struct notifier_block *unused, +@@ -2090,7 +2090,7 @@ static unsigned int team_get_num_rx_queues(void) + return TEAM_DEFAULT_NUM_RX_QUEUES; + } + +-static struct rtnl_link_ops team_link_ops __read_mostly = { ++static struct rtnl_link_ops team_link_ops = { + .kind = DRV_NAME, + .priv_size = sizeof(struct team), + .setup = team_setup, +@@ -2880,7 +2880,7 @@ static int team_device_event(struct notifier_block *unused, return NOTIFY_DONE; } @@ -48790,10 +48406,19 @@ index 1f76c2ea..9681171 100644 }; diff --git a/drivers/net/tun.c b/drivers/net/tun.c -index d965e8a..f119e64 100644 +index 9dd3746..74f191e 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c -@@ -1861,7 +1861,7 @@ unlock: +@@ -1426,7 +1426,7 @@ static int tun_validate(struct nlattr *tb[], struct nlattr *data[]) + return -EINVAL; + } + +-static struct rtnl_link_ops tun_link_ops __read_mostly = { ++static struct rtnl_link_ops tun_link_ops = { + .kind = DRV_NAME, + .priv_size = sizeof(struct tun_struct), + .setup = tun_setup, +@@ -1868,7 +1868,7 @@ unlock: } static long __tun_chr_ioctl(struct file *file, unsigned int cmd, @@ -48802,7 +48427,7 @@ index d965e8a..f119e64 100644 { struct tun_file *tfile = file->private_data; struct tun_struct *tun; -@@ -1874,6 +1874,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, +@@ -1881,6 +1881,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, unsigned int ifindex; int ret; @@ -48904,13 +48529,13 @@ index babda7d..e40c90a 100644 hso_start_serial_device(serial_table[i], GFP_NOIO); hso_kick_transmit(dev2ser(serial_table[i])); diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c -index 604ef21..d1f49a1 100644 +index c6554c7..7e2ebd7 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c -@@ -575,7 +575,7 @@ struct r8152 { - void (*up)(struct r8152 *); - void (*down)(struct r8152 *); +@@ -577,7 +577,7 @@ struct r8152 { void (*unload)(struct r8152 *); + int (*eee_get)(struct r8152 *, struct ethtool_eee *); + int (*eee_set)(struct r8152 *, struct ethtool_eee *); - } rtl_ops; + } __no_const rtl_ops; @@ -48939,7 +48564,7 @@ index a2515887..6d13233 100644 /* we will have to manufacture ethernet headers, prepare template */ diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c -index 59caa06..de191b3 100644 +index b0bc8ea..3af931b5 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -48,7 +48,7 @@ module_param(gso, bool, 0444); @@ -48952,10 +48577,10 @@ index 59caa06..de191b3 100644 #define VIRTNET_DRIVER_VERSION "1.0.0" diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c -index 81a8a29..ae60a58 100644 +index 42b2d6a5..2a2cb41 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c -@@ -2762,7 +2762,7 @@ nla_put_failure: +@@ -2695,7 +2695,7 @@ nla_put_failure: return -EMSGSIZE; } @@ -48964,7 +48589,7 @@ index 81a8a29..ae60a58 100644 .kind = "vxlan", .maxtype = IFLA_VXLAN_MAX, .policy = vxlan_policy, -@@ -2809,7 +2809,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused, +@@ -2742,7 +2742,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused, return NOTIFY_DONE; } @@ -49181,10 +48806,10 @@ index da92bfa..5a9001a 100644 return msecs_to_jiffies((s->poll_timeout[2] << 16) | (s->poll_timeout[1] << 8) diff --git a/drivers/net/wireless/ath/ath10k/htc.c b/drivers/net/wireless/ath/ath10k/htc.c -index 5fdc40d..3975205 100644 +index 676bd4e..0b807a3 100644 --- a/drivers/net/wireless/ath/ath10k/htc.c +++ b/drivers/net/wireless/ath/ath10k/htc.c -@@ -856,7 +856,10 @@ void ath10k_htc_stop(struct ath10k_htc *htc) +@@ -848,7 +848,10 @@ int ath10k_htc_start(struct ath10k_htc *htc) /* registered target arrival callback from the HIF layer */ int ath10k_htc_init(struct ath10k *ar) { @@ -49196,7 +48821,7 @@ index 5fdc40d..3975205 100644 struct ath10k_htc_ep *ep = NULL; struct ath10k_htc *htc = &ar->htc; -@@ -866,8 +869,6 @@ int ath10k_htc_init(struct ath10k *ar) +@@ -857,8 +860,6 @@ int ath10k_htc_init(struct ath10k *ar) ath10k_htc_reset_endpoint_states(htc); /* setup HIF layer callbacks */ @@ -49206,10 +48831,10 @@ index 5fdc40d..3975205 100644 /* Get HIF default pipe for HTC message exchange */ diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h -index 4716d33..a688310 100644 +index 527179c..a890150 100644 --- a/drivers/net/wireless/ath/ath10k/htc.h +++ b/drivers/net/wireless/ath/ath10k/htc.h -@@ -271,13 +271,13 @@ enum ath10k_htc_ep_id { +@@ -270,13 +270,13 @@ enum ath10k_htc_ep_id { struct ath10k_htc_ops { void (*target_send_suspend_complete)(struct ath10k *ar); @@ -49226,7 +48851,7 @@ index 4716d33..a688310 100644 /* service connection information */ struct ath10k_htc_svc_conn_req { diff --git a/drivers/net/wireless/ath/ath9k/ar9002_mac.c b/drivers/net/wireless/ath/ath9k/ar9002_mac.c -index 59af9f9..5f3564f 100644 +index 2a93519..7052786 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_mac.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_mac.c @@ -220,8 +220,8 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i) @@ -49320,7 +48945,7 @@ index 59af9f9..5f3564f 100644 static int ar9002_hw_proc_txdesc(struct ath_hw *ah, void *ds, diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c -index 71e38e8..5ac96ca 100644 +index 057b165..98ae88f 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c @@ -39,47 +39,47 @@ ar9003_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i) @@ -49449,10 +49074,10 @@ index 71e38e8..5ac96ca 100644 static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads) diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h -index 51b4ebe..d1929dd 100644 +index 975074f..e9440da 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -629,7 +629,7 @@ struct ath_hw_private_ops { +@@ -630,7 +630,7 @@ struct ath_hw_private_ops { /* ANI */ void (*ani_cache_ini_regs)(struct ath_hw *ah); @@ -49461,7 +49086,7 @@ index 51b4ebe..d1929dd 100644 /** * struct ath_spec_scan - parameters for Atheros spectral scan -@@ -706,7 +706,7 @@ struct ath_hw_ops { +@@ -708,7 +708,7 @@ struct ath_hw_ops { #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT void (*set_bt_ant_diversity)(struct ath_hw *hw, bool enable); #endif @@ -49471,43 +49096,43 @@ index 51b4ebe..d1929dd 100644 struct ath_nf_limits { s16 max; diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c -index 4b148bb..ac738fa 100644 +index 4f18a6b..b07d92f 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -2592,16 +2592,18 @@ void ath9k_fill_chanctx_ops(void) - if (!ath9k_use_chanctx) +@@ -2454,16 +2454,18 @@ void ath9k_fill_chanctx_ops(void) + if (!ath9k_is_chanctx_enabled()) return; -- ath9k_ops.hw_scan = ath9k_hw_scan; -- ath9k_ops.cancel_hw_scan = ath9k_cancel_hw_scan; -- ath9k_ops.remain_on_channel = ath9k_remain_on_channel; +- ath9k_ops.hw_scan = ath9k_hw_scan; +- ath9k_ops.cancel_hw_scan = ath9k_cancel_hw_scan; +- ath9k_ops.remain_on_channel = ath9k_remain_on_channel; - ath9k_ops.cancel_remain_on_channel = ath9k_cancel_remain_on_channel; -- ath9k_ops.add_chanctx = ath9k_add_chanctx; -- ath9k_ops.remove_chanctx = ath9k_remove_chanctx; -- ath9k_ops.change_chanctx = ath9k_change_chanctx; -- ath9k_ops.assign_vif_chanctx = ath9k_assign_vif_chanctx; -- ath9k_ops.unassign_vif_chanctx = ath9k_unassign_vif_chanctx; -- ath9k_ops.mgd_prepare_tx = ath9k_chanctx_force_active; +- ath9k_ops.add_chanctx = ath9k_add_chanctx; +- ath9k_ops.remove_chanctx = ath9k_remove_chanctx; +- ath9k_ops.change_chanctx = ath9k_change_chanctx; +- ath9k_ops.assign_vif_chanctx = ath9k_assign_vif_chanctx; +- ath9k_ops.unassign_vif_chanctx = ath9k_unassign_vif_chanctx; +- ath9k_ops.mgd_prepare_tx = ath9k_mgd_prepare_tx; + pax_open_kernel(); -+ *(void **)&ath9k_ops.hw_scan = ath9k_hw_scan; -+ *(void **)&ath9k_ops.cancel_hw_scan = ath9k_cancel_hw_scan; -+ *(void **)&ath9k_ops.remain_on_channel = ath9k_remain_on_channel; ++ *(void **)&ath9k_ops.hw_scan = ath9k_hw_scan; ++ *(void **)&ath9k_ops.cancel_hw_scan = ath9k_cancel_hw_scan; ++ *(void **)&ath9k_ops.remain_on_channel = ath9k_remain_on_channel; + *(void **)&ath9k_ops.cancel_remain_on_channel = ath9k_cancel_remain_on_channel; -+ *(void **)&ath9k_ops.add_chanctx = ath9k_add_chanctx; -+ *(void **)&ath9k_ops.remove_chanctx = ath9k_remove_chanctx; -+ *(void **)&ath9k_ops.change_chanctx = ath9k_change_chanctx; -+ *(void **)&ath9k_ops.assign_vif_chanctx = ath9k_assign_vif_chanctx; -+ *(void **)&ath9k_ops.unassign_vif_chanctx = ath9k_unassign_vif_chanctx; -+ *(void **)&ath9k_ops.mgd_prepare_tx = ath9k_chanctx_force_active; ++ *(void **)&ath9k_ops.add_chanctx = ath9k_add_chanctx; ++ *(void **)&ath9k_ops.remove_chanctx = ath9k_remove_chanctx; ++ *(void **)&ath9k_ops.change_chanctx = ath9k_change_chanctx; ++ *(void **)&ath9k_ops.assign_vif_chanctx = ath9k_assign_vif_chanctx; ++ *(void **)&ath9k_ops.unassign_vif_chanctx = ath9k_unassign_vif_chanctx; ++ *(void **)&ath9k_ops.mgd_prepare_tx = ath9k_mgd_prepare_tx; + pax_close_kernel(); } - struct ieee80211_ops ath9k_ops = { + #endif diff --git a/drivers/net/wireless/b43/phy_lp.c b/drivers/net/wireless/b43/phy_lp.c -index 92190da..f3a4c4c 100644 +index 058a9f2..d5cb1ba 100644 --- a/drivers/net/wireless/b43/phy_lp.c +++ b/drivers/net/wireless/b43/phy_lp.c -@@ -2514,7 +2514,7 @@ static int lpphy_b2063_tune(struct b43_wldev *dev, +@@ -2502,7 +2502,7 @@ static int lpphy_b2063_tune(struct b43_wldev *dev, { struct ssb_bus *bus = dev->dev->sdev->bus; @@ -49668,10 +49293,10 @@ index 0ffb6ff..c0b7f0e 100644 memset(buf, 0, sizeof(buf)); buf_size = min(count, sizeof(buf) - 1); diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c -index 6c02467..771bb8a 100644 +index dd2f3f8..fb1ae88 100644 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c -@@ -1686,7 +1686,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file, +@@ -1689,7 +1689,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file, struct isr_statistics *isr_stats = &trans_pcie->isr_stats; char buf[8]; @@ -49680,7 +49305,7 @@ index 6c02467..771bb8a 100644 u32 reset_flag; memset(buf, 0, sizeof(buf)); -@@ -1707,7 +1707,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file, +@@ -1710,7 +1710,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file, { struct iwl_trans *trans = file->private_data; char buf[8]; @@ -49690,7 +49315,7 @@ index 6c02467..771bb8a 100644 memset(buf, 0, sizeof(buf)); diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c -index 6b48c865..19646a7 100644 +index c9ad4cf..49a2fa0 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c @@ -2577,20 +2577,20 @@ static int __init init_mac80211_hwsim(void) @@ -49729,7 +49354,7 @@ index 6b48c865..19646a7 100644 spin_lock_init(&hwsim_radio_lock); INIT_LIST_HEAD(&hwsim_radios); diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c -index d2a9a08..0cb175d 100644 +index 1a4facd..a2ecbbd 100644 --- a/drivers/net/wireless/rndis_wlan.c +++ b/drivers/net/wireless/rndis_wlan.c @@ -1236,7 +1236,7 @@ static int set_rts_threshold(struct usbnet *usbdev, u32 rts_threshold) @@ -49755,10 +49380,10 @@ index d13f25c..2573994 100644 static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif) diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c -index 8e68f87..c35ba29 100644 +index 66ff364..3ce34f7 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c -@@ -250,9 +250,9 @@ static void rt2x00queue_create_tx_descriptor_seq(struct rt2x00_dev *rt2x00dev, +@@ -224,9 +224,9 @@ static void rt2x00queue_create_tx_descriptor_seq(struct rt2x00_dev *rt2x00dev, * sequence counter given by mac80211. */ if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags)) @@ -50010,7 +49635,7 @@ index 3f49345..c750d0b 100644 return __oprofilefs_create_file(root, name, &atomic_ro_fops, 0444, val); diff --git a/drivers/oprofile/timer_int.c b/drivers/oprofile/timer_int.c -index 61be1d9..dec05d7 100644 +index bdef916..88c7dee 100644 --- a/drivers/oprofile/timer_int.c +++ b/drivers/oprofile/timer_int.c @@ -93,7 +93,7 @@ static int oprofile_cpu_notify(struct notifier_block *self, @@ -50045,7 +49670,7 @@ index 3b47080..6cd05dd 100644 #endif /* IEEE1284.3 support. */ diff --git a/drivers/pci/hotplug/acpiphp_ibm.c b/drivers/pci/hotplug/acpiphp_ibm.c -index 8dcccff..35d701d 100644 +index 6ca2399..68d866b 100644 --- a/drivers/pci/hotplug/acpiphp_ibm.c +++ b/drivers/pci/hotplug/acpiphp_ibm.c @@ -452,7 +452,9 @@ static int __init ibm_acpiphp_init(void) @@ -50060,7 +49685,7 @@ index 8dcccff..35d701d 100644 return retval; diff --git a/drivers/pci/hotplug/cpcihp_generic.c b/drivers/pci/hotplug/cpcihp_generic.c -index 04fcd78..39e83f1 100644 +index 66b7bbe..26bee78 100644 --- a/drivers/pci/hotplug/cpcihp_generic.c +++ b/drivers/pci/hotplug/cpcihp_generic.c @@ -73,7 +73,6 @@ static u16 port; @@ -50091,7 +49716,7 @@ index 04fcd78..39e83f1 100644 status = cpci_hp_register_controller(&generic_hpc); diff --git a/drivers/pci/hotplug/cpcihp_zt5550.c b/drivers/pci/hotplug/cpcihp_zt5550.c -index 6757b3e..d3bad62 100644 +index 7ecf34e..effed62 100644 --- a/drivers/pci/hotplug/cpcihp_zt5550.c +++ b/drivers/pci/hotplug/cpcihp_zt5550.c @@ -59,7 +59,6 @@ @@ -50102,7 +49727,7 @@ index 6757b3e..d3bad62 100644 static struct cpci_hp_controller zt5550_hpc; /* Primary cPCI bus bridge device */ -@@ -205,6 +204,10 @@ static int zt5550_hc_disable_irq(void) +@@ -204,6 +203,10 @@ static int zt5550_hc_disable_irq(void) return 0; } @@ -50113,13 +49738,13 @@ index 6757b3e..d3bad62 100644 static int zt5550_hc_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) { int status; -@@ -216,16 +219,17 @@ static int zt5550_hc_init_one (struct pci_dev *pdev, const struct pci_device_id +@@ -215,16 +218,17 @@ static int zt5550_hc_init_one (struct pci_dev *pdev, const struct pci_device_id dbg("returned from zt5550_hc_config"); memset(&zt5550_hpc, 0, sizeof (struct cpci_hp_controller)); - zt5550_hpc_ops.query_enum = zt5550_hc_query_enum; zt5550_hpc.ops = &zt5550_hpc_ops; - if(!poll) { + if (!poll) { zt5550_hpc.irq = hc_dev->irq; zt5550_hpc.irq_flags = IRQF_SHARED; zt5550_hpc.dev_id = hc_dev; @@ -50136,23 +49761,20 @@ index 6757b3e..d3bad62 100644 info("using ENUM# polling mode"); } diff --git a/drivers/pci/hotplug/cpqphp_nvram.c b/drivers/pci/hotplug/cpqphp_nvram.c -index 0968a9b..5a00edf 100644 +index 1e08ff8c..3cd145f 100644 --- a/drivers/pci/hotplug/cpqphp_nvram.c +++ b/drivers/pci/hotplug/cpqphp_nvram.c -@@ -427,9 +427,13 @@ static u32 store_HRT (void __iomem *rom_start) +@@ -425,8 +425,10 @@ static u32 store_HRT (void __iomem *rom_start) void compaq_nvram_init (void __iomem *rom_start) { -+ +#ifndef CONFIG_PAX_KERNEXEC - if (rom_start) { + if (rom_start) compaq_int15_entry_point = (rom_start + ROM_INT15_PHY_ADDR - ROM_PHY_ADDR); - } +#endif -+ + dbg("int15 entry = %p\n", compaq_int15_entry_point); - /* initialize our int15 lock */ diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c index 56d8486..f26113f 100644 --- a/drivers/pci/hotplug/pci_hotplug_core.c @@ -50184,10 +49806,10 @@ index 07aa722..84514b4 100644 int retval = -ENOMEM; diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c -index 5a40516..136d5a7 100644 +index 084587d..4a8f9df 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c -@@ -507,8 +507,8 @@ static int populate_msi_sysfs(struct pci_dev *pdev) +@@ -488,8 +488,8 @@ static int populate_msi_sysfs(struct pci_dev *pdev) { struct attribute **msi_attrs; struct attribute *msi_attr; @@ -50198,7 +49820,7 @@ index 5a40516..136d5a7 100644 const struct attribute_group **msi_irq_groups; struct msi_desc *entry; int ret = -ENOMEM; -@@ -568,7 +568,7 @@ error_attrs: +@@ -549,7 +549,7 @@ error_attrs: count = 0; msi_attr = msi_attrs[count]; while (msi_attr) { @@ -50208,10 +49830,10 @@ index 5a40516..136d5a7 100644 kfree(msi_dev_attr); ++count; diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c -index 6d04771..4126004 100644 +index 2c6643f..3a6d8e0 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c -@@ -1134,7 +1134,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) +@@ -1133,7 +1133,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) { /* allocate attribute structure, piggyback attribute name */ int name_len = write_combine ? 13 : 10; @@ -50220,7 +49842,7 @@ index 6d04771..4126004 100644 int retval; res_attr = kzalloc(sizeof(*res_attr) + name_len, GFP_ATOMIC); -@@ -1311,7 +1311,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor +@@ -1310,7 +1310,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor static int pci_create_capabilities_sysfs(struct pci_dev *dev) { int retval; @@ -50229,7 +49851,7 @@ index 6d04771..4126004 100644 /* If the device has VPD, try to expose it in sysfs. */ if (dev->vpd) { -@@ -1358,7 +1358,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev) +@@ -1357,7 +1357,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev) { int retval; int rom_size = 0; @@ -50239,10 +49861,10 @@ index 6d04771..4126004 100644 if (!sysfs_initialized) return -EACCES; diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h -index 0601890..dc15007 100644 +index 4a3902d..7f1fc42 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h -@@ -91,7 +91,7 @@ struct pci_vpd_ops { +@@ -93,7 +93,7 @@ struct pci_vpd_ops { struct pci_vpd { unsigned int len; const struct pci_vpd_ops *ops; @@ -50269,10 +49891,10 @@ index e1e7026..d28dd33 100644 #define ASPM_STATE_ALL (ASPM_STATE_L0S | ASPM_STATE_L1) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c -index 4170113..7cc5339 100644 +index c8ca98c..b1bc005 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c -@@ -176,7 +176,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, +@@ -177,7 +177,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, struct pci_bus_region region, inverted_region; bool bar_too_big = false, bar_too_high = false, bar_invalid = false; @@ -50471,7 +50093,7 @@ index 26ad9ff..7c52909 100644 static ssize_t sony_nc_smart_conn_store(struct device *dev, struct device_attribute *attr, diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c -index 3bbc6eb..7760460 100644 +index cf0f893..5955997 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c @@ -2094,7 +2094,7 @@ static int hotkey_mask_get(void) @@ -50600,7 +50222,7 @@ index cc439fd..8fa30df 100644 #endif /* CONFIG_SYSFS */ diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c -index 078afd6..fbac9da 100644 +index 694e8cd..9f03483 100644 --- a/drivers/power/power_supply_core.c +++ b/drivers/power/power_supply_core.c @@ -28,7 +28,10 @@ EXPORT_SYMBOL_GPL(power_supply_class); @@ -50615,7 +50237,7 @@ index 078afd6..fbac9da 100644 static bool __power_supply_is_supplied_by(struct power_supply *supplier, struct power_supply *supply) -@@ -640,7 +643,7 @@ static int __init power_supply_class_init(void) +@@ -637,7 +640,7 @@ static int __init power_supply_class_init(void) return PTR_ERR(power_supply_class); power_supply_class->dev_uevent = power_supply_uevent; @@ -50625,10 +50247,10 @@ index 078afd6..fbac9da 100644 return 0; } diff --git a/drivers/power/power_supply_sysfs.c b/drivers/power/power_supply_sysfs.c -index 750a202..99c8f4b 100644 +index 62653f5..d0bb485 100644 --- a/drivers/power/power_supply_sysfs.c +++ b/drivers/power/power_supply_sysfs.c -@@ -234,17 +234,15 @@ static struct attribute_group power_supply_attr_group = { +@@ -238,17 +238,15 @@ static struct attribute_group power_supply_attr_group = { .is_visible = power_supply_attr_is_visible, }; @@ -50864,10 +50486,10 @@ index 302e626..12579af 100644 da->attr.name = info->pin_config[i].name; da->attr.mode = 0644; diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c -index a3c3785..c901e3a 100644 +index cd87c0c..715ecbe 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c -@@ -3481,7 +3481,7 @@ regulator_register(const struct regulator_desc *regulator_desc, +@@ -3567,7 +3567,7 @@ regulator_register(const struct regulator_desc *regulator_desc, { const struct regulation_constraints *constraints = NULL; const struct regulator_init_data *init_data; @@ -50876,8 +50498,8 @@ index a3c3785..c901e3a 100644 struct regulator_dev *rdev; struct device *dev; int ret, i; -@@ -3551,7 +3551,7 @@ regulator_register(const struct regulator_desc *regulator_desc, - rdev->dev.of_node = of_node_get(config->of_node); +@@ -3641,7 +3641,7 @@ regulator_register(const struct regulator_desc *regulator_desc, + rdev->dev.class = ®ulator_class; rdev->dev.parent = dev; dev_set_name(&rdev->dev, "regulator.%d", - atomic_inc_return(®ulator_no) - 1); @@ -50886,7 +50508,7 @@ index a3c3785..c901e3a 100644 if (ret != 0) { put_device(&rdev->dev); diff --git a/drivers/regulator/max8660.c b/drivers/regulator/max8660.c -index 2fc4111..6aa88ca 100644 +index 7eee2ca..4024513 100644 --- a/drivers/regulator/max8660.c +++ b/drivers/regulator/max8660.c @@ -424,8 +424,10 @@ static int max8660_probe(struct i2c_client *client, @@ -50922,24 +50544,24 @@ index dbedf17..18ff6b7 100644 if (pdata) { diff --git a/drivers/regulator/mc13892-regulator.c b/drivers/regulator/mc13892-regulator.c -index f374fa5..26f0683 100644 +index 793b662..85f74cd 100644 --- a/drivers/regulator/mc13892-regulator.c +++ b/drivers/regulator/mc13892-regulator.c -@@ -582,10 +582,12 @@ static int mc13892_regulator_probe(struct platform_device *pdev) - } +@@ -584,10 +584,12 @@ static int mc13892_regulator_probe(struct platform_device *pdev) mc13xxx_unlock(mc13892); -- mc13892_regulators[MC13892_VCAM].desc.ops->set_mode + /* update mc13892_vcam ops */ + pax_open_kernel(); -+ *(void **)&mc13892_regulators[MC13892_VCAM].desc.ops->set_mode - = mc13892_vcam_set_mode; -- mc13892_regulators[MC13892_VCAM].desc.ops->get_mode -+ *(void **)&mc13892_regulators[MC13892_VCAM].desc.ops->get_mode - = mc13892_vcam_get_mode; + memcpy(&mc13892_vcam_ops, mc13892_regulators[MC13892_VCAM].desc.ops, + sizeof(struct regulator_ops)); +- mc13892_vcam_ops.set_mode = mc13892_vcam_set_mode, +- mc13892_vcam_ops.get_mode = mc13892_vcam_get_mode, ++ *(void **)&mc13892_vcam_ops.set_mode = mc13892_vcam_set_mode, ++ *(void **)&mc13892_vcam_ops.get_mode = mc13892_vcam_get_mode, + pax_close_kernel(); + mc13892_regulators[MC13892_VCAM].desc.ops = &mc13892_vcam_ops; mc13xxx_data = mc13xxx_parse_regulators_dt(pdev, mc13892_regulators, - ARRAY_SIZE(mc13892_regulators)); diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index 5b2e761..c8c8a4a 100644 --- a/drivers/rtc/rtc-cmos.c @@ -50977,7 +50599,7 @@ index d049393..bb20be0 100644 case RTC_PIE_ON: diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c -index f03d5ba..8325bf6 100644 +index bb43cf7..ee4d274 100644 --- a/drivers/rtc/rtc-ds1307.c +++ b/drivers/rtc/rtc-ds1307.c @@ -107,7 +107,7 @@ struct ds1307 { @@ -51199,7 +50821,7 @@ index 6de80e3..a11e0ac 100644 /* These three are default values which can be overridden */ diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c -index 6b35d0d..2880305 100644 +index cef5d49..01e280e 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c @@ -701,10 +701,10 @@ static inline u32 next_command(struct ctlr_info *h, u8 q) @@ -51254,7 +50876,7 @@ index 6b35d0d..2880305 100644 (h->interrupts_enabled == 0); } -@@ -6458,7 +6458,7 @@ static int hpsa_pci_init(struct ctlr_info *h) +@@ -6445,7 +6445,7 @@ static int hpsa_pci_init(struct ctlr_info *h) if (prod_index < 0) return -ENODEV; h->product_name = products[prod_index].product_name; @@ -51263,7 +50885,7 @@ index 6b35d0d..2880305 100644 pci_disable_link_state(h->pdev, PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM); -@@ -6780,7 +6780,7 @@ static void controller_lockup_detected(struct ctlr_info *h) +@@ -6790,7 +6790,7 @@ static void controller_lockup_detected(struct ctlr_info *h) unsigned long flags; u32 lockup_detected; @@ -51272,7 +50894,7 @@ index 6b35d0d..2880305 100644 spin_lock_irqsave(&h->lock, flags); lockup_detected = readl(h->vaddr + SA5_SCRATCHPAD_OFFSET); if (!lockup_detected) { -@@ -7027,7 +7027,7 @@ reinit_after_soft_reset: +@@ -7037,7 +7037,7 @@ reinit_after_soft_reset: } /* make sure the board interrupts are off */ @@ -51281,7 +50903,7 @@ index 6b35d0d..2880305 100644 if (hpsa_request_irq(h, do_hpsa_intr_msi, do_hpsa_intr_intx)) goto clean2; -@@ -7062,7 +7062,7 @@ reinit_after_soft_reset: +@@ -7072,7 +7072,7 @@ reinit_after_soft_reset: * fake ones to scoop up any residual completions. */ spin_lock_irqsave(&h->lock, flags); @@ -51290,7 +50912,7 @@ index 6b35d0d..2880305 100644 spin_unlock_irqrestore(&h->lock, flags); free_irqs(h); rc = hpsa_request_irq(h, hpsa_msix_discard_completions, -@@ -7081,9 +7081,9 @@ reinit_after_soft_reset: +@@ -7091,9 +7091,9 @@ reinit_after_soft_reset: dev_info(&h->pdev->dev, "Board READY.\n"); dev_info(&h->pdev->dev, "Waiting for stale completions to drain.\n"); @@ -51302,7 +50924,7 @@ index 6b35d0d..2880305 100644 rc = controller_reset_failed(h->cfgtable); if (rc) -@@ -7109,7 +7109,7 @@ reinit_after_soft_reset: +@@ -7119,7 +7119,7 @@ reinit_after_soft_reset: h->drv_req_rescan = 0; /* Turn the interrupts on so we can service requests */ @@ -51311,7 +50933,7 @@ index 6b35d0d..2880305 100644 hpsa_hba_inquiry(h); hpsa_register_scsi(h); /* hook ourselves into SCSI subsystem */ -@@ -7174,7 +7174,7 @@ static void hpsa_shutdown(struct pci_dev *pdev) +@@ -7184,7 +7184,7 @@ static void hpsa_shutdown(struct pci_dev *pdev) * To write all data in the battery backed cache to disks */ hpsa_flush_cache(h); @@ -51320,7 +50942,7 @@ index 6b35d0d..2880305 100644 hpsa_free_irqs_and_disable_msix(h); } -@@ -7292,7 +7292,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) +@@ -7302,7 +7302,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) CFGTBL_Trans_enable_directed_msix | (trans_support & (CFGTBL_Trans_io_accel1 | CFGTBL_Trans_io_accel2)); @@ -51329,7 +50951,7 @@ index 6b35d0d..2880305 100644 /* This is a bit complicated. There are 8 registers on * the controller which we write to to tell it 8 different -@@ -7334,7 +7334,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) +@@ -7344,7 +7344,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) * perform the superfluous readl() after each command submission. */ if (trans_support & (CFGTBL_Trans_io_accel1 | CFGTBL_Trans_io_accel2)) @@ -51338,7 +50960,7 @@ index 6b35d0d..2880305 100644 /* Controller spec: zero out this buffer. */ for (i = 0; i < h->nreply_queues; i++) -@@ -7364,12 +7364,12 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) +@@ -7374,12 +7374,12 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) * enable outbound interrupt coalescing in accelerator mode; */ if (trans_support & CFGTBL_Trans_io_accel1) { @@ -51627,7 +51249,7 @@ index 434e903..5a4a79b 100644 struct dentry *idiag_root; struct dentry *idiag_pci_cfg; diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c -index b0aedce..89c6ca6 100644 +index 786a2af..562c6a2 100644 --- a/drivers/scsi/lpfc/lpfc_debugfs.c +++ b/drivers/scsi/lpfc/lpfc_debugfs.c @@ -106,7 +106,7 @@ MODULE_PARM_DESC(lpfc_debugfs_mask_disc_trc, @@ -51710,10 +51332,10 @@ index b0aedce..89c6ca6 100644 snprintf(name, sizeof(name), "discovery_trace"); vport->debug_disc_trc = diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c -index a5769a9..718ecc7 100644 +index 0b2c53a..aec2b45 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c -@@ -11299,8 +11299,10 @@ lpfc_init(void) +@@ -11290,8 +11290,10 @@ lpfc_init(void) "misc_register returned with status %d", error); if (lpfc_enable_npiv) { @@ -51727,19 +51349,19 @@ index a5769a9..718ecc7 100644 lpfc_transport_template = fc_attach_transport(&lpfc_transport_functions); diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c -index 7862c55..5aa65df 100644 +index b99399f..d29dc75 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c -@@ -382,7 +382,7 @@ lpfc_rampdown_queue_depth(struct lpfc_hba *phba) - uint32_t evt_posted; +@@ -383,7 +383,7 @@ lpfc_rampdown_queue_depth(struct lpfc_hba *phba) + unsigned long expires; spin_lock_irqsave(&phba->hbalock, flags); - atomic_inc(&phba->num_rsrc_err); + atomic_inc_unchecked(&phba->num_rsrc_err); phba->last_rsrc_error_time = jiffies; - if ((phba->last_ramp_down_time + QUEUE_RAMP_DOWN_INTERVAL) > jiffies) { -@@ -423,8 +423,8 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba) + expires = phba->last_ramp_down_time + QUEUE_RAMP_DOWN_INTERVAL; +@@ -425,8 +425,8 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba) unsigned long num_rsrc_err, num_cmd_success; int i; @@ -51750,7 +51372,7 @@ index 7862c55..5aa65df 100644 /* * The error and success command counters are global per -@@ -452,8 +452,8 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba) +@@ -454,8 +454,8 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba) } } lpfc_destroy_vport_work_array(phba, vports); @@ -51762,10 +51384,10 @@ index 7862c55..5aa65df 100644 /** diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c -index dd46101..ca80eb9 100644 +index c80ed04..e674f01 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c -@@ -1559,7 +1559,7 @@ _scsih_get_resync(struct device *dev) +@@ -1561,7 +1561,7 @@ _scsih_get_resync(struct device *dev) { struct scsi_device *sdev = to_scsi_device(dev); struct MPT2SAS_ADAPTER *ioc = shost_priv(sdev->host); @@ -51774,7 +51396,7 @@ index dd46101..ca80eb9 100644 unsigned long flags; Mpi2RaidVolPage0_t vol_pg0; Mpi2ConfigReply_t mpi_reply; -@@ -1611,7 +1611,7 @@ _scsih_get_state(struct device *dev) +@@ -1613,7 +1613,7 @@ _scsih_get_state(struct device *dev) { struct scsi_device *sdev = to_scsi_device(dev); struct MPT2SAS_ADAPTER *ioc = shost_priv(sdev->host); @@ -51783,7 +51405,7 @@ index dd46101..ca80eb9 100644 unsigned long flags; Mpi2RaidVolPage0_t vol_pg0; Mpi2ConfigReply_t mpi_reply; -@@ -6648,7 +6648,7 @@ _scsih_sas_ir_operation_status_event(struct MPT2SAS_ADAPTER *ioc, +@@ -6663,7 +6663,7 @@ _scsih_sas_ir_operation_status_event(struct MPT2SAS_ADAPTER *ioc, Mpi2EventDataIrOperationStatus_t *event_data = (Mpi2EventDataIrOperationStatus_t *) fw_event->event_data; @@ -51792,7 +51414,7 @@ index dd46101..ca80eb9 100644 unsigned long flags; u16 handle; -@@ -7119,7 +7119,7 @@ _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc) +@@ -7134,7 +7134,7 @@ _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc) u64 sas_address; struct _sas_device *sas_device; struct _sas_node *expander_device; @@ -51802,7 +51424,7 @@ index dd46101..ca80eb9 100644 unsigned long flags; diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c -index 6f3275d..fa5e6b6 100644 +index bcb64eb..f08cf71 100644 --- a/drivers/scsi/pmcraid.c +++ b/drivers/scsi/pmcraid.c @@ -200,8 +200,8 @@ static int pmcraid_slave_alloc(struct scsi_device *scsi_dev) @@ -51855,7 +51477,7 @@ index 6f3275d..fa5e6b6 100644 return; fw_version = be16_to_cpu(pinstance->inq_data->fw_version); -@@ -5322,8 +5322,8 @@ static int pmcraid_init_instance(struct pci_dev *pdev, struct Scsi_Host *host, +@@ -5312,8 +5312,8 @@ static int pmcraid_init_instance(struct pci_dev *pdev, struct Scsi_Host *host, init_waitqueue_head(&pinstance->reset_wait_q); atomic_set(&pinstance->outstanding_cmds, 0); @@ -51866,7 +51488,7 @@ index 6f3275d..fa5e6b6 100644 INIT_LIST_HEAD(&pinstance->free_res_q); INIT_LIST_HEAD(&pinstance->used_res_q); -@@ -6036,7 +6036,7 @@ static int pmcraid_probe(struct pci_dev *pdev, +@@ -6026,7 +6026,7 @@ static int pmcraid_probe(struct pci_dev *pdev, /* Schedule worker thread to handle CCN and take care of adding and * removing devices to OS */ @@ -51909,10 +51531,10 @@ index e1d150f..6c6df44 100644 /* To indicate add/delete/modify during CCN */ u8 change_detected; diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c -index 16fe519..3b1ec82 100644 +index 82b92c4..3178171 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c -@@ -2188,7 +2188,7 @@ qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable) +@@ -2192,7 +2192,7 @@ qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable) return 0; } @@ -51921,7 +51543,7 @@ index 16fe519..3b1ec82 100644 .show_host_node_name = 1, .show_host_port_name = 1, -@@ -2236,7 +2236,7 @@ struct fc_function_template qla2xxx_transport_functions = { +@@ -2240,7 +2240,7 @@ struct fc_function_template qla2xxx_transport_functions = { .bsg_timeout = qla24xx_bsg_timeout, }; @@ -51931,10 +51553,10 @@ index 16fe519..3b1ec82 100644 .show_host_node_name = 1, .show_host_port_name = 1, diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h -index d646540..5b13554 100644 +index b1865a7..a7723d3 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h -@@ -569,8 +569,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *); +@@ -571,8 +571,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *, size_t); struct device_attribute; extern struct device_attribute *qla2x00_host_attrs[]; struct fc_function_template; @@ -51946,10 +51568,10 @@ index d646540..5b13554 100644 extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *, bool); extern void qla2x00_init_host_attr(scsi_qla_host_t *); diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c -index 8252c0e..613adad 100644 +index db3dbd9..2492392 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c -@@ -1493,8 +1493,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha) +@@ -1507,8 +1507,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha) !pci_set_consistent_dma_mask(ha->pdev, DMA_BIT_MASK(64))) { /* Ok, a 64bit DMA mask is applicable. */ ha->flags.enable_64bit_addressing = 1; @@ -52004,7 +51626,7 @@ index 199fcf7..3c3a918 100644 ddb_entry->default_relogin_timeout = (def_timeout > LOGIN_TOV) && (def_timeout < LOGIN_TOV * 10) ? diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c -index d81f3cc..0093e5b 100644 +index 79c77b4..ef6ec0b 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c @@ -645,7 +645,7 @@ int scsi_dispatch_cmd(struct scsi_cmnd *cmd) @@ -52017,10 +51639,10 @@ index d81f3cc..0093e5b 100644 /* check if the device is still usable */ if (unlikely(cmd->device->sdev_state == SDEV_DEL)) { diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c -index 7cb8c73..14561b5 100644 +index 50a6e1a..de5252e 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c -@@ -1581,7 +1581,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q) +@@ -1583,7 +1583,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q) shost = sdev->host; scsi_init_cmd_errh(cmd); cmd->result = DID_NO_CONNECT << 16; @@ -52029,7 +51651,7 @@ index 7cb8c73..14561b5 100644 /* * SCSI request completion path will do scsi_device_unbusy(), -@@ -1604,9 +1604,9 @@ static void scsi_softirq_done(struct request *rq) +@@ -1606,9 +1606,9 @@ static void scsi_softirq_done(struct request *rq) INIT_LIST_HEAD(&cmd->eh_entry); @@ -52042,7 +51664,7 @@ index 7cb8c73..14561b5 100644 disposition = scsi_decide_disposition(cmd); if (disposition != SUCCESS && diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c -index 8b4105a..1f58363 100644 +index f4cb7b3..dfa79c4 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -805,7 +805,7 @@ show_iostat_##field(struct device *dev, struct device_attribute *attr, \ @@ -52157,10 +51779,10 @@ index ae45bd9..c32a586 100644 transport_setup_device(&rport->dev); diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c -index 2c2041c..9d94085 100644 +index cfba74c..415f09b 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c -@@ -3002,7 +3002,7 @@ static int sd_probe(struct device *dev) +@@ -3022,7 +3022,7 @@ static int sd_probe(struct device *dev) sdkp->disk = gd; sdkp->index = index; atomic_set(&sdkp->openers, 0); @@ -52170,7 +51792,7 @@ index 2c2041c..9d94085 100644 if (!sdp->request_queue->rq_timeout) { if (sdp->type != TYPE_MOD) diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c -index 01cf888..59e0475 100644 +index 6035444..c82edd4 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -1138,7 +1138,7 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) @@ -52196,10 +51818,10 @@ index 11a5043..e36f04c 100644 .read = fuse_read, }; diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c -index ca935df..ae8a3dc 100644 +index 50f20f2..6bd81e0 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c -@@ -2210,7 +2210,7 @@ int spi_bus_unlock(struct spi_master *master) +@@ -2224,7 +2224,7 @@ int spi_bus_unlock(struct spi_master *master) EXPORT_SYMBOL_GPL(spi_bus_unlock); /* portable code must never pass more than 32 bytes */ @@ -52253,10 +51875,10 @@ index 001348c..cfaac8a 100644 static struct tty_driver *gdm_driver[TTY_MAX_COUNT]; static struct gdm *gdm_table[TTY_MAX_COUNT][GDM_TTY_MINOR]; diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c -index 6b22106..6c6e641 100644 +index 9cb222e..8766f26 100644 --- a/drivers/staging/imx-drm/imx-drm-core.c +++ b/drivers/staging/imx-drm/imx-drm-core.c -@@ -355,7 +355,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc, +@@ -357,7 +357,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc, if (imxdrm->pipes >= MAX_CRTC) return -EINVAL; @@ -52318,7 +51940,7 @@ index 503b2d7..c918745 100644 /* receive the result: */ ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67, diff --git a/drivers/staging/lustre/lnet/selftest/brw_test.c b/drivers/staging/lustre/lnet/selftest/brw_test.c -index bcce919..f30fcf9 100644 +index a94f336..6a1924d 100644 --- a/drivers/staging/lustre/lnet/selftest/brw_test.c +++ b/drivers/staging/lustre/lnet/selftest/brw_test.c @@ -488,13 +488,11 @@ brw_server_handle(struct srpc_server_rpc *rpc) @@ -52341,10 +51963,10 @@ index bcce919..f30fcf9 100644 srpc_service_t brw_test_service; diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c -index 7e83dff..1f9a545 100644 +index df04ab7..1deb1ac 100644 --- a/drivers/staging/lustre/lnet/selftest/framework.c +++ b/drivers/staging/lustre/lnet/selftest/framework.c -@@ -1633,12 +1633,10 @@ static srpc_service_t sfw_services[] = +@@ -1632,12 +1632,10 @@ static srpc_service_t sfw_services[] = { extern sfw_test_client_ops_t ping_test_client; extern srpc_service_t ping_test_service; @@ -52357,7 +51979,7 @@ index 7e83dff..1f9a545 100644 extern void brw_init_test_service(void); -@@ -1682,12 +1680,10 @@ sfw_startup (void) +@@ -1681,12 +1679,10 @@ sfw_startup (void) INIT_LIST_HEAD(&sfw_data.fw_zombie_rpcs); INIT_LIST_HEAD(&sfw_data.fw_zombie_sessions); @@ -52396,10 +52018,10 @@ index 750cac4..e4d751f 100644 srpc_service_t ping_test_service; void ping_init_test_service(void) diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h -index 30b1812f..9e5bd0b 100644 +index 14ac46f..eca2c16 100644 --- a/drivers/staging/lustre/lustre/include/lustre_dlm.h +++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h -@@ -1141,7 +1141,7 @@ struct ldlm_callback_suite { +@@ -1139,7 +1139,7 @@ struct ldlm_callback_suite { ldlm_completion_callback lcs_completion; ldlm_blocking_callback lcs_blocking; ldlm_glimpse_callback lcs_glimpse; @@ -52409,10 +52031,10 @@ index 30b1812f..9e5bd0b 100644 /* ldlm_lockd.c */ int ldlm_del_waiting_lock(struct ldlm_lock *lock); diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h -index 489bdd3..65058081 100644 +index 2a88b80..62e7e5f 100644 --- a/drivers/staging/lustre/lustre/include/obd.h +++ b/drivers/staging/lustre/lustre/include/obd.h -@@ -1438,7 +1438,7 @@ struct md_ops { +@@ -1362,7 +1362,7 @@ struct md_ops { * lprocfs_alloc_md_stats() in obdclass/lprocfs_status.c. Also, add a * wrapper function in include/linux/obd_class.h. */ @@ -52435,10 +52057,10 @@ index b798daa..b28ca8f 100644 CDEBUG(D_DLMTRACE, "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n", *flags, new->l_policy_data.l_flock.owner, diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c -index 13a9266..3439390 100644 +index bbe2c68..c6b4275 100644 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c -@@ -235,7 +235,7 @@ int proc_console_max_delay_cs(struct ctl_table *table, int write, +@@ -236,7 +236,7 @@ int proc_console_max_delay_cs(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { int rc, max_delay_cs; @@ -52447,7 +52069,7 @@ index 13a9266..3439390 100644 long d; dummy.data = &max_delay_cs; -@@ -267,7 +267,7 @@ int proc_console_min_delay_cs(struct ctl_table *table, int write, +@@ -268,7 +268,7 @@ int proc_console_min_delay_cs(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { int rc, min_delay_cs; @@ -52456,7 +52078,7 @@ index 13a9266..3439390 100644 long d; dummy.data = &min_delay_cs; -@@ -299,7 +299,7 @@ int proc_console_backoff(struct ctl_table *table, int write, +@@ -300,7 +300,7 @@ int proc_console_backoff(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { int rc, backoff; @@ -52466,10 +52088,10 @@ index 13a9266..3439390 100644 dummy.data = &backoff; dummy.proc_handler = &proc_dointvec; diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c -index 3396858..c0bd996 100644 +index 2c4fc74..b04ca79 100644 --- a/drivers/staging/lustre/lustre/libcfs/module.c +++ b/drivers/staging/lustre/lustre/libcfs/module.c -@@ -314,11 +314,11 @@ out: +@@ -315,11 +315,11 @@ out: struct cfs_psdev_ops libcfs_psdev_ops = { @@ -52487,10 +52109,10 @@ index 3396858..c0bd996 100644 extern int insert_proc(void); diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c -index efa2faf..03a9836 100644 +index b0bb709..0117c96 100644 --- a/drivers/staging/lustre/lustre/llite/dir.c +++ b/drivers/staging/lustre/lustre/llite/dir.c -@@ -659,7 +659,7 @@ int ll_dir_setdirstripe(struct inode *dir, struct lmv_user_md *lump, +@@ -661,7 +661,7 @@ int ll_dir_setdirstripe(struct inode *dir, struct lmv_user_md *lump, int mode; int err; @@ -52500,10 +52122,10 @@ index efa2faf..03a9836 100644 strlen(filename), mode, LUSTRE_OPC_MKDIR, lump); diff --git a/drivers/staging/octeon/ethernet-rx.c b/drivers/staging/octeon/ethernet-rx.c -index a0f4868..139f1fb 100644 +index b2b6c3c..302e4e4 100644 --- a/drivers/staging/octeon/ethernet-rx.c +++ b/drivers/staging/octeon/ethernet-rx.c -@@ -417,11 +417,11 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget) +@@ -416,11 +416,11 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget) /* Increment RX stats for virtual ports */ if (work->ipprt >= CVMX_PIP_NUM_INPUT_PORTS) { #ifdef CONFIG_64BIT @@ -52519,7 +52141,7 @@ index a0f4868..139f1fb 100644 #endif } netif_receive_skb(skb); -@@ -432,9 +432,9 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget) +@@ -431,9 +431,9 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget) dev->name); */ #ifdef CONFIG_64BIT @@ -52532,7 +52154,7 @@ index a0f4868..139f1fb 100644 dev_kfree_skb_irq(skb); } diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c -index 2aa7235..ba3c205 100644 +index 8f9e3fb..d283fb9 100644 --- a/drivers/staging/octeon/ethernet.c +++ b/drivers/staging/octeon/ethernet.c @@ -247,11 +247,11 @@ static struct net_device_stats *cvm_oct_common_get_stats(struct net_device *dev) @@ -52552,10 +52174,10 @@ index 2aa7235..ba3c205 100644 } diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h -index 56d5c50..a14f4db 100644 +index 9191993..30e9817 100644 --- a/drivers/staging/rtl8188eu/include/hal_intf.h +++ b/drivers/staging/rtl8188eu/include/hal_intf.h -@@ -234,7 +234,7 @@ struct hal_ops { +@@ -225,7 +225,7 @@ struct hal_ops { void (*hal_notch_filter)(struct adapter *adapter, bool enable); void (*hal_reset_security_engine)(struct adapter *adapter); @@ -52565,7 +52187,7 @@ index 56d5c50..a14f4db 100644 enum rt_eeprom_type { EEPROM_93C46, diff --git a/drivers/staging/rtl8712/rtl871x_io.h b/drivers/staging/rtl8712/rtl871x_io.h -index dc23395..cf7e9b1 100644 +index 070cc03..6806e37 100644 --- a/drivers/staging/rtl8712/rtl871x_io.h +++ b/drivers/staging/rtl8712/rtl871x_io.h @@ -108,7 +108,7 @@ struct _io_ops { @@ -52600,27 +52222,27 @@ index 2bf2e2f..84421c9 100644 /** Register functions (in the bus driver) to get called by visorchipset * whenever a bus or device appears for which this service partition is diff --git a/drivers/staging/vt6655/hostap.c b/drivers/staging/vt6655/hostap.c -index 164136b..7244df5 100644 +index ae0dade..803d53a 100644 --- a/drivers/staging/vt6655/hostap.c +++ b/drivers/staging/vt6655/hostap.c -@@ -68,14 +68,13 @@ static int msglevel = MSG_LEVEL_INFO; +@@ -65,14 +65,13 @@ * */ +static net_device_ops_no_const apdev_netdev_ops; + - static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked) + static int hostap_enable_hostapd(struct vnt_private *pDevice, int rtnl_locked) { - PSDevice apdev_priv; + struct vnt_private *apdev_priv; struct net_device *dev = pDevice->dev; int ret; - const struct net_device_ops apdev_netdev_ops = { - .ndo_start_xmit = pDevice->tx_80211, - }; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Enabling hostapd mode\n", dev->name); + pr_debug("%s: Enabling hostapd mode\n", dev->name); -@@ -87,6 +86,8 @@ static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked) +@@ -84,6 +83,8 @@ static int hostap_enable_hostapd(struct vnt_private *pDevice, int rtnl_locked) *apdev_priv = *pDevice; eth_hw_addr_inherit(pDevice->apdev, dev); @@ -52652,10 +52274,10 @@ index e7e9372..161f530 100644 login->tgt_agt = sbp_target_agent_register(login); if (IS_ERR(login->tgt_agt)) { diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c -index 15a1c13..6c9b96b 100644 +index c45f9e9..00e85f0 100644 --- a/drivers/target/target_core_device.c +++ b/drivers/target/target_core_device.c -@@ -1526,7 +1526,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name) +@@ -1532,7 +1532,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name) spin_lock_init(&dev->se_tmr_lock); spin_lock_init(&dev->qf_cmd_lock); sema_init(&dev->caw_sem, 1); @@ -52665,20 +52287,37 @@ index 15a1c13..6c9b96b 100644 spin_lock_init(&dev->t10_wwn.t10_vpd_lock); INIT_LIST_HEAD(&dev->t10_pr.registration_list); diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c -index ab61014..8f1116e 100644 +index be877bf..7be9cd4 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c -@@ -1165,7 +1165,7 @@ transport_check_alloc_task_attr(struct se_cmd *cmd) +@@ -1168,7 +1168,7 @@ transport_check_alloc_task_attr(struct se_cmd *cmd) * Used to determine when ORDERED commands should go from * Dormant to Active status. */ - cmd->se_ordered_id = atomic_inc_return(&dev->dev_ordered_id); + cmd->se_ordered_id = atomic_inc_return_unchecked(&dev->dev_ordered_id); - smp_mb__after_atomic(); pr_debug("Allocated se_ordered_id: %u for Task Attr: 0x%02x on %s\n", cmd->se_ordered_id, cmd->sam_task_attr, + dev->transport->name); +diff --git a/drivers/thermal/int340x_thermal/int3400_thermal.c b/drivers/thermal/int340x_thermal/int3400_thermal.c +index edc1cce..769e4cb 100644 +--- a/drivers/thermal/int340x_thermal/int3400_thermal.c ++++ b/drivers/thermal/int340x_thermal/int3400_thermal.c +@@ -209,8 +209,10 @@ static int int3400_thermal_probe(struct platform_device *pdev) + platform_set_drvdata(pdev, priv); + + if (priv->uuid_bitmap & 1 << INT3400_THERMAL_PASSIVE_1) { +- int3400_thermal_ops.get_mode = int3400_thermal_get_mode; +- int3400_thermal_ops.set_mode = int3400_thermal_set_mode; ++ pax_open_kernel(); ++ *(void **)&int3400_thermal_ops.get_mode = int3400_thermal_get_mode; ++ *(void **)&int3400_thermal_ops.set_mode = int3400_thermal_set_mode; ++ pax_close_kernel(); + } + priv->thermal = thermal_zone_device_register("INT3400 Thermal", 0, 0, + priv, &int3400_thermal_ops, diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c -index 4b2b999..cad9fa5 100644 +index 62143ba..ae21165 100644 --- a/drivers/thermal/of-thermal.c +++ b/drivers/thermal/of-thermal.c @@ -30,6 +30,7 @@ @@ -52702,7 +52341,7 @@ index 4b2b999..cad9fa5 100644 mutex_unlock(&tzd->lock); return tzd; -@@ -461,8 +464,10 @@ void thermal_zone_of_sensor_unregister(struct device *dev, +@@ -473,8 +476,10 @@ void thermal_zone_of_sensor_unregister(struct device *dev, return; mutex_lock(&tzd->lock); @@ -53133,7 +52772,7 @@ index 345cebb..d5a1e9e 100644 ipwireless_disassociate_network_ttys(network, ttyj->channel_idx); diff --git a/drivers/tty/moxa.c b/drivers/tty/moxa.c -index 1deaca4..c8582d4 100644 +index 14c54e0..1efd4f2 100644 --- a/drivers/tty/moxa.c +++ b/drivers/tty/moxa.c @@ -1189,7 +1189,7 @@ static int moxa_open(struct tty_struct *tty, struct file *filp) @@ -53168,7 +52807,7 @@ index c434376..114ce13 100644 dlci->modem_rx = 0; diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c -index f44f1ba..a8d5915 100644 +index 2e900a9..576d216 100644 --- a/drivers/tty/n_tty.c +++ b/drivers/tty/n_tty.c @@ -115,7 +115,7 @@ struct n_tty_data { @@ -53180,7 +52819,7 @@ index f44f1ba..a8d5915 100644 size_t line_start; /* protected by output lock */ -@@ -2517,6 +2517,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops) +@@ -2522,6 +2522,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops) { *ops = tty_ldisc_N_TTY; ops->owner = NULL; @@ -53190,10 +52829,10 @@ index f44f1ba..a8d5915 100644 } EXPORT_SYMBOL_GPL(n_tty_inherit_ops); diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c -index 9bbdb1d..dc514ee 100644 +index 7c4447a..70fbc1e 100644 --- a/drivers/tty/pty.c +++ b/drivers/tty/pty.c -@@ -789,8 +789,10 @@ static void __init unix98_pty_init(void) +@@ -830,8 +830,10 @@ static void __init unix98_pty_init(void) panic("Couldn't register Unix98 pts driver"); /* Now create the /dev/ptmx special device */ @@ -53268,10 +52907,10 @@ index aa28209..e08fb85 100644 this_mir = this_ir = pending_intrs(soft, intr_type); diff --git a/drivers/tty/serial/kgdb_nmi.c b/drivers/tty/serial/kgdb_nmi.c -index 6ec7501..265bcbf 100644 +index 129dc5b..1da5bb8 100644 --- a/drivers/tty/serial/kgdb_nmi.c +++ b/drivers/tty/serial/kgdb_nmi.c -@@ -51,7 +51,9 @@ static int kgdb_nmi_console_setup(struct console *co, char *options) +@@ -53,7 +53,9 @@ static int kgdb_nmi_console_setup(struct console *co, char *options) * I/O utilities that messages sent to the console will automatically * be displayed on the dbg_io. */ @@ -53389,10 +53028,10 @@ index a260cde..6b2b5ce 100644 /* This is only available if kgdboc is a built in for early debugging */ static int __init kgdboc_early_init(char *opt) diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c -index 077570a..12550a9 100644 +index 4b6c783..9a19db3 100644 --- a/drivers/tty/serial/msm_serial.c +++ b/drivers/tty/serial/msm_serial.c -@@ -981,7 +981,7 @@ static struct uart_driver msm_uart_driver = { +@@ -1028,7 +1028,7 @@ static struct uart_driver msm_uart_driver = { .cons = MSM_CONSOLE, }; @@ -53401,7 +53040,7 @@ index 077570a..12550a9 100644 static const struct of_device_id msm_uartdm_table[] = { { .compatible = "qcom,msm-uartdm-v1.1", .data = (void *)UARTDM_1P1 }, -@@ -1000,7 +1000,7 @@ static int msm_serial_probe(struct platform_device *pdev) +@@ -1047,7 +1047,7 @@ static int msm_serial_probe(struct platform_device *pdev) int irq; if (pdev->id == -1) @@ -53443,10 +53082,10 @@ index c78f43a..22b1dab 100644 if (cfg->uart_flags & UPF_CONS_FLOW) { diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c -index 0f03988..8a8038d 100644 +index eaeb9a0..01a238c 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c -@@ -1343,7 +1343,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp) +@@ -1339,7 +1339,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp) pr_debug("uart_close(%d) called\n", uport ? uport->line : -1); @@ -53455,7 +53094,7 @@ index 0f03988..8a8038d 100644 return; /* -@@ -1470,7 +1470,7 @@ static void uart_hangup(struct tty_struct *tty) +@@ -1466,7 +1466,7 @@ static void uart_hangup(struct tty_struct *tty) uart_flush_buffer(tty); uart_shutdown(tty, state); spin_lock_irqsave(&port->lock, flags); @@ -53464,7 +53103,7 @@ index 0f03988..8a8038d 100644 clear_bit(ASYNCB_NORMAL_ACTIVE, &port->flags); spin_unlock_irqrestore(&port->lock, flags); tty_port_tty_set(port, NULL); -@@ -1568,7 +1568,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp) +@@ -1564,7 +1564,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp) goto end; } @@ -53473,12 +53112,12 @@ index 0f03988..8a8038d 100644 if (!state->uart_port || state->uart_port->flags & UPF_DEAD) { retval = -ENXIO; goto err_dec_count; -@@ -1600,7 +1600,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp) +@@ -1596,7 +1596,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp) end: return retval; err_dec_count: - port->count--; -+ atomic_inc(&port->count); ++ atomic_dec(&port->count); mutex_unlock(&port->mutex); goto end; } @@ -53881,10 +53520,10 @@ index 42bad18..447d7a2 100644 if (get_user(c, buf)) diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c -index 848c17a..e930437 100644 +index 0508a1d..b610592 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c -@@ -3469,7 +3469,7 @@ EXPORT_SYMBOL_GPL(get_current_tty); +@@ -3498,7 +3498,7 @@ EXPORT_SYMBOL_GPL(get_current_tty); void tty_default_fops(struct file_operations *fops) { @@ -54001,7 +53640,7 @@ index 1b93357..ea9f82c 100644 tty_port_tty_set(port, tty); diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c -index d0e3a44..5f8b754 100644 +index c039cfe..0b463b0 100644 --- a/drivers/tty/vt/keyboard.c +++ b/drivers/tty/vt/keyboard.c @@ -641,6 +641,16 @@ static void k_spec(struct vc_data *vc, unsigned char value, char up_flag) @@ -54062,7 +53701,7 @@ index d0e3a44..5f8b754 100644 ret = -EPERM; goto reterr; diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c -index a673e5b..36e5d32 100644 +index 60fa627..7214965 100644 --- a/drivers/uio/uio.c +++ b/drivers/uio/uio.c @@ -25,6 +25,7 @@ @@ -54073,16 +53712,7 @@ index a673e5b..36e5d32 100644 #define UIO_MAX_DEVICES (1U << MINORBITS) -@@ -32,7 +33,7 @@ struct uio_device { - struct module *owner; - struct device *dev; - int minor; -- atomic_t event; -+ atomic_unchecked_t event; - struct fasync_struct *async_queue; - wait_queue_head_t wait; - struct uio_info *info; -@@ -243,7 +244,7 @@ static ssize_t event_show(struct device *dev, +@@ -231,7 +232,7 @@ static ssize_t event_show(struct device *dev, struct device_attribute *attr, char *buf) { struct uio_device *idev = dev_get_drvdata(dev); @@ -54091,7 +53721,7 @@ index a673e5b..36e5d32 100644 } static DEVICE_ATTR_RO(event); -@@ -405,7 +406,7 @@ void uio_event_notify(struct uio_info *info) +@@ -393,7 +394,7 @@ void uio_event_notify(struct uio_info *info) { struct uio_device *idev = info->uio_dev; @@ -54100,7 +53730,7 @@ index a673e5b..36e5d32 100644 wake_up_interruptible(&idev->wait); kill_fasync(&idev->async_queue, SIGIO, POLL_IN); } -@@ -458,7 +459,7 @@ static int uio_open(struct inode *inode, struct file *filep) +@@ -446,7 +447,7 @@ static int uio_open(struct inode *inode, struct file *filep) } listener->dev = idev; @@ -54109,7 +53739,7 @@ index a673e5b..36e5d32 100644 filep->private_data = listener; if (idev->info->open) { -@@ -509,7 +510,7 @@ static unsigned int uio_poll(struct file *filep, poll_table *wait) +@@ -497,7 +498,7 @@ static unsigned int uio_poll(struct file *filep, poll_table *wait) return -EIO; poll_wait(filep, &idev->wait, wait); @@ -54118,7 +53748,7 @@ index a673e5b..36e5d32 100644 return POLLIN | POLLRDNORM; return 0; } -@@ -534,7 +535,7 @@ static ssize_t uio_read(struct file *filep, char __user *buf, +@@ -522,7 +523,7 @@ static ssize_t uio_read(struct file *filep, char __user *buf, do { set_current_state(TASK_INTERRUPTIBLE); @@ -54127,7 +53757,7 @@ index a673e5b..36e5d32 100644 if (event_count != listener->event_count) { if (copy_to_user(buf, &event_count, count)) retval = -EFAULT; -@@ -591,9 +592,13 @@ static ssize_t uio_write(struct file *filep, const char __user *buf, +@@ -579,9 +580,13 @@ static ssize_t uio_write(struct file *filep, const char __user *buf, static int uio_find_mem_index(struct vm_area_struct *vma) { struct uio_device *idev = vma->vm_private_data; @@ -54142,7 +53772,7 @@ index a673e5b..36e5d32 100644 return -1; return (int)vma->vm_pgoff; } -@@ -825,7 +830,7 @@ int __uio_register_device(struct module *owner, +@@ -813,7 +818,7 @@ int __uio_register_device(struct module *owner, idev->owner = owner; idev->info = info; init_waitqueue_head(&idev->wait); @@ -54319,10 +53949,10 @@ index 0b59731..46ee7d1 100644 dev->rawdescriptors[i] + (*ppos - pos), min(len, alloclen))) { diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c -index 258e6fe..9ea48d7 100644 +index a6efb41..6f72549b 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c -@@ -1550,7 +1550,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) +@@ -1551,7 +1551,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) */ usb_get_urb(urb); atomic_inc(&urb->use_count); @@ -54331,7 +53961,7 @@ index 258e6fe..9ea48d7 100644 usbmon_urb_submit(&hcd->self, urb); /* NOTE requirements on root-hub callers (usbfs and the hub -@@ -1577,7 +1577,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) +@@ -1578,7 +1578,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) urb->hcpriv = NULL; INIT_LIST_HEAD(&urb->urb_list); atomic_dec(&urb->use_count); @@ -54341,18 +53971,18 @@ index 258e6fe..9ea48d7 100644 wake_up(&usb_kill_urb_queue); usb_put_urb(urb); diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index 674c262..71fdd90 100644 +index b649fef..c7107a0 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -27,6 +27,7 @@ - #include +@@ -26,6 +26,7 @@ + #include #include #include +#include #include #include -@@ -4665,6 +4666,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, +@@ -4666,6 +4667,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, goto done; return; } @@ -54364,7 +53994,7 @@ index 674c262..71fdd90 100644 unit_load = 150; else diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c -index 0c8a7fc..c45b40a 100644 +index f7b7713..23d07ec 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -128,7 +128,7 @@ static int usb_internal_control_msg(struct usb_device *usb_dev, @@ -54462,11 +54092,11 @@ index 8cfc319..4868255 100644 return 0; } diff --git a/drivers/usb/gadget/function/f_uac1.c b/drivers/usb/gadget/function/f_uac1.c -index 2b4c82d..06a8ee6 100644 +index f7b2032..fbb340c 100644 --- a/drivers/usb/gadget/function/f_uac1.c +++ b/drivers/usb/gadget/function/f_uac1.c -@@ -13,6 +13,7 @@ - #include +@@ -14,6 +14,7 @@ + #include #include #include +#include @@ -54474,10 +54104,10 @@ index 2b4c82d..06a8ee6 100644 #include "u_uac1.h" diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c -index ad0aca8..8ff84865 100644 +index 491082a..dfd7d17 100644 --- a/drivers/usb/gadget/function/u_serial.c +++ b/drivers/usb/gadget/function/u_serial.c -@@ -733,9 +733,9 @@ static int gs_open(struct tty_struct *tty, struct file *file) +@@ -729,9 +729,9 @@ static int gs_open(struct tty_struct *tty, struct file *file) spin_lock_irq(&port->port_lock); /* already open? Great. */ @@ -54489,7 +54119,7 @@ index ad0aca8..8ff84865 100644 /* currently opening/closing? wait ... */ } else if (port->openclose) { -@@ -794,7 +794,7 @@ static int gs_open(struct tty_struct *tty, struct file *file) +@@ -790,7 +790,7 @@ static int gs_open(struct tty_struct *tty, struct file *file) tty->driver_data = port; port->port.tty = tty; @@ -54498,7 +54128,7 @@ index ad0aca8..8ff84865 100644 port->openclose = false; /* if connected, start the I/O stream */ -@@ -836,11 +836,11 @@ static void gs_close(struct tty_struct *tty, struct file *file) +@@ -832,11 +832,11 @@ static void gs_close(struct tty_struct *tty, struct file *file) spin_lock_irq(&port->port_lock); @@ -54513,7 +54143,7 @@ index ad0aca8..8ff84865 100644 goto exit; } -@@ -850,7 +850,7 @@ static void gs_close(struct tty_struct *tty, struct file *file) +@@ -846,7 +846,7 @@ static void gs_close(struct tty_struct *tty, struct file *file) * and sleep if necessary */ port->openclose = true; @@ -54522,7 +54152,7 @@ index ad0aca8..8ff84865 100644 gser = port->port_usb; if (gser && gser->disconnect) -@@ -1066,7 +1066,7 @@ static int gs_closed(struct gs_port *port) +@@ -1062,7 +1062,7 @@ static int gs_closed(struct gs_port *port) int cond; spin_lock_irq(&port->port_lock); @@ -54531,7 +54161,7 @@ index ad0aca8..8ff84865 100644 spin_unlock_irq(&port->port_lock); return cond; } -@@ -1209,7 +1209,7 @@ int gserial_connect(struct gserial *gser, u8 port_num) +@@ -1205,7 +1205,7 @@ int gserial_connect(struct gserial *gser, u8 port_num) /* if it's already open, start I/O ... and notify the serial * protocol about open/close status (connect/disconnect). */ @@ -54540,7 +54170,7 @@ index ad0aca8..8ff84865 100644 pr_debug("gserial_connect: start ttyGS%d\n", port->port_num); gs_start_io(port); if (gser->connect) -@@ -1256,7 +1256,7 @@ void gserial_disconnect(struct gserial *gser) +@@ -1252,7 +1252,7 @@ void gserial_disconnect(struct gserial *gser) port->port_usb = NULL; gser->ioport = NULL; @@ -54549,7 +54179,7 @@ index ad0aca8..8ff84865 100644 wake_up_interruptible(&port->drain_wait); if (port->port.tty) tty_hangup(port->port.tty); -@@ -1272,7 +1272,7 @@ void gserial_disconnect(struct gserial *gser) +@@ -1268,7 +1268,7 @@ void gserial_disconnect(struct gserial *gser) /* finally, free any unused/unusable I/O buffers */ spin_lock_irqsave(&port->port_lock, flags); @@ -54559,10 +54189,10 @@ index ad0aca8..8ff84865 100644 gs_free_requests(gser->out, &port->read_pool, NULL); gs_free_requests(gser->out, &port->read_queue, NULL); diff --git a/drivers/usb/gadget/function/u_uac1.c b/drivers/usb/gadget/function/u_uac1.c -index 7a55fea..cc0ed4f 100644 +index a44a07f..ecea924 100644 --- a/drivers/usb/gadget/function/u_uac1.c +++ b/drivers/usb/gadget/function/u_uac1.c -@@ -16,6 +16,7 @@ +@@ -17,6 +17,7 @@ #include #include #include @@ -54571,7 +54201,7 @@ index 7a55fea..cc0ed4f 100644 #include "u_uac1.h" diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c -index 6130b75..3b60008 100644 +index 5728829..fefc6bf 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c @@ -771,7 +771,7 @@ static struct urb *request_single_step_set_feature_urb( @@ -54593,7 +54223,7 @@ index 6130b75..3b60008 100644 if (!retval && !wait_for_completion_timeout(&done, msecs_to_jiffies(2000))) { diff --git a/drivers/usb/host/hwa-hc.c b/drivers/usb/host/hwa-hc.c -index d0d8fad..668ef7b 100644 +index 1db0626..4948782 100644 --- a/drivers/usb/host/hwa-hc.c +++ b/drivers/usb/host/hwa-hc.c @@ -337,7 +337,10 @@ static int __hwahc_op_bwa_set(struct wusbhc *wusbhc, s8 stream_index, @@ -54755,7 +54385,7 @@ index 00e4a54..d676f85 100644 return; } diff --git a/drivers/usb/wusbcore/wa-hc.h b/drivers/usb/wusbcore/wa-hc.h -index f2a8d29..7bc3fe7 100644 +index edc7267..9f65ce2 100644 --- a/drivers/usb/wusbcore/wa-hc.h +++ b/drivers/usb/wusbcore/wa-hc.h @@ -240,7 +240,7 @@ struct wahc { @@ -54777,7 +54407,7 @@ index f2a8d29..7bc3fe7 100644 for (index = 0; index < WA_MAX_BUF_IN_URBS; ++index) usb_init_urb(&(wa->buf_in_urbs[index])); diff --git a/drivers/usb/wusbcore/wa-xfer.c b/drivers/usb/wusbcore/wa-xfer.c -index e279015..c2d0dae 100644 +index 69af4fd..da390d7 100644 --- a/drivers/usb/wusbcore/wa-xfer.c +++ b/drivers/usb/wusbcore/wa-xfer.c @@ -314,7 +314,7 @@ static void wa_xfer_completion(struct wa_xfer *xfer) @@ -54899,7 +54529,7 @@ index 1b0b233..6f34c2c 100644 err = -ENOSPC; } diff --git a/drivers/video/fbdev/aty/aty128fb.c b/drivers/video/fbdev/aty/aty128fb.c -index ff60701..814b973 100644 +index aedf2fb..47c9aca 100644 --- a/drivers/video/fbdev/aty/aty128fb.c +++ b/drivers/video/fbdev/aty/aty128fb.c @@ -149,7 +149,7 @@ enum { @@ -54980,7 +54610,7 @@ index 900aa4e..6d49418 100644 } EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup); diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c -index b5e85f6..290f8c7 100644 +index 0705d88..d9429bf 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -1301,7 +1301,7 @@ static int do_fscreeninfo_to_user(struct fb_fix_screeninfo *fix, @@ -55220,7 +54850,7 @@ index d513ed6..90b0de9 100644 pr_debug("released /dev/fb%d user=%d count=%d", diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c -index 77b890e..458e666 100644 +index 046d51d..be564da 100644 --- a/drivers/video/fbdev/udlfb.c +++ b/drivers/video/fbdev/udlfb.c @@ -623,11 +623,11 @@ static int dlfb_handle_damage(struct dlfb_data *dev, int x, int y, @@ -58310,7 +57940,7 @@ index fef20db..d28b1ab 100644 return -ENOMEM; return 0; diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c -index cc1cfae..41158ad 100644 +index eb14e05..5156de7 100644 --- a/fs/9p/vfs_addr.c +++ b/fs/9p/vfs_addr.c @@ -187,7 +187,7 @@ static int v9fs_vfs_writepage_locked(struct page *page) @@ -58323,7 +57953,7 @@ index cc1cfae..41158ad 100644 if (retval > 0) retval = 0; diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c -index 7fa4f7a..a7ebf8c 100644 +index 296482f..183ddc3 100644 --- a/fs/9p/vfs_inode.c +++ b/fs/9p/vfs_inode.c @@ -1312,7 +1312,7 @@ static void *v9fs_vfs_follow_link(struct dentry *dentry, struct nameidata *nd) @@ -58333,8 +57963,8 @@ index 7fa4f7a..a7ebf8c 100644 - char *s = nd_get_link(nd); + const char *s = nd_get_link(nd); - p9_debug(P9_DEBUG_VFS, " %s %s\n", - dentry->d_name.name, IS_ERR(s) ? "" : s); + p9_debug(P9_DEBUG_VFS, " %pd %s\n", + dentry, IS_ERR(s) ? "" : s); diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt index 370b24c..ff0be7b 100644 --- a/fs/Kconfig.binfmt @@ -58371,10 +58001,10 @@ index 2946712..f737435 100644 &data); if (!inode) { diff --git a/fs/aio.c b/fs/aio.c -index 7337500..2058af6 100644 +index 14b9315..365980f 100644 --- a/fs/aio.c +++ b/fs/aio.c -@@ -380,7 +380,7 @@ static int aio_setup_ring(struct kioctx *ctx) +@@ -388,7 +388,7 @@ static int aio_setup_ring(struct kioctx *ctx) size += sizeof(struct io_event) * nr_events; nr_pages = PFN_UP(size); @@ -58464,7 +58094,7 @@ index 2722387..56059b5 100644 { if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE) diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c -index ca0ba15..0fa3257 100644 +index 929dec0..84bd914 100644 --- a/fs/binfmt_aout.c +++ b/fs/binfmt_aout.c @@ -16,6 +16,7 @@ @@ -58506,7 +58136,7 @@ index ca0ba15..0fa3257 100644 if (ex.a_data + ex.a_bss > rlim) return -ENOMEM; -@@ -264,6 +271,27 @@ static int load_aout_binary(struct linux_binprm * bprm) +@@ -261,6 +268,27 @@ static int load_aout_binary(struct linux_binprm * bprm) install_exec_creds(bprm); @@ -58534,17 +58164,17 @@ index ca0ba15..0fa3257 100644 if (N_MAGIC(ex) == OMAGIC) { unsigned long text_addr, map_size; loff_t pos; -@@ -321,7 +349,7 @@ static int load_aout_binary(struct linux_binprm * bprm) - } +@@ -312,7 +340,7 @@ static int load_aout_binary(struct linux_binprm * bprm) + return error; error = vm_mmap(bprm->file, N_DATADDR(ex), ex.a_data, - PROT_READ | PROT_WRITE | PROT_EXEC, + PROT_READ | PROT_WRITE, MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE, fd_offset + ex.a_text); - if (error != N_DATADDR(ex)) { + if (error != N_DATADDR(ex)) diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c -index 3892c1a..4e27c04 100644 +index d8fc060..cbd44d5 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -34,6 +34,7 @@ @@ -59166,7 +58796,7 @@ index 3892c1a..4e27c04 100644 if (elf_read_implies_exec(loc->elf_ex, executable_stack)) current->personality |= READ_IMPLIES_EXEC; -@@ -815,6 +1253,20 @@ static int load_elf_binary(struct linux_binprm *bprm) +@@ -811,6 +1249,20 @@ static int load_elf_binary(struct linux_binprm *bprm) #else load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr); #endif @@ -59187,7 +58817,7 @@ index 3892c1a..4e27c04 100644 } error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt, -@@ -847,9 +1299,9 @@ static int load_elf_binary(struct linux_binprm *bprm) +@@ -842,9 +1294,9 @@ static int load_elf_binary(struct linux_binprm *bprm) * allowed task size. Note that p_filesz must always be * <= p_memsz so it is only necessary to check p_memsz. */ @@ -59198,13 +58828,12 @@ index 3892c1a..4e27c04 100644 + elf_ppnt->p_memsz > pax_task_size || + pax_task_size - elf_ppnt->p_memsz < k) { /* set_brk can never work. Avoid overflows. */ - send_sig(SIGKILL, current, 0); retval = -EINVAL; -@@ -888,17 +1340,45 @@ static int load_elf_binary(struct linux_binprm *bprm) + goto out_free_dentry; +@@ -880,16 +1332,43 @@ static int load_elf_binary(struct linux_binprm *bprm) + if (retval) goto out_free_dentry; - } if (likely(elf_bss != elf_brk) && unlikely(padzero(elf_bss))) { -- send_sig(SIGSEGV, current, 0); - retval = -EFAULT; /* Nobody gets to see this, but.. */ - goto out_free_dentry; + /* @@ -59236,10 +58865,8 @@ index 3892c1a..4e27c04 100644 + up_write(¤t->mm->mmap_sem); + if (retval == 0) + retval = set_brk(start + size, start + size + PAGE_SIZE); -+ if (retval < 0) { -+ send_sig(SIGKILL, current, 0); ++ if (retval < 0) + goto out_free_dentry; -+ } + } +#endif + @@ -59252,7 +58879,7 @@ index 3892c1a..4e27c04 100644 load_bias); if (!IS_ERR((void *)elf_entry)) { /* -@@ -1130,7 +1610,7 @@ static bool always_dump_vma(struct vm_area_struct *vma) +@@ -1115,7 +1594,7 @@ static bool always_dump_vma(struct vm_area_struct *vma) * Decide what to dump of a segment, part, all or none. */ static unsigned long vma_dump_size(struct vm_area_struct *vma, @@ -59261,7 +58888,7 @@ index 3892c1a..4e27c04 100644 { #define FILTER(type) (mm_flags & (1UL << MMF_DUMP_##type)) -@@ -1168,7 +1648,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma, +@@ -1153,7 +1632,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma, if (vma->vm_file == NULL) return 0; @@ -59270,7 +58897,7 @@ index 3892c1a..4e27c04 100644 goto whole; /* -@@ -1375,9 +1855,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm) +@@ -1360,9 +1839,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm) { elf_addr_t *auxv = (elf_addr_t *) mm->saved_auxv; int i = 0; @@ -59282,7 +58909,7 @@ index 3892c1a..4e27c04 100644 fill_note(note, "CORE", NT_AUXV, i * sizeof(elf_addr_t), auxv); } -@@ -1386,7 +1866,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata, +@@ -1371,7 +1850,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata, { mm_segment_t old_fs = get_fs(); set_fs(KERNEL_DS); @@ -59291,7 +58918,7 @@ index 3892c1a..4e27c04 100644 set_fs(old_fs); fill_note(note, "CORE", NT_SIGINFO, sizeof(*csigdata), csigdata); } -@@ -2010,14 +2490,14 @@ static void fill_extnum_info(struct elfhdr *elf, struct elf_shdr *shdr4extnum, +@@ -1995,14 +2474,14 @@ static void fill_extnum_info(struct elfhdr *elf, struct elf_shdr *shdr4extnum, } static size_t elf_core_vma_data_size(struct vm_area_struct *gate_vma, @@ -59308,7 +58935,7 @@ index 3892c1a..4e27c04 100644 return size; } -@@ -2108,7 +2588,7 @@ static int elf_core_dump(struct coredump_params *cprm) +@@ -2093,7 +2572,7 @@ static int elf_core_dump(struct coredump_params *cprm) dataoff = offset = roundup(offset, ELF_EXEC_PAGESIZE); @@ -59317,7 +58944,7 @@ index 3892c1a..4e27c04 100644 offset += elf_core_extra_data_size(); e_shoff = offset; -@@ -2136,7 +2616,7 @@ static int elf_core_dump(struct coredump_params *cprm) +@@ -2121,7 +2600,7 @@ static int elf_core_dump(struct coredump_params *cprm) phdr.p_offset = offset; phdr.p_vaddr = vma->vm_start; phdr.p_paddr = 0; @@ -59326,7 +58953,7 @@ index 3892c1a..4e27c04 100644 phdr.p_memsz = vma->vm_end - vma->vm_start; offset += phdr.p_filesz; phdr.p_flags = vma->vm_flags & VM_READ ? PF_R : 0; -@@ -2169,7 +2649,7 @@ static int elf_core_dump(struct coredump_params *cprm) +@@ -2154,7 +2633,7 @@ static int elf_core_dump(struct coredump_params *cprm) unsigned long addr; unsigned long end; @@ -59335,7 +58962,7 @@ index 3892c1a..4e27c04 100644 for (addr = vma->vm_start; addr < end; addr += PAGE_SIZE) { struct page *page; -@@ -2210,6 +2690,167 @@ out: +@@ -2195,6 +2674,167 @@ out: #endif /* CONFIG_ELF_CORE */ @@ -59504,10 +59131,10 @@ index 3892c1a..4e27c04 100644 { register_binfmt(&elf_format); diff --git a/fs/block_dev.c b/fs/block_dev.c -index 6d72746..536d1db 100644 +index 1d9c9f3..2905786 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c -@@ -701,7 +701,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole, +@@ -697,7 +697,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole, else if (bdev->bd_contains == bdev) return true; /* is a whole device which isn't held */ @@ -59517,10 +59144,10 @@ index 6d72746..536d1db 100644 else if (whole->bd_holder != NULL) return false; /* is a partition of a held device */ diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c -index 44ee5d2..8b23e53 100644 +index 150822e..75bb326 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c -@@ -1184,9 +1184,12 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, +@@ -1173,9 +1173,12 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, free_extent_buffer(buf); add_root_to_dirty_list(root); } else { @@ -59537,7 +59164,7 @@ index 44ee5d2..8b23e53 100644 WARN_ON(trans->transid != btrfs_header_generation(parent)); diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c -index a2e90f8..5135e5f 100644 +index 054577b..9b342cc 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c @@ -462,7 +462,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node, @@ -59590,10 +59217,10 @@ index f70119f..ab5894d 100644 spin_lock_init(&delayed_root->lock); init_waitqueue_head(&delayed_root->wait); diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c -index b765d41..5a8b0c3 100644 +index 4399f0c..a34d8b4 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c -@@ -3975,9 +3975,12 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg) +@@ -3953,9 +3953,12 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg) for (i = 0; i < num_types; i++) { struct btrfs_space_info *tmp; @@ -59606,7 +59233,7 @@ index b765d41..5a8b0c3 100644 info = NULL; rcu_read_lock(); list_for_each_entry_rcu(tmp, &root->fs_info->space_info, -@@ -3999,10 +4002,7 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg) +@@ -3977,10 +3980,7 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg) memcpy(dest, &space, sizeof(space)); dest++; space_args.total_spaces++; @@ -59618,10 +59245,10 @@ index b765d41..5a8b0c3 100644 up_read(&info->groups_sem); } diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c -index c4124de..d7613eb6 100644 +index cde9c03..ad4d4db 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c -@@ -270,7 +270,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans, +@@ -271,7 +271,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans, function, line, errstr); return; } @@ -59631,10 +59258,10 @@ index c4124de..d7613eb6 100644 wake_up(&root->fs_info->transaction_wait); wake_up(&root->fs_info->transaction_blocked_wait); diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c -index 12e5355..cdf30c6 100644 +index b2e7bb4..3719201 100644 --- a/fs/btrfs/sysfs.c +++ b/fs/btrfs/sysfs.c -@@ -475,7 +475,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add) +@@ -480,7 +480,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add) for (set = 0; set < FEAT_MAX; set++) { int i; struct attribute *attrs[2]; @@ -59643,11 +59270,37 @@ index 12e5355..cdf30c6 100644 .name = "features", .attrs = attrs, }; +diff --git a/fs/btrfs/tests/free-space-tests.c b/fs/btrfs/tests/free-space-tests.c +index 2299bfd..4098e72 100644 +--- a/fs/btrfs/tests/free-space-tests.c ++++ b/fs/btrfs/tests/free-space-tests.c +@@ -463,7 +463,9 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache) + * extent entry. + */ + use_bitmap_op = cache->free_space_ctl->op->use_bitmap; +- cache->free_space_ctl->op->use_bitmap = test_use_bitmap; ++ pax_open_kernel(); ++ *(void **)&cache->free_space_ctl->op->use_bitmap = test_use_bitmap; ++ pax_close_kernel(); + + /* + * Extent entry covering free space range [128Mb - 256Kb, 128Mb - 128Kb[ +@@ -870,7 +872,9 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache) + if (ret) + return ret; + +- cache->free_space_ctl->op->use_bitmap = use_bitmap_op; ++ pax_open_kernel(); ++ *(void **)&cache->free_space_ctl->op->use_bitmap = use_bitmap_op; ++ pax_close_kernel(); + __btrfs_remove_free_space_cache(cache->free_space_ctl); + + return 0; diff --git a/fs/btrfs/tree-log.h b/fs/btrfs/tree-log.h -index e2e798a..f454c18 100644 +index 154990c..d0cf699 100644 --- a/fs/btrfs/tree-log.h +++ b/fs/btrfs/tree-log.h -@@ -41,7 +41,7 @@ static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx) +@@ -43,7 +43,7 @@ static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx) static inline void btrfs_set_log_full_commit(struct btrfs_fs_info *fs_info, struct btrfs_trans_handle *trans) { @@ -59657,10 +59310,10 @@ index e2e798a..f454c18 100644 static inline int btrfs_need_log_full_commit(struct btrfs_fs_info *fs_info, diff --git a/fs/buffer.c b/fs/buffer.c -index 72daaa5..60ffeb9 100644 +index 20805db..2e8fc69 100644 --- a/fs/buffer.c +++ b/fs/buffer.c -@@ -3432,7 +3432,7 @@ void __init buffer_init(void) +@@ -3417,7 +3417,7 @@ void __init buffer_init(void) bh_cachep = kmem_cache_create("buffer_head", sizeof(struct buffer_head), 0, (SLAB_RECLAIM_ACCOUNT|SLAB_PANIC| @@ -59768,7 +59421,7 @@ index 8c52472..c4e3a69 100644 #else diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c -index dad7d95..07475af 100644 +index e12f189..ed17244 100644 --- a/fs/cachefiles/namei.c +++ b/fs/cachefiles/namei.c @@ -312,7 +312,7 @@ try_again: @@ -59810,21 +59463,8 @@ index eccd339..4c1d995 100644 if (x == 0 && y == 0 && z == 0) return 0; -diff --git a/fs/cachefiles/rdwr.c b/fs/cachefiles/rdwr.c -index 25e745b..220e604 100644 ---- a/fs/cachefiles/rdwr.c -+++ b/fs/cachefiles/rdwr.c -@@ -937,7 +937,7 @@ int cachefiles_write_page(struct fscache_storage *op, struct page *page) - old_fs = get_fs(); - set_fs(KERNEL_DS); - ret = file->f_op->write( -- file, (const void __user *) data, len, &pos); -+ file, (const void __force_user *) data, len, &pos); - set_fs(old_fs); - kunmap(page); - file_end_write(file); diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c -index c29d6ae..719b9bb 100644 +index 695e788..f4a9d4d 100644 --- a/fs/ceph/dir.c +++ b/fs/ceph/dir.c @@ -129,6 +129,8 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx, @@ -59859,19 +59499,6 @@ index c29d6ae..719b9bb 100644 int err; u32 ftype; struct ceph_mds_reply_info_parsed *rinfo; -diff --git a/fs/ceph/ioctl.c b/fs/ceph/ioctl.c -index a822a6e..4644256 100644 ---- a/fs/ceph/ioctl.c -+++ b/fs/ceph/ioctl.c -@@ -41,7 +41,7 @@ static long __validate_layout(struct ceph_mds_client *mdsc, - /* validate striping parameters */ - if ((l->object_size & ~PAGE_MASK) || - (l->stripe_unit & ~PAGE_MASK) || -- (l->stripe_unit != 0 && -+ ((unsigned)l->stripe_unit != 0 && - ((unsigned)l->object_size % (unsigned)l->stripe_unit))) - return -EINVAL; - diff --git a/fs/ceph/super.c b/fs/ceph/super.c index f6e1237..796ffd1 100644 --- a/fs/ceph/super.c @@ -59939,10 +59566,10 @@ index 44ec726..bcb06a3 100644 server->ops->print_stats(m, tcon); } diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c -index 889b984..fcb8431 100644 +index 9d7996e..35ad5cf4 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c -@@ -1092,7 +1092,7 @@ cifs_init_request_bufs(void) +@@ -1093,7 +1093,7 @@ cifs_init_request_bufs(void) */ cifs_req_cachep = kmem_cache_create("cifs_request", CIFSMaxBufSize + max_hdr_size, 0, @@ -59951,7 +59578,7 @@ index 889b984..fcb8431 100644 if (cifs_req_cachep == NULL) return -ENOMEM; -@@ -1119,7 +1119,7 @@ cifs_init_request_bufs(void) +@@ -1120,7 +1120,7 @@ cifs_init_request_bufs(void) efficient to alloc 1 per page off the slab compared to 17K (5page) alloc of large cifs buffers even when page debugging is on */ cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq", @@ -59960,7 +59587,7 @@ index 889b984..fcb8431 100644 NULL); if (cifs_sm_req_cachep == NULL) { mempool_destroy(cifs_req_poolp); -@@ -1204,8 +1204,8 @@ init_cifs(void) +@@ -1205,8 +1205,8 @@ init_cifs(void) atomic_set(&bufAllocCount, 0); atomic_set(&smBufAllocCount, 0); #ifdef CONFIG_CIFS_STATS2 @@ -59972,10 +59599,10 @@ index 889b984..fcb8431 100644 atomic_set(&midCount, 0); diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h -index 25b8392..01e46dc 100644 +index 02a33e5..3a28b5a 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h -@@ -821,35 +821,35 @@ struct cifs_tcon { +@@ -823,35 +823,35 @@ struct cifs_tcon { __u16 Flags; /* optional support bits */ enum statusEnum tidStatus; #ifdef CONFIG_CIFS_STATS @@ -60035,7 +59662,7 @@ index 25b8392..01e46dc 100644 } smb2_stats; #endif /* CONFIG_CIFS_SMB2 */ } stats; -@@ -1190,7 +1190,7 @@ convert_delimiter(char *path, char delim) +@@ -1192,7 +1192,7 @@ convert_delimiter(char *path, char delim) } #ifdef CONFIG_CIFS_STATS @@ -60044,7 +59671,7 @@ index 25b8392..01e46dc 100644 static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon, unsigned int bytes) -@@ -1557,8 +1557,8 @@ GLOBAL_EXTERN atomic_t tconInfoReconnectCount; +@@ -1559,8 +1559,8 @@ GLOBAL_EXTERN atomic_t tconInfoReconnectCount; /* Various Debug counters */ GLOBAL_EXTERN atomic_t bufAllocCount; /* current number allocated */ #ifdef CONFIG_CIFS_STATS2 @@ -60056,7 +59683,7 @@ index 25b8392..01e46dc 100644 GLOBAL_EXTERN atomic_t smBufAllocCount; GLOBAL_EXTERN atomic_t midCount; diff --git a/fs/cifs/file.c b/fs/cifs/file.c -index 5f29354..359bc0d 100644 +index 3e4d00a..38a122d 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -2056,10 +2056,14 @@ static int cifs_writepages(struct address_space *mapping, @@ -60100,10 +59727,10 @@ index b7415d5..3984ec0 100644 } diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c -index 52131d8..fd79e97 100644 +index d297903..1cb7516 100644 --- a/fs/cifs/smb1ops.c +++ b/fs/cifs/smb1ops.c -@@ -626,27 +626,27 @@ static void +@@ -622,27 +622,27 @@ static void cifs_clear_stats(struct cifs_tcon *tcon) { #ifdef CONFIG_CIFS_STATS @@ -60152,7 +59779,7 @@ index 52131d8..fd79e97 100644 #endif } -@@ -655,36 +655,36 @@ cifs_print_stats(struct seq_file *m, struct cifs_tcon *tcon) +@@ -651,36 +651,36 @@ cifs_print_stats(struct seq_file *m, struct cifs_tcon *tcon) { #ifdef CONFIG_CIFS_STATS seq_printf(m, " Oplocks breaks: %d", @@ -60209,10 +59836,10 @@ index 52131d8..fd79e97 100644 } diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c -index f522193..586121b 100644 +index c5f521b..1a40865 100644 --- a/fs/cifs/smb2ops.c +++ b/fs/cifs/smb2ops.c -@@ -414,8 +414,8 @@ smb2_clear_stats(struct cifs_tcon *tcon) +@@ -417,8 +417,8 @@ smb2_clear_stats(struct cifs_tcon *tcon) #ifdef CONFIG_CIFS_STATS int i; for (i = 0; i < NUMBER_OF_SMB2_COMMANDS; i++) { @@ -60223,7 +59850,7 @@ index f522193..586121b 100644 } #endif } -@@ -455,65 +455,65 @@ static void +@@ -458,65 +458,65 @@ static void smb2_print_stats(struct seq_file *m, struct cifs_tcon *tcon) { #ifdef CONFIG_CIFS_STATS @@ -60330,10 +59957,10 @@ index f522193..586121b 100644 } diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c -index 74b3a66..0c709f3 100644 +index 8f1672b..af339c07 100644 --- a/fs/cifs/smb2pdu.c +++ b/fs/cifs/smb2pdu.c -@@ -2143,8 +2143,7 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon, +@@ -2145,8 +2145,7 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon, default: cifs_dbg(VFS, "info level %u isn't supported\n", srch_inf->info_level); @@ -60344,7 +59971,7 @@ index 74b3a66..0c709f3 100644 req->FileIndex = cpu_to_le32(index); diff --git a/fs/coda/cache.c b/fs/coda/cache.c -index 278f8fd..e69c52d 100644 +index 46ee6f2..89a9e7f 100644 --- a/fs/coda/cache.c +++ b/fs/coda/cache.c @@ -24,7 +24,7 @@ @@ -60392,7 +60019,7 @@ index 278f8fd..e69c52d 100644 return hit; diff --git a/fs/compat.c b/fs/compat.c -index 66d3d3c..9c10175 100644 +index b13df99..6f6f4a3 100644 --- a/fs/compat.c +++ b/fs/compat.c @@ -54,7 +54,7 @@ @@ -60422,7 +60049,7 @@ index 66d3d3c..9c10175 100644 goto out; if (nr_segs > fast_segs) { ret = -ENOMEM; -@@ -850,6 +850,7 @@ struct compat_old_linux_dirent { +@@ -844,6 +844,7 @@ struct compat_old_linux_dirent { struct compat_readdir_callback { struct dir_context ctx; struct compat_old_linux_dirent __user *dirent; @@ -60430,7 +60057,7 @@ index 66d3d3c..9c10175 100644 int result; }; -@@ -867,6 +868,10 @@ static int compat_fillonedir(void *__buf, const char *name, int namlen, +@@ -861,6 +862,10 @@ static int compat_fillonedir(void *__buf, const char *name, int namlen, buf->result = -EOVERFLOW; return -EOVERFLOW; } @@ -60441,7 +60068,7 @@ index 66d3d3c..9c10175 100644 buf->result++; dirent = buf->dirent; if (!access_ok(VERIFY_WRITE, dirent, -@@ -898,6 +903,7 @@ COMPAT_SYSCALL_DEFINE3(old_readdir, unsigned int, fd, +@@ -892,6 +897,7 @@ COMPAT_SYSCALL_DEFINE3(old_readdir, unsigned int, fd, if (!f.file) return -EBADF; @@ -60449,7 +60076,7 @@ index 66d3d3c..9c10175 100644 error = iterate_dir(f.file, &buf.ctx); if (buf.result) error = buf.result; -@@ -917,6 +923,7 @@ struct compat_getdents_callback { +@@ -911,6 +917,7 @@ struct compat_getdents_callback { struct dir_context ctx; struct compat_linux_dirent __user *current_dir; struct compat_linux_dirent __user *previous; @@ -60457,7 +60084,7 @@ index 66d3d3c..9c10175 100644 int count; int error; }; -@@ -938,6 +945,10 @@ static int compat_filldir(void *__buf, const char *name, int namlen, +@@ -932,6 +939,10 @@ static int compat_filldir(void *__buf, const char *name, int namlen, buf->error = -EOVERFLOW; return -EOVERFLOW; } @@ -60468,7 +60095,7 @@ index 66d3d3c..9c10175 100644 dirent = buf->previous; if (dirent) { if (__put_user(offset, &dirent->d_off)) -@@ -983,6 +994,7 @@ COMPAT_SYSCALL_DEFINE3(getdents, unsigned int, fd, +@@ -977,6 +988,7 @@ COMPAT_SYSCALL_DEFINE3(getdents, unsigned int, fd, if (!f.file) return -EBADF; @@ -60476,7 +60103,7 @@ index 66d3d3c..9c10175 100644 error = iterate_dir(f.file, &buf.ctx); if (error >= 0) error = buf.error; -@@ -1003,6 +1015,7 @@ struct compat_getdents_callback64 { +@@ -997,6 +1009,7 @@ struct compat_getdents_callback64 { struct dir_context ctx; struct linux_dirent64 __user *current_dir; struct linux_dirent64 __user *previous; @@ -60484,7 +60111,7 @@ index 66d3d3c..9c10175 100644 int count; int error; }; -@@ -1019,6 +1032,10 @@ static int compat_filldir64(void * __buf, const char * name, int namlen, loff_t +@@ -1013,6 +1026,10 @@ static int compat_filldir64(void * __buf, const char * name, int namlen, loff_t buf->error = -EINVAL; /* only used if we fail.. */ if (reclen > buf->count) return -EINVAL; @@ -60495,7 +60122,7 @@ index 66d3d3c..9c10175 100644 dirent = buf->previous; if (dirent) { -@@ -1068,6 +1085,7 @@ COMPAT_SYSCALL_DEFINE3(getdents64, unsigned int, fd, +@@ -1062,6 +1079,7 @@ COMPAT_SYSCALL_DEFINE3(getdents64, unsigned int, fd, if (!f.file) return -EBADF; @@ -60594,10 +60221,10 @@ index 668dcab..daebcd6 100644 /* * We'll have a dentry and an inode for diff --git a/fs/coredump.c b/fs/coredump.c -index a93f7e6..d58bcbe 100644 +index b5c86ff..0dac262 100644 --- a/fs/coredump.c +++ b/fs/coredump.c -@@ -442,8 +442,8 @@ static void wait_for_dump_helpers(struct file *file) +@@ -450,8 +450,8 @@ static void wait_for_dump_helpers(struct file *file) struct pipe_inode_info *pipe = file->private_data; pipe_lock(pipe); @@ -60608,7 +60235,7 @@ index a93f7e6..d58bcbe 100644 wake_up_interruptible_sync(&pipe->wait); kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); pipe_unlock(pipe); -@@ -452,11 +452,11 @@ static void wait_for_dump_helpers(struct file *file) +@@ -460,11 +460,11 @@ static void wait_for_dump_helpers(struct file *file) * We actually want wait_event_freezable() but then we need * to clear TIF_SIGPENDING and improve dump_interrupted(). */ @@ -60623,7 +60250,7 @@ index a93f7e6..d58bcbe 100644 pipe_unlock(pipe); } -@@ -503,7 +503,9 @@ void do_coredump(const siginfo_t *siginfo) +@@ -511,7 +511,9 @@ void do_coredump(const siginfo_t *siginfo) struct files_struct *displaced; bool need_nonrelative = false; bool core_dumped = false; @@ -60634,7 +60261,7 @@ index a93f7e6..d58bcbe 100644 struct coredump_params cprm = { .siginfo = siginfo, .regs = signal_pt_regs(), -@@ -516,12 +518,17 @@ void do_coredump(const siginfo_t *siginfo) +@@ -524,12 +526,17 @@ void do_coredump(const siginfo_t *siginfo) .mm_flags = mm->flags, }; @@ -60654,7 +60281,7 @@ index a93f7e6..d58bcbe 100644 goto fail; cred = prepare_creds(); -@@ -540,7 +547,7 @@ void do_coredump(const siginfo_t *siginfo) +@@ -548,7 +555,7 @@ void do_coredump(const siginfo_t *siginfo) need_nonrelative = true; } @@ -60663,7 +60290,7 @@ index a93f7e6..d58bcbe 100644 if (retval < 0) goto fail_creds; -@@ -583,7 +590,7 @@ void do_coredump(const siginfo_t *siginfo) +@@ -591,7 +598,7 @@ void do_coredump(const siginfo_t *siginfo) } cprm.limit = RLIM_INFINITY; @@ -60672,7 +60299,7 @@ index a93f7e6..d58bcbe 100644 if (core_pipe_limit && (core_pipe_limit < dump_count)) { printk(KERN_WARNING "Pid %d(%s) over core_pipe_limit\n", task_tgid_vnr(current), current->comm); -@@ -615,6 +622,8 @@ void do_coredump(const siginfo_t *siginfo) +@@ -623,6 +630,8 @@ void do_coredump(const siginfo_t *siginfo) } else { struct inode *inode; @@ -60681,7 +60308,7 @@ index a93f7e6..d58bcbe 100644 if (cprm.limit < binfmt->min_coredump) goto fail_unlock; -@@ -673,7 +682,7 @@ close_fail: +@@ -681,7 +690,7 @@ close_fail: filp_close(cprm.file, NULL); fail_dropcount: if (ispipe) @@ -60690,7 +60317,7 @@ index a93f7e6..d58bcbe 100644 fail_unlock: kfree(cn.corename); coredump_finish(mm, core_dumped); -@@ -694,6 +703,8 @@ int dump_emit(struct coredump_params *cprm, const void *addr, int nr) +@@ -702,6 +711,8 @@ int dump_emit(struct coredump_params *cprm, const void *addr, int nr) struct file *file = cprm->file; loff_t pos = file->f_pos; ssize_t n; @@ -60700,10 +60327,10 @@ index a93f7e6..d58bcbe 100644 return 0; while (nr) { diff --git a/fs/dcache.c b/fs/dcache.c -index 34b40be8..2003532 100644 +index 03dca3c..f66c622 100644 --- a/fs/dcache.c +++ b/fs/dcache.c -@@ -478,7 +478,7 @@ static void __dentry_kill(struct dentry *dentry) +@@ -508,7 +508,7 @@ static void __dentry_kill(struct dentry *dentry) * dentry_iput drops the locks, at which point nobody (except * transient RCU lookups) can reach this dentry. */ @@ -60712,7 +60339,7 @@ index 34b40be8..2003532 100644 this_cpu_dec(nr_dentry); if (dentry->d_op && dentry->d_op->d_release) dentry->d_op->d_release(dentry); -@@ -531,7 +531,7 @@ static inline struct dentry *lock_parent(struct dentry *dentry) +@@ -561,7 +561,7 @@ static inline struct dentry *lock_parent(struct dentry *dentry) struct dentry *parent = dentry->d_parent; if (IS_ROOT(dentry)) return NULL; @@ -60721,7 +60348,7 @@ index 34b40be8..2003532 100644 return NULL; if (likely(spin_trylock(&parent->d_lock))) return parent; -@@ -608,7 +608,7 @@ repeat: +@@ -638,7 +638,7 @@ repeat: dentry->d_flags |= DCACHE_REFERENCED; dentry_lru_add(dentry); @@ -60730,16 +60357,7 @@ index 34b40be8..2003532 100644 spin_unlock(&dentry->d_lock); return; -@@ -663,7 +663,7 @@ int d_invalidate(struct dentry * dentry) - * We also need to leave mountpoints alone, - * directory or not. - */ -- if (dentry->d_lockref.count > 1 && dentry->d_inode) { -+ if (__lockref_read(&dentry->d_lockref) > 1 && dentry->d_inode) { - if (S_ISDIR(dentry->d_inode->i_mode) || d_mountpoint(dentry)) { - spin_unlock(&dentry->d_lock); - return -EBUSY; -@@ -679,7 +679,7 @@ EXPORT_SYMBOL(d_invalidate); +@@ -653,7 +653,7 @@ EXPORT_SYMBOL(dput); /* This must be called with d_lock held */ static inline void __dget_dlock(struct dentry *dentry) { @@ -60748,7 +60366,7 @@ index 34b40be8..2003532 100644 } static inline void __dget(struct dentry *dentry) -@@ -720,8 +720,8 @@ repeat: +@@ -694,8 +694,8 @@ repeat: goto repeat; } rcu_read_unlock(); @@ -60759,16 +60377,19 @@ index 34b40be8..2003532 100644 spin_unlock(&ret->d_lock); return ret; } -@@ -798,7 +798,7 @@ restart: +@@ -773,9 +773,9 @@ restart: spin_lock(&inode->i_lock); - hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) { + hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) { spin_lock(&dentry->d_lock); - if (!dentry->d_lockref.count) { + if (!__lockref_read(&dentry->d_lockref)) { - /* - * inform the fs via d_prune that this dentry - * is about to be unhashed and destroyed. -@@ -841,7 +841,7 @@ static void shrink_dentry_list(struct list_head *list) + struct dentry *parent = lock_parent(dentry); +- if (likely(!dentry->d_lockref.count)) { ++ if (likely(!__lockref_read(&dentry->d_lockref))) { + __dentry_kill(dentry); + dput(parent); + goto restart; +@@ -810,7 +810,7 @@ static void shrink_dentry_list(struct list_head *list) * We found an inuse dentry which was not removed from * the LRU because of laziness during lookup. Do not free it. */ @@ -60777,7 +60398,7 @@ index 34b40be8..2003532 100644 spin_unlock(&dentry->d_lock); if (parent) spin_unlock(&parent->d_lock); -@@ -879,8 +879,8 @@ static void shrink_dentry_list(struct list_head *list) +@@ -848,8 +848,8 @@ static void shrink_dentry_list(struct list_head *list) dentry = parent; while (dentry && !lockref_put_or_lock(&dentry->d_lockref)) { parent = lock_parent(dentry); @@ -60788,7 +60409,7 @@ index 34b40be8..2003532 100644 spin_unlock(&dentry->d_lock); if (parent) spin_unlock(&parent->d_lock); -@@ -920,7 +920,7 @@ dentry_lru_isolate(struct list_head *item, spinlock_t *lru_lock, void *arg) +@@ -889,7 +889,7 @@ dentry_lru_isolate(struct list_head *item, spinlock_t *lru_lock, void *arg) * counts, just remove them from the LRU. Otherwise give them * another pass through the LRU. */ @@ -60797,15 +60418,7 @@ index 34b40be8..2003532 100644 d_lru_isolate(dentry); spin_unlock(&dentry->d_lock); return LRU_REMOVED; -@@ -1149,6 +1149,7 @@ out_unlock: - return; - - rename_retry: -+ done_seqretry(&rename_lock, seq); - if (!retry) - return; - seq = 1; -@@ -1255,7 +1256,7 @@ static enum d_walk_ret select_collect(void *_data, struct dentry *dentry) +@@ -1225,7 +1225,7 @@ static enum d_walk_ret select_collect(void *_data, struct dentry *dentry) } else { if (dentry->d_flags & DCACHE_LRU_LIST) d_lru_del(dentry); @@ -60814,7 +60427,7 @@ index 34b40be8..2003532 100644 d_shrink_add(dentry, &data->dispose); data->found++; } -@@ -1303,7 +1304,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry) +@@ -1273,7 +1273,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry) return D_WALK_CONTINUE; /* root with refcount 1 is fine */ @@ -60823,7 +60436,7 @@ index 34b40be8..2003532 100644 return D_WALK_CONTINUE; printk(KERN_ERR "BUG: Dentry %p{i=%lx,n=%pd} " -@@ -1312,7 +1313,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry) +@@ -1282,7 +1282,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry) dentry->d_inode ? dentry->d_inode->i_ino : 0UL, dentry, @@ -60832,16 +60445,16 @@ index 34b40be8..2003532 100644 dentry->d_sb->s_type->name, dentry->d_sb->s_id); WARN_ON(1); -@@ -1438,7 +1439,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name) - */ +@@ -1423,7 +1423,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name) dentry->d_iname[DNAME_INLINE_LEN-1] = 0; if (name->len > DNAME_INLINE_LEN-1) { -- dname = kmalloc(name->len + 1, GFP_KERNEL); -+ dname = kmalloc(round_up(name->len + 1, sizeof(unsigned long)), GFP_KERNEL); - if (!dname) { + size_t size = offsetof(struct external_name, name[1]); +- struct external_name *p = kmalloc(size + name->len, GFP_KERNEL); ++ struct external_name *p = kmalloc(round_up(size + name->len, sizeof(unsigned long)), GFP_KERNEL); + if (!p) { kmem_cache_free(dentry_cache, dentry); return NULL; -@@ -1456,7 +1457,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name) +@@ -1443,7 +1443,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name) smp_wmb(); dentry->d_name.name = dname; @@ -60850,7 +60463,7 @@ index 34b40be8..2003532 100644 dentry->d_flags = 0; spin_lock_init(&dentry->d_lock); seqcount_init(&dentry->d_seq); -@@ -2196,7 +2197,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name) +@@ -2183,7 +2183,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name) goto next; } @@ -60859,7 +60472,7 @@ index 34b40be8..2003532 100644 found = dentry; spin_unlock(&dentry->d_lock); break; -@@ -2295,7 +2296,7 @@ again: +@@ -2282,7 +2282,7 @@ again: spin_lock(&dentry->d_lock); inode = dentry->d_inode; isdir = S_ISDIR(inode->i_mode); @@ -60868,7 +60481,7 @@ index 34b40be8..2003532 100644 if (!spin_trylock(&inode->i_lock)) { spin_unlock(&dentry->d_lock); cpu_relax(); -@@ -3307,7 +3308,7 @@ static enum d_walk_ret d_genocide_kill(void *data, struct dentry *dentry) +@@ -3308,7 +3308,7 @@ static enum d_walk_ret d_genocide_kill(void *data, struct dentry *dentry) if (!(dentry->d_flags & DCACHE_GENOCIDE)) { dentry->d_flags |= DCACHE_GENOCIDE; @@ -60877,7 +60490,7 @@ index 34b40be8..2003532 100644 } } return D_WALK_CONTINUE; -@@ -3423,7 +3424,8 @@ void __init vfs_caches_init(unsigned long mempages) +@@ -3424,7 +3424,8 @@ void __init vfs_caches_init(unsigned long mempages) mempages -= reserve; names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0, @@ -60888,7 +60501,7 @@ index 34b40be8..2003532 100644 dcache_init(); inode_init(); diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c -index 1e3b99d..6512101 100644 +index 05f2960..b012481 100644 --- a/fs/debugfs/inode.c +++ b/fs/debugfs/inode.c @@ -416,7 +416,11 @@ EXPORT_SYMBOL_GPL(debugfs_create_file); @@ -60904,10 +60517,10 @@ index 1e3b99d..6512101 100644 } EXPORT_SYMBOL_GPL(debugfs_create_dir); diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c -index 57ee4c5..ecb13b0 100644 +index 1686dc2..9611c50 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c -@@ -673,7 +673,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz) +@@ -664,7 +664,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz) old_fs = get_fs(); set_fs(get_ds()); rc = lower_dentry->d_inode->i_op->readlink(lower_dentry, @@ -60930,7 +60543,7 @@ index e4141f2..d8263e8 100644 i += packet_length_size; if (copy_to_user(&buf[i], msg_ctx->msg, msg_ctx->msg_size)) diff --git a/fs/exec.c b/fs/exec.c -index a2b42a9..1e924b3 100644 +index 7302b75..7d61d19 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -56,8 +56,20 @@ @@ -61256,7 +60869,7 @@ index a2b42a9..1e924b3 100644 bprm->unsafe |= LSM_UNSAFE_SHARE; else p->fs->in_exec = 1; -@@ -1419,6 +1498,31 @@ static int exec_binprm(struct linux_binprm *bprm) +@@ -1424,6 +1503,31 @@ static int exec_binprm(struct linux_binprm *bprm) return ret; } @@ -61288,7 +60901,7 @@ index a2b42a9..1e924b3 100644 /* * sys_execve() executes a new program. */ -@@ -1426,6 +1530,11 @@ static int do_execve_common(struct filename *filename, +@@ -1431,6 +1535,11 @@ static int do_execve_common(struct filename *filename, struct user_arg_ptr argv, struct user_arg_ptr envp) { @@ -61300,7 +60913,7 @@ index a2b42a9..1e924b3 100644 struct linux_binprm *bprm; struct file *file; struct files_struct *displaced; -@@ -1434,6 +1543,8 @@ static int do_execve_common(struct filename *filename, +@@ -1439,6 +1548,8 @@ static int do_execve_common(struct filename *filename, if (IS_ERR(filename)) return PTR_ERR(filename); @@ -61309,7 +60922,7 @@ index a2b42a9..1e924b3 100644 /* * We move the actual failure in case of RLIMIT_NPROC excess from * set*uid() to execve() because too many poorly written programs -@@ -1471,11 +1582,21 @@ static int do_execve_common(struct filename *filename, +@@ -1476,11 +1587,21 @@ static int do_execve_common(struct filename *filename, if (IS_ERR(file)) goto out_unmark; @@ -61331,7 +60944,7 @@ index a2b42a9..1e924b3 100644 retval = bprm_mm_init(bprm); if (retval) goto out_unmark; -@@ -1492,24 +1613,70 @@ static int do_execve_common(struct filename *filename, +@@ -1497,24 +1618,70 @@ static int do_execve_common(struct filename *filename, if (retval < 0) goto out; @@ -61406,7 +61019,7 @@ index a2b42a9..1e924b3 100644 current->fs->in_exec = 0; current->in_execve = 0; acct_update_integrals(current); -@@ -1520,6 +1687,14 @@ static int do_execve_common(struct filename *filename, +@@ -1525,6 +1692,14 @@ static int do_execve_common(struct filename *filename, put_files_struct(displaced); return retval; @@ -61421,7 +61034,7 @@ index a2b42a9..1e924b3 100644 out: if (bprm->mm) { acct_arg_size(bprm, 0); -@@ -1611,3 +1786,312 @@ COMPAT_SYSCALL_DEFINE3(execve, const char __user *, filename, +@@ -1616,3 +1791,312 @@ COMPAT_SYSCALL_DEFINE3(execve, const char __user *, filename, return compat_do_execve(getname(filename), argv, envp); } #endif @@ -61751,6 +61364,33 @@ index 9f9992b..8b59411 100644 return 0; } return 1; +diff --git a/fs/ext2/super.c b/fs/ext2/super.c +index 170dc41..62f6b18 100644 +--- a/fs/ext2/super.c ++++ b/fs/ext2/super.c +@@ -264,10 +264,8 @@ static int ext2_show_options(struct seq_file *seq, struct dentry *root) + #ifdef CONFIG_EXT2_FS_XATTR + if (test_opt(sb, XATTR_USER)) + seq_puts(seq, ",user_xattr"); +- if (!test_opt(sb, XATTR_USER) && +- (def_mount_opts & EXT2_DEFM_XATTR_USER)) { ++ if (!test_opt(sb, XATTR_USER)) + seq_puts(seq, ",nouser_xattr"); +- } + #endif + + #ifdef CONFIG_EXT2_FS_POSIX_ACL +@@ -841,8 +839,8 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent) + if (def_mount_opts & EXT2_DEFM_UID16) + set_opt(sbi->s_mount_opt, NO_UID32); + #ifdef CONFIG_EXT2_FS_XATTR +- if (def_mount_opts & EXT2_DEFM_XATTR_USER) +- set_opt(sbi->s_mount_opt, XATTR_USER); ++ /* always enable user xattrs */ ++ set_opt(sbi->s_mount_opt, XATTR_USER); + #endif + #ifdef CONFIG_EXT2_FS_POSIX_ACL + if (def_mount_opts & EXT2_DEFM_ACL) diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c index 9142614..97484fa 100644 --- a/fs/ext2/xattr.c @@ -61793,6 +61433,33 @@ index 158b5d4..2432610 100644 return 0; } return 1; +diff --git a/fs/ext3/super.c b/fs/ext3/super.c +index eb742d0..c19f705 100644 +--- a/fs/ext3/super.c ++++ b/fs/ext3/super.c +@@ -649,10 +649,8 @@ static int ext3_show_options(struct seq_file *seq, struct dentry *root) + #ifdef CONFIG_EXT3_FS_XATTR + if (test_opt(sb, XATTR_USER)) + seq_puts(seq, ",user_xattr"); +- if (!test_opt(sb, XATTR_USER) && +- (def_mount_opts & EXT3_DEFM_XATTR_USER)) { ++ if (!test_opt(sb, XATTR_USER)) + seq_puts(seq, ",nouser_xattr"); +- } + #endif + #ifdef CONFIG_EXT3_FS_POSIX_ACL + if (test_opt(sb, POSIX_ACL)) +@@ -1749,8 +1747,8 @@ static int ext3_fill_super (struct super_block *sb, void *data, int silent) + if (def_mount_opts & EXT3_DEFM_UID16) + set_opt(sbi->s_mount_opt, NO_UID32); + #ifdef CONFIG_EXT3_FS_XATTR +- if (def_mount_opts & EXT3_DEFM_XATTR_USER) +- set_opt(sbi->s_mount_opt, XATTR_USER); ++ /* always enable user xattrs */ ++ set_opt(sbi->s_mount_opt, XATTR_USER); + #endif + #ifdef CONFIG_EXT3_FS_POSIX_ACL + if (def_mount_opts & EXT3_DEFM_ACL) diff --git a/fs/ext3/xattr.c b/fs/ext3/xattr.c index c6874be..f8a6ae8 100644 --- a/fs/ext3/xattr.c @@ -61819,7 +61486,7 @@ index c6874be..f8a6ae8 100644 static int diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c -index e069155..b825b08 100644 +index 83a6f49..d4e4d03 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c @@ -557,8 +557,8 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi, @@ -61834,10 +61501,10 @@ index e069155..b825b08 100644 if (free_clusters >= (nclusters + dirty_clusters + resv_clusters)) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h -index 96ac9d3..1c30e7e6 100644 +index c55a1fa..9904ebb 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h -@@ -1275,19 +1275,19 @@ struct ext4_sb_info { +@@ -1279,19 +1279,19 @@ struct ext4_sb_info { unsigned long s_mb_last_start; /* stats for buddy allocator */ @@ -61868,7 +61535,7 @@ index 96ac9d3..1c30e7e6 100644 /* locality groups */ diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c -index 8b0f9ef..cb9f620 100644 +index dbfe15c..9a6ee8d 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -1901,7 +1901,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac, @@ -61925,7 +61592,7 @@ index 8b0f9ef..cb9f620 100644 } free_percpu(sbi->s_locality_groups); -@@ -3192,16 +3192,16 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac) +@@ -3191,16 +3191,16 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac) struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb); if (sbi->s_mb_stats && ac->ac_g_ex.fe_len > 1) { @@ -61948,7 +61615,7 @@ index 8b0f9ef..cb9f620 100644 } if (ac->ac_op == EXT4_MB_HISTORY_ALLOC) -@@ -3628,7 +3628,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac) +@@ -3627,7 +3627,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac) trace_ext4_mb_new_inode_pa(ac, pa); ext4_mb_use_inode_pa(ac, pa); @@ -61957,7 +61624,7 @@ index 8b0f9ef..cb9f620 100644 ei = EXT4_I(ac->ac_inode); grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group); -@@ -3688,7 +3688,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac) +@@ -3687,7 +3687,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac) trace_ext4_mb_new_group_pa(ac, pa); ext4_mb_use_group_pa(ac, pa); @@ -61966,7 +61633,7 @@ index 8b0f9ef..cb9f620 100644 grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group); lg = ac->ac_lg; -@@ -3777,7 +3777,7 @@ ext4_mb_release_inode_pa(struct ext4_buddy *e4b, struct buffer_head *bitmap_bh, +@@ -3776,7 +3776,7 @@ ext4_mb_release_inode_pa(struct ext4_buddy *e4b, struct buffer_head *bitmap_bh, * from the bitmap and continue. */ } @@ -61975,7 +61642,7 @@ index 8b0f9ef..cb9f620 100644 return err; } -@@ -3795,7 +3795,7 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b, +@@ -3794,7 +3794,7 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b, ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit); BUG_ON(group != e4b->bd_group && pa->pa_len != 0); mb_free_blocks(pa->pa_inode, e4b, bit, pa->pa_len); @@ -61998,10 +61665,10 @@ index 8313ca3..8a37d08 100644 "MMP failure info: last update time: %llu, last update " "node: %s, last update device: %s\n", diff --git a/fs/ext4/super.c b/fs/ext4/super.c -index b1f0ac7..77e9a05 100644 +index 2c9e686..6a40edc 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c -@@ -1274,7 +1274,7 @@ static ext4_fsblk_t get_sb_block(void **data) +@@ -1254,7 +1254,7 @@ static ext4_fsblk_t get_sb_block(void **data) } #define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3)) @@ -62010,7 +61677,7 @@ index b1f0ac7..77e9a05 100644 "Contact linux-ext4@vger.kernel.org if you think we should keep it.\n"; #ifdef CONFIG_QUOTA -@@ -2454,7 +2454,7 @@ struct ext4_attr { +@@ -2434,7 +2434,7 @@ struct ext4_attr { int offset; int deprecated_val; } u; @@ -62020,7 +61687,7 @@ index b1f0ac7..77e9a05 100644 static int parse_strtoull(const char *buf, unsigned long long max, unsigned long long *value) diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c -index 2d1e5803..1b082d415 100644 +index 1e09fc7..0400dd4 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c @@ -399,7 +399,7 @@ static int @@ -62045,21 +61712,20 @@ index 2d1e5803..1b082d415 100644 static int diff --git a/fs/fcntl.c b/fs/fcntl.c -index 22d1c3d..600cf7e 100644 +index 99d440a..eb979d1 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c -@@ -107,6 +107,11 @@ int __f_setown(struct file *filp, struct pid *pid, enum pid_type type, - if (err) - return err; - +@@ -102,6 +102,10 @@ void __f_setown(struct file *filp, struct pid *pid, enum pid_type type, + int force) + { + security_file_set_fowner(filp); + if (gr_handle_chroot_fowner(pid, type)) -+ return -ENOENT; ++ return; + if (gr_check_protected_task_fowner(pid, type)) -+ return -EACCES; -+ ++ return; f_modown(filp, pid, type, force); - return 0; } + EXPORT_SYMBOL(__f_setown); diff --git a/fs/fhandle.c b/fs/fhandle.c index 999ff5c..ac037c9 100644 --- a/fs/fhandle.c @@ -62092,7 +61758,7 @@ index 999ff5c..ac037c9 100644 goto out_err; } diff --git a/fs/file.c b/fs/file.c -index 66923fe..2849783 100644 +index ab3eb6a..8de2392 100644 --- a/fs/file.c +++ b/fs/file.c @@ -16,6 +16,7 @@ @@ -62121,7 +61787,7 @@ index 66923fe..2849783 100644 { struct fdtable *fdt; -@@ -799,6 +800,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags) +@@ -800,6 +801,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags) if (!file) return __close_fd(files, fd); @@ -62129,7 +61795,7 @@ index 66923fe..2849783 100644 if (fd >= rlimit(RLIMIT_NOFILE)) return -EBADF; -@@ -825,6 +827,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags) +@@ -826,6 +828,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags) if (unlikely(oldfd == newfd)) return -EINVAL; @@ -62137,7 +61803,7 @@ index 66923fe..2849783 100644 if (newfd >= rlimit(RLIMIT_NOFILE)) return -EBADF; -@@ -880,6 +883,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes) +@@ -881,6 +884,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes) int f_dupfd(unsigned int from, struct file *file, unsigned flags) { int err; @@ -63678,10 +63344,10 @@ index ca88731..8e9c55d 100644 } diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c -index de1d84a..fd69c0c 100644 +index dbab798..fefa22b 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c -@@ -1479,7 +1479,7 @@ static char *read_link(struct dentry *dentry) +@@ -1474,7 +1474,7 @@ static char *read_link(struct dentry *dentry) return link; } @@ -63810,7 +63476,7 @@ index 09ed551..45684f8 100644 /* diff --git a/fs/jfs/super.c b/fs/jfs/super.c -index adf8cb0..bb935fa 100644 +index 93e897e..a863de4 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c @@ -893,7 +893,7 @@ static int __init init_jfs_fs(void) @@ -63823,7 +63489,7 @@ index adf8cb0..bb935fa 100644 if (jfs_inode_cachep == NULL) return -ENOMEM; diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c -index a693f5b..82276a1 100644 +index 1c77193..ba73e66 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c @@ -182,7 +182,7 @@ struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn) @@ -63835,6 +63501,19 @@ index a693f5b..82276a1 100644 { unsigned long hash = init_name_hash(); unsigned int len = strlen(name); +@@ -829,6 +829,12 @@ static int kernfs_iop_mkdir(struct inode *dir, struct dentry *dentry, + ret = scops->mkdir(parent, dentry->d_name.name, mode); + + kernfs_put_active(parent); ++ ++ if (!ret) { ++ struct dentry *dentry_ret = kernfs_iop_lookup(dir, dentry, 0); ++ ret = PTR_ERR_OR_ZERO(dentry_ret); ++ } ++ + return ret; + } + diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c index 4429d6d..9831f52 100644 --- a/fs/kernfs/file.c @@ -63914,13 +63593,13 @@ index 8a19889..4c3069a 100644 free_page((unsigned long)page); } diff --git a/fs/libfs.c b/fs/libfs.c -index 88e3e00..979c262 100644 +index 005843c..06c4191 100644 --- a/fs/libfs.c +++ b/fs/libfs.c @@ -160,6 +160,9 @@ int dcache_readdir(struct file *file, struct dir_context *ctx) for (p = q->next; p != &dentry->d_subdirs; p = p->next) { - struct dentry *next = list_entry(p, struct dentry, d_u.d_child); + struct dentry *next = list_entry(p, struct dentry, d_child); + char d_name[sizeof(next->d_iname)]; + const unsigned char *name; + @@ -63969,10 +63648,10 @@ index acd3947..1f896e2 100644 memcpy(c->data, &cookie, 4); c->len=4; diff --git a/fs/locks.c b/fs/locks.c -index bb08857..f65e8bf 100644 +index 735b8d3..dfc44a2 100644 --- a/fs/locks.c +++ b/fs/locks.c -@@ -2350,7 +2350,7 @@ void locks_remove_file(struct file *filp) +@@ -2374,7 +2374,7 @@ void locks_remove_file(struct file *filp) locks_remove_posix(filp, filp); if (filp->f_op->flock) { @@ -63981,7 +63660,7 @@ index bb08857..f65e8bf 100644 .fl_owner = filp, .fl_pid = current->tgid, .fl_file = filp, -@@ -2358,9 +2358,9 @@ void locks_remove_file(struct file *filp) +@@ -2382,9 +2382,9 @@ void locks_remove_file(struct file *filp) .fl_type = F_UNLCK, .fl_end = OFFSET_MAX, }; @@ -63995,7 +63674,7 @@ index bb08857..f65e8bf 100644 spin_lock(&inode->i_lock); diff --git a/fs/mount.h b/fs/mount.h -index 6740a62..ccb472f 100644 +index f82c628..9492b99 100644 --- a/fs/mount.h +++ b/fs/mount.h @@ -11,7 +11,7 @@ struct mnt_namespace { @@ -64007,7 +63686,7 @@ index 6740a62..ccb472f 100644 struct mnt_pcp { int mnt_count; -@@ -57,7 +57,7 @@ struct mount { +@@ -62,7 +62,7 @@ struct mount { int mnt_expiry_mark; /* true if marked for expiry */ struct hlist_head mnt_pins; struct path mnt_ex_mountpoint; @@ -64017,7 +63696,7 @@ index 6740a62..ccb472f 100644 #define MNT_NS_INTERNAL ERR_PTR(-EINVAL) /* distinct from any mnt_namespace */ diff --git a/fs/namei.c b/fs/namei.c -index bb02687..79cba2c 100644 +index db5fe86..d3dcc14 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -331,17 +331,32 @@ int generic_permission(struct inode *inode, int mask) @@ -64072,7 +63751,7 @@ index bb02687..79cba2c 100644 return -EACCES; } EXPORT_SYMBOL(generic_permission); -@@ -823,7 +830,7 @@ follow_link(struct path *link, struct nameidata *nd, void **p) +@@ -824,7 +831,7 @@ follow_link(struct path *link, struct nameidata *nd, void **p) { struct dentry *dentry = link->dentry; int error; @@ -64081,7 +63760,7 @@ index bb02687..79cba2c 100644 BUG_ON(nd->flags & LOOKUP_RCU); -@@ -844,6 +851,12 @@ follow_link(struct path *link, struct nameidata *nd, void **p) +@@ -845,6 +852,12 @@ follow_link(struct path *link, struct nameidata *nd, void **p) if (error) goto out_put_nd_path; @@ -64094,7 +63773,7 @@ index bb02687..79cba2c 100644 nd->last_type = LAST_BIND; *p = dentry->d_inode->i_op->follow_link(dentry, nd); error = PTR_ERR(*p); -@@ -1607,6 +1620,8 @@ static inline int nested_symlink(struct path *path, struct nameidata *nd) +@@ -1608,6 +1621,8 @@ static inline int nested_symlink(struct path *path, struct nameidata *nd) if (res) break; res = walk_component(nd, path, LOOKUP_FOLLOW); @@ -64103,7 +63782,7 @@ index bb02687..79cba2c 100644 put_link(nd, &link, cookie); } while (res > 0); -@@ -1679,7 +1694,7 @@ EXPORT_SYMBOL(full_name_hash); +@@ -1680,7 +1695,7 @@ EXPORT_SYMBOL(full_name_hash); static inline u64 hash_name(const char *name) { unsigned long a, b, adata, bdata, mask, hash, len; @@ -64112,7 +63791,7 @@ index bb02687..79cba2c 100644 hash = a = 0; len = -sizeof(unsigned long); -@@ -1968,6 +1983,8 @@ static int path_lookupat(int dfd, const char *name, +@@ -1969,6 +1984,8 @@ static int path_lookupat(int dfd, const char *name, if (err) break; err = lookup_last(nd, &path); @@ -64121,7 +63800,7 @@ index bb02687..79cba2c 100644 put_link(nd, &link, cookie); } } -@@ -1975,6 +1992,13 @@ static int path_lookupat(int dfd, const char *name, +@@ -1976,6 +1993,13 @@ static int path_lookupat(int dfd, const char *name, if (!err) err = complete_walk(nd); @@ -64135,7 +63814,7 @@ index bb02687..79cba2c 100644 if (!err && nd->flags & LOOKUP_DIRECTORY) { if (!d_can_lookup(nd->path.dentry)) { path_put(&nd->path); -@@ -2002,8 +2026,15 @@ static int filename_lookup(int dfd, struct filename *name, +@@ -2004,8 +2028,15 @@ static int filename_lookup(int dfd, struct filename *name, retval = path_lookupat(dfd, name->name, flags | LOOKUP_REVAL, nd); @@ -64152,7 +63831,7 @@ index bb02687..79cba2c 100644 return retval; } -@@ -2585,6 +2616,13 @@ static int may_open(struct path *path, int acc_mode, int flag) +@@ -2582,6 +2613,13 @@ static int may_open(struct path *path, int acc_mode, int flag) if (flag & O_NOATIME && !inode_owner_or_capable(inode)) return -EPERM; @@ -64166,7 +63845,7 @@ index bb02687..79cba2c 100644 return 0; } -@@ -2816,7 +2854,7 @@ looked_up: +@@ -2813,7 +2851,7 @@ looked_up: * cleared otherwise prior to returning. */ static int lookup_open(struct nameidata *nd, struct path *path, @@ -64175,7 +63854,7 @@ index bb02687..79cba2c 100644 const struct open_flags *op, bool got_write, int *opened) { -@@ -2851,6 +2889,17 @@ static int lookup_open(struct nameidata *nd, struct path *path, +@@ -2848,6 +2886,17 @@ static int lookup_open(struct nameidata *nd, struct path *path, /* Negative dentry, just create the file */ if (!dentry->d_inode && (op->open_flag & O_CREAT)) { umode_t mode = op->mode; @@ -64193,7 +63872,7 @@ index bb02687..79cba2c 100644 if (!IS_POSIXACL(dir->d_inode)) mode &= ~current_umask(); /* -@@ -2872,6 +2921,8 @@ static int lookup_open(struct nameidata *nd, struct path *path, +@@ -2869,6 +2918,8 @@ static int lookup_open(struct nameidata *nd, struct path *path, nd->flags & LOOKUP_EXCL); if (error) goto out_dput; @@ -64202,7 +63881,7 @@ index bb02687..79cba2c 100644 } out_no_open: path->dentry = dentry; -@@ -2886,7 +2937,7 @@ out_dput: +@@ -2883,7 +2934,7 @@ out_dput: /* * Handle the last step of open() */ @@ -64211,7 +63890,7 @@ index bb02687..79cba2c 100644 struct file *file, const struct open_flags *op, int *opened, struct filename *name) { -@@ -2936,6 +2987,15 @@ static int do_last(struct nameidata *nd, struct path *path, +@@ -2933,6 +2984,15 @@ static int do_last(struct nameidata *nd, struct path *path, if (error) return error; @@ -64227,7 +63906,7 @@ index bb02687..79cba2c 100644 audit_inode(name, dir, LOOKUP_PARENT); error = -EISDIR; /* trailing slashes? */ -@@ -2955,7 +3015,7 @@ retry_lookup: +@@ -2952,7 +3012,7 @@ retry_lookup: */ } mutex_lock(&dir->d_inode->i_mutex); @@ -64236,7 +63915,7 @@ index bb02687..79cba2c 100644 mutex_unlock(&dir->d_inode->i_mutex); if (error <= 0) { -@@ -2979,11 +3039,28 @@ retry_lookup: +@@ -2976,11 +3036,28 @@ retry_lookup: goto finish_open_created; } @@ -64266,7 +63945,7 @@ index bb02687..79cba2c 100644 /* * If atomic_open() acquired write access it is dropped now due to -@@ -3024,6 +3101,11 @@ finish_lookup: +@@ -3021,6 +3098,11 @@ finish_lookup: } } BUG_ON(inode != path->dentry->d_inode); @@ -64278,15 +63957,7 @@ index bb02687..79cba2c 100644 return 1; } -@@ -3033,7 +3115,6 @@ finish_lookup: - save_parent.dentry = nd->path.dentry; - save_parent.mnt = mntget(path->mnt); - nd->path.dentry = path->dentry; -- - } - nd->inode = inode; - /* Why this, you ask? _Now_ we might have grown LOOKUP_JUMPED... */ -@@ -3043,7 +3124,18 @@ finish_open: +@@ -3040,7 +3122,18 @@ finish_open: path_put(&save_parent); return error; } @@ -64305,7 +63976,7 @@ index bb02687..79cba2c 100644 error = -EISDIR; if ((open_flag & O_CREAT) && d_is_dir(nd->path.dentry)) goto out; -@@ -3207,7 +3299,7 @@ static struct file *path_openat(int dfd, struct filename *pathname, +@@ -3207,7 +3300,7 @@ static struct file *path_openat(int dfd, struct filename *pathname, if (unlikely(error)) goto out; @@ -64314,7 +63985,7 @@ index bb02687..79cba2c 100644 while (unlikely(error > 0)) { /* trailing symlink */ struct path link = path; void *cookie; -@@ -3225,7 +3317,7 @@ static struct file *path_openat(int dfd, struct filename *pathname, +@@ -3225,7 +3318,7 @@ static struct file *path_openat(int dfd, struct filename *pathname, error = follow_link(&link, nd, &cookie); if (unlikely(error)) break; @@ -64323,7 +63994,7 @@ index bb02687..79cba2c 100644 put_link(nd, &link, cookie); } out: -@@ -3325,9 +3417,11 @@ struct dentry *kern_path_create(int dfd, const char *pathname, +@@ -3325,9 +3418,11 @@ struct dentry *kern_path_create(int dfd, const char *pathname, goto unlock; error = -EEXIST; @@ -64337,7 +64008,7 @@ index bb02687..79cba2c 100644 /* * Special case - lookup gave negative, but... we had foo/bar/ * From the vfs_mknod() POV we just have a negative dentry - -@@ -3379,6 +3473,20 @@ struct dentry *user_path_create(int dfd, const char __user *pathname, +@@ -3379,6 +3474,20 @@ struct dentry *user_path_create(int dfd, const char __user *pathname, } EXPORT_SYMBOL(user_path_create); @@ -64358,7 +64029,7 @@ index bb02687..79cba2c 100644 int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev) { int error = may_create(dir, dentry); -@@ -3442,6 +3550,17 @@ retry: +@@ -3442,6 +3551,17 @@ retry: if (!IS_POSIXACL(path.dentry->d_inode)) mode &= ~current_umask(); @@ -64376,7 +64047,7 @@ index bb02687..79cba2c 100644 error = security_path_mknod(&path, dentry, mode, dev); if (error) goto out; -@@ -3457,6 +3576,8 @@ retry: +@@ -3457,6 +3577,8 @@ retry: error = vfs_mknod(path.dentry->d_inode,dentry,mode,0); break; } @@ -64385,7 +64056,7 @@ index bb02687..79cba2c 100644 out: done_path_create(&path, dentry); if (retry_estale(error, lookup_flags)) { -@@ -3511,9 +3632,16 @@ retry: +@@ -3511,9 +3633,16 @@ retry: if (!IS_POSIXACL(path.dentry->d_inode)) mode &= ~current_umask(); @@ -64402,7 +64073,7 @@ index bb02687..79cba2c 100644 done_path_create(&path, dentry); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; -@@ -3596,6 +3724,8 @@ static long do_rmdir(int dfd, const char __user *pathname) +@@ -3597,6 +3726,8 @@ static long do_rmdir(int dfd, const char __user *pathname) struct filename *name; struct dentry *dentry; struct nameidata nd; @@ -64411,7 +64082,7 @@ index bb02687..79cba2c 100644 unsigned int lookup_flags = 0; retry: name = user_path_parent(dfd, pathname, &nd, lookup_flags); -@@ -3628,10 +3758,21 @@ retry: +@@ -3629,10 +3760,21 @@ retry: error = -ENOENT; goto exit3; } @@ -64433,7 +64104,7 @@ index bb02687..79cba2c 100644 exit3: dput(dentry); exit2: -@@ -3722,6 +3863,8 @@ static long do_unlinkat(int dfd, const char __user *pathname) +@@ -3725,6 +3867,8 @@ static long do_unlinkat(int dfd, const char __user *pathname) struct nameidata nd; struct inode *inode = NULL; struct inode *delegated_inode = NULL; @@ -64442,7 +64113,7 @@ index bb02687..79cba2c 100644 unsigned int lookup_flags = 0; retry: name = user_path_parent(dfd, pathname, &nd, lookup_flags); -@@ -3748,10 +3891,22 @@ retry_deleg: +@@ -3751,10 +3895,22 @@ retry_deleg: if (d_is_negative(dentry)) goto slashes; ihold(inode); @@ -64465,7 +64136,7 @@ index bb02687..79cba2c 100644 exit2: dput(dentry); } -@@ -3840,9 +3995,17 @@ retry: +@@ -3843,9 +3999,17 @@ retry: if (IS_ERR(dentry)) goto out_putname; @@ -64483,7 +64154,7 @@ index bb02687..79cba2c 100644 done_path_create(&path, dentry); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; -@@ -3946,6 +4109,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, +@@ -3949,6 +4113,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, struct dentry *new_dentry; struct path old_path, new_path; struct inode *delegated_inode = NULL; @@ -64491,7 +64162,7 @@ index bb02687..79cba2c 100644 int how = 0; int error; -@@ -3969,7 +4133,7 @@ retry: +@@ -3972,7 +4137,7 @@ retry: if (error) return error; @@ -64500,7 +64171,7 @@ index bb02687..79cba2c 100644 (how & LOOKUP_REVAL)); error = PTR_ERR(new_dentry); if (IS_ERR(new_dentry)) -@@ -3981,11 +4145,28 @@ retry: +@@ -3984,11 +4149,28 @@ retry: error = may_linkat(&old_path); if (unlikely(error)) goto out_dput; @@ -64529,7 +64200,7 @@ index bb02687..79cba2c 100644 done_path_create(&new_path, new_dentry); if (delegated_inode) { error = break_deleg_wait(&delegated_inode); -@@ -4296,6 +4477,12 @@ retry_deleg: +@@ -4304,6 +4486,12 @@ retry_deleg: if (new_dentry == trap) goto exit5; @@ -64542,7 +64213,7 @@ index bb02687..79cba2c 100644 error = security_path_rename(&oldnd.path, old_dentry, &newnd.path, new_dentry, flags); if (error) -@@ -4303,6 +4490,9 @@ retry_deleg: +@@ -4311,6 +4499,9 @@ retry_deleg: error = vfs_rename(old_dir->d_inode, old_dentry, new_dir->d_inode, new_dentry, &delegated_inode, flags); @@ -64552,7 +64223,7 @@ index bb02687..79cba2c 100644 exit5: dput(new_dentry); exit4: -@@ -4345,14 +4535,24 @@ SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newna +@@ -4367,14 +4558,24 @@ EXPORT_SYMBOL(vfs_whiteout); int readlink_copy(char __user *buffer, int buflen, const char *link) { @@ -64579,10 +64250,10 @@ index bb02687..79cba2c 100644 out: return len; diff --git a/fs/namespace.c b/fs/namespace.c -index 550dbff..c4ad324 100644 +index bbde147..f4deeba 100644 --- a/fs/namespace.c +++ b/fs/namespace.c -@@ -1362,6 +1362,9 @@ static int do_umount(struct mount *mnt, int flags) +@@ -1447,6 +1447,9 @@ static int do_umount(struct mount *mnt, int flags) if (!(sb->s_flags & MS_RDONLY)) retval = do_remount_sb(sb, MS_RDONLY, NULL, 0); up_write(&sb->s_umount); @@ -64592,7 +64263,7 @@ index 550dbff..c4ad324 100644 return retval; } -@@ -1384,6 +1387,9 @@ static int do_umount(struct mount *mnt, int flags) +@@ -1469,6 +1472,9 @@ static int do_umount(struct mount *mnt, int flags) } unlock_mount_hash(); namespace_unlock(); @@ -64602,7 +64273,7 @@ index 550dbff..c4ad324 100644 return retval; } -@@ -1403,7 +1409,7 @@ static inline bool may_mount(void) +@@ -1519,7 +1525,7 @@ static inline bool may_mount(void) * unixes. Our API is identical to OSF/1 to avoid making a mess of AMD */ @@ -64611,7 +64282,7 @@ index 550dbff..c4ad324 100644 { struct path path; struct mount *mnt; -@@ -1445,7 +1451,7 @@ out: +@@ -1564,7 +1570,7 @@ out: /* * The 2.0 compatible umount. No flags. */ @@ -64620,7 +64291,7 @@ index 550dbff..c4ad324 100644 { return sys_umount(name, 0); } -@@ -2494,6 +2500,16 @@ long do_mount(const char *dev_name, const char *dir_name, +@@ -2632,6 +2638,16 @@ long do_mount(const char *dev_name, const char __user *dir_name, MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT | MS_STRICTATIME); @@ -64637,17 +64308,18 @@ index 550dbff..c4ad324 100644 if (flags & MS_REMOUNT) retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags, data_page); -@@ -2508,6 +2524,9 @@ long do_mount(const char *dev_name, const char *dir_name, +@@ -2645,7 +2661,10 @@ long do_mount(const char *dev_name, const char __user *dir_name, + retval = do_new_mount(&path, type_page, flags, mnt_flags, dev_name, data_page); dput_out: - path_put(&path); ++ gr_log_mount(dev_name, &path, retval); + -+ gr_log_mount(dev_name, dir_name, retval); + path_put(&path); + return retval; } -@@ -2525,7 +2544,7 @@ static void free_mnt_ns(struct mnt_namespace *ns) +@@ -2663,7 +2682,7 @@ static void free_mnt_ns(struct mnt_namespace *ns) * number incrementing at 10Ghz will take 12,427 years to wrap which * is effectively never, so we can ignore the possibility. */ @@ -64656,7 +64328,7 @@ index 550dbff..c4ad324 100644 static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns) { -@@ -2540,7 +2559,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns) +@@ -2678,7 +2697,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns) kfree(new_ns); return ERR_PTR(ret); } @@ -64665,7 +64337,7 @@ index 550dbff..c4ad324 100644 atomic_set(&new_ns->count, 1); new_ns->root = NULL; INIT_LIST_HEAD(&new_ns->list); -@@ -2550,7 +2569,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns) +@@ -2688,7 +2707,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns) return new_ns; } @@ -64674,7 +64346,7 @@ index 550dbff..c4ad324 100644 struct user_namespace *user_ns, struct fs_struct *new_fs) { struct mnt_namespace *new_ns; -@@ -2671,8 +2690,8 @@ struct dentry *mount_subtree(struct vfsmount *mnt, const char *name) +@@ -2809,8 +2828,8 @@ struct dentry *mount_subtree(struct vfsmount *mnt, const char *name) } EXPORT_SYMBOL(mount_subtree); @@ -64685,7 +64357,7 @@ index 550dbff..c4ad324 100644 { int ret; char *kernel_type; -@@ -2785,6 +2804,11 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root, +@@ -2916,6 +2935,11 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root, if (error) goto out2; @@ -64697,7 +64369,7 @@ index 550dbff..c4ad324 100644 get_fs_root(current->fs, &root); old_mp = lock_mount(&old); error = PTR_ERR(old_mp); -@@ -3056,7 +3080,7 @@ static int mntns_install(struct nsproxy *nsproxy, void *ns) +@@ -3187,7 +3211,7 @@ static int mntns_install(struct nsproxy *nsproxy, void *ns) !ns_capable(current_user_ns(), CAP_SYS_ADMIN)) return -EPERM; @@ -64720,10 +64392,10 @@ index f4ccfe6..a5cf064 100644 static struct callback_op callback_ops[]; diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c -index 0689aa5..299386e 100644 +index 00689a8..b162632 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c -@@ -1228,16 +1228,16 @@ static int nfs_size_need_update(const struct inode *inode, const struct nfs_fatt +@@ -1232,16 +1232,16 @@ static int nfs_size_need_update(const struct inode *inode, const struct nfs_fatt return nfs_size_to_loff_t(fattr->size) > i_size_read(inode); } @@ -64744,10 +64416,10 @@ index 0689aa5..299386e 100644 void nfs_fattr_init(struct nfs_fattr *fattr) diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c -index 1d3cb47..2b8ed89 100644 +index 0beb023..3f685ec 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c -@@ -1155,7 +1155,7 @@ struct nfsd4_operation { +@@ -1198,7 +1198,7 @@ struct nfsd4_operation { nfsd4op_rsize op_rsize_bop; stateid_getter op_get_currentstateid; stateid_setter op_set_currentstateid; @@ -64757,10 +64429,10 @@ index 1d3cb47..2b8ed89 100644 static struct nfsd4_operation nfsd4_ops[]; diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c -index 353aac8..32035ee 100644 +index eeea7a9..f3ba422 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c -@@ -1534,7 +1534,7 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p) +@@ -1543,7 +1543,7 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p) typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *); @@ -64770,19 +64442,21 @@ index 353aac8..32035ee 100644 [OP_CLOSE] = (nfsd4_dec)nfsd4_decode_close, [OP_COMMIT] = (nfsd4_dec)nfsd4_decode_commit, diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c -index ff95676..96cf3f62 100644 +index 122f691..a00e2e0 100644 --- a/fs/nfsd/nfscache.c +++ b/fs/nfsd/nfscache.c -@@ -527,17 +527,20 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) - { - struct svc_cacherep *rp = rqstp->rq_cacherep; +@@ -537,7 +537,7 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) struct kvec *resv = &rqstp->rq_res.head[0], *cachv; + u32 hash; + struct nfsd_drc_bucket *b; - int len; + long len; size_t bufsize = 0; if (!rp) - return; +@@ -546,11 +546,14 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) + hash = nfsd_cache_hash(rp->c_xid); + b = &drc_hashtbl[hash]; - len = resv->iov_len - ((char*)statp - (char*)resv->iov_base); - len >>= 2; @@ -64795,10 +64469,10 @@ index ff95676..96cf3f62 100644 /* Don't cache excessive amounts of data and XDR failures */ - if (!statp || len > (256 >> 2)) { + if (!statp || len > (256 >> 2) || len < 0) { - nfsd_reply_cache_free(rp); + nfsd_reply_cache_free(b, rp); return; } -@@ -545,7 +548,7 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) +@@ -558,7 +561,7 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) switch (cachetype) { case RC_REPLSTAT: if (len != 1) @@ -64808,10 +64482,10 @@ index ff95676..96cf3f62 100644 break; case RC_REPLBUFF: diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c -index 6ab077b..5ac7f0b 100644 +index 989129e..42e019e 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c -@@ -855,7 +855,7 @@ __be32 nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen, +@@ -872,7 +872,7 @@ __be32 nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen, oldfs = get_fs(); set_fs(KERNEL_DS); @@ -64820,7 +64494,7 @@ index 6ab077b..5ac7f0b 100644 set_fs(oldfs); return nfsd_finish_read(file, count, host_err); } -@@ -943,7 +943,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, +@@ -960,7 +960,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, /* Write the data. */ oldfs = get_fs(); set_fs(KERNEL_DS); @@ -64829,7 +64503,7 @@ index 6ab077b..5ac7f0b 100644 set_fs(oldfs); if (host_err < 0) goto out_nfserr; -@@ -1485,7 +1485,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp) +@@ -1502,7 +1502,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp) */ oldfs = get_fs(); set_fs(KERNEL_DS); @@ -64958,23 +64632,6 @@ index c991616..5ae51af 100644 goto out_close_fd; #ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS -diff --git a/fs/notify/inotify/inotify_fsnotify.c b/fs/notify/inotify/inotify_fsnotify.c -index 0f88bc0..7d888d7 100644 ---- a/fs/notify/inotify/inotify_fsnotify.c -+++ b/fs/notify/inotify/inotify_fsnotify.c -@@ -165,8 +165,10 @@ static void inotify_free_group_priv(struct fsnotify_group *group) - /* ideally the idr is empty and we won't hit the BUG in the callback */ - idr_for_each(&group->inotify_data.idr, idr_callback, group); - idr_destroy(&group->inotify_data.idr); -- atomic_dec(&group->inotify_data.user->inotify_devs); -- free_uid(group->inotify_data.user); -+ if (group->inotify_data.user) { -+ atomic_dec(&group->inotify_data.user->inotify_devs); -+ free_uid(group->inotify_data.user); -+ } - } - - static void inotify_free_event(struct fsnotify_event *fsn_event) diff --git a/fs/notify/notification.c b/fs/notify/notification.c index a95d8e0..a91a5fd 100644 --- a/fs/notify/notification.c @@ -65011,10 +64668,10 @@ index 9e38daf..5727cae 100644 "inode 0x%lx or driver bug.", vdir->i_ino); goto err_out; diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c -index f5ec1ce..807fd78 100644 +index 643faa4..ef9027e 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c -@@ -1279,7 +1279,7 @@ static inline size_t ntfs_copy_from_user(struct page **pages, +@@ -1280,7 +1280,7 @@ static inline size_t ntfs_copy_from_user(struct page **pages, char *addr; size_t total = 0; unsigned len; @@ -65024,7 +64681,7 @@ index f5ec1ce..807fd78 100644 do { len = PAGE_CACHE_SIZE - ofs; diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c -index 6c3296e..c0b99f0 100644 +index 9e1e112..241a52a 100644 --- a/fs/ntfs/super.c +++ b/fs/ntfs/super.c @@ -688,7 +688,7 @@ static struct buffer_head *read_ntfs_boot_sector(struct super_block *sb, @@ -65067,19 +64724,6 @@ index 0440134..d52c93a 100644 bail: if (handle) -diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c -index 8add6f1..b931e04 100644 ---- a/fs/ocfs2/namei.c -+++ b/fs/ocfs2/namei.c -@@ -158,7 +158,7 @@ bail_add: - * NOTE: This dentry already has ->d_op set from - * ocfs2_get_parent() and ocfs2_get_dentry() - */ -- if (ret) -+ if (!IS_ERR_OR_NULL(ret)) - dentry = ret; - - status = ocfs2_dentry_attach_lock(dentry, inode, diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index bbec539..7b266d5 100644 --- a/fs/ocfs2/ocfs2.h @@ -65160,7 +64804,7 @@ index 0cb889a..6a26b24 100644 } } diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c -index 4142546..69375a9 100644 +index 93c85bc..02f68a4 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c @@ -300,11 +300,11 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len) @@ -65180,7 +64824,7 @@ index 4142546..69375a9 100644 out += snprintf(buf + out, len - out, "%10s => State: %u Descriptor: %llu Size: %u bits " -@@ -2100,11 +2100,11 @@ static int ocfs2_initialize_super(struct super_block *sb, +@@ -2104,11 +2104,11 @@ static int ocfs2_initialize_super(struct super_block *sb, mutex_init(&osb->system_file_mutex); @@ -65198,7 +64842,7 @@ index 4142546..69375a9 100644 /* Copy the blockcheck stats from the superblock probe */ osb->osb_ecc_stats = *stats; diff --git a/fs/open.c b/fs/open.c -index d6fd3ac..6ccf474 100644 +index de92c13..52d2a6c 100644 --- a/fs/open.c +++ b/fs/open.c @@ -32,6 +32,8 @@ @@ -65302,7 +64946,7 @@ index d6fd3ac..6ccf474 100644 newattrs.ia_valid = ATTR_CTIME; if (user != (uid_t) -1) { if (!uid_valid(uid)) -@@ -983,6 +1020,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode) +@@ -1002,6 +1039,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode) } else { fsnotify_open(f); fd_install(fd, f); @@ -65797,7 +65441,7 @@ index cd3653e..9b9b79a 100644 static struct pid * get_children_pid(struct inode *inode, struct pid *pid_prev, loff_t pos) diff --git a/fs/proc/base.c b/fs/proc/base.c -index baf852b..03fe930 100644 +index 7dc3ea8..4cfe92f 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -113,6 +113,14 @@ struct pid_entry { @@ -65862,7 +65506,7 @@ index baf852b..03fe930 100644 #define MAX_STACK_TRACE_DEPTH 64 -@@ -487,7 +511,7 @@ static int proc_pid_limits(struct seq_file *m, struct pid_namespace *ns, +@@ -456,7 +480,7 @@ static int proc_pid_limits(struct seq_file *m, struct pid_namespace *ns, return 0; } @@ -65871,7 +65515,7 @@ index baf852b..03fe930 100644 static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *task) { -@@ -517,7 +541,7 @@ static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns, +@@ -486,7 +510,7 @@ static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns, /************************************************************************/ /* permission checks */ @@ -65880,7 +65524,7 @@ index baf852b..03fe930 100644 { struct task_struct *task; int allowed = 0; -@@ -527,7 +551,10 @@ static int proc_fd_access_allowed(struct inode *inode) +@@ -496,7 +520,10 @@ static int proc_fd_access_allowed(struct inode *inode) */ task = get_proc_task(inode); if (task) { @@ -65892,7 +65536,7 @@ index baf852b..03fe930 100644 put_task_struct(task); } return allowed; -@@ -558,10 +585,35 @@ static bool has_pid_permissions(struct pid_namespace *pid, +@@ -527,10 +554,35 @@ static bool has_pid_permissions(struct pid_namespace *pid, struct task_struct *task, int hide_pid_min) { @@ -65928,7 +65572,7 @@ index baf852b..03fe930 100644 return ptrace_may_access(task, PTRACE_MODE_READ); } -@@ -579,7 +631,11 @@ static int proc_pid_permission(struct inode *inode, int mask) +@@ -548,7 +600,11 @@ static int proc_pid_permission(struct inode *inode, int mask) put_task_struct(task); if (!has_perms) { @@ -65940,22 +65584,20 @@ index baf852b..03fe930 100644 /* * Let's make getdents(), stat(), and open() * consistent with each other. If a process -@@ -640,6 +696,11 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode) - if (!task) - return -ESRCH; +@@ -609,6 +665,8 @@ struct mm_struct *proc_mem_open(struct inode *inode, unsigned int mode) -+ if (gr_acl_handle_procpidmem(task)) { -+ put_task_struct(task); -+ return -EPERM; -+ } -+ - mm = mm_access(task, mode); - put_task_struct(task); + if (task) { + mm = mm_access(task, mode); ++ if (gr_acl_handle_procpidmem(task)) ++ mm = ERR_PTR(-EPERM); + put_task_struct(task); -@@ -655,6 +716,10 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode) + if (!IS_ERR_OR_NULL(mm)) { +@@ -630,6 +688,11 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode) + return PTR_ERR(mm); file->private_data = mm; - ++ +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP + file->f_version = current->exec_id; +#endif @@ -65963,7 +65605,7 @@ index baf852b..03fe930 100644 return 0; } -@@ -676,6 +741,17 @@ static ssize_t mem_rw(struct file *file, char __user *buf, +@@ -651,6 +714,17 @@ static ssize_t mem_rw(struct file *file, char __user *buf, ssize_t copied; char *page; @@ -65981,7 +65623,7 @@ index baf852b..03fe930 100644 if (!mm) return 0; -@@ -688,7 +764,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf, +@@ -663,7 +737,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf, goto free; while (count > 0) { @@ -65990,7 +65632,7 @@ index baf852b..03fe930 100644 if (write && copy_from_user(page, buf, this_len)) { copied = -EFAULT; -@@ -780,6 +856,13 @@ static ssize_t environ_read(struct file *file, char __user *buf, +@@ -755,6 +829,13 @@ static ssize_t environ_read(struct file *file, char __user *buf, if (!mm) return 0; @@ -66004,7 +65646,7 @@ index baf852b..03fe930 100644 page = (char *)__get_free_page(GFP_TEMPORARY); if (!page) return -ENOMEM; -@@ -789,7 +872,7 @@ static ssize_t environ_read(struct file *file, char __user *buf, +@@ -764,7 +845,7 @@ static ssize_t environ_read(struct file *file, char __user *buf, goto free; while (count > 0) { size_t this_len, max_len; @@ -66013,7 +65655,7 @@ index baf852b..03fe930 100644 if (src >= (mm->env_end - mm->env_start)) break; -@@ -1403,7 +1486,7 @@ static void *proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd) +@@ -1378,7 +1459,7 @@ static void *proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd) int error = -EACCES; /* Are we allowed to snoop on the tasks file descriptors? */ @@ -66022,7 +65664,7 @@ index baf852b..03fe930 100644 goto out; error = PROC_I(inode)->op.proc_get_link(dentry, &path); -@@ -1447,8 +1530,18 @@ static int proc_pid_readlink(struct dentry * dentry, char __user * buffer, int b +@@ -1422,8 +1503,18 @@ static int proc_pid_readlink(struct dentry * dentry, char __user * buffer, int b struct path path; /* Are we allowed to snoop on the tasks file descriptors? */ @@ -66043,7 +65685,7 @@ index baf852b..03fe930 100644 error = PROC_I(inode)->op.proc_get_link(dentry, &path); if (error) -@@ -1498,7 +1591,11 @@ struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *t +@@ -1473,7 +1564,11 @@ struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *t rcu_read_lock(); cred = __task_cred(task); inode->i_uid = cred->euid; @@ -66055,7 +65697,7 @@ index baf852b..03fe930 100644 rcu_read_unlock(); } security_task_to_inode(task, inode); -@@ -1534,10 +1631,19 @@ int pid_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) +@@ -1509,10 +1604,19 @@ int pid_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) return -ENOENT; } if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) || @@ -66075,7 +65717,7 @@ index baf852b..03fe930 100644 } } rcu_read_unlock(); -@@ -1575,11 +1681,20 @@ int pid_revalidate(struct dentry *dentry, unsigned int flags) +@@ -1550,11 +1654,20 @@ int pid_revalidate(struct dentry *dentry, unsigned int flags) if (task) { if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) || @@ -66096,7 +65738,7 @@ index baf852b..03fe930 100644 rcu_read_unlock(); } else { inode->i_uid = GLOBAL_ROOT_UID; -@@ -2114,6 +2229,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir, +@@ -2085,6 +2198,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir, if (!task) goto out_no_task; @@ -66106,7 +65748,7 @@ index baf852b..03fe930 100644 /* * Yes, it does not scale. And it should not. Don't add * new entries into /proc// without very good reasons. -@@ -2144,6 +2262,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx, +@@ -2115,6 +2231,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx, if (!task) return -ENOENT; @@ -66116,7 +65758,7 @@ index baf852b..03fe930 100644 if (!dir_emit_dots(file, ctx)) goto out; -@@ -2535,7 +2656,7 @@ static const struct pid_entry tgid_base_stuff[] = { +@@ -2557,7 +2676,7 @@ static const struct pid_entry tgid_base_stuff[] = { REG("autogroup", S_IRUGO|S_IWUSR, proc_pid_sched_autogroup_operations), #endif REG("comm", S_IRUGO|S_IWUSR, proc_pid_set_comm_operations), @@ -66125,7 +65767,7 @@ index baf852b..03fe930 100644 ONE("syscall", S_IRUSR, proc_pid_syscall), #endif ONE("cmdline", S_IRUGO, proc_pid_cmdline), -@@ -2560,10 +2681,10 @@ static const struct pid_entry tgid_base_stuff[] = { +@@ -2582,10 +2701,10 @@ static const struct pid_entry tgid_base_stuff[] = { #ifdef CONFIG_SECURITY DIR("attr", S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations), #endif @@ -66138,7 +65780,7 @@ index baf852b..03fe930 100644 ONE("stack", S_IRUSR, proc_pid_stack), #endif #ifdef CONFIG_SCHEDSTATS -@@ -2597,6 +2718,9 @@ static const struct pid_entry tgid_base_stuff[] = { +@@ -2619,6 +2738,9 @@ static const struct pid_entry tgid_base_stuff[] = { #ifdef CONFIG_HARDWALL ONE("hardwall", S_IRUGO, proc_pid_hardwall), #endif @@ -66148,7 +65790,7 @@ index baf852b..03fe930 100644 #ifdef CONFIG_USER_NS REG("uid_map", S_IRUGO|S_IWUSR, proc_uid_map_operations), REG("gid_map", S_IRUGO|S_IWUSR, proc_gid_map_operations), -@@ -2727,7 +2851,14 @@ static int proc_pid_instantiate(struct inode *dir, +@@ -2748,7 +2870,14 @@ static int proc_pid_instantiate(struct inode *dir, if (!inode) goto out; @@ -66163,7 +65805,7 @@ index baf852b..03fe930 100644 inode->i_op = &proc_tgid_base_inode_operations; inode->i_fop = &proc_tgid_base_operations; inode->i_flags|=S_IMMUTABLE; -@@ -2765,7 +2896,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign +@@ -2786,7 +2915,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign if (!task) goto out; @@ -66175,7 +65817,7 @@ index baf852b..03fe930 100644 put_task_struct(task); out: return ERR_PTR(result); -@@ -2879,7 +3014,7 @@ static const struct pid_entry tid_base_stuff[] = { +@@ -2900,7 +3033,7 @@ static const struct pid_entry tid_base_stuff[] = { REG("sched", S_IRUGO|S_IWUSR, proc_pid_sched_operations), #endif REG("comm", S_IRUGO|S_IWUSR, proc_pid_set_comm_operations), @@ -66184,7 +65826,7 @@ index baf852b..03fe930 100644 ONE("syscall", S_IRUSR, proc_pid_syscall), #endif ONE("cmdline", S_IRUGO, proc_pid_cmdline), -@@ -2906,10 +3041,10 @@ static const struct pid_entry tid_base_stuff[] = { +@@ -2927,10 +3060,10 @@ static const struct pid_entry tid_base_stuff[] = { #ifdef CONFIG_SECURITY DIR("attr", S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations), #endif @@ -66230,7 +65872,7 @@ index 50493ed..248166b 100644 } fs_initcall(proc_devices_init); diff --git a/fs/proc/fd.c b/fs/proc/fd.c -index 955bb55..71948bd 100644 +index e11d7c5..9128ce06 100644 --- a/fs/proc/fd.c +++ b/fs/proc/fd.c @@ -26,7 +26,8 @@ static int seq_show(struct seq_file *m, void *v) @@ -66243,7 +65885,7 @@ index 955bb55..71948bd 100644 put_task_struct(task); if (files) { -@@ -285,11 +286,21 @@ static struct dentry *proc_lookupfd(struct inode *dir, struct dentry *dentry, +@@ -283,11 +284,21 @@ static struct dentry *proc_lookupfd(struct inode *dir, struct dentry *dentry, */ int proc_fd_permission(struct inode *inode, int mask) { @@ -66445,7 +66087,7 @@ index 333080d..0a35ec4 100644 if (de->size) inode->i_size = de->size; diff --git a/fs/proc/internal.h b/fs/proc/internal.h -index 7da13e4..68d0981 100644 +index aa7a0ee..f2318df 100644 --- a/fs/proc/internal.h +++ b/fs/proc/internal.h @@ -46,9 +46,10 @@ struct proc_dir_entry { @@ -66509,7 +66151,7 @@ index a352d57..cb94a5c 100644 } fs_initcall(proc_interrupts_init); diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c -index 6df8d07..3321060 100644 +index 91a4e64..cb007c0 100644 --- a/fs/proc/kcore.c +++ b/fs/proc/kcore.c @@ -483,9 +483,10 @@ read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos) @@ -66998,7 +66640,7 @@ index bf2d03f..f058f9c 100644 seq_printf(p, "softirq %llu", (unsigned long long)sum_softirq); diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c -index c341568..75852a2 100644 +index 4e0388c..fc6a0e1 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -13,12 +13,19 @@ @@ -67058,7 +66700,7 @@ index c341568..75852a2 100644 } unsigned long task_vsize(struct mm_struct *mm) -@@ -271,13 +295,13 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) +@@ -282,13 +306,13 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT; } @@ -67077,7 +66719,7 @@ index c341568..75852a2 100644 seq_setwidth(m, 25 + sizeof(void *) * 6 - 1); seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu ", -@@ -287,7 +311,11 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) +@@ -298,7 +322,11 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) flags & VM_WRITE ? 'w' : '-', flags & VM_EXEC ? 'x' : '-', flags & VM_MAYSHARE ? 's' : 'p', @@ -67089,7 +66731,7 @@ index c341568..75852a2 100644 MAJOR(dev), MINOR(dev), ino); /* -@@ -296,7 +324,7 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) +@@ -307,7 +335,7 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) */ if (file) { seq_pad(m, ' '); @@ -67098,7 +66740,7 @@ index c341568..75852a2 100644 goto done; } -@@ -328,8 +356,9 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) +@@ -338,8 +366,9 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) * Thread stack in /proc/PID/task/TID/maps or * the main process stack. */ @@ -67110,21 +66752,20 @@ index c341568..75852a2 100644 name = "[stack]"; } else { /* Thread stack in /proc/PID/maps */ -@@ -353,6 +382,13 @@ static int show_map(struct seq_file *m, void *v, int is_pid) - struct proc_maps_private *priv = m->private; - struct task_struct *task = priv->task; +@@ -359,6 +388,12 @@ done: + static int show_map(struct seq_file *m, void *v, int is_pid) + { +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP + if (current->exec_id != m->exec_id) { + gr_log_badprocpid("maps"); + return 0; + } +#endif -+ - show_map_vma(m, vma, is_pid); - - if (m->count < m->size) /* vma is copied successfully */ -@@ -593,12 +629,23 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) + show_map_vma(m, v, is_pid); + m_cache_vma(m, v); + return 0; +@@ -594,12 +629,23 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) .private = &mss, }; @@ -67153,7 +66794,7 @@ index c341568..75852a2 100644 show_map_vma(m, vma, is_pid); seq_printf(m, -@@ -616,7 +663,11 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) +@@ -617,7 +663,11 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) "KernelPageSize: %8lu kB\n" "MMUPageSize: %8lu kB\n" "Locked: %8lu kB\n", @@ -67165,7 +66806,7 @@ index c341568..75852a2 100644 mss.resident >> 10, (unsigned long)(mss.pss >> (10 + PSS_SHIFT)), mss.shared_clean >> 10, -@@ -1422,6 +1473,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) +@@ -1447,6 +1497,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) char buffer[64]; int nid; @@ -67179,9 +66820,9 @@ index c341568..75852a2 100644 if (!mm) return 0; -@@ -1439,11 +1497,15 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) - mpol_to_str(buffer, sizeof(buffer), pol); - mpol_cond_put(pol); +@@ -1468,11 +1525,15 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) + mpol_to_str(buffer, sizeof(buffer), proc_priv->task_mempolicy); + } +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP + seq_printf(m, "%08lx %s", PAX_RAND_FLAGS(vma->vm_mm) ? 0UL : vma->vm_start, buffer); @@ -67197,7 +66838,7 @@ index c341568..75852a2 100644 seq_puts(m, " heap"); } else { diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c -index 678455d..ebd3245 100644 +index 599ec2e..f1413ae 100644 --- a/fs/proc/task_nommu.c +++ b/fs/proc/task_nommu.c @@ -51,7 +51,7 @@ void task_mem(struct seq_file *m, struct mm_struct *mm) @@ -67209,14 +66850,14 @@ index 678455d..ebd3245 100644 sbytes += kobjsize(current->fs); else bytes += kobjsize(current->fs); -@@ -161,7 +161,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma, +@@ -180,7 +180,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma, if (file) { seq_pad(m, ' '); - seq_path(m, &file->f_path, ""); + seq_path(m, &file->f_path, "\n\\"); } else if (mm) { - pid_t tid = vm_is_stack(priv->task, vma, is_pid); + pid_t tid = pid_of_stack(priv, vma, is_pid); diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index a90d6d35..d08047c 100644 @@ -67311,7 +66952,7 @@ index bb2869f..d34ada8 100644 if (!msg_head) { printk(KERN_ERR diff --git a/fs/read_write.c b/fs/read_write.c -index 009d854..16ce214 100644 +index 7d9318c..51b336f 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -495,7 +495,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t @@ -67477,10 +67118,10 @@ index 621b9f3..af527fd 100644 SF(s_do_balance), SF(s_unneeded_left_neighbor), SF(s_good_search_by_key_reada), SF(s_bmaps), diff --git a/fs/reiserfs/reiserfs.h b/fs/reiserfs/reiserfs.h -index 735c2c2..81b91af 100644 +index 1894d96..1dfd1c2 100644 --- a/fs/reiserfs/reiserfs.h +++ b/fs/reiserfs/reiserfs.h -@@ -573,7 +573,7 @@ struct reiserfs_sb_info { +@@ -576,7 +576,7 @@ struct reiserfs_sb_info { /* Comment? -Hans */ wait_queue_head_t s_wait; /* increased by one every time the tree gets re-balanced */ @@ -67489,7 +67130,7 @@ index 735c2c2..81b91af 100644 /* File system properties. Currently holds on-disk FS format */ unsigned long s_properties; -@@ -2294,7 +2294,7 @@ static inline loff_t max_reiserfs_offset(struct inode *inode) +@@ -2297,7 +2297,7 @@ static inline loff_t max_reiserfs_offset(struct inode *inode) #define REISERFS_USER_MEM 1 /* user memory mode */ #define fs_generation(s) (REISERFS_SB(s)->s_generation_counter) @@ -67498,6 +67139,21 @@ index 735c2c2..81b91af 100644 #define FILESYSTEM_CHANGED_TB(tb) (get_generation((tb)->tb_sb) != (tb)->fs_gen) #define __fs_changed(gen,s) (gen != get_generation (s)) #define fs_changed(gen,s) \ +diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c +index f1376c9..f9378e9 100644 +--- a/fs/reiserfs/super.c ++++ b/fs/reiserfs/super.c +@@ -1857,6 +1857,10 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent) + sbi->s_mount_opt |= (1 << REISERFS_SMALLTAIL); + sbi->s_mount_opt |= (1 << REISERFS_ERROR_RO); + sbi->s_mount_opt |= (1 << REISERFS_BARRIER_FLUSH); ++#ifdef CONFIG_REISERFS_FS_XATTR ++ /* turn on user xattrs by default */ ++ sbi->s_mount_opt |= (1 << REISERFS_XATTRS_USER); ++#endif + /* no preallocation minimum, be smart in reiserfs_file_write instead */ + sbi->s_alloc_options.preallocmin = 0; + /* Preallocate by 16 blocks (17-1) at once */ diff --git a/fs/select.c b/fs/select.c index 467bb1c..cf9d65a 100644 --- a/fs/select.c @@ -67609,7 +67265,7 @@ index 3857b72..0b7281e 100644 { const struct seq_operations *op = ((struct seq_file *)file->private_data)->op; diff --git a/fs/splice.c b/fs/splice.c -index f5cb9ba..8ddb1e9 100644 +index 75c6058..770d40c 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -193,7 +193,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, @@ -67709,7 +67365,7 @@ index f5cb9ba..8ddb1e9 100644 current->splice_pipe = pipe; } -@@ -1496,6 +1496,7 @@ static int get_iovec_page_array(const struct iovec __user *iov, +@@ -1497,6 +1497,7 @@ static int get_iovec_page_array(const struct iovec __user *iov, partial[buffers].offset = off; partial[buffers].len = plen; @@ -67717,7 +67373,7 @@ index f5cb9ba..8ddb1e9 100644 off = 0; len -= plen; -@@ -1732,9 +1733,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags) +@@ -1733,9 +1734,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags) ret = -ERESTARTSYS; break; } @@ -67729,7 +67385,7 @@ index f5cb9ba..8ddb1e9 100644 if (flags & SPLICE_F_NONBLOCK) { ret = -EAGAIN; break; -@@ -1766,7 +1767,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) +@@ -1767,7 +1768,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) pipe_lock(pipe); while (pipe->nrbufs >= pipe->buffers) { @@ -67738,7 +67394,7 @@ index f5cb9ba..8ddb1e9 100644 send_sig(SIGPIPE, current, 0); ret = -EPIPE; break; -@@ -1779,9 +1780,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) +@@ -1780,9 +1781,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) ret = -ERESTARTSYS; break; } @@ -67750,7 +67406,7 @@ index f5cb9ba..8ddb1e9 100644 } pipe_unlock(pipe); -@@ -1817,14 +1818,14 @@ retry: +@@ -1818,14 +1819,14 @@ retry: pipe_double_lock(ipipe, opipe); do { @@ -67767,7 +67423,7 @@ index f5cb9ba..8ddb1e9 100644 break; /* -@@ -1921,7 +1922,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, +@@ -1922,7 +1923,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, pipe_double_lock(ipipe, opipe); do { @@ -67776,7 +67432,7 @@ index f5cb9ba..8ddb1e9 100644 send_sig(SIGPIPE, current, 0); if (!ret) ret = -EPIPE; -@@ -1966,7 +1967,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, +@@ -1967,7 +1968,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, * return EAGAIN if we have the potential of some data in the * future, otherwise just return 0 */ @@ -67958,7 +67614,7 @@ index aa138d6..5f3a811 100644 error = notify_change(path->dentry, &newattrs, &delegated_inode); mutex_unlock(&inode->i_mutex); diff --git a/fs/xattr.c b/fs/xattr.c -index c69e6d4..cc56af5 100644 +index 64e83ef..b6be154 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -227,6 +227,27 @@ int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name, @@ -68012,7 +67668,7 @@ index c69e6d4..cc56af5 100644 out: if (vvalue) vfree(vvalue); -@@ -377,7 +403,7 @@ retry: +@@ -376,7 +402,7 @@ retry: return error; error = mnt_want_write(path.mnt); if (!error) { @@ -68021,16 +67677,7 @@ index c69e6d4..cc56af5 100644 mnt_drop_write(path.mnt); } path_put(&path); -@@ -401,7 +427,7 @@ retry: - return error; - error = mnt_want_write(path.mnt); - if (!error) { -- error = setxattr(path.dentry, name, value, size, flags); -+ error = setxattr(&path, name, value, size, flags); - mnt_drop_write(path.mnt); - } - path_put(&path); -@@ -416,16 +442,14 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name, +@@ -405,16 +431,14 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name, const void __user *,value, size_t, size, int, flags) { struct fd f = fdget(fd); @@ -68049,7 +67696,7 @@ index c69e6d4..cc56af5 100644 mnt_drop_write_file(f.file); } fdput(f); -@@ -626,7 +650,7 @@ SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size) +@@ -600,7 +624,7 @@ SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size) * Extended attribute REMOVE operations */ static long @@ -68058,7 +67705,7 @@ index c69e6d4..cc56af5 100644 { int error; char kname[XATTR_NAME_MAX + 1]; -@@ -637,7 +661,10 @@ removexattr(struct dentry *d, const char __user *name) +@@ -611,7 +635,10 @@ removexattr(struct dentry *d, const char __user *name) if (error < 0) return error; @@ -68069,8 +67716,8 @@ index c69e6d4..cc56af5 100644 + return vfs_removexattr(path->dentry, kname); } - SYSCALL_DEFINE2(removexattr, const char __user *, pathname, -@@ -652,7 +679,7 @@ retry: + static int path_removexattr(const char __user *pathname, +@@ -625,7 +652,7 @@ retry: return error; error = mnt_want_write(path.mnt); if (!error) { @@ -68079,16 +67726,7 @@ index c69e6d4..cc56af5 100644 mnt_drop_write(path.mnt); } path_put(&path); -@@ -675,7 +702,7 @@ retry: - return error; - error = mnt_want_write(path.mnt); - if (!error) { -- error = removexattr(path.dentry, name); -+ error = removexattr(&path, name); - mnt_drop_write(path.mnt); - } - path_put(&path); -@@ -689,16 +716,16 @@ retry: +@@ -651,16 +678,16 @@ SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname, SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name) { struct fd f = fdget(fd); @@ -68110,7 +67748,7 @@ index c69e6d4..cc56af5 100644 } fdput(f); diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c -index 86df952..ac430d6 100644 +index 79c9819..22226b4 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -583,7 +583,7 @@ xfs_bmap_validate_ret( @@ -68141,7 +67779,7 @@ index f1b69ed..3d0222f 100644 return 0; sfep = dp->d_ops->sf_nextentry(sfp, sfep); diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c -index 3799695..0ddc953 100644 +index 24c926b6..8726af88 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -122,7 +122,7 @@ xfs_find_handle( @@ -68154,10 +67792,10 @@ index 3799695..0ddc953 100644 goto out_put; diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h -index d10dc8f..56b3430 100644 +index 6a51619..9592e1b 100644 --- a/fs/xfs/xfs_linux.h +++ b/fs/xfs/xfs_linux.h -@@ -230,7 +230,7 @@ static inline kgid_t xfs_gid_to_kgid(__uint32_t gid) +@@ -234,7 +234,7 @@ static inline kgid_t xfs_gid_to_kgid(__uint32_t gid) * of the compiler which do not like us using do_div in the middle * of large functions. */ @@ -68166,7 +67804,7 @@ index d10dc8f..56b3430 100644 { __u32 mod; -@@ -286,7 +286,7 @@ static inline __u32 xfs_do_mod(void *a, __u32 b, int n) +@@ -290,7 +290,7 @@ static inline __u32 xfs_do_mod(void *a, __u32 b, int n) return 0; } #else @@ -77847,7 +77485,7 @@ index 0000000..0e39d8c +} diff --git a/grsecurity/grsec_mount.c b/grsecurity/grsec_mount.c new file mode 100644 -index 0000000..cd9e124 +index 0000000..6f9eb73 --- /dev/null +++ b/grsecurity/grsec_mount.c @@ -0,0 +1,65 @@ @@ -77879,11 +77517,11 @@ index 0000000..cd9e124 +} + +void -+gr_log_mount(const char *from, const char *to, const int retval) ++gr_log_mount(const char *from, struct path *to, const int retval) +{ +#ifdef CONFIG_GRKERNSEC_AUDIT_MOUNT + if (grsec_enable_mount && (retval >= 0)) -+ gr_log_str_str(GR_DO_AUDIT, GR_MOUNT_AUDIT_MSG, from ? from : "none", to); ++ gr_log_str_fs(GR_DO_AUDIT, GR_MOUNT_AUDIT_MSG, from ? from : "none", to->dentry, to->mnt); +#endif + return; +} @@ -79219,7 +78857,7 @@ index 77ff547..181834f 100644 #define pud_none(pud) 0 #define pud_bad(pud) 0 diff --git a/include/asm-generic/atomic-long.h b/include/asm-generic/atomic-long.h -index b7babf0..97f4c4f 100644 +index b7babf0..1e4b4f1 100644 --- a/include/asm-generic/atomic-long.h +++ b/include/asm-generic/atomic-long.h @@ -22,6 +22,12 @@ @@ -79480,7 +79118,15 @@ index b7babf0..97f4c4f 100644 static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) { atomic_t *v = (atomic_t *)l; -@@ -218,6 +356,16 @@ static inline long atomic_long_add_return(long i, atomic_long_t *l) +@@ -211,13 +349,23 @@ static inline int atomic_long_add_negative(long i, atomic_long_t *l) + return atomic_add_negative(i, v); + } + +-static inline long atomic_long_add_return(long i, atomic_long_t *l) ++static inline long __intentional_overflow(-1) atomic_long_add_return(long i, atomic_long_t *l) + { + atomic_t *v = (atomic_t *)l; + return (long)atomic_add_return(i, v); } @@ -79571,21 +79217,8 @@ index b7babf0..97f4c4f 100644 +#endif + #endif /* _ASM_GENERIC_ATOMIC_LONG_H */ -diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h -index 9c79e76..9f7827d 100644 ---- a/include/asm-generic/atomic.h -+++ b/include/asm-generic/atomic.h -@@ -154,7 +154,7 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) - * Atomically clears the bits set in @mask from @v - */ - #ifndef atomic_clear_mask --static inline void atomic_clear_mask(unsigned long mask, atomic_t *v) -+static inline void atomic_clear_mask(unsigned int mask, atomic_t *v) - { - unsigned long flags; - diff --git a/include/asm-generic/atomic64.h b/include/asm-generic/atomic64.h -index b18ce4f..2ee2843 100644 +index 30ad9c8..c70c170 100644 --- a/include/asm-generic/atomic64.h +++ b/include/asm-generic/atomic64.h @@ -16,6 +16,8 @@ typedef struct { @@ -79597,7 +79230,7 @@ index b18ce4f..2ee2843 100644 #define ATOMIC64_INIT(i) { (i) } extern long long atomic64_read(const atomic64_t *v); -@@ -39,4 +41,14 @@ extern int atomic64_add_unless(atomic64_t *v, long long a, long long u); +@@ -51,4 +53,14 @@ extern int atomic64_add_unless(atomic64_t *v, long long a, long long u); #define atomic64_dec_and_test(v) (atomic64_dec_return((v)) == 0) #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1LL, 0LL) @@ -79701,7 +79334,7 @@ index 0d68a1e..b74a761 100644 machine_restart(NULL); } diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h -index 975e1cc..0b8a083 100644 +index b8fdc57..c6d5a5c 100644 --- a/include/asm-generic/io.h +++ b/include/asm-generic/io.h @@ -289,7 +289,7 @@ static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p) @@ -79854,10 +79487,10 @@ index 810431d..0ec4804f 100644 * (puds are folded into pgds so this doesn't get actually called, * but the define is needed for a generic inline function.) diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h -index 53b2acc..f4568e7 100644 +index 752e30d..87f172d 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h -@@ -819,6 +819,22 @@ static inline void pmdp_set_numa(struct mm_struct *mm, unsigned long addr, +@@ -828,6 +828,22 @@ static inline void pmdp_set_numa(struct mm_struct *mm, unsigned long addr, } #endif /* CONFIG_NUMA_BALANCING */ @@ -79906,10 +79539,10 @@ index 72d8803..cb9749c 100644 + #endif /* __ASM_GENERIC_UACCESS_H */ diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h -index 5ba0360..e85c934 100644 +index aa70cbd..fd72c7a 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h -@@ -231,6 +231,7 @@ +@@ -233,6 +233,7 @@ .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start_rodata) = .; \ *(.rodata) *(.rodata.*) \ @@ -79917,7 +79550,7 @@ index 5ba0360..e85c934 100644 *(__vermagic) /* Kernel version magic */ \ . = ALIGN(8); \ VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .; \ -@@ -722,17 +723,18 @@ +@@ -724,17 +725,18 @@ * section in the linker script will go there too. @phdr should have * a leading colon. * @@ -79954,18 +79587,18 @@ index 623a59c..1e79ab9 100644 struct crypto_instance { struct crypto_alg alg; diff --git a/include/drm/drmP.h b/include/drm/drmP.h -index 1968907..7d9ed9f 100644 +index 53ed876..5bb09be 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h -@@ -68,6 +68,7 @@ - #include - #include +@@ -59,6 +59,7 @@ + + #include #include +#include - #include - #include - #include -@@ -260,10 +261,12 @@ do { \ + #include + + #include +@@ -223,10 +224,12 @@ void drm_err(const char *func, const char *format, ...); * \param cmd command. * \param arg argument. */ @@ -79980,7 +79613,7 @@ index 1968907..7d9ed9f 100644 unsigned long arg); #define DRM_IOCTL_NR(n) _IOC_NR(n) -@@ -279,10 +282,10 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, +@@ -242,10 +245,10 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, struct drm_ioctl_desc { unsigned int cmd; int flags; @@ -79993,7 +79626,7 @@ index 1968907..7d9ed9f 100644 /** * Creates a driver or general drm_ioctl_desc array entry for the given -@@ -946,7 +949,8 @@ struct drm_info_list { +@@ -629,7 +632,8 @@ struct drm_info_list { int (*show)(struct seq_file*, void*); /** show callback */ u32 driver_features; /**< Required driver features for this entry */ void *data; @@ -80003,7 +79636,7 @@ index 1968907..7d9ed9f 100644 /** * debugfs node structure. This structure represents a debugfs file. -@@ -1030,7 +1034,7 @@ struct drm_device { +@@ -713,7 +717,7 @@ struct drm_device { /** \name Usage Counters */ /*@{ */ @@ -80099,19 +79732,10 @@ index c1da539..1dcec55 100644 struct atmphy_ops { int (*start)(struct atm_dev *dev); diff --git a/include/linux/audit.h b/include/linux/audit.h -index 22cfddb..1514eef 100644 +index 10f155b..6c73ffe 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h -@@ -86,7 +86,7 @@ extern unsigned compat_dir_class[]; - extern unsigned compat_chattr_class[]; - extern unsigned compat_signal_class[]; - --extern int __weak audit_classify_compat_syscall(int abi, unsigned syscall); -+extern int audit_classify_compat_syscall(int abi, unsigned syscall); - - /* audit_names->type values */ - #define AUDIT_TYPE_UNKNOWN 0 /* we don't know yet */ -@@ -210,7 +210,7 @@ static inline void audit_ptrace(struct task_struct *t) +@@ -219,7 +219,7 @@ static inline void audit_ptrace(struct task_struct *t) extern unsigned int audit_serial(void); extern int auditsc_get_stamp(struct audit_context *ctx, struct timespec *t, unsigned int *serial); @@ -80146,10 +79770,10 @@ index 61f29e5..e67c658 100644 extern void __register_binfmt(struct linux_binfmt *fmt, int insert); diff --git a/include/linux/bitops.h b/include/linux/bitops.h -index cbc5833..8123ebc 100644 +index 5d858e0..336c1d9 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h -@@ -122,7 +122,7 @@ static inline __u64 ror64(__u64 word, unsigned int shift) +@@ -105,7 +105,7 @@ static inline __u64 ror64(__u64 word, unsigned int shift) * @word: value to rotate * @shift: bits to roll */ @@ -80158,7 +79782,7 @@ index cbc5833..8123ebc 100644 { return (word << shift) | (word >> (32 - shift)); } -@@ -132,7 +132,7 @@ static inline __u32 rol32(__u32 word, unsigned int shift) +@@ -115,7 +115,7 @@ static inline __u32 rol32(__u32 word, unsigned int shift) * @word: value to rotate * @shift: bits to roll */ @@ -80167,7 +79791,7 @@ index cbc5833..8123ebc 100644 { return (word >> shift) | (word << (32 - shift)); } -@@ -188,7 +188,7 @@ static inline __s32 sign_extend32(__u32 value, int index) +@@ -171,7 +171,7 @@ static inline __s32 sign_extend32(__u32 value, int index) return (__s32)(value << shift) >> shift; } @@ -80177,10 +79801,10 @@ index cbc5833..8123ebc 100644 if (sizeof(l) == 4) return fls(l); diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h -index f2057ff8..59dfa2d 100644 +index aac0f9e..73c9869 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h -@@ -1625,7 +1625,7 @@ struct block_device_operations { +@@ -1615,7 +1615,7 @@ struct block_device_operations { /* this callback is with swap_lock and sometimes page table lock held */ void (*swap_slot_free_notify) (struct block_device *, unsigned long); struct module *owner; @@ -80266,10 +79890,10 @@ index 4ce9056..86caac6 100644 extern struct cleancache_ops * cleancache_register_ops(struct cleancache_ops *ops); diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h -index 411dd7e..ee38878 100644 +index 2839c63..5b06b6b 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h -@@ -180,6 +180,7 @@ struct clk_ops { +@@ -191,6 +191,7 @@ struct clk_ops { void (*init)(struct clk_hw *hw); int (*debug_init)(struct clk_hw *hw, struct dentry *dentry); }; @@ -80300,7 +79924,7 @@ index e649426..a74047b 100644 asmlinkage long compat_sys_lookup_dcookie(u32, u32, char __user *, compat_size_t); /* diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h -index 2507fd2..55203f8 100644 +index d1a5582..4424efa 100644 --- a/include/linux/compiler-gcc4.h +++ b/include/linux/compiler-gcc4.h @@ -39,9 +39,34 @@ @@ -80516,10 +80140,10 @@ index 34025df..d94bbbc 100644 /* * Users often need to create attribute structures for their configurable diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h -index 7d1955a..d86a3ca 100644 +index 503b085b..1638c9e 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h -@@ -203,6 +203,7 @@ struct global_attr { +@@ -206,6 +206,7 @@ struct global_attr { ssize_t (*store)(struct kobject *a, struct attribute *b, const char *c, size_t count); }; @@ -80527,7 +80151,7 @@ index 7d1955a..d86a3ca 100644 #define define_one_global_ro(_name) \ static struct global_attr _name = \ -@@ -269,7 +270,7 @@ struct cpufreq_driver { +@@ -273,7 +274,7 @@ struct cpufreq_driver { bool boost_supported; bool boost_enabled; int (*set_boost) (int state); @@ -80560,7 +80184,7 @@ index 25e0df6..952dffd 100644 #ifdef CONFIG_CPU_IDLE extern int cpuidle_register_governor(struct cpuidle_governor *gov); diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h -index 2997af6..424ddc1 100644 +index 0a9a6da..ea597ca 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h @@ -118,17 +118,17 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp) @@ -80612,7 +80236,7 @@ index 2997af6..424ddc1 100644 int cpumask_set_cpu_local_first(int i, int numa_node, cpumask_t *dstp); diff --git a/include/linux/cred.h b/include/linux/cred.h -index b2d0820..2ecafd3 100644 +index 2fb2ca2..d6a3340 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h @@ -35,7 +35,7 @@ struct group_info { @@ -80624,7 +80248,7 @@ index b2d0820..2ecafd3 100644 /** * get_group_info - Get a reference to a group info structure -@@ -136,7 +136,7 @@ struct cred { +@@ -137,7 +137,7 @@ struct cred { struct user_namespace *user_ns; /* user_ns the caps and keyrings are relative to. */ struct group_info *group_info; /* supplementary groups for euid/fsgid */ struct rcu_head rcu; /* RCU deletion hook */ @@ -80633,7 +80257,7 @@ index b2d0820..2ecafd3 100644 extern void __put_cred(struct cred *); extern void exit_creds(struct task_struct *); -@@ -194,6 +194,9 @@ static inline void validate_creds_for_do_exit(struct task_struct *tsk) +@@ -195,6 +195,9 @@ static inline void validate_creds_for_do_exit(struct task_struct *tsk) static inline void validate_process_creds(void) { } @@ -80643,7 +80267,7 @@ index b2d0820..2ecafd3 100644 #endif /** -@@ -331,6 +334,7 @@ static inline void put_cred(const struct cred *_cred) +@@ -332,6 +335,7 @@ static inline void put_cred(const struct cred *_cred) #define task_uid(task) (task_cred_xxx((task), uid)) #define task_euid(task) (task_cred_xxx((task), euid)) @@ -80694,13 +80318,13 @@ index 653589e..4ef254a 100644 return c | 0x20; } diff --git a/include/linux/dcache.h b/include/linux/dcache.h -index 75a227c..1456987 100644 +index 1c2f1b8..c67151e 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h -@@ -134,7 +134,7 @@ struct dentry { +@@ -133,7 +133,7 @@ struct dentry { + struct hlist_node d_alias; /* inode alias list */ + struct rcu_head d_rcu; } d_u; - struct list_head d_subdirs; /* our children */ - struct hlist_node d_alias; /* inode alias list */ -}; +} __randomize_layout; @@ -80733,10 +80357,10 @@ index f1863dc..5c26074 100644 /** * struct devfreq - Device devfreq structure diff --git a/include/linux/device.h b/include/linux/device.h -index 43d183a..03b6ba2 100644 +index ce1f2160..189bc33 100644 --- a/include/linux/device.h +++ b/include/linux/device.h -@@ -310,7 +310,7 @@ struct subsys_interface { +@@ -311,7 +311,7 @@ struct subsys_interface { struct list_head node; int (*add_dev)(struct device *dev, struct subsys_interface *sif); int (*remove_dev)(struct device *dev, struct subsys_interface *sif); @@ -80745,7 +80369,7 @@ index 43d183a..03b6ba2 100644 int subsys_interface_register(struct subsys_interface *sif); void subsys_interface_unregister(struct subsys_interface *sif); -@@ -506,7 +506,7 @@ struct device_type { +@@ -507,7 +507,7 @@ struct device_type { void (*release)(struct device *dev); const struct dev_pm_ops *pm; @@ -80754,7 +80378,7 @@ index 43d183a..03b6ba2 100644 /* interface for exporting device attributes */ struct device_attribute { -@@ -516,11 +516,12 @@ struct device_attribute { +@@ -517,11 +517,12 @@ struct device_attribute { ssize_t (*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); }; @@ -80769,7 +80393,7 @@ index 43d183a..03b6ba2 100644 ssize_t device_show_ulong(struct device *dev, struct device_attribute *attr, char *buf); diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h -index 931b709..89b2d89 100644 +index d5d3881..7ed54af 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -60,7 +60,7 @@ struct dma_map_ops { @@ -80782,10 +80406,10 @@ index 931b709..89b2d89 100644 #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h -index 1f9e642..39e4263 100644 +index 653a1fd..9133cd1 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h -@@ -1147,9 +1147,9 @@ struct dma_pinned_list { +@@ -1136,9 +1136,9 @@ struct dma_pinned_list { struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len); void dma_unpin_iovec_pages(struct dma_pinned_list* pinned_list); @@ -80798,11 +80422,11 @@ index 1f9e642..39e4263 100644 unsigned int offset, size_t len); diff --git a/include/linux/efi.h b/include/linux/efi.h -index 45cb4ff..c9b4912 100644 +index 0949f9c..04cb9a5 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -1036,6 +1036,7 @@ struct efivar_operations { - efi_set_variable_t *set_variable; +@@ -1050,6 +1050,7 @@ struct efivar_operations { + efi_set_variable_nonblocking_t *set_variable_nonblocking; efi_query_variable_store_t *query_variable_store; }; +typedef struct efivar_operations __no_const efivar_operations_no_const; @@ -80887,104 +80511,6 @@ index 230f87b..1fd0485 100644 void do_close_on_exec(struct files_struct *); int iterate_fd(struct files_struct *, unsigned, int (*)(const void *, struct file *, unsigned), -diff --git a/include/linux/filter.h b/include/linux/filter.h -index a5227ab..c789945 100644 ---- a/include/linux/filter.h -+++ b/include/linux/filter.h -@@ -9,6 +9,11 @@ - #include - #include - #include -+#include -+ -+struct sk_buff; -+struct sock; -+struct seccomp_data; - - /* Internally used and optimized filter representation with extended - * instruction set based on top of classic BPF. -@@ -320,20 +325,23 @@ struct sock_fprog_kern { - struct sock_filter *filter; - }; - --struct sk_buff; --struct sock; --struct seccomp_data; -+struct bpf_work_struct { -+ struct bpf_prog *prog; -+ struct work_struct work; -+}; - - struct bpf_prog { -+ u32 pages; /* Number of allocated pages */ - u32 jited:1, /* Is our filter JIT'ed? */ - len:31; /* Number of filter blocks */ - struct sock_fprog_kern *orig_prog; /* Original BPF program */ -+ struct bpf_work_struct *work; /* Deferred free work struct */ - unsigned int (*bpf_func)(const struct sk_buff *skb, - const struct bpf_insn *filter); -+ /* Instructions for interpreter */ - union { - struct sock_filter insns[0]; - struct bpf_insn insnsi[0]; -- struct work_struct work; - }; - }; - -@@ -353,6 +361,26 @@ static inline unsigned int bpf_prog_size(unsigned int proglen) - - #define bpf_classic_proglen(fprog) (fprog->len * sizeof(fprog->filter[0])) - -+#ifdef CONFIG_DEBUG_SET_MODULE_RONX -+static inline void bpf_prog_lock_ro(struct bpf_prog *fp) -+{ -+ set_memory_ro((unsigned long)fp, fp->pages); -+} -+ -+static inline void bpf_prog_unlock_ro(struct bpf_prog *fp) -+{ -+ set_memory_rw((unsigned long)fp, fp->pages); -+} -+#else -+static inline void bpf_prog_lock_ro(struct bpf_prog *fp) -+{ -+} -+ -+static inline void bpf_prog_unlock_ro(struct bpf_prog *fp) -+{ -+} -+#endif /* CONFIG_DEBUG_SET_MODULE_RONX */ -+ - int sk_filter(struct sock *sk, struct sk_buff *skb); - - void bpf_prog_select_runtime(struct bpf_prog *fp); -@@ -361,6 +389,17 @@ void bpf_prog_free(struct bpf_prog *fp); - int bpf_convert_filter(struct sock_filter *prog, int len, - struct bpf_insn *new_prog, int *new_len); - -+struct bpf_prog *bpf_prog_alloc(unsigned int size, gfp_t gfp_extra_flags); -+struct bpf_prog *bpf_prog_realloc(struct bpf_prog *fp_old, unsigned int size, -+ gfp_t gfp_extra_flags); -+void __bpf_prog_free(struct bpf_prog *fp); -+ -+static inline void bpf_prog_unlock_free(struct bpf_prog *fp) -+{ -+ bpf_prog_unlock_ro(fp); -+ __bpf_prog_free(fp); -+} -+ - int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog); - void bpf_prog_destroy(struct bpf_prog *fp); - -@@ -450,7 +489,7 @@ static inline void bpf_jit_compile(struct bpf_prog *fp) - - static inline void bpf_jit_free(struct bpf_prog *fp) - { -- kfree(fp); -+ bpf_prog_unlock_free(fp); - } - #endif /* CONFIG_BPF_JIT */ - diff --git a/include/linux/frontswap.h b/include/linux/frontswap.h index 8293262..2b3b8bd 100644 --- a/include/linux/frontswap.h @@ -80999,10 +80525,10 @@ index 8293262..2b3b8bd 100644 extern bool frontswap_enabled; extern struct frontswap_ops * diff --git a/include/linux/fs.h b/include/linux/fs.h -index 9418772..0155807 100644 +index 9ab779e..0c636f2 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h -@@ -401,7 +401,7 @@ struct address_space { +@@ -412,7 +412,7 @@ struct address_space { spinlock_t private_lock; /* for use by the address_space */ struct list_head private_list; /* ditto */ void *private_data; /* ditto */ @@ -81011,7 +80537,7 @@ index 9418772..0155807 100644 /* * On most architectures that alignment is already the case; but * must be enforced here for CRIS, to let the least significant bit -@@ -444,7 +444,7 @@ struct block_device { +@@ -455,7 +455,7 @@ struct block_device { int bd_fsfreeze_count; /* Mutex for freeze */ struct mutex bd_fsfreeze_mutex; @@ -81020,7 +80546,7 @@ index 9418772..0155807 100644 /* * Radix-tree tags, for tagging dirty and writeback pages within the pagecache -@@ -613,7 +613,7 @@ struct inode { +@@ -624,7 +624,7 @@ struct inode { #endif void *i_private; /* fs or device private pointer */ @@ -81029,7 +80555,7 @@ index 9418772..0155807 100644 static inline int inode_unhashed(struct inode *inode) { -@@ -806,7 +806,7 @@ struct file { +@@ -820,7 +820,7 @@ struct file { struct list_head f_tfile_llink; #endif /* #ifdef CONFIG_EPOLL */ struct address_space *f_mapping; @@ -81038,7 +80564,7 @@ index 9418772..0155807 100644 struct file_handle { __u32 handle_bytes; -@@ -934,7 +934,7 @@ struct file_lock { +@@ -945,7 +945,7 @@ struct file_lock { int state; /* state of grant or error if -ve */ } afs; } fl_u; @@ -81047,16 +80573,16 @@ index 9418772..0155807 100644 /* The following constant reflects the upper bound of the file/locking space */ #ifndef OFFSET_MAX -@@ -1284,7 +1284,7 @@ struct super_block { - struct list_lru s_dentry_lru ____cacheline_aligned_in_smp; - struct list_lru s_inode_lru ____cacheline_aligned_in_smp; - struct rcu_head rcu; +@@ -1287,7 +1287,7 @@ struct super_block { + * Indicates how deep in a filesystem stack this SB is + */ + int s_stack_depth; -}; +} __randomize_layout; extern struct timespec current_fs_time(struct super_block *sb); -@@ -1510,7 +1510,8 @@ struct file_operations { +@@ -1514,7 +1514,8 @@ struct file_operations { long (*fallocate)(struct file *file, int mode, loff_t offset, loff_t len); int (*show_fdinfo)(struct seq_file *m, struct file *f); @@ -81066,7 +80592,7 @@ index 9418772..0155807 100644 struct inode_operations { struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int); -@@ -2796,4 +2797,14 @@ static inline bool dir_relax(struct inode *inode) +@@ -2823,4 +2824,14 @@ static inline bool dir_relax(struct inode *inode) return !IS_DEADDIR(inode); } @@ -81192,7 +80718,7 @@ index ec274e0..e678159 100644 static inline sector_t get_start_sect(struct block_device *bdev) diff --git a/include/linux/genl_magic_func.h b/include/linux/genl_magic_func.h -index c0894dd..2fbf10c 100644 +index 667c311..abac2a7 100644 --- a/include/linux/genl_magic_func.h +++ b/include/linux/genl_magic_func.h @@ -246,7 +246,7 @@ const char *CONCAT_(GENL_MAGIC_FAMILY, _genl_cmd_to_str)(__u8 cmd) @@ -81205,7 +80731,7 @@ index c0894dd..2fbf10c 100644 }; diff --git a/include/linux/gfp.h b/include/linux/gfp.h -index 5e7219d..b1ed627 100644 +index 41b30fd..a3718cf 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -34,6 +34,13 @@ struct vm_area_struct; @@ -81246,7 +80772,7 @@ index 5e7219d..b1ed627 100644 +#define GFP_USERCOPY __GFP_USERCOPY + /* Convert GFP flags to their corresponding migrate type */ - static inline int allocflags_to_migratetype(gfp_t gfp_flags) + static inline int gfpflags_to_migratetype(const gfp_t gfp_flags) { diff --git a/include/linux/gracl.h b/include/linux/gracl.h new file mode 100644 @@ -82277,10 +81803,10 @@ index 0000000..b02ba9d +#define GR_MSRWRITE_MSG "denied write to CPU MSR by " diff --git a/include/linux/grsecurity.h b/include/linux/grsecurity.h new file mode 100644 -index 0000000..10b9635 +index 0000000..c3b0738 --- /dev/null +++ b/include/linux/grsecurity.h -@@ -0,0 +1,254 @@ +@@ -0,0 +1,244 @@ +#ifndef GR_SECURITY_H +#define GR_SECURITY_H +#include @@ -82367,7 +81893,7 @@ index 0000000..10b9635 + const struct vfsmount *mnt); +void gr_log_remount(const char *devname, const int retval); +void gr_log_unmount(const char *devname, const int retval); -+void gr_log_mount(const char *from, const char *to, const int retval); ++void gr_log_mount(const char *from, struct path *to, const int retval); +void gr_log_textrel(struct vm_area_struct *vma); +void gr_log_ptgnustack(struct file *file); +void gr_log_rwxmmap(struct file *file); @@ -82492,16 +82018,6 @@ index 0000000..10b9635 + +int gr_ptrace_readexec(struct file *file, int unsafe_flags); + -+#if defined(CONFIG_GRKERNSEC) && (defined(CONFIG_GRKERNSEC_RESLOG) || !defined(CONFIG_GRKERNSEC_NO_RBAC)) -+extern void gr_learn_resource(const struct task_struct *task, const int res, -+ const unsigned long wanted, const int gt); -+#else -+static inline void gr_learn_resource(const struct task_struct *task, const int res, -+ const unsigned long wanted, const int gt) -+{ -+} -+#endif -+ +#ifdef CONFIG_GRKERNSEC_RESLOG +extern void gr_log_resource(const struct task_struct *task, const int res, + const unsigned long wanted, const int gt); @@ -82691,10 +82207,10 @@ index 2df8e8d..3e1280d 100644 #define __meminitconst __constsection(.meminit.rodata) #define __memexit __section(.memexit.text) __exitused __cold notrace diff --git a/include/linux/init_task.h b/include/linux/init_task.h -index 2bb4c4f3..e0fac69 100644 +index 77fc43f..73caf92 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h -@@ -149,6 +149,12 @@ extern struct task_group root_task_group; +@@ -158,6 +158,12 @@ extern struct task_group root_task_group; #define INIT_TASK_COMM "swapper" @@ -82707,7 +82223,7 @@ index 2bb4c4f3..e0fac69 100644 #ifdef CONFIG_RT_MUTEXES # define INIT_RT_MUTEXES(tsk) \ .pi_waiters = RB_ROOT, \ -@@ -196,6 +202,7 @@ extern struct task_group root_task_group; +@@ -205,6 +211,7 @@ extern struct task_group root_task_group; RCU_POINTER_INITIALIZER(cred, &init_cred), \ .comm = INIT_TASK_COMM, \ .thread = INIT_THREAD, \ @@ -82716,10 +82232,10 @@ index 2bb4c4f3..e0fac69 100644 .files = &init_files, \ .signal = &init_signals, \ diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h -index 698ad05..8601bb7 100644 +index 69517a2..6b12d37 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h -@@ -418,8 +418,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS]; +@@ -413,8 +413,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS]; struct softirq_action { @@ -82730,7 +82246,7 @@ index 698ad05..8601bb7 100644 asmlinkage void do_softirq(void); asmlinkage void __do_softirq(void); -@@ -433,7 +433,7 @@ static inline void do_softirq_own_stack(void) +@@ -428,7 +428,7 @@ static inline void do_softirq_own_stack(void) } #endif @@ -82740,10 +82256,10 @@ index 698ad05..8601bb7 100644 extern void __raise_softirq_irqoff(unsigned int nr); diff --git a/include/linux/iommu.h b/include/linux/iommu.h -index 20f9a52..63ee2e3 100644 +index e6a7c9f..5804745 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h -@@ -131,7 +131,7 @@ struct iommu_ops { +@@ -133,7 +133,7 @@ struct iommu_ops { u32 (*domain_get_windows)(struct iommu_domain *domain); unsigned long pgsize_bitmap; @@ -82753,7 +82269,7 @@ index 20f9a52..63ee2e3 100644 #define IOMMU_GROUP_NOTIFY_ADD_DEVICE 1 /* Device added */ #define IOMMU_GROUP_NOTIFY_DEL_DEVICE 2 /* Pre Device removed */ diff --git a/include/linux/ioport.h b/include/linux/ioport.h -index 142ec54..873e033 100644 +index 2c525022..345b106 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -161,7 +161,7 @@ struct resource *lookup_resource(struct resource *root, resource_size_t start); @@ -82779,10 +82295,10 @@ index 35e7eca..6afb7ad 100644 extern struct ipc_namespace init_ipc_ns; extern atomic_t nr_ipc_ns; diff --git a/include/linux/irq.h b/include/linux/irq.h -index 62af592..cc3b0d0 100644 +index 03f48d9..e86af0c 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h -@@ -344,7 +344,8 @@ struct irq_chip { +@@ -352,7 +352,8 @@ struct irq_chip { void (*irq_release_resources)(struct irq_data *data); unsigned long flags; @@ -82793,10 +82309,10 @@ index 62af592..cc3b0d0 100644 /* * irq_chip specific flags diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h -index 45e2d8c..26d85da 100644 +index 13eed92..3261c86 100644 --- a/include/linux/irqchip/arm-gic.h +++ b/include/linux/irqchip/arm-gic.h -@@ -75,9 +75,11 @@ +@@ -91,9 +91,11 @@ #ifndef __ASSEMBLY__ @@ -82878,10 +82394,10 @@ index 6883e19..e854fcb 100644 /* This macro allows us to keep printk typechecking */ static __printf(1, 2) diff --git a/include/linux/key-type.h b/include/linux/key-type.h -index 44792ee..6172f2a 100644 +index ff9f1d3..6712be5 100644 --- a/include/linux/key-type.h +++ b/include/linux/key-type.h -@@ -132,7 +132,7 @@ struct key_type { +@@ -152,7 +152,7 @@ struct key_type { /* internal fields */ struct list_head link; /* link in types list */ struct lock_class_key lock_class; /* key->sem lock class */ @@ -83001,10 +82517,10 @@ index 484604d..0f6c5b6 100644 if (atomic_sub_and_test((int) count, &kref->refcount)) { release(kref); diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h -index a4c33b3..e854710 100644 +index a6059bd..8126d5c 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h -@@ -452,7 +452,7 @@ static inline void kvm_irqfd_exit(void) +@@ -460,7 +460,7 @@ static inline void kvm_irqfd_exit(void) { } #endif @@ -83013,7 +82529,7 @@ index a4c33b3..e854710 100644 struct module *module); void kvm_exit(void); -@@ -618,7 +618,7 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, +@@ -629,7 +629,7 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, struct kvm_guest_debug *dbg); int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); @@ -83023,7 +82539,7 @@ index a4c33b3..e854710 100644 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu); diff --git a/include/linux/libata.h b/include/linux/libata.h -index 92abb49..e7fff2a 100644 +index bd5fefe..2a8a8d2 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -976,7 +976,7 @@ struct ata_port_operations { @@ -83048,10 +82564,10 @@ index a6a42dd..6c5ebce 100644 /* diff --git a/include/linux/list.h b/include/linux/list.h -index cbbb96f..602d023 100644 +index f33f831..1ffe5e2 100644 --- a/include/linux/list.h +++ b/include/linux/list.h -@@ -112,6 +112,19 @@ extern void __list_del_entry(struct list_head *entry); +@@ -113,6 +113,19 @@ extern void __list_del_entry(struct list_head *entry); extern void list_del(struct list_head *entry); #endif @@ -83071,7 +82587,7 @@ index cbbb96f..602d023 100644 /** * list_replace - replace old entry by new one * @old : the element to be replaced -@@ -145,6 +158,8 @@ static inline void list_del_init(struct list_head *entry) +@@ -146,6 +159,8 @@ static inline void list_del_init(struct list_head *entry) INIT_LIST_HEAD(entry); } @@ -83171,7 +82687,7 @@ index c45c089..298841c 100644 u32 remainder; return div_u64_rem(dividend, divisor, &remainder); diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h -index f230a97..714c006 100644 +index 3d385c8..deacb6a 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h @@ -91,6 +91,10 @@ static inline struct mempolicy *mpol_dup(struct mempolicy *pol) @@ -83185,7 +82701,7 @@ index f230a97..714c006 100644 static inline void mpol_get(struct mempolicy *pol) { -@@ -228,6 +232,9 @@ static inline void mpol_free_shared_policy(struct shared_policy *p) +@@ -229,6 +233,9 @@ static inline void mpol_free_shared_policy(struct shared_policy *p) } #define vma_policy(vma) NULL @@ -83196,10 +82712,10 @@ index f230a97..714c006 100644 static inline int vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst) diff --git a/include/linux/mm.h b/include/linux/mm.h -index f952cc8..b9f6135 100644 +index b464611..77cbfc1 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h -@@ -127,6 +127,11 @@ extern unsigned int kobjsize(const void *objp); +@@ -128,6 +128,11 @@ extern unsigned int kobjsize(const void *objp); #define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */ #define VM_NONLINEAR 0x00800000 /* Is non-linear (remap_file_pages) */ #define VM_ARCH_1 0x01000000 /* Architecture-specific flag */ @@ -83211,7 +82727,7 @@ index f952cc8..b9f6135 100644 #define VM_DONTDUMP 0x04000000 /* Do not include in the core dump */ #ifdef CONFIG_MEM_SOFT_DIRTY -@@ -237,8 +242,8 @@ struct vm_operations_struct { +@@ -238,8 +243,8 @@ struct vm_operations_struct { /* called by access_process_vm when get_user_pages() fails, typically * for use by special VMAs that can switch between memory and hardware */ @@ -83222,7 +82738,7 @@ index f952cc8..b9f6135 100644 /* Called by the /proc/PID/maps code to ask the vma whether it * has a special name. Returning non-NULL will also cause this -@@ -274,6 +279,7 @@ struct vm_operations_struct { +@@ -275,6 +280,7 @@ struct vm_operations_struct { int (*remap_pages)(struct vm_area_struct *vma, unsigned long addr, unsigned long size, pgoff_t pgoff); }; @@ -83230,7 +82746,7 @@ index f952cc8..b9f6135 100644 struct mmu_gather; struct inode; -@@ -1163,8 +1169,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address, +@@ -1165,8 +1171,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address, unsigned long *pfn); int follow_phys(struct vm_area_struct *vma, unsigned long address, unsigned int flags, unsigned long *prot, resource_size_t *phys); @@ -83241,7 +82757,7 @@ index f952cc8..b9f6135 100644 static inline void unmap_shared_mapping_range(struct address_space *mapping, loff_t const holebegin, loff_t const holelen) -@@ -1204,9 +1210,9 @@ static inline int fixup_user_fault(struct task_struct *tsk, +@@ -1206,9 +1212,9 @@ static inline int fixup_user_fault(struct task_struct *tsk, } #endif @@ -83254,7 +82770,7 @@ index f952cc8..b9f6135 100644 long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start, unsigned long nr_pages, -@@ -1238,34 +1244,6 @@ int set_page_dirty_lock(struct page *page); +@@ -1240,34 +1246,6 @@ int set_page_dirty_lock(struct page *page); int clear_page_dirty_for_io(struct page *page); int get_cmdline(struct task_struct *task, char *buffer, int buflen); @@ -83286,26 +82802,10 @@ index f952cc8..b9f6135 100644 - !vma_growsup(vma->vm_next, addr); -} - - extern pid_t - vm_is_stack(struct task_struct *task, struct vm_area_struct *vma, int in_group); - -@@ -1365,6 +1343,15 @@ static inline void sync_mm_rss(struct mm_struct *mm) - } - #endif - -+#ifdef CONFIG_MMU -+pgprot_t vm_get_page_prot(vm_flags_t vm_flags); -+#else -+static inline pgprot_t vm_get_page_prot(vm_flags_t vm_flags) -+{ -+ return __pgprot(0); -+} -+#endif -+ - int vma_wants_writenotify(struct vm_area_struct *vma); + extern struct task_struct *task_of_stack(struct task_struct *task, + struct vm_area_struct *vma, bool in_group); - extern pte_t *__get_locked_pte(struct mm_struct *mm, unsigned long addr, -@@ -1383,8 +1370,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, +@@ -1385,8 +1363,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, { return 0; } @@ -83321,7 +82821,7 @@ index f952cc8..b9f6135 100644 #endif #ifdef __PAGETABLE_PMD_FOLDED -@@ -1393,8 +1387,15 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud, +@@ -1395,8 +1380,15 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud, { return 0; } @@ -83337,7 +82837,7 @@ index f952cc8..b9f6135 100644 #endif int __pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma, -@@ -1412,11 +1413,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a +@@ -1414,11 +1406,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a NULL: pud_offset(pgd, address); } @@ -83361,7 +82861,31 @@ index f952cc8..b9f6135 100644 #endif /* CONFIG_MMU && !__ARCH_HAS_4LEVEL_HACK */ #if USE_SPLIT_PTE_PTLOCKS -@@ -1815,7 +1828,7 @@ extern int install_special_mapping(struct mm_struct *mm, +@@ -1801,12 +1805,23 @@ extern struct vm_area_struct *copy_vma(struct vm_area_struct **, + bool *need_rmap_locks); + extern void exit_mmap(struct mm_struct *); + ++#if defined(CONFIG_GRKERNSEC) && (defined(CONFIG_GRKERNSEC_RESLOG) || !defined(CONFIG_GRKERNSEC_NO_RBAC)) ++extern void gr_learn_resource(const struct task_struct *task, const int res, ++ const unsigned long wanted, const int gt); ++#else ++static inline void gr_learn_resource(const struct task_struct *task, const int res, ++ const unsigned long wanted, const int gt) ++{ ++} ++#endif ++ + static inline int check_data_rlimit(unsigned long rlim, + unsigned long new, + unsigned long start, + unsigned long end_data, + unsigned long start_data) + { ++ gr_learn_resource(current, RLIMIT_DATA, (new - start) + (end_data - start_data), 1); + if (rlim < RLIM_INFINITY) { + if (((new - start) + (end_data - start_data)) > rlim) + return -ENOSPC; +@@ -1831,7 +1846,7 @@ extern int install_special_mapping(struct mm_struct *mm, unsigned long addr, unsigned long len, unsigned long flags, struct page **pages); @@ -83370,7 +82894,7 @@ index f952cc8..b9f6135 100644 extern unsigned long mmap_region(struct file *file, unsigned long addr, unsigned long len, vm_flags_t vm_flags, unsigned long pgoff); -@@ -1823,6 +1836,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, +@@ -1839,6 +1854,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long pgoff, unsigned long *populate); extern int do_munmap(struct mm_struct *, unsigned long, size_t); @@ -83378,7 +82902,7 @@ index f952cc8..b9f6135 100644 #ifdef CONFIG_MMU extern int __mm_populate(unsigned long addr, unsigned long len, -@@ -1851,10 +1865,11 @@ struct vm_unmapped_area_info { +@@ -1867,10 +1883,11 @@ struct vm_unmapped_area_info { unsigned long high_limit; unsigned long align_mask; unsigned long align_offset; @@ -83392,7 +82916,7 @@ index f952cc8..b9f6135 100644 /* * Search for an unmapped address range. -@@ -1866,7 +1881,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info); +@@ -1882,7 +1899,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info); * - satisfies (begin_addr & align_mask) == (align_offset & align_mask) */ static inline unsigned long @@ -83401,7 +82925,7 @@ index f952cc8..b9f6135 100644 { if (!(info->flags & VM_UNMAPPED_AREA_TOPDOWN)) return unmapped_area(info); -@@ -1928,6 +1943,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add +@@ -1944,6 +1961,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr, struct vm_area_struct **pprev); @@ -83412,23 +82936,20 @@ index f952cc8..b9f6135 100644 /* Look up the first VMA which intersects the interval start_addr..end_addr-1, NULL if none. Assume start_addr < end_addr. */ static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr) -@@ -1956,15 +1975,6 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm, - return vma; +@@ -1973,10 +1994,10 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm, } --#ifdef CONFIG_MMU + #ifdef CONFIG_MMU -pgprot_t vm_get_page_prot(unsigned long vm_flags); --#else ++pgprot_t vm_get_page_prot(vm_flags_t vm_flags); + void vma_set_page_prot(struct vm_area_struct *vma); + #else -static inline pgprot_t vm_get_page_prot(unsigned long vm_flags) --{ -- return __pgprot(0); --} --#endif -- - #ifdef CONFIG_NUMA_BALANCING - unsigned long change_prot_numa(struct vm_area_struct *vma, - unsigned long start, unsigned long end); -@@ -2016,6 +2026,11 @@ void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long); ++static inline pgprot_t vm_get_page_prot(vm_flags_t vm_flags) + { + return __pgprot(0); + } +@@ -2038,6 +2059,11 @@ void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long); static inline void vm_stat_account(struct mm_struct *mm, unsigned long flags, struct file *file, long pages) { @@ -83440,7 +82961,7 @@ index f952cc8..b9f6135 100644 mm->total_vm += pages; } #endif /* CONFIG_PROC_FS */ -@@ -2104,7 +2119,7 @@ extern int unpoison_memory(unsigned long pfn); +@@ -2126,7 +2152,7 @@ extern int unpoison_memory(unsigned long pfn); extern int sysctl_memory_failure_early_kill; extern int sysctl_memory_failure_recovery; extern void shake_page(struct page *p, int access); @@ -83449,7 +82970,7 @@ index f952cc8..b9f6135 100644 extern int soft_offline_page(struct page *page, int flags); #if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS) -@@ -2139,5 +2154,11 @@ void __init setup_nr_node_ids(void); +@@ -2161,5 +2187,11 @@ void __init setup_nr_node_ids(void); static inline void setup_nr_node_ids(void) {} #endif @@ -83526,7 +83047,7 @@ index c5d5278..f0b68c8 100644 } diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h -index b21bac4..94142ca 100644 +index ffe66e3..b310722 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -527,7 +527,7 @@ struct zone { @@ -83537,7 +83058,7 @@ index b21bac4..94142ca 100644 + atomic_long_unchecked_t vm_stat[NR_VM_ZONE_STAT_ITEMS]; } ____cacheline_internodealigned_in_smp; - typedef enum { + enum zone_flags { diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 44eeef0..a92d3f9 100644 --- a/include/linux/mod_devicetable.h @@ -83755,10 +83276,10 @@ index 7eeb9bb..68f37e0 100644 } #endif diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h -index 494f99e..5059f63 100644 +index 1c9effa..1160bdd 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h -@@ -293,7 +293,7 @@ static inline void __kernel_param_unlock(void) +@@ -323,7 +323,7 @@ static inline void __kernel_param_unlock(void) * @len is usually just sizeof(string). */ #define module_param_string(name, string, len, perm) \ @@ -83767,7 +83288,7 @@ index 494f99e..5059f63 100644 = { len, string }; \ __module_param_call(MODULE_PARAM_PREFIX, name, \ ¶m_ops_string, \ -@@ -437,7 +437,7 @@ extern int param_set_bint(const char *val, const struct kernel_param *kp); +@@ -467,7 +467,7 @@ extern int param_set_bint(const char *val, const struct kernel_param *kp); */ #define module_param_array_named(name, array, type, nump, perm) \ param_check_##type(name, &(array)[0]); \ @@ -83777,7 +83298,7 @@ index 494f99e..5059f63 100644 .ops = ¶m_ops_##type, \ .elemsize = sizeof(array[0]), .elem = array }; \ diff --git a/include/linux/mount.h b/include/linux/mount.h -index 9262e4b..0a45f98 100644 +index c2c561d..a5f2a8c 100644 --- a/include/linux/mount.h +++ b/include/linux/mount.h @@ -66,7 +66,7 @@ struct vfsmount { @@ -83831,18 +83352,18 @@ index 17d8339..81656c0 100644 struct iovec; struct kvec; diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h -index c8e388e..5d8cd9b 100644 +index 74fd5d3..86a1e4f 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -1147,6 +1147,7 @@ struct net_device_ops { - void *priv); - int (*ndo_get_lock_subclass)(struct net_device *dev); +@@ -1156,6 +1156,7 @@ struct net_device_ops { + bool (*ndo_gso_check) (struct sk_buff *skb, + struct net_device *dev); }; +typedef struct net_device_ops __no_const net_device_ops_no_const; /** * enum net_device_priv_flags - &struct net_device priv_flags -@@ -1485,10 +1486,10 @@ struct net_device { +@@ -1498,10 +1499,10 @@ struct net_device { struct net_device_stats stats; @@ -83984,7 +83505,7 @@ index d137218..be0c176 100644 extern void path_get(const struct path *); extern void path_put(const struct path *); diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h -index 5f2e559..7d59314 100644 +index 2706ee9..e691f7c 100644 --- a/include/linux/pci_hotplug.h +++ b/include/linux/pci_hotplug.h @@ -71,7 +71,8 @@ struct hotplug_slot_ops { @@ -83998,10 +83519,10 @@ index 5f2e559..7d59314 100644 /** * struct hotplug_slot_info - used to notify the hotplug pci core of the state of the slot diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h -index 707617a..28a2e7e 100644 +index 893a0d0..d5f996e 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h -@@ -339,8 +339,8 @@ struct perf_event { +@@ -341,8 +341,8 @@ struct perf_event { enum perf_event_active_state state; unsigned int attach_state; @@ -84012,7 +83533,7 @@ index 707617a..28a2e7e 100644 /* * These are the total time in nanoseconds that the event -@@ -391,8 +391,8 @@ struct perf_event { +@@ -393,8 +393,8 @@ struct perf_event { * These accumulate total time (in nanoseconds) that children * events have been enabled and running, respectively. */ @@ -84023,7 +83544,7 @@ index 707617a..28a2e7e 100644 /* * Protect attach/detach and child_list: -@@ -722,7 +722,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64 +@@ -734,7 +734,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64 entry->ip[entry->nr++] = ip; } @@ -84032,7 +83553,7 @@ index 707617a..28a2e7e 100644 extern int sysctl_perf_event_mlock; extern int sysctl_perf_event_sample_rate; extern int sysctl_perf_cpu_time_max_percent; -@@ -737,19 +737,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write, +@@ -749,19 +749,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write, loff_t *ppos); @@ -84060,7 +83581,7 @@ index 707617a..28a2e7e 100644 } extern void perf_event_init(void); -@@ -880,7 +885,7 @@ struct perf_pmu_events_attr { +@@ -892,7 +897,7 @@ struct perf_pmu_events_attr { struct device_attribute attr; u64 id; const char *event_str; @@ -84102,29 +83623,29 @@ index eb8b8ac..62649e1 100644 unsigned int w_counter; struct page *tmp_page; diff --git a/include/linux/pm.h b/include/linux/pm.h -index 72c0fe0..26918ed 100644 +index 383fd68..7a11504 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h -@@ -620,6 +620,7 @@ extern int dev_pm_put_subsys_data(struct device *dev); - struct dev_pm_domain { +@@ -621,6 +621,7 @@ struct dev_pm_domain { struct dev_pm_ops ops; + void (*detach)(struct device *dev, bool power_off); }; +typedef struct dev_pm_domain __no_const dev_pm_domain_no_const; /* * The PM_EVENT_ messages are also used by drivers implementing the legacy diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h -index ebc4c76..7fab7b0 100644 +index 2e0e06d..824cc9b 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h -@@ -44,11 +44,11 @@ struct gpd_dev_ops { - int (*thaw_early)(struct device *dev); - int (*thaw)(struct device *dev); +@@ -36,11 +36,11 @@ struct gpd_dev_ops { + int (*save_state)(struct device *dev); + int (*restore_state)(struct device *dev); bool (*active_wakeup)(struct device *dev); -}; +} __no_const; - struct gpd_cpu_data { + struct gpd_cpuidle_data { unsigned int saved_exit_latency; - struct cpuidle_state *idle_state; + cpuidle_state_no_const *idle_state; @@ -84292,7 +83813,7 @@ index d78125f..7f36596 100644 extern void wake_up_klogd(void); diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h -index 9d117f6..d832b31 100644 +index b97bf2e..f14c92d4 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h @@ -17,8 +17,11 @@ extern void proc_flush_task(struct task_struct *); @@ -84340,7 +83861,7 @@ index 9d117f6..d832b31 100644 static inline struct proc_dir_entry *proc_mkdir_mode(const char *name, umode_t mode, struct proc_dir_entry *parent) { return NULL; } #define proc_create(name, mode, parent, proc_fops) ({NULL;}) -@@ -77,7 +97,7 @@ static inline int remove_proc_subtree(const char *name, struct proc_dir_entry *p +@@ -79,7 +99,7 @@ struct net; static inline struct proc_dir_entry *proc_net_mkdir( struct net *net, const char *name, struct proc_dir_entry *parent) { @@ -84376,7 +83897,7 @@ index 80d345a..9e89a9a 100644 extern bool qid_valid(struct kqid qid); diff --git a/include/linux/random.h b/include/linux/random.h -index 57fbbff..2170304 100644 +index b05856e..0a9f14e 100644 --- a/include/linux/random.h +++ b/include/linux/random.h @@ -9,9 +9,19 @@ @@ -84411,12 +83932,12 @@ index 57fbbff..2170304 100644 -u32 prandom_u32(void); +u32 prandom_u32(void) __intentional_overflow(-1); - void prandom_bytes(void *buf, int nbytes); + void prandom_bytes(void *buf, size_t nbytes); void prandom_seed(u32 seed); void prandom_reseed_late(void); @@ -37,6 +47,11 @@ struct rnd_state { u32 prandom_u32_state(struct rnd_state *state); - void prandom_bytes_state(struct rnd_state *state, void *buf, int nbytes); + void prandom_bytes_state(struct rnd_state *state, void *buf, size_t nbytes); +static inline unsigned long __intentional_overflow(-1) pax_get_random_long(void) +{ @@ -84426,7 +83947,7 @@ index 57fbbff..2170304 100644 /** * prandom_u32_max - returns a pseudo-random number in interval [0, ep_ro) * @ep_ro: right open interval endpoint -@@ -49,7 +64,7 @@ void prandom_bytes_state(struct rnd_state *state, void *buf, int nbytes); +@@ -49,7 +64,7 @@ void prandom_bytes_state(struct rnd_state *state, void *buf, size_t nbytes); * * Returns: pseudo-random number in interval [0, ep_ro) */ @@ -84436,10 +83957,10 @@ index 57fbbff..2170304 100644 return (u32)(((u64) prandom_u32() * ep_ro) >> 32); } diff --git a/include/linux/rbtree_augmented.h b/include/linux/rbtree_augmented.h -index fea49b5..2ac22bb 100644 +index 378c5ee..aa84a47 100644 --- a/include/linux/rbtree_augmented.h +++ b/include/linux/rbtree_augmented.h -@@ -80,7 +80,9 @@ rbname ## _rotate(struct rb_node *rb_old, struct rb_node *rb_new) \ +@@ -90,7 +90,9 @@ rbname ## _rotate(struct rb_node *rb_old, struct rb_node *rb_new) \ old->rbaugmented = rbcompute(old); \ } \ rbstatic const struct rb_augment_callbacks rbname = { \ @@ -84509,11 +84030,24 @@ index 372ad5e..d4373f8 100644 /** * hlist_del_init_rcu - deletes entry from hash list with re-initialization * @n: the element to delete from the hash list. +diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h +index 53ff1a7..c40f0ab 100644 +--- a/include/linux/rcupdate.h ++++ b/include/linux/rcupdate.h +@@ -332,7 +332,7 @@ extern struct srcu_struct tasks_rcu_exit_srcu; + #define rcu_note_voluntary_context_switch(t) \ + do { \ + if (ACCESS_ONCE((t)->rcu_tasks_holdout)) \ +- ACCESS_ONCE((t)->rcu_tasks_holdout) = false; \ ++ ACCESS_ONCE_RW((t)->rcu_tasks_holdout) = false; \ + } while (0) + #else /* #ifdef CONFIG_TASKS_RCU */ + #define TASKS_RCU(x) do { } while (0) diff --git a/include/linux/reboot.h b/include/linux/reboot.h -index 48bf152..d38b785 100644 +index 67fc8fc..a90f7d8 100644 --- a/include/linux/reboot.h +++ b/include/linux/reboot.h -@@ -44,9 +44,9 @@ extern int unregister_reboot_notifier(struct notifier_block *); +@@ -47,9 +47,9 @@ extern void do_kernel_restart(char *cmd); */ extern void migrate_to_reboot_cpu(void); @@ -84526,7 +84060,7 @@ index 48bf152..d38b785 100644 extern void machine_shutdown(void); struct pt_regs; -@@ -57,9 +57,9 @@ extern void machine_crash_shutdown(struct pt_regs *); +@@ -60,9 +60,9 @@ extern void machine_crash_shutdown(struct pt_regs *); */ extern void kernel_restart_prepare(char *cmd); @@ -84539,7 +84073,7 @@ index 48bf152..d38b785 100644 extern int C_A_D; /* for sysctl */ void ctrl_alt_del(void); -@@ -73,7 +73,7 @@ extern int orderly_poweroff(bool force); +@@ -76,7 +76,7 @@ extern int orderly_poweroff(bool force); * Emergency restart, callable from an interrupt handler. */ @@ -84589,7 +84123,7 @@ index 6bda06f..bf39a9b 100644 #define RIO_RESOURCE_MEM 0x00000100 #define RIO_RESOURCE_DOORBELL 0x00000200 diff --git a/include/linux/rmap.h b/include/linux/rmap.h -index be57450..31cf65e 100644 +index c0c2bce..4813524 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h @@ -144,8 +144,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma) @@ -84629,10 +84163,10 @@ index ed8f9e7..999bc96 100644 } diff --git a/include/linux/sched.h b/include/linux/sched.h -index 2b1d9e9..10ba706 100644 +index 5e344bb..0743255 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h -@@ -132,6 +132,7 @@ struct fs_struct; +@@ -133,6 +133,7 @@ struct fs_struct; struct perf_event_context; struct blk_plug; struct filename; @@ -84640,7 +84174,7 @@ index 2b1d9e9..10ba706 100644 #define VMACACHE_BITS 2 #define VMACACHE_SIZE (1U << VMACACHE_BITS) -@@ -374,7 +375,7 @@ extern char __sched_text_start[], __sched_text_end[]; +@@ -376,7 +377,7 @@ extern char __sched_text_start[], __sched_text_end[]; extern int in_sched_functions(unsigned long addr); #define MAX_SCHEDULE_TIMEOUT LONG_MAX @@ -84649,7 +84183,7 @@ index 2b1d9e9..10ba706 100644 extern signed long schedule_timeout_interruptible(signed long timeout); extern signed long schedule_timeout_killable(signed long timeout); extern signed long schedule_timeout_uninterruptible(signed long timeout); -@@ -385,6 +386,19 @@ struct nsproxy; +@@ -387,6 +388,19 @@ struct nsproxy; struct user_namespace; #ifdef CONFIG_MMU @@ -84669,7 +84203,7 @@ index 2b1d9e9..10ba706 100644 extern void arch_pick_mmap_layout(struct mm_struct *mm); extern unsigned long arch_get_unmapped_area(struct file *, unsigned long, unsigned long, -@@ -682,6 +696,17 @@ struct signal_struct { +@@ -685,6 +699,17 @@ struct signal_struct { #ifdef CONFIG_TASKSTATS struct taskstats *stats; #endif @@ -84687,7 +84221,7 @@ index 2b1d9e9..10ba706 100644 #ifdef CONFIG_AUDIT unsigned audit_tty; unsigned audit_tty_log_passwd; -@@ -708,7 +733,7 @@ struct signal_struct { +@@ -711,7 +736,7 @@ struct signal_struct { struct mutex cred_guard_mutex; /* guard against foreign influences on * credential calculations * (notably. ptrace) */ @@ -84696,7 +84230,7 @@ index 2b1d9e9..10ba706 100644 /* * Bits in flags field of signal_struct. -@@ -761,6 +786,14 @@ struct user_struct { +@@ -764,6 +789,14 @@ struct user_struct { struct key *session_keyring; /* UID's default session keyring */ #endif @@ -84711,7 +84245,7 @@ index 2b1d9e9..10ba706 100644 /* Hash table maintenance information */ struct hlist_node uidhash_node; kuid_t uid; -@@ -768,7 +801,7 @@ struct user_struct { +@@ -771,7 +804,7 @@ struct user_struct { #ifdef CONFIG_PERF_EVENTS atomic_long_t locked_vm; #endif @@ -84720,7 +84254,7 @@ index 2b1d9e9..10ba706 100644 extern int uids_sysfs_init(void); -@@ -1224,6 +1257,9 @@ enum perf_event_task_context { +@@ -1235,6 +1268,9 @@ enum perf_event_task_context { struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; @@ -84730,7 +84264,7 @@ index 2b1d9e9..10ba706 100644 atomic_t usage; unsigned int flags; /* per process flags, defined below */ unsigned int ptrace; -@@ -1345,8 +1381,8 @@ struct task_struct { +@@ -1362,8 +1398,8 @@ struct task_struct { struct list_head thread_node; struct completion *vfork_done; /* for vfork() */ @@ -84741,7 +84275,7 @@ index 2b1d9e9..10ba706 100644 cputime_t utime, stime, utimescaled, stimescaled; cputime_t gtime; -@@ -1371,11 +1407,6 @@ struct task_struct { +@@ -1388,11 +1424,6 @@ struct task_struct { struct task_cputime cputime_expires; struct list_head cpu_timers[3]; @@ -84753,7 +84287,7 @@ index 2b1d9e9..10ba706 100644 char comm[TASK_COMM_LEN]; /* executable name excluding path - access with [gs]et_task_comm (which lock it with task_lock()) -@@ -1393,6 +1424,10 @@ struct task_struct { +@@ -1410,6 +1441,10 @@ struct task_struct { #endif /* CPU-specific state of this task */ struct thread_struct thread; @@ -84764,7 +84298,7 @@ index 2b1d9e9..10ba706 100644 /* filesystem information */ struct fs_struct *fs; /* open file information */ -@@ -1467,6 +1502,10 @@ struct task_struct { +@@ -1484,6 +1519,10 @@ struct task_struct { gfp_t lockdep_reclaim_gfp; #endif @@ -84775,7 +84309,7 @@ index 2b1d9e9..10ba706 100644 /* journalling filesystem info */ void *journal_info; -@@ -1505,6 +1544,10 @@ struct task_struct { +@@ -1522,6 +1561,10 @@ struct task_struct { /* cg_list protected by css_set_lock and tsk->alloc_lock */ struct list_head cg_list; #endif @@ -84786,7 +84320,16 @@ index 2b1d9e9..10ba706 100644 #ifdef CONFIG_FUTEX struct robust_list_head __user *robust_list; #ifdef CONFIG_COMPAT -@@ -1644,7 +1687,78 @@ struct task_struct { +@@ -1635,7 +1678,7 @@ struct task_struct { + * Number of functions that haven't been traced + * because of depth overrun. + */ +- atomic_t trace_overrun; ++ atomic_unchecked_t trace_overrun; + /* Pause for the tracing */ + atomic_t tracing_graph_pause; + #endif +@@ -1661,7 +1704,78 @@ struct task_struct { unsigned int sequential_io; unsigned int sequential_io_avg; #endif @@ -84866,7 +84409,7 @@ index 2b1d9e9..10ba706 100644 /* Future-safe accessor for struct task_struct's cpus_allowed. */ #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed) -@@ -1726,7 +1840,7 @@ struct pid_namespace; +@@ -1743,7 +1857,7 @@ struct pid_namespace; pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, struct pid_namespace *ns); @@ -84875,7 +84418,7 @@ index 2b1d9e9..10ba706 100644 { return tsk->pid; } -@@ -2097,6 +2211,25 @@ extern u64 sched_clock_cpu(int cpu); +@@ -2106,6 +2220,25 @@ extern u64 sched_clock_cpu(int cpu); extern void sched_clock_init(void); @@ -84901,7 +84444,7 @@ index 2b1d9e9..10ba706 100644 #ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK static inline void sched_clock_tick(void) { -@@ -2230,7 +2363,9 @@ void yield(void); +@@ -2239,7 +2372,9 @@ void yield(void); extern struct exec_domain default_exec_domain; union thread_union { @@ -84911,7 +84454,7 @@ index 2b1d9e9..10ba706 100644 unsigned long stack[THREAD_SIZE/sizeof(long)]; }; -@@ -2263,6 +2398,7 @@ extern struct pid_namespace init_pid_ns; +@@ -2272,6 +2407,7 @@ extern struct pid_namespace init_pid_ns; */ extern struct task_struct *find_task_by_vpid(pid_t nr); @@ -84919,7 +84462,7 @@ index 2b1d9e9..10ba706 100644 extern struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns); -@@ -2427,7 +2563,7 @@ extern void __cleanup_sighand(struct sighand_struct *); +@@ -2436,7 +2572,7 @@ extern void __cleanup_sighand(struct sighand_struct *); extern void exit_itimers(struct signal_struct *); extern void flush_itimer_signals(void); @@ -84928,9 +84471,9 @@ index 2b1d9e9..10ba706 100644 extern int do_execve(struct filename *, const char __user * const __user *, -@@ -2642,9 +2778,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p) - - #endif +@@ -2653,9 +2789,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p) + #define task_stack_end_corrupted(task) \ + (*(end_of_stack(task)) != STACK_END_MAGIC) -static inline int object_is_on_stack(void *obj) +static inline int object_starts_on_stack(const void *obj) @@ -84953,7 +84496,7 @@ index 596a0e0..bea77ec 100644 extern unsigned int sysctl_sched_latency; extern unsigned int sysctl_sched_min_granularity; diff --git a/include/linux/security.h b/include/linux/security.h -index 623f90e..90b39da 100644 +index ba96471..74fb3f6 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -27,6 +27,7 @@ @@ -85049,10 +84592,10 @@ index 6fb8016..ab4465e 100644 /* shm_mode upper byte flags */ diff --git a/include/linux/signal.h b/include/linux/signal.h -index 750196f..ae7a3a4 100644 +index ab1e039..ad4229e 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h -@@ -292,7 +292,7 @@ static inline void allow_signal(int sig) +@@ -289,7 +289,7 @@ static inline void allow_signal(int sig) * know it'll be handled, so that they don't get converted to * SIGKILL or just silently dropped. */ @@ -85062,10 +84605,10 @@ index 750196f..ae7a3a4 100644 static inline void disallow_signal(int sig) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h -index abde271..bc9ece1 100644 +index 6c8b6f6..5a0f4bd 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -728,7 +728,7 @@ bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from, +@@ -773,7 +773,7 @@ bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from, struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags, int node); struct sk_buff *build_skb(void *data, unsigned int frag_size); @@ -85074,7 +84617,7 @@ index abde271..bc9ece1 100644 gfp_t priority) { return __alloc_skb(size, priority, 0, NUMA_NO_NODE); -@@ -1845,7 +1845,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb) +@@ -1962,7 +1962,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb) return skb->inner_transport_header - skb->inner_network_header; } @@ -85083,7 +84626,7 @@ index abde271..bc9ece1 100644 { return skb_network_header(skb) - skb->data; } -@@ -1917,7 +1917,7 @@ static inline void skb_pop_rcv_encapsulation(struct sk_buff *skb) +@@ -2022,7 +2022,7 @@ static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len) * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8) */ #ifndef NET_SKB_PAD @@ -85092,7 +84635,7 @@ index abde271..bc9ece1 100644 #endif int ___pskb_trim(struct sk_buff *skb, unsigned int len); -@@ -2524,7 +2524,7 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock, +@@ -2629,7 +2629,7 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock, int *err); unsigned int datagram_poll(struct file *file, struct socket *sock, struct poll_table_struct *wait); @@ -85101,7 +84644,7 @@ index abde271..bc9ece1 100644 struct iovec *to, int size); int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, int hlen, struct iovec *iov); -@@ -2918,6 +2918,9 @@ static inline void nf_reset(struct sk_buff *skb) +@@ -3091,6 +3091,9 @@ static inline void nf_reset(struct sk_buff *skb) nf_bridge_put(skb->nf_bridge); skb->nf_bridge = NULL; #endif @@ -85112,7 +84655,7 @@ index abde271..bc9ece1 100644 static inline void nf_reset_trace(struct sk_buff *skb) diff --git a/include/linux/slab.h b/include/linux/slab.h -index 1d9abb7..b1e8b10 100644 +index c265bec..4867d28 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -14,15 +14,29 @@ @@ -85172,16 +84715,7 @@ index 1d9abb7..b1e8b10 100644 /* * Some archs want to perform DMA into kmalloc caches and need a guaranteed -@@ -176,7 +195,7 @@ struct kmem_cache { - unsigned int align; /* Alignment as calculated */ - unsigned long flags; /* Active flags on the slab */ - const char *name; /* Slab name for sysfs */ -- int refcount; /* Use counter */ -+ atomic_t refcount; /* Use counter */ - void (*ctor)(void *); /* Called on object slot creation */ - struct list_head list; /* List of all slab caches on the system */ - }; -@@ -261,6 +280,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; +@@ -236,6 +255,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; #endif @@ -85192,7 +84726,7 @@ index 1d9abb7..b1e8b10 100644 /* * Figure out which kmalloc slab an allocation of a certain size * belongs to. -@@ -269,7 +292,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; +@@ -244,7 +267,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; * 2 = 120 .. 192 bytes * n = 2^(n-1) .. 2^n -1 */ @@ -85201,7 +84735,7 @@ index 1d9abb7..b1e8b10 100644 { if (!size) return 0; -@@ -312,11 +335,11 @@ static __always_inline int kmalloc_index(size_t size) +@@ -287,11 +310,11 @@ static __always_inline int kmalloc_index(size_t size) } #endif /* !CONFIG_SLOB */ @@ -85216,10 +84750,10 @@ index 1d9abb7..b1e8b10 100644 #else static __always_inline void *__kmalloc_node(size_t size, gfp_t flags, int node) diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h -index 8235dfb..47ce586 100644 +index b869d16..1453c73 100644 --- a/include/linux/slab_def.h +++ b/include/linux/slab_def.h -@@ -38,7 +38,7 @@ struct kmem_cache { +@@ -40,7 +40,7 @@ struct kmem_cache { /* 4) cache creation/removal */ const char *name; struct list_head list; @@ -85228,7 +84762,7 @@ index 8235dfb..47ce586 100644 int object_size; int align; -@@ -54,10 +54,14 @@ struct kmem_cache { +@@ -56,10 +56,14 @@ struct kmem_cache { unsigned long node_allocs; unsigned long node_frees; unsigned long node_overflow; @@ -85261,10 +84795,10 @@ index d82abd4..408c3a0 100644 int inuse; /* Offset to metadata */ int align; /* Alignment */ diff --git a/include/linux/smp.h b/include/linux/smp.h -index 34347f2..8739978 100644 +index 93dff5f..933c561 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h -@@ -174,7 +174,9 @@ static inline void kick_all_cpus_sync(void) { } +@@ -176,7 +176,9 @@ static inline void wake_up_all_idle_cpus(void) { } #endif #define get_cpu() ({ preempt_disable(); smp_processor_id(); }) @@ -85348,10 +84882,10 @@ index 70736b9..37f33db 100644 #ifdef __KERNEL__ diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h -index cf61ecd..a4a9bc0 100644 +index 2167846..0648fc3 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h -@@ -417,7 +417,7 @@ struct svc_procedure { +@@ -416,7 +416,7 @@ struct svc_procedure { unsigned int pc_count; /* call count */ unsigned int pc_cachetype; /* cache info (NFS) */ unsigned int pc_xdrressize; /* maximum size of XDR reply */ @@ -85417,10 +84951,10 @@ index e7a018e..49f8b17 100644 extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h -index 0f86d85..dff3419 100644 +index bda9b81..629e06e 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h -@@ -98,10 +98,16 @@ struct sigaltstack; +@@ -99,10 +99,16 @@ union bpf_attr; #define __MAP(n,...) __MAP##n(__VA_ARGS__) #define __SC_DECL(t, a) t a @@ -85438,7 +84972,7 @@ index 0f86d85..dff3419 100644 #define __SC_CAST(t, a) (t) a #define __SC_ARGS(t, a) a #define __SC_TEST(t, a) (void)BUILD_BUG_ON_ZERO(!__TYPE_IS_LL(t) && sizeof(t) > sizeof(long)) -@@ -383,11 +389,11 @@ asmlinkage long sys_sync(void); +@@ -384,11 +390,11 @@ asmlinkage long sys_sync(void); asmlinkage long sys_fsync(unsigned int fd); asmlinkage long sys_fdatasync(unsigned int fd); asmlinkage long sys_bdflush(int func, long data); @@ -85454,7 +84988,7 @@ index 0f86d85..dff3419 100644 asmlinkage long sys_truncate(const char __user *path, long length); asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length); asmlinkage long sys_stat(const char __user *filename, -@@ -599,7 +605,7 @@ asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *); +@@ -600,7 +606,7 @@ asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *); asmlinkage long sys_getpeername(int, struct sockaddr __user *, int __user *); asmlinkage long sys_send(int, void __user *, size_t, unsigned); asmlinkage long sys_sendto(int, void __user *, size_t, unsigned, @@ -85573,7 +85107,7 @@ index ff307b5..f1a4468 100644 #endif /* _LINUX_THREAD_INFO_H */ diff --git a/include/linux/tty.h b/include/linux/tty.h -index 8413294..44391c7 100644 +index 5171ef8..1048d83e 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -202,7 +202,7 @@ struct tty_port { @@ -85585,7 +85119,7 @@ index 8413294..44391c7 100644 wait_queue_head_t open_wait; /* Open waiters */ wait_queue_head_t close_wait; /* Close waiters */ wait_queue_head_t delta_msr_wait; /* Modem status change */ -@@ -284,7 +284,7 @@ struct tty_struct { +@@ -290,7 +290,7 @@ struct tty_struct { /* If the tty has a pending do_SAK, queue it here - akpm */ struct work_struct SAK_work; struct tty_port *port; @@ -85594,7 +85128,7 @@ index 8413294..44391c7 100644 /* Each of a tty's open files has private_data pointing to tty_file_private */ struct tty_file_private { -@@ -548,7 +548,7 @@ extern int tty_port_open(struct tty_port *port, +@@ -555,7 +555,7 @@ extern int tty_port_open(struct tty_port *port, struct tty_struct *tty, struct file *filp); static inline int tty_port_users(struct tty_port *port) { @@ -85604,10 +85138,10 @@ index 8413294..44391c7 100644 extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc); diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h -index e48c608..6a19af2 100644 +index 92e337c..f46757b 100644 --- a/include/linux/tty_driver.h +++ b/include/linux/tty_driver.h -@@ -287,7 +287,7 @@ struct tty_operations { +@@ -291,7 +291,7 @@ struct tty_operations { void (*poll_put_char)(struct tty_driver *driver, int line, char ch); #endif const struct file_operations *proc_fops; @@ -85616,7 +85150,7 @@ index e48c608..6a19af2 100644 struct tty_driver { int magic; /* magic number for this structure */ -@@ -321,7 +321,7 @@ struct tty_driver { +@@ -325,7 +325,7 @@ struct tty_driver { const struct tty_operations *ops; struct list_head tty_drivers; @@ -85702,6 +85236,19 @@ index 2d1f9b6..d7a9fce 100644 +#define gr_is_global_nonroot(x) (!uid_eq((x), GLOBAL_ROOT_UID)) + #endif /* _LINUX_UIDGID_H */ +diff --git a/include/linux/uio_driver.h b/include/linux/uio_driver.h +index baa8171..9ca98ba 100644 +--- a/include/linux/uio_driver.h ++++ b/include/linux/uio_driver.h +@@ -67,7 +67,7 @@ struct uio_device { + struct module *owner; + struct device *dev; + int minor; +- atomic_t event; ++ atomic_unchecked_t event; + struct fasync_struct *async_queue; + wait_queue_head_t wait; + struct uio_info *info; diff --git a/include/linux/unaligned/access_ok.h b/include/linux/unaligned/access_ok.h index 99c1b4d..562e6f3 100644 --- a/include/linux/unaligned/access_ok.h @@ -85753,40 +85300,8 @@ index 99c1b4d..562e6f3 100644 } static inline void put_unaligned_le16(u16 val, void *p) -diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h -index 4f844c6..60beb5d 100644 ---- a/include/linux/uprobes.h -+++ b/include/linux/uprobes.h -@@ -98,11 +98,11 @@ struct uprobes_state { - struct xol_area *xol_area; - }; - --extern int __weak set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); --extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); --extern bool __weak is_swbp_insn(uprobe_opcode_t *insn); --extern bool __weak is_trap_insn(uprobe_opcode_t *insn); --extern unsigned long __weak uprobe_get_swbp_addr(struct pt_regs *regs); -+extern int set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); -+extern int set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); -+extern bool is_swbp_insn(uprobe_opcode_t *insn); -+extern bool is_trap_insn(uprobe_opcode_t *insn); -+extern unsigned long uprobe_get_swbp_addr(struct pt_regs *regs); - extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs); - extern int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t); - extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); -@@ -128,8 +128,8 @@ extern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk); - extern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data); - extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs); - extern unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs); --extern bool __weak arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs); --extern void __weak arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr, -+extern bool arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs); -+extern void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr, - void *src, unsigned long len); - #else /* !CONFIG_UPROBES */ - struct uprobes_state { diff --git a/include/linux/usb.h b/include/linux/usb.h -index d2465bc..5256de4 100644 +index 447a7e2..9cea7e9 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -571,7 +571,7 @@ struct usb_device { @@ -85821,10 +85336,10 @@ index d5952bb..9a626d4 100644 /* * callback functions for platform diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h -index e953726..8edb26a 100644 +index 9f3579f..3b2afa5 100644 --- a/include/linux/user_namespace.h +++ b/include/linux/user_namespace.h -@@ -33,7 +33,7 @@ struct user_namespace { +@@ -38,7 +38,7 @@ struct user_namespace { struct key *persistent_keyring_register; struct rw_semaphore persistent_keyring_register_sem; #endif @@ -86098,10 +85613,10 @@ index ffb69da..040393e 100644 /* Set v4l2_dev->dev to NULL. Call when the USB parent disconnects. Since the parent disappears this ensures that v4l2_dev doesn't have an diff --git a/include/net/9p/transport.h b/include/net/9p/transport.h -index d9fa68f..45c88d1 100644 +index 2a25dec..bf6dd8a 100644 --- a/include/net/9p/transport.h +++ b/include/net/9p/transport.h -@@ -63,7 +63,7 @@ struct p9_trans_module { +@@ -62,7 +62,7 @@ struct p9_trans_module { int (*cancelled)(struct p9_client *, struct p9_req_t *req); int (*zc_request)(struct p9_client *, struct p9_req_t *, char *, char *, int , int, int, int); @@ -86111,7 +85626,7 @@ index d9fa68f..45c88d1 100644 void v9fs_register_trans(struct p9_trans_module *m); void v9fs_unregister_trans(struct p9_trans_module *m); diff --git a/include/net/af_unix.h b/include/net/af_unix.h -index a175ba4..196eb82 100644 +index a175ba4..196eb8242 100644 --- a/include/net/af_unix.h +++ b/include/net/af_unix.h @@ -36,7 +36,7 @@ struct unix_skb_parms { @@ -86124,7 +85639,7 @@ index a175ba4..196eb82 100644 #define UNIXCB(skb) (*(struct unix_skb_parms *)&((skb)->cb)) #define UNIXSID(skb) (&UNIXCB((skb)).secid) diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h -index 8df15ad..837fbedd 100644 +index ead99f0..6263c4b 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h @@ -608,7 +608,7 @@ struct l2cap_ops { @@ -86199,7 +85714,7 @@ index 734d9b5..48a9a4b 100644 return; } diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h -index 5fbe656..9ed3d8b 100644 +index 848e85c..051c7de 100644 --- a/include/net/inet_connection_sock.h +++ b/include/net/inet_connection_sock.h @@ -63,7 +63,7 @@ struct inet_connection_sock_af_ops { @@ -86212,7 +85727,7 @@ index 5fbe656..9ed3d8b 100644 /** inet_connection_sock - INET connection oriented sock * diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h -index 01d590e..f69c61d 100644 +index 80479ab..0c3f647 100644 --- a/include/net/inetpeer.h +++ b/include/net/inetpeer.h @@ -47,7 +47,7 @@ struct inet_peer { @@ -86225,7 +85740,7 @@ index 01d590e..f69c61d 100644 struct rcu_head rcu; struct inet_peer *gc_next; diff --git a/include/net/ip.h b/include/net/ip.h -index db4a771..965a42a 100644 +index 0bb6207..a8878af 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -316,7 +316,7 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb) @@ -86238,10 +85753,10 @@ index db4a771..965a42a 100644 static inline void ip_select_ident_segs(struct sk_buff *skb, struct sock *sk, int segs) diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h -index 9922093..a1755d6 100644 +index dc9d2a2..d985691 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h -@@ -169,7 +169,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh); +@@ -170,7 +170,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh); #define FIB_RES_SADDR(net, res) \ ((FIB_RES_NH(res).nh_saddr_genid == \ @@ -86251,19 +85766,19 @@ index 9922093..a1755d6 100644 fib_info_update_nh_saddr((net), &FIB_RES_NH(res))) #define FIB_RES_GW(res) (FIB_RES_NH(res).nh_gw) diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h -index 624a8a5..b1e2a24 100644 +index 615b20b..fd4cbd8 100644 --- a/include/net/ip_vs.h +++ b/include/net/ip_vs.h -@@ -558,7 +558,7 @@ struct ip_vs_conn { +@@ -534,7 +534,7 @@ struct ip_vs_conn { struct ip_vs_conn *control; /* Master control connection */ atomic_t n_control; /* Number of controlled ones */ struct ip_vs_dest *dest; /* real server */ - atomic_t in_pkts; /* incoming packet counter */ + atomic_unchecked_t in_pkts; /* incoming packet counter */ - /* packet transmitter for different forwarding methods. If it - mangles the packet, it must return NF_DROP or better NF_STOLEN, -@@ -705,7 +705,7 @@ struct ip_vs_dest { + /* Packet transmitter for different forwarding methods. If it + * mangles the packet, it must return NF_DROP or better NF_STOLEN, +@@ -682,7 +682,7 @@ struct ip_vs_dest { __be16 port; /* port number of the server */ union nf_inet_addr addr; /* IP address of the server */ volatile unsigned int flags; /* dest status flags */ @@ -86272,7 +85787,7 @@ index 624a8a5..b1e2a24 100644 atomic_t weight; /* server weight */ atomic_t refcnt; /* reference counter */ -@@ -960,11 +960,11 @@ struct netns_ipvs { +@@ -928,11 +928,11 @@ struct netns_ipvs { /* ip_vs_lblc */ int sysctl_lblc_expiration; struct ctl_table_header *lblc_ctl_header; @@ -86379,10 +85894,10 @@ index 567c681..cd73ac02 100644 struct llc_sap_state { u8 curr_state; diff --git a/include/net/mac80211.h b/include/net/mac80211.h -index dae2e24..89336e6 100644 +index 0ad1f47..aaea45b 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -4650,7 +4650,7 @@ struct rate_control_ops { +@@ -4648,7 +4648,7 @@ struct rate_control_ops { void (*remove_sta_debugfs)(void *priv, void *priv_sta); u32 (*get_expected_throughput)(void *priv_sta); @@ -86392,7 +85907,7 @@ index dae2e24..89336e6 100644 static inline int rate_supported(struct ieee80211_sta *sta, enum ieee80211_band band, diff --git a/include/net/neighbour.h b/include/net/neighbour.h -index 47f4254..fd095bc 100644 +index f60558d..e5ed9bd 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h @@ -163,7 +163,7 @@ struct neigh_ops { @@ -86479,21 +85994,8 @@ index e0d6466..e2f3003 100644 } #endif /* __NET_NET_NAMESPACE_H */ -diff --git a/include/net/netdma.h b/include/net/netdma.h -index 8ba8ce2..99b7fff 100644 ---- a/include/net/netdma.h -+++ b/include/net/netdma.h -@@ -24,7 +24,7 @@ - #include - #include - --int dma_skb_copy_datagram_iovec(struct dma_chan* chan, -+int __intentional_overflow(3,5) dma_skb_copy_datagram_iovec(struct dma_chan* chan, - struct sk_buff *skb, int offset, struct iovec *to, - size_t len, struct dma_pinned_list *pinned_list); - diff --git a/include/net/netlink.h b/include/net/netlink.h -index 6c10762..3e5de0c 100644 +index 7b903e1..ad9ca4b 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h @@ -521,7 +521,7 @@ static inline void *nlmsg_get_pos(struct sk_buff *skb) @@ -86506,7 +86008,7 @@ index 6c10762..3e5de0c 100644 /** diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h -index 29d6a94..235d3d8 100644 +index 29d6a94..235d3d84 100644 --- a/include/net/netns/conntrack.h +++ b/include/net/netns/conntrack.h @@ -14,10 +14,10 @@ struct nf_conntrack_ecache; @@ -86532,10 +86034,10 @@ index 29d6a94..235d3d8 100644 }; diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h -index aec5e12..807233f 100644 +index 24945ce..f19e42f 100644 --- a/include/net/netns/ipv4.h +++ b/include/net/netns/ipv4.h -@@ -82,7 +82,7 @@ struct netns_ipv4 { +@@ -83,7 +83,7 @@ struct netns_ipv4 { struct ping_group_range ping_group_range; @@ -86544,7 +86046,7 @@ index aec5e12..807233f 100644 #ifdef CONFIG_SYSCTL unsigned long *sysctl_local_reserved_ports; -@@ -96,6 +96,6 @@ struct netns_ipv4 { +@@ -97,6 +97,6 @@ struct netns_ipv4 { struct fib_rules_ops *mr_rules_ops; #endif #endif @@ -86553,7 +86055,7 @@ index aec5e12..807233f 100644 }; #endif diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h -index eade27a..42894dd 100644 +index 69ae41f..4f94868 100644 --- a/include/net/netns/ipv6.h +++ b/include/net/netns/ipv6.h @@ -75,8 +75,8 @@ struct netns_ipv6 { @@ -86561,17 +86063,17 @@ index eade27a..42894dd 100644 #endif #endif - atomic_t dev_addr_genid; -- atomic_t rt_genid; +- atomic_t fib6_sernum; + atomic_unchecked_t dev_addr_genid; -+ atomic_unchecked_t rt_genid; ++ atomic_unchecked_t fib6_sernum; }; #if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6) diff --git a/include/net/netns/xfrm.h b/include/net/netns/xfrm.h -index 3492434..209f58c 100644 +index 9da7982..099321b9 100644 --- a/include/net/netns/xfrm.h +++ b/include/net/netns/xfrm.h -@@ -64,7 +64,7 @@ struct netns_xfrm { +@@ -78,7 +78,7 @@ struct netns_xfrm { /* flow cache part */ struct flow_cache flow_cache_global; @@ -86679,10 +86181,10 @@ index 4ff3f67..89ae38e 100644 /* Structure to track chunk fragments that have been acked, but peer diff --git a/include/net/sock.h b/include/net/sock.h -index b9a5bd0..dcd5f3c 100644 +index 7db3db1..a915cca 100644 --- a/include/net/sock.h +++ b/include/net/sock.h -@@ -356,7 +356,7 @@ struct sock { +@@ -355,7 +355,7 @@ struct sock { unsigned int sk_napi_id; unsigned int sk_ll_usec; #endif @@ -86691,7 +86193,7 @@ index b9a5bd0..dcd5f3c 100644 int sk_rcvbuf; struct sk_filter __rcu *sk_filter; -@@ -1053,7 +1053,7 @@ struct proto { +@@ -1048,7 +1048,7 @@ struct proto { void (*destroy_cgroup)(struct mem_cgroup *memcg); struct cg_proto *(*proto_cgroup)(struct mem_cgroup *memcg); #endif @@ -86700,7 +86202,7 @@ index b9a5bd0..dcd5f3c 100644 /* * Bits in struct cg_proto.flags -@@ -1240,7 +1240,7 @@ static inline u64 memcg_memory_allocated_read(struct cg_proto *prot) +@@ -1235,7 +1235,7 @@ static inline u64 memcg_memory_allocated_read(struct cg_proto *prot) return ret >> PAGE_SHIFT; } @@ -86709,7 +86211,7 @@ index b9a5bd0..dcd5f3c 100644 sk_memory_allocated(const struct sock *sk) { struct proto *prot = sk->sk_prot; -@@ -1385,7 +1385,7 @@ struct sock_iocb { +@@ -1380,7 +1380,7 @@ struct sock_iocb { struct scm_cookie *scm; struct msghdr *msg, async_msg; struct kiocb *kiocb; @@ -86727,7 +86229,7 @@ index b9a5bd0..dcd5f3c 100644 int copy, int offset) { if (skb->ip_summed == CHECKSUM_NONE) { -@@ -2091,7 +2091,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk) +@@ -2092,7 +2092,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk) } } @@ -86737,10 +86239,10 @@ index b9a5bd0..dcd5f3c 100644 /** * sk_page_frag - return an appropriate page_frag diff --git a/include/net/tcp.h b/include/net/tcp.h -index 590e01a..76498f3 100644 +index 4062b4f..9ff45e7 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -523,7 +523,7 @@ void tcp_retransmit_timer(struct sock *sk); +@@ -519,7 +519,7 @@ void tcp_retransmit_timer(struct sock *sk); void tcp_xmit_retransmit_queue(struct sock *); void tcp_simple_retransmit(struct sock *); int tcp_trim_head(struct sock *, struct sk_buff *, u32); @@ -86749,28 +86251,28 @@ index 590e01a..76498f3 100644 void tcp_send_probe0(struct sock *); void tcp_send_partial(struct sock *); -@@ -696,8 +696,8 @@ struct tcp_skb_cb { - struct inet6_skb_parm h6; - #endif - } header; /* For incoming frames */ +@@ -692,8 +692,8 @@ static inline u32 tcp_skb_timestamp(const struct sk_buff *skb) + * If this grows please adjust skbuff.h:skbuff->cb[xxx] size appropriately. + */ + struct tcp_skb_cb { - __u32 seq; /* Starting sequence number */ - __u32 end_seq; /* SEQ + FIN + SYN + datalen */ + __u32 seq __intentional_overflow(0); /* Starting sequence number */ + __u32 end_seq __intentional_overflow(0); /* SEQ + FIN + SYN + datalen */ - __u32 when; /* used to compute rtt's */ - __u8 tcp_flags; /* TCP header flags. (tcp[13]) */ - -@@ -713,7 +713,7 @@ struct tcp_skb_cb { + union { + /* Note : tcp_tw_isn is used in input path only + * (isn chosen by tcp_timewait_state_process()) +@@ -718,7 +718,7 @@ struct tcp_skb_cb { __u8 ip_dsfield; /* IPv4 tos or IPv6 dsfield */ /* 1 byte hole */ - __u32 ack_seq; /* Sequence number ACK'd */ + __u32 ack_seq __intentional_overflow(0); /* Sequence number ACK'd */ - }; - - #define TCP_SKB_CB(__skb) ((struct tcp_skb_cb *)&((__skb)->cb[0])) + union { + struct inet_skb_parm h4; + #if IS_ENABLED(CONFIG_IPV6) diff --git a/include/net/xfrm.h b/include/net/xfrm.h -index 721e9c3b..3c81bbf 100644 +index dc4865e..152ee4c 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h @@ -285,7 +285,6 @@ struct xfrm_dst; @@ -86870,10 +86372,10 @@ index 52beadf..598734c 100644 u8 qfull; enum fc_lport_state state; diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h -index 1a0d184..4fb841f 100644 +index 27ecee7..5f42632 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h -@@ -185,9 +185,9 @@ struct scsi_device { +@@ -186,9 +186,9 @@ struct scsi_device { unsigned int max_device_blocked; /* what device_blocked counts down from */ #define SCSI_DEFAULT_DEVICE_BLOCKED 3 @@ -86914,21 +86416,21 @@ index ae6c3b8..fd748ac 100644 /** * struct snd_compr: Compressed device diff --git a/include/sound/soc.h b/include/sound/soc.h -index c83a334..27c8038 100644 +index 7ba7130..d46594d 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h -@@ -817,7 +817,7 @@ struct snd_soc_codec_driver { - /* probe ordering - for components with runtime dependencies */ - int probe_order; - int remove_order; +@@ -853,7 +853,7 @@ struct snd_soc_codec_driver { + enum snd_soc_dapm_type, int); + + bool ignore_pmdown_time; /* Doesn't benefit from pmdown delay */ -}; +} __do_const; /* SoC platform interface */ struct snd_soc_platform_driver { -@@ -861,7 +861,7 @@ struct snd_soc_platform_driver { - unsigned int (*read)(struct snd_soc_platform *, unsigned int); - int (*write)(struct snd_soc_platform *, unsigned int, unsigned int); +@@ -882,7 +882,7 @@ struct snd_soc_platform_driver { + const struct snd_compr_ops *compr_ops; + int (*bespoke_trigger)(struct snd_pcm_substream *, int); -}; +} __do_const; @@ -86936,10 +86438,10 @@ index c83a334..27c8038 100644 struct snd_soc_dai_link_component { const char *name; diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h -index 9ec9864..e2ee1ee 100644 +index 23c518a..d6ef510 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h -@@ -761,7 +761,7 @@ struct se_device { +@@ -764,7 +764,7 @@ struct se_device { atomic_long_t write_bytes; /* Active commands on this virtual SE device */ atomic_t simple_cmds; @@ -87142,7 +86644,7 @@ index d876736..ccce5c0 100644 #define __cpu_to_le64s(x) do { (void)(x); } while (0) #define __le64_to_cpus(x) do { (void)(x); } while (0) diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h -index ef6103b..d4e65dd 100644 +index ea9bf25..5140c61 100644 --- a/include/uapi/linux/elf.h +++ b/include/uapi/linux/elf.h @@ -37,6 +37,17 @@ typedef __s64 Elf64_Sxword; @@ -87271,19 +86773,6 @@ index 43aaba1..1c30b48 100644 /* CTL_VM names: */ enum { -diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h -index 778a329..1416ffb 100644 ---- a/include/uapi/linux/videodev2.h -+++ b/include/uapi/linux/videodev2.h -@@ -1285,7 +1285,7 @@ struct v4l2_ext_control { - union { - __s32 value; - __s64 value64; -- char *string; -+ char __user *string; - __u8 *p_u8; - __u16 *p_u16; - __u32 *p_u32; diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h index 1590c49..5eab462 100644 --- a/include/uapi/linux/xattr.h @@ -87330,7 +86819,7 @@ index 30f5362..8ed8ac9 100644 void *pmi_pal; u8 *vbe_state_orig; /* diff --git a/init/Kconfig b/init/Kconfig -index 80a6907..baf7d53 100644 +index 2081a4d..98d1149 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1150,6 +1150,7 @@ endif # CGROUPS @@ -87341,7 +86830,7 @@ index 80a6907..baf7d53 100644 default n help Enables additional kernel features in a sake of checkpoint/restore. -@@ -1635,7 +1636,7 @@ config SLUB_DEBUG +@@ -1659,7 +1660,7 @@ config SLUB_DEBUG config COMPAT_BRK bool "Disable heap randomization" @@ -87350,7 +86839,7 @@ index 80a6907..baf7d53 100644 help Randomizing heap placement makes heap exploits harder, but it also breaks ancient binaries (including anything libc5 based). -@@ -1923,7 +1924,7 @@ config INIT_ALL_POSSIBLE +@@ -1990,7 +1991,7 @@ config INIT_ALL_POSSIBLE config STOP_MACHINE bool default y @@ -87374,10 +86863,10 @@ index 7bc47ee..6da2dc7 100644 ifneq ($(CONFIG_BLK_DEV_INITRD),y) obj-y += noinitramfs.o diff --git a/init/do_mounts.c b/init/do_mounts.c -index 82f2288..ea1430a 100644 +index 9b3565c..3f90cf9 100644 --- a/init/do_mounts.c +++ b/init/do_mounts.c -@@ -359,11 +359,11 @@ static void __init get_fs_names(char *page) +@@ -360,11 +360,11 @@ static void __init get_fs_names(char *page) static int __init do_mount_root(char *name, char *fs, int flags, void *data) { struct super_block *s; @@ -87391,7 +86880,7 @@ index 82f2288..ea1430a 100644 s = current->fs->pwd.dentry->d_sb; ROOT_DEV = s->s_dev; printk(KERN_INFO -@@ -484,18 +484,18 @@ void __init change_floppy(char *fmt, ...) +@@ -485,18 +485,18 @@ void __init change_floppy(char *fmt, ...) va_start(args, fmt); vsprintf(buf, fmt, args); va_end(args); @@ -87413,7 +86902,7 @@ index 82f2288..ea1430a 100644 termios.c_lflag |= ICANON; sys_ioctl(fd, TCSETSF, (long)&termios); sys_close(fd); -@@ -589,8 +589,8 @@ void __init prepare_namespace(void) +@@ -590,8 +590,8 @@ void __init prepare_namespace(void) mount_root(); out: devtmpfs_mount("dev"); @@ -87588,7 +87077,7 @@ index ba0a7f36..2bcf1d5 100644 { INIT_THREAD_INFO(init_task) }; +#endif diff --git a/init/initramfs.c b/init/initramfs.c -index bece48c..e911bd8 100644 +index ad1bd77..dca2c1b 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -25,7 +25,7 @@ static ssize_t __init xwrite(int fd, const char *p, size_t count) @@ -87627,12 +87116,12 @@ index bece48c..e911bd8 100644 } return 0; } -@@ -313,11 +313,11 @@ static void __init clean_path(char *path, umode_t mode) +@@ -313,11 +313,11 @@ static void __init clean_path(char *path, umode_t fmode) { struct stat st; -- if (!sys_newlstat(path, &st) && (st.st_mode^mode) & S_IFMT) { -+ if (!sys_newlstat((char __force_user *)path, (struct stat __force_user *)&st) && (st.st_mode^mode) & S_IFMT) { +- if (!sys_newlstat(path, &st) && (st.st_mode ^ fmode) & S_IFMT) { ++ if (!sys_newlstat((char __force_user *)path, (struct stat __force_user *)&st) && (st.st_mode ^ fmode) & S_IFMT) { if (S_ISDIR(st.st_mode)) - sys_rmdir(path); + sys_rmdir((char __force_user *)path); @@ -87699,7 +87188,7 @@ index bece48c..e911bd8 100644 next_state = Reset; return 0; diff --git a/init/main.c b/init/main.c -index d0f4b59..0c4b184 100644 +index 321d0ce..91b53e5 100644 --- a/init/main.c +++ b/init/main.c @@ -98,6 +98,8 @@ extern void radix_tree_init(void); @@ -87828,7 +87317,7 @@ index d0f4b59..0c4b184 100644 return ret; } -@@ -908,8 +978,8 @@ static int run_init_process(const char *init_filename) +@@ -907,8 +977,8 @@ static int run_init_process(const char *init_filename) { argv_init[0] = init_filename; return do_execve(getname_kernel(init_filename), @@ -87839,7 +87328,7 @@ index d0f4b59..0c4b184 100644 } static int try_to_run_init_process(const char *init_filename) -@@ -926,6 +996,10 @@ static int try_to_run_init_process(const char *init_filename) +@@ -925,6 +995,10 @@ static int try_to_run_init_process(const char *init_filename) return ret; } @@ -87850,7 +87339,7 @@ index d0f4b59..0c4b184 100644 static noinline void __init kernel_init_freeable(void); static int __ref kernel_init(void *unused) -@@ -950,6 +1024,11 @@ static int __ref kernel_init(void *unused) +@@ -949,6 +1023,11 @@ static int __ref kernel_init(void *unused) ramdisk_execute_command, ret); } @@ -87862,7 +87351,7 @@ index d0f4b59..0c4b184 100644 /* * We try each of these until one succeeds. * -@@ -1005,7 +1084,7 @@ static noinline void __init kernel_init_freeable(void) +@@ -1004,7 +1083,7 @@ static noinline void __init kernel_init_freeable(void) do_basic_setup(); /* Open the /dev/console on the rootfs, this should never fail */ @@ -87871,7 +87360,7 @@ index d0f4b59..0c4b184 100644 pr_err("Warning: unable to open an initial console.\n"); (void) sys_dup(0); -@@ -1018,11 +1097,13 @@ static noinline void __init kernel_init_freeable(void) +@@ -1017,11 +1096,13 @@ static noinline void __init kernel_init_freeable(void) if (!ramdisk_execute_command) ramdisk_execute_command = "/init"; @@ -87887,7 +87376,7 @@ index d0f4b59..0c4b184 100644 * Ok, we have completed the initial bootup, and * we're essentially up and running. Get rid of the diff --git a/ipc/compat.c b/ipc/compat.c -index b5ef4f7..ff31d87 100644 +index 9b3c85f..1c4d897 100644 --- a/ipc/compat.c +++ b/ipc/compat.c @@ -396,7 +396,7 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second, @@ -87983,7 +87472,7 @@ index 4fcf39a..d3cc2ec 100644 if (u->mq_bytes + mq_bytes < u->mq_bytes || u->mq_bytes + mq_bytes > rlimit(RLIMIT_MSGQUEUE)) { diff --git a/ipc/shm.c b/ipc/shm.c -index 7fc9f9f..95e201f 100644 +index 0145479..3d27947 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -72,6 +72,14 @@ static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp); @@ -88051,7 +87540,7 @@ index 7fc9f9f..95e201f 100644 ipc_unlock_object(&shp->shm_perm); rcu_read_unlock(); diff --git a/ipc/util.c b/ipc/util.c -index 27d74e6..8be0be2 100644 +index 88adc32..3867c68 100644 --- a/ipc/util.c +++ b/ipc/util.c @@ -71,6 +71,8 @@ struct ipc_proc_iface { @@ -88075,7 +87564,7 @@ index 27d74e6..8be0be2 100644 if ((requested_mode & ~granted_mode & 0007) && !ns_capable(ns->user_ns, CAP_IPC_OWNER)) diff --git a/kernel/audit.c b/kernel/audit.c -index 6726aa6..bb864a9 100644 +index c6df990..fde80b4 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -122,7 +122,7 @@ u32 audit_sig_sid = 0; @@ -88115,10 +87604,10 @@ index 6726aa6..bb864a9 100644 s.version = AUDIT_VERSION_LATEST; s.backlog_wait_time = audit_backlog_wait_time; diff --git a/kernel/auditsc.c b/kernel/auditsc.c -index 21eae3c..66db239 100644 +index e420a0c..38137fa 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c -@@ -2023,7 +2023,7 @@ int auditsc_get_stamp(struct audit_context *ctx, +@@ -2014,7 +2014,7 @@ int auditsc_get_stamp(struct audit_context *ctx, } /* global counter which is incremented every time something logs in */ @@ -88127,7 +87616,7 @@ index 21eae3c..66db239 100644 static int audit_set_loginuid_perm(kuid_t loginuid) { -@@ -2090,7 +2090,7 @@ int audit_set_loginuid(kuid_t loginuid) +@@ -2081,7 +2081,7 @@ int audit_set_loginuid(kuid_t loginuid) /* are we setting or clearing? */ if (uid_valid(loginuid)) @@ -88137,114 +87626,59 @@ index 21eae3c..66db239 100644 task->sessionid = sessionid; task->loginuid = loginuid; diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c -index 7f0dbcb..b54bb2c 100644 +index d6594e4..597264b 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c -@@ -22,6 +22,7 @@ - */ - #include - #include -+#include - #include +@@ -143,14 +143,17 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr, + * random section of illegal instructions. + */ + size = round_up(proglen + sizeof(*hdr) + 128, PAGE_SIZE); +- hdr = module_alloc(size); ++ hdr = module_alloc_exec(size); + if (hdr == NULL) + return NULL; - /* Registers */ -@@ -63,6 +64,67 @@ void *bpf_internal_load_pointer_neg_helper(const struct sk_buff *skb, int k, uns - return NULL; - } + /* Fill space with illegal/arch-dep instructions. */ + bpf_fill_ill_insns(hdr, size); -+struct bpf_prog *bpf_prog_alloc(unsigned int size, gfp_t gfp_extra_flags) -+{ -+ gfp_t gfp_flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO | -+ gfp_extra_flags; -+ struct bpf_work_struct *ws; -+ struct bpf_prog *fp; -+ -+ size = round_up(size, PAGE_SIZE); -+ fp = __vmalloc(size, gfp_flags, PAGE_KERNEL); -+ if (fp == NULL) -+ return NULL; -+ -+ ws = kmalloc(sizeof(*ws), GFP_KERNEL | gfp_extra_flags); -+ if (ws == NULL) { -+ vfree(fp); -+ return NULL; -+ } -+ -+ fp->pages = size / PAGE_SIZE; -+ fp->work = ws; -+ -+ return fp; -+} -+EXPORT_SYMBOL_GPL(bpf_prog_alloc); -+ -+struct bpf_prog *bpf_prog_realloc(struct bpf_prog *fp_old, unsigned int size, -+ gfp_t gfp_extra_flags) -+{ -+ gfp_t gfp_flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO | -+ gfp_extra_flags; -+ struct bpf_prog *fp; -+ -+ BUG_ON(fp_old == NULL); -+ -+ size = round_up(size, PAGE_SIZE); -+ if (size <= fp_old->pages * PAGE_SIZE) -+ return fp_old; -+ -+ fp = __vmalloc(size, gfp_flags, PAGE_KERNEL); -+ if (fp != NULL) { -+ memcpy(fp, fp_old, fp_old->pages * PAGE_SIZE); -+ fp->pages = size / PAGE_SIZE; -+ -+ /* We keep fp->work from fp_old around in the new -+ * reallocated structure. -+ */ -+ fp_old->work = NULL; -+ __bpf_prog_free(fp_old); -+ } -+ -+ return fp; -+} -+EXPORT_SYMBOL_GPL(bpf_prog_realloc); -+ -+void __bpf_prog_free(struct bpf_prog *fp) -+{ -+ kfree(fp->work); -+ vfree(fp); -+} -+EXPORT_SYMBOL_GPL(__bpf_prog_free); ++ pax_open_kernel(); + hdr->pages = size / PAGE_SIZE; ++ pax_close_kernel(); + - /* Base function for offset calculation. Needs to go into .text section, - * therefore keeping it non-static as well; will also be used by JITs - * anyway later on, so do not let the compiler omit it. -@@ -523,12 +585,26 @@ void bpf_prog_select_runtime(struct bpf_prog *fp) - - /* Probe if internal BPF can be JITed */ - bpf_int_jit_compile(fp); -+ /* Lock whole bpf_prog as read-only */ -+ bpf_prog_lock_ro(fp); - } - EXPORT_SYMBOL_GPL(bpf_prog_select_runtime); + hole = min_t(unsigned int, size - (proglen + sizeof(*hdr)), + PAGE_SIZE - sizeof(*hdr)); + start = (prandom_u32() % hole) & ~(alignment - 1); +@@ -163,7 +166,7 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr, --/* free internal BPF program */ -+static void bpf_prog_free_deferred(struct work_struct *work) -+{ -+ struct bpf_work_struct *ws; -+ -+ ws = container_of(work, struct bpf_work_struct, work); -+ bpf_jit_free(ws->prog); -+} -+ -+/* Free internal BPF program */ - void bpf_prog_free(struct bpf_prog *fp) + void bpf_jit_binary_free(struct bpf_binary_header *hdr) { -- bpf_jit_free(fp); -+ struct bpf_work_struct *ws = fp->work; -+ -+ INIT_WORK(&ws->work, bpf_prog_free_deferred); -+ ws->prog = fp; -+ schedule_work(&ws->work); +- module_free(NULL, hdr); ++ module_free_exec(NULL, hdr); } - EXPORT_SYMBOL_GPL(bpf_prog_free); + #endif /* CONFIG_BPF_JIT */ + +diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c +index ba61c8c..c60c486 100644 +--- a/kernel/bpf/syscall.c ++++ b/kernel/bpf/syscall.c +@@ -539,11 +539,15 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz + int err; + + /* the syscall is limited to root temporarily. This restriction will be +- * lifted when security audit is clean. Note that eBPF+tracing must have +- * this restriction, since it may pass kernel data to user space ++ * lifted by upstream when a half-assed security audit is clean. Note ++ * that eBPF+tracing must have this restriction, since it may pass ++ * kernel data to user space + */ + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; ++#ifdef CONFIG_GRKERNSEC ++ return -EPERM; ++#endif + + if (!access_ok(VERIFY_READ, uattr, 1)) + return -EFAULT; diff --git a/kernel/capability.c b/kernel/capability.c index 989f5bf..d317ca0 100644 --- a/kernel/capability.c @@ -88344,25 +87778,20 @@ index 989f5bf..d317ca0 100644 +} +EXPORT_SYMBOL(capable_wrt_inode_uidgid_nolog); diff --git a/kernel/cgroup.c b/kernel/cgroup.c -index 3a73f99..4f29fea 100644 +index 136ecea..45157a6 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c -@@ -5341,6 +5341,14 @@ static void cgroup_release_agent(struct work_struct *work) - release_list); - list_del_init(&cgrp->release_list); - raw_spin_unlock(&release_list_lock); -+ -+ /* -+ * don't bother calling call_usermodehelper if we haven't -+ * configured a binary to execute -+ */ -+ if (cgrp->root->release_agent_path[0] == '\0') -+ goto continue_free; +@@ -5276,6 +5276,9 @@ static void cgroup_release_agent(struct work_struct *work) + if (!pathbuf || !agentbuf) + goto out; + ++ if (agentbuf[0] == '\0') ++ goto out; + - pathbuf = kmalloc(PATH_MAX, GFP_KERNEL); - if (!pathbuf) - goto continue_free; -@@ -5539,7 +5547,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v) + path = cgroup_path(cgrp, pathbuf, PATH_MAX); + if (!path) + goto out; +@@ -5461,7 +5464,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v) struct task_struct *task; int count = 0; @@ -88782,10 +88211,10 @@ index 379650b..30c5180 100644 #ifdef CONFIG_MODULE_UNLOAD { diff --git a/kernel/events/core.c b/kernel/events/core.c -index 658f232..32e9595 100644 +index 1cd5eef..e8b5af9 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c -@@ -161,8 +161,15 @@ static struct srcu_struct pmus_srcu; +@@ -170,8 +170,15 @@ static struct srcu_struct pmus_srcu; * 0 - disallow raw tracepoint access for unpriv * 1 - disallow cpu events for unpriv * 2 - disallow kernel profiling for unpriv @@ -88802,7 +88231,7 @@ index 658f232..32e9595 100644 /* Minimum for 512 kiB + 1 user control page */ int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */ -@@ -188,7 +195,7 @@ void update_perf_cpu_limits(void) +@@ -197,7 +204,7 @@ void update_perf_cpu_limits(void) tmp *= sysctl_perf_cpu_time_max_percent; do_div(tmp, 100); @@ -88811,7 +88240,7 @@ index 658f232..32e9595 100644 } static int perf_rotate_context(struct perf_cpu_context *cpuctx); -@@ -294,7 +301,7 @@ void perf_sample_event_took(u64 sample_len_ns) +@@ -303,7 +310,7 @@ void perf_sample_event_took(u64 sample_len_ns) } } @@ -88820,7 +88249,7 @@ index 658f232..32e9595 100644 static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx, enum event_type_t event_type); -@@ -3051,7 +3058,7 @@ static void __perf_event_read(void *info) +@@ -3102,7 +3109,7 @@ static void __perf_event_read(void *info) static inline u64 perf_event_count(struct perf_event *event) { @@ -88829,7 +88258,7 @@ index 658f232..32e9595 100644 } static u64 perf_event_read(struct perf_event *event) -@@ -3430,9 +3437,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running) +@@ -3528,9 +3535,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running) mutex_lock(&event->child_mutex); total += perf_event_read(event); *enabled += event->total_time_enabled + @@ -88841,7 +88270,7 @@ index 658f232..32e9595 100644 list_for_each_entry(child, &event->child_list, child_list) { total += perf_event_read(child); -@@ -3881,10 +3888,10 @@ void perf_event_update_userpage(struct perf_event *event) +@@ -3994,10 +4001,10 @@ void perf_event_update_userpage(struct perf_event *event) userpg->offset -= local64_read(&event->hw.prev_count); userpg->time_enabled = enabled + @@ -88854,7 +88283,7 @@ index 658f232..32e9595 100644 arch_perf_update_userpage(userpg, now); -@@ -4448,7 +4455,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size, +@@ -4561,7 +4568,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size, /* Data. */ sp = perf_user_stack_pointer(regs); @@ -88863,7 +88292,7 @@ index 658f232..32e9595 100644 dyn_size = dump_size - rem; perf_output_skip(handle, rem); -@@ -4539,11 +4546,11 @@ static void perf_output_read_one(struct perf_output_handle *handle, +@@ -4652,11 +4659,11 @@ static void perf_output_read_one(struct perf_output_handle *handle, values[n++] = perf_event_count(event); if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) { values[n++] = enabled + @@ -88877,7 +88306,7 @@ index 658f232..32e9595 100644 } if (read_format & PERF_FORMAT_ID) values[n++] = primary_event_id(event); -@@ -6858,7 +6865,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu, +@@ -6958,7 +6965,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu, event->parent = parent_event; event->ns = get_pid_ns(task_active_pid_ns(current)); @@ -88886,7 +88315,7 @@ index 658f232..32e9595 100644 event->state = PERF_EVENT_STATE_INACTIVE; -@@ -7137,6 +7144,11 @@ SYSCALL_DEFINE5(perf_event_open, +@@ -7237,6 +7244,11 @@ SYSCALL_DEFINE5(perf_event_open, if (flags & ~PERF_FLAG_ALL) return -EINVAL; @@ -88898,7 +88327,7 @@ index 658f232..32e9595 100644 err = perf_copy_attr(attr_uptr, &attr); if (err) return err; -@@ -7489,10 +7501,10 @@ static void sync_child_event(struct perf_event *child_event, +@@ -7592,10 +7604,10 @@ static void sync_child_event(struct perf_event *child_event, /* * Add back the child's count to the parent's count: */ @@ -88957,10 +88386,10 @@ index 569b2187..19940d9 100644 /* Callchain handling */ extern struct perf_callchain_entry * diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c -index 1d0af8a..9913530 100644 +index ed8f2cd..fe8030c 100644 --- a/kernel/events/uprobes.c +++ b/kernel/events/uprobes.c -@@ -1671,7 +1671,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr) +@@ -1670,7 +1670,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr) { struct page *page; uprobe_opcode_t opcode; @@ -88970,10 +88399,10 @@ index 1d0af8a..9913530 100644 pagefault_disable(); result = __copy_from_user_inatomic(&opcode, (void __user*)vaddr, diff --git a/kernel/exit.c b/kernel/exit.c -index 32c58f7..9eb6907 100644 +index 5d30019..934add5 100644 --- a/kernel/exit.c +++ b/kernel/exit.c -@@ -173,6 +173,10 @@ void release_task(struct task_struct *p) +@@ -174,6 +174,10 @@ void release_task(struct task_struct *p) struct task_struct *leader; int zap_leader; repeat: @@ -88984,16 +88413,16 @@ index 32c58f7..9eb6907 100644 /* don't need to get the RCU readlock here - the process is dead and * can't be modifying its own credentials. But shut RCU-lockdep up */ rcu_read_lock(); -@@ -668,6 +672,8 @@ void do_exit(long code) - struct task_struct *tsk = current; +@@ -670,6 +674,8 @@ void do_exit(long code) int group_dead; + TASKS_RCU(int tasks_rcu_i); + set_fs(USER_DS); + profile_task_exit(tsk); WARN_ON(blk_needs_flush_plug(tsk)); -@@ -684,7 +690,6 @@ void do_exit(long code) +@@ -686,7 +692,6 @@ void do_exit(long code) * mm_release()->clear_child_tid() from writing to a user-controlled * kernel address. */ @@ -89001,7 +88430,7 @@ index 32c58f7..9eb6907 100644 ptrace_event(PTRACE_EVENT_EXIT, code); -@@ -742,6 +747,9 @@ void do_exit(long code) +@@ -744,6 +749,9 @@ void do_exit(long code) tsk->exit_code = code; taskstats_exit(tsk, group_dead); @@ -89011,7 +88440,7 @@ index 32c58f7..9eb6907 100644 exit_mm(tsk); if (group_dead) -@@ -859,7 +867,7 @@ SYSCALL_DEFINE1(exit, int, error_code) +@@ -863,7 +871,7 @@ SYSCALL_DEFINE1(exit, int, error_code) * Take down every thread in the group. This is called by fatal signals * as well as by sys_exit_group (below). */ @@ -89021,7 +88450,7 @@ index 32c58f7..9eb6907 100644 { struct signal_struct *sig = current->signal; diff --git a/kernel/fork.c b/kernel/fork.c -index a91e47d..71c9064 100644 +index 9b7d746..5b898ab 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -183,6 +183,48 @@ void thread_info_cache_init(void) @@ -89099,15 +88528,15 @@ index a91e47d..71c9064 100644 rt_mutex_debug_task_free(tsk); ftrace_graph_exit_task(tsk); put_seccomp_filter(tsk); -@@ -299,6 +345,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) +@@ -306,6 +352,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) + { struct task_struct *tsk; struct thread_info *ti; - unsigned long *stackend; + void *lowmem_stack; int node = tsk_fork_get_node(orig); int err; -@@ -306,7 +353,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) +@@ -313,7 +360,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) if (!tsk) return NULL; @@ -89116,7 +88545,7 @@ index a91e47d..71c9064 100644 if (!ti) goto free_tsk; -@@ -315,6 +362,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) +@@ -322,6 +369,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) goto free_ti; tsk->stack = ti; @@ -89126,8 +88555,8 @@ index a91e47d..71c9064 100644 #ifdef CONFIG_SECCOMP /* * We must handle setting up seccomp filters once we're under -@@ -332,7 +382,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) - *stackend = STACK_END_MAGIC; /* for overflow detection */ +@@ -338,7 +388,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) + set_task_stack_end_magic(tsk); #ifdef CONFIG_CC_STACKPROTECTOR - tsk->stack_canary = get_random_int(); @@ -89135,7 +88564,7 @@ index a91e47d..71c9064 100644 #endif /* -@@ -346,24 +396,92 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) +@@ -352,24 +402,92 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) tsk->splice_pipe = NULL; tsk->task_frag.page = NULL; @@ -89232,7 +88661,7 @@ index a91e47d..71c9064 100644 uprobe_start_dup_mmap(); down_write(&oldmm->mmap_sem); -@@ -391,55 +509,15 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) +@@ -397,55 +515,15 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) prev = NULL; for (mpnt = oldmm->mmap; mpnt; mpnt = mpnt->vm_next) { @@ -89292,7 +88721,7 @@ index a91e47d..71c9064 100644 } /* -@@ -471,6 +549,31 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) +@@ -477,6 +555,31 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) if (retval) goto out; } @@ -89324,7 +88753,7 @@ index a91e47d..71c9064 100644 /* a new mm has just been created */ arch_dup_mmap(oldmm, mm); retval = 0; -@@ -480,14 +583,6 @@ out: +@@ -486,14 +589,6 @@ out: up_write(&oldmm->mmap_sem); uprobe_end_dup_mmap(); return retval; @@ -89339,7 +88768,7 @@ index a91e47d..71c9064 100644 } static inline int mm_alloc_pgd(struct mm_struct *mm) -@@ -729,8 +824,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode) +@@ -734,8 +829,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode) return ERR_PTR(err); mm = get_task_mm(task); @@ -89350,7 +88779,7 @@ index a91e47d..71c9064 100644 mmput(mm); mm = ERR_PTR(-EACCES); } -@@ -933,13 +1028,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk) +@@ -938,13 +1033,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk) spin_unlock(&fs->lock); return -EAGAIN; } @@ -89372,7 +88801,7 @@ index a91e47d..71c9064 100644 return 0; } -@@ -1173,7 +1275,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid) +@@ -1179,7 +1281,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid) * parts of the process environment (as per the clone * flags). The actual kick-off is left to the caller. */ @@ -89381,7 +88810,7 @@ index a91e47d..71c9064 100644 unsigned long stack_start, unsigned long stack_size, int __user *child_tidptr, -@@ -1244,6 +1346,9 @@ static struct task_struct *copy_process(unsigned long clone_flags, +@@ -1250,6 +1352,9 @@ static struct task_struct *copy_process(unsigned long clone_flags, DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled); #endif retval = -EAGAIN; @@ -89391,7 +88820,7 @@ index a91e47d..71c9064 100644 if (atomic_read(&p->real_cred->user->processes) >= task_rlimit(p, RLIMIT_NPROC)) { if (p->real_cred->user != INIT_USER && -@@ -1493,6 +1598,11 @@ static struct task_struct *copy_process(unsigned long clone_flags, +@@ -1499,6 +1604,11 @@ static struct task_struct *copy_process(unsigned long clone_flags, goto bad_fork_free_pid; } @@ -89403,7 +88832,7 @@ index a91e47d..71c9064 100644 if (likely(p->pid)) { ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace); -@@ -1583,6 +1693,8 @@ bad_fork_cleanup_count: +@@ -1589,6 +1699,8 @@ bad_fork_cleanup_count: bad_fork_free: free_task(p); fork_out: @@ -89412,7 +88841,7 @@ index a91e47d..71c9064 100644 return ERR_PTR(retval); } -@@ -1644,6 +1756,7 @@ long do_fork(unsigned long clone_flags, +@@ -1650,6 +1762,7 @@ long do_fork(unsigned long clone_flags, p = copy_process(clone_flags, stack_start, stack_size, child_tidptr, NULL, trace); @@ -89420,7 +88849,7 @@ index a91e47d..71c9064 100644 /* * Do this prior waking up the new thread - the thread pointer * might get invalid after that point, if the thread exits quickly. -@@ -1660,6 +1773,8 @@ long do_fork(unsigned long clone_flags, +@@ -1666,6 +1779,8 @@ long do_fork(unsigned long clone_flags, if (clone_flags & CLONE_PARENT_SETTID) put_user(nr, parent_tidptr); @@ -89429,7 +88858,7 @@ index a91e47d..71c9064 100644 if (clone_flags & CLONE_VFORK) { p->vfork_done = &vfork; init_completion(&vfork); -@@ -1778,7 +1893,7 @@ void __init proc_caches_init(void) +@@ -1784,7 +1899,7 @@ void __init proc_caches_init(void) mm_cachep = kmem_cache_create("mm_struct", sizeof(struct mm_struct), ARCH_MIN_MMSTRUCT_ALIGN, SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_NOTRACK, NULL); @@ -89438,7 +88867,7 @@ index a91e47d..71c9064 100644 mmap_init(); nsproxy_cache_init(); } -@@ -1818,7 +1933,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp) +@@ -1824,7 +1939,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp) return 0; /* don't need lock here; in the worst case we'll do useless copy */ @@ -89447,7 +88876,7 @@ index a91e47d..71c9064 100644 return 0; *new_fsp = copy_fs_struct(fs); -@@ -1930,7 +2045,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags) +@@ -1936,7 +2051,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags) fs = current->fs; spin_lock(&fs->lock); current->fs = new_fs; @@ -89458,10 +88887,10 @@ index a91e47d..71c9064 100644 else new_fs = fs; diff --git a/kernel/futex.c b/kernel/futex.c -index 22b3f1b..6820bc0 100644 +index 63678b5..512f9af 100644 --- a/kernel/futex.c +++ b/kernel/futex.c -@@ -202,7 +202,7 @@ struct futex_pi_state { +@@ -201,7 +201,7 @@ struct futex_pi_state { atomic_t refcount; union futex_key key; @@ -89470,7 +88899,7 @@ index 22b3f1b..6820bc0 100644 /** * struct futex_q - The hashed futex queue entry, one per waiting task -@@ -236,7 +236,7 @@ struct futex_q { +@@ -235,7 +235,7 @@ struct futex_q { struct rt_mutex_waiter *rt_waiter; union futex_key *requeue_pi_key; u32 bitset; @@ -89479,7 +88908,7 @@ index 22b3f1b..6820bc0 100644 static const struct futex_q futex_q_init = { /* list gets initialized in queue_me()*/ -@@ -396,6 +396,11 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw) +@@ -402,6 +402,11 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw) struct page *page, *page_head; int err, ro = 0; @@ -89491,7 +88920,7 @@ index 22b3f1b..6820bc0 100644 /* * The futex address must be "naturally" aligned. */ -@@ -595,7 +600,7 @@ static int cmpxchg_futex_value_locked(u32 *curval, u32 __user *uaddr, +@@ -601,7 +606,7 @@ static int cmpxchg_futex_value_locked(u32 *curval, u32 __user *uaddr, static int get_futex_value_locked(u32 *dest, u32 __user *from) { @@ -89500,7 +88929,7 @@ index 22b3f1b..6820bc0 100644 pagefault_disable(); ret = __copy_from_user_inatomic(dest, from, sizeof(u32)); -@@ -3000,6 +3005,7 @@ static void __init futex_detect_cmpxchg(void) +@@ -3006,6 +3011,7 @@ static void __init futex_detect_cmpxchg(void) { #ifndef CONFIG_HAVE_FUTEX_CMPXCHG u32 curval; @@ -89508,7 +88937,7 @@ index 22b3f1b..6820bc0 100644 /* * This will fail and we want it. Some arch implementations do -@@ -3011,8 +3017,11 @@ static void __init futex_detect_cmpxchg(void) +@@ -3017,8 +3023,11 @@ static void __init futex_detect_cmpxchg(void) * implementation, the non-functional ones will return * -ENOSYS. */ @@ -89594,7 +89023,7 @@ index 9019f15..9a3c42e 100644 static int diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c -index ae51670..c1a9796 100644 +index 5c5987f..bc502b0 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c @@ -11,6 +11,9 @@ @@ -89698,15 +89127,6 @@ index ae51670..c1a9796 100644 seq_printf(m, "%pK %c %s\t[%s]\n", (void *)iter->value, type, iter->name, iter->module_name); } else -@@ -567,7 +611,7 @@ static int kallsyms_open(struct inode *inode, struct file *file) - struct kallsym_iter *iter; - int ret; - -- iter = kmalloc(sizeof(*iter), GFP_KERNEL); -+ iter = kzalloc(sizeof(*iter), GFP_KERNEL); - if (!iter) - return -ENOMEM; - reset_iter(iter, 0); diff --git a/kernel/kcmp.c b/kernel/kcmp.c index 0aa69ea..a7fcafb 100644 --- a/kernel/kcmp.c @@ -89723,7 +89143,7 @@ index 0aa69ea..a7fcafb 100644 /* diff --git a/kernel/kexec.c b/kernel/kexec.c -index 2bee072..8979af8 100644 +index 2abf9f6..c40cf85 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -1349,7 +1349,8 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry, @@ -89737,7 +89157,7 @@ index 2bee072..8979af8 100644 /* Don't allow clients that don't understand the native diff --git a/kernel/kmod.c b/kernel/kmod.c -index 8637e04..8b1d0d8 100644 +index 80f7a6d..3c476d3 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -75,7 +75,7 @@ static void free_modprobe_argv(struct subprocess_info *info) @@ -89811,7 +89231,7 @@ index 8637e04..8b1d0d8 100644 /* If modprobe needs a service that is in a module, we get a recursive * loop. Limit the number of running kmod threads to max_threads/2 or * MAX_KMOD_CONCURRENT, whichever is the smaller. A cleaner method -@@ -188,11 +200,52 @@ int __request_module(bool wait, const char *fmt, ...) +@@ -188,16 +200,61 @@ int __request_module(bool wait, const char *fmt, ...) trace_module_request(module_name, wait, _RET_IP_); @@ -89865,7 +89285,16 @@ index 8637e04..8b1d0d8 100644 EXPORT_SYMBOL(__request_module); #endif /* CONFIG_MODULES */ -@@ -218,6 +271,20 @@ static int ____call_usermodehelper(void *data) + static void call_usermodehelper_freeinfo(struct subprocess_info *info) + { ++#ifdef CONFIG_GRKERNSEC ++ kfree(info->path); ++ info->path = info->origpath; ++#endif + if (info->cleanup) + (*info->cleanup)(info); + kfree(info); +@@ -240,6 +297,20 @@ static int ____call_usermodehelper(void *data) */ set_user_nice(current, 0); @@ -89879,14 +89308,14 @@ index 8637e04..8b1d0d8 100644 + strcmp(sub_info->path, "/usr/share/apport/apport")) || strstr(sub_info->path, "..")) { + printk(KERN_ALERT "grsec: denied exec of usermode helper binary %.950s located outside of /sbin and system library paths\n", sub_info->path); + retval = -EPERM; -+ goto fail; ++ goto out; + } +#endif + retval = -ENOMEM; new = prepare_kernel_cred(current); if (!new) -@@ -240,8 +307,8 @@ static int ____call_usermodehelper(void *data) +@@ -262,8 +333,8 @@ static int ____call_usermodehelper(void *data) commit_creds(new); retval = do_execve(getname_kernel(sub_info->path), @@ -89894,21 +89323,10 @@ index 8637e04..8b1d0d8 100644 - (const char __user *const __user *)sub_info->envp); + (const char __user *const __force_user *)sub_info->argv, + (const char __user *const __force_user *)sub_info->envp); - if (!retval) - return 0; - -@@ -260,6 +327,10 @@ static int call_helper(void *data) - - static void call_usermodehelper_freeinfo(struct subprocess_info *info) - { -+#ifdef CONFIG_GRKERNSEC -+ kfree(info->path); -+ info->path = info->origpath; -+#endif - if (info->cleanup) - (*info->cleanup)(info); - kfree(info); -@@ -300,7 +371,7 @@ static int wait_for_helper(void *data) + out: + sub_info->retval = retval; + /* wait_for_helper() will call umh_complete if UHM_WAIT_PROC. */ +@@ -303,7 +374,7 @@ static int wait_for_helper(void *data) * * Thus the __user pointer cast is valid here. */ @@ -89917,7 +89335,7 @@ index 8637e04..8b1d0d8 100644 /* * If ret is 0, either ____call_usermodehelper failed and the -@@ -539,7 +610,12 @@ struct subprocess_info *call_usermodehelper_setup(char *path, char **argv, +@@ -532,7 +603,12 @@ struct subprocess_info *call_usermodehelper_setup(char *path, char **argv, goto out; INIT_WORK(&sub_info->work, __call_usermodehelper); @@ -89930,7 +89348,7 @@ index 8637e04..8b1d0d8 100644 sub_info->argv = argv; sub_info->envp = envp; -@@ -647,7 +723,7 @@ EXPORT_SYMBOL(call_usermodehelper); +@@ -645,7 +721,7 @@ EXPORT_SYMBOL(call_usermodehelper); static int proc_cap_handler(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { @@ -90126,10 +89544,10 @@ index 9887a90..0cd2b1d 100644 #endif diff --git a/kernel/locking/mcs_spinlock.h b/kernel/locking/mcs_spinlock.h -index 23e89c5..8558eac 100644 +index 4d60986..5d351c1 100644 --- a/kernel/locking/mcs_spinlock.h +++ b/kernel/locking/mcs_spinlock.h -@@ -81,7 +81,7 @@ void mcs_spin_lock(struct mcs_spinlock **lock, struct mcs_spinlock *node) +@@ -78,7 +78,7 @@ void mcs_spin_lock(struct mcs_spinlock **lock, struct mcs_spinlock *node) */ return; } @@ -90187,10 +89605,10 @@ index 0799fd3..d06ae3b 100644 extern void debug_mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key); diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c -index ae712b2..d0d4a41 100644 +index dadbf88..4500507 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c -@@ -486,7 +486,7 @@ slowpath: +@@ -518,7 +518,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, goto skip_wait; debug_mutex_lock_common(lock, &waiter); @@ -90199,7 +89617,7 @@ index ae712b2..d0d4a41 100644 /* add waiting tasks to the end of the waitqueue (FIFO): */ list_add_tail(&waiter.list, &lock->wait_list); -@@ -531,7 +531,7 @@ slowpath: +@@ -563,7 +563,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, schedule_preempt_disabled(); spin_lock_mutex(&lock->wait_lock, flags); } @@ -90208,7 +89626,7 @@ index ae712b2..d0d4a41 100644 /* set it to 0 if there are no waiters left: */ if (likely(list_empty(&lock->wait_list))) atomic_set(&lock->count, 0); -@@ -568,7 +568,7 @@ skip_wait: +@@ -600,7 +600,7 @@ skip_wait: return 0; err: @@ -90312,7 +89730,7 @@ index 1d96dd0..994ff19 100644 default: diff --git a/kernel/module.c b/kernel/module.c -index 1c47139..6242887 100644 +index 88cec1d..d097c28 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -60,6 +60,7 @@ @@ -91229,7 +90647,7 @@ index 161402f..598814c 100644 atomic_set(&pd->refcnt, 0); pd->pinst = pinst; diff --git a/kernel/panic.c b/kernel/panic.c -index d09dc5c..9abbdff 100644 +index cf80672..f6771b2 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -53,7 +53,7 @@ EXPORT_SYMBOL(panic_blink); @@ -91241,7 +90659,7 @@ index d09dc5c..9abbdff 100644 { while (1) cpu_relax(); -@@ -421,7 +421,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller, +@@ -422,7 +422,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller, disable_trace_on_warning(); pr_warn("------------[ cut here ]------------\n"); @@ -91250,7 +90668,7 @@ index d09dc5c..9abbdff 100644 raw_smp_processor_id(), current->pid, file, line, caller); if (args) -@@ -475,7 +475,8 @@ EXPORT_SYMBOL(warn_slowpath_null); +@@ -476,7 +476,8 @@ EXPORT_SYMBOL(warn_slowpath_null); */ __visible void __stack_chk_fail(void) { @@ -91261,7 +90679,7 @@ index d09dc5c..9abbdff 100644 } EXPORT_SYMBOL(__stack_chk_fail); diff --git a/kernel/pid.c b/kernel/pid.c -index 9b9a266..c20ef80 100644 +index 82430c8..53d7793 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -33,6 +33,7 @@ @@ -91281,7 +90699,7 @@ index 9b9a266..c20ef80 100644 int pid_max_min = RESERVED_PIDS + 1; int pid_max_max = PID_MAX_LIMIT; -@@ -445,10 +446,18 @@ EXPORT_SYMBOL(pid_task); +@@ -447,10 +448,18 @@ EXPORT_SYMBOL(pid_task); */ struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns) { @@ -91301,7 +90719,7 @@ index 9b9a266..c20ef80 100644 } struct task_struct *find_task_by_vpid(pid_t vnr) -@@ -456,6 +465,14 @@ struct task_struct *find_task_by_vpid(pid_t vnr) +@@ -458,6 +467,14 @@ struct task_struct *find_task_by_vpid(pid_t vnr) return find_task_by_pid_ns(vnr, task_active_pid_ns(current)); } @@ -91330,7 +90748,7 @@ index db95d8e..a0ca23f 100644 if (write && !ns_capable(pid_ns->user_ns, CAP_SYS_ADMIN)) return -EPERM; diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig -index e4e4121..71faf14 100644 +index bbef57f..5f94462 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig @@ -24,6 +24,8 @@ config HIBERNATE_CALLBACKS @@ -91343,7 +90761,7 @@ index e4e4121..71faf14 100644 select LZO_COMPRESS select LZO_DECOMPRESS diff --git a/kernel/power/process.c b/kernel/power/process.c -index 7a37cf3..3e4c1c8 100644 +index 5a6ec86..3a8c884 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -35,6 +35,7 @@ static int try_to_freeze_tasks(bool user_only) @@ -91361,7 +90779,7 @@ index 7a37cf3..3e4c1c8 100644 + if (time_after(jiffies, end_time)) + timedout = true; read_lock(&tasklist_lock); - do_each_thread(g, p) { + for_each_process_thread(g, p) { if (p == current || !freeze_task(p)) continue; @@ -91373,7 +90791,7 @@ index 7a37cf3..3e4c1c8 100644 + sched_show_task(p); + } + } - } while_each_thread(g, p); + } read_unlock(&tasklist_lock); @@ -60,7 +68,7 @@ static int try_to_freeze_tasks(bool user_only) @@ -91386,10 +90804,10 @@ index 7a37cf3..3e4c1c8 100644 if (pm_wakeup_pending()) { diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c -index 1ce7706..3b07c49 100644 +index ced2b84..ffc4791 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c -@@ -490,6 +490,11 @@ static int check_syslog_permissions(int type, bool from_file) +@@ -489,6 +489,11 @@ static int check_syslog_permissions(int type, bool from_file) if (from_file && type != SYSLOG_ACTION_OPEN) return 0; @@ -91558,10 +90976,10 @@ index 54e7522..5b82dd6 100644 } diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c -index 948a769..5ca842b 100644 +index 240fa90..5fa56bd 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c -@@ -124,12 +124,12 @@ static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], +@@ -134,12 +134,12 @@ static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], rcu_torture_count) = { 0 }; static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], rcu_torture_batch) = { 0 }; @@ -91580,7 +90998,16 @@ index 948a769..5ca842b 100644 static long n_rcu_torture_barrier_error; static long n_rcu_torture_boost_ktrerror; static long n_rcu_torture_boost_rterror; -@@ -200,11 +200,11 @@ rcu_torture_alloc(void) +@@ -148,7 +148,7 @@ static long n_rcu_torture_boosts; + static long n_rcu_torture_timers; + static long n_barrier_attempts; + static long n_barrier_successes; +-static atomic_long_t n_cbfloods; ++static atomic_long_unchecked_t n_cbfloods; + static struct list_head rcu_torture_removed; + + static int rcu_torture_writer_state; +@@ -211,11 +211,11 @@ rcu_torture_alloc(void) spin_lock_bh(&rcu_torture_lock); if (list_empty(&rcu_torture_freelist)) { @@ -91594,7 +91021,7 @@ index 948a769..5ca842b 100644 p = rcu_torture_freelist.next; list_del_init(p); spin_unlock_bh(&rcu_torture_lock); -@@ -217,7 +217,7 @@ rcu_torture_alloc(void) +@@ -228,7 +228,7 @@ rcu_torture_alloc(void) static void rcu_torture_free(struct rcu_torture *p) { @@ -91603,7 +91030,7 @@ index 948a769..5ca842b 100644 spin_lock_bh(&rcu_torture_lock); list_add_tail(&p->rtort_free, &rcu_torture_freelist); spin_unlock_bh(&rcu_torture_lock); -@@ -301,7 +301,7 @@ rcu_torture_pipe_update_one(struct rcu_torture *rp) +@@ -312,7 +312,7 @@ rcu_torture_pipe_update_one(struct rcu_torture *rp) i = rp->rtort_pipe_count; if (i > RCU_TORTURE_PIPE_LEN) i = RCU_TORTURE_PIPE_LEN; @@ -91612,7 +91039,16 @@ index 948a769..5ca842b 100644 if (++rp->rtort_pipe_count >= RCU_TORTURE_PIPE_LEN) { rp->rtort_mbtest = 0; return true; -@@ -808,7 +808,7 @@ rcu_torture_writer(void *arg) +@@ -799,7 +799,7 @@ rcu_torture_cbflood(void *arg) + VERBOSE_TOROUT_STRING("rcu_torture_cbflood task started"); + do { + schedule_timeout_interruptible(cbflood_inter_holdoff); +- atomic_long_inc(&n_cbfloods); ++ atomic_long_inc_unchecked(&n_cbfloods); + WARN_ON(signal_pending(current)); + for (i = 0; i < cbflood_n_burst; i++) { + for (j = 0; j < cbflood_n_per_burst; j++) { +@@ -917,7 +917,7 @@ rcu_torture_writer(void *arg) i = old_rp->rtort_pipe_count; if (i > RCU_TORTURE_PIPE_LEN) i = RCU_TORTURE_PIPE_LEN; @@ -91621,7 +91057,7 @@ index 948a769..5ca842b 100644 old_rp->rtort_pipe_count++; switch (synctype[torture_random(&rand) % nsynctypes]) { case RTWS_DEF_FREE: -@@ -926,7 +926,7 @@ static void rcu_torture_timer(unsigned long unused) +@@ -1035,7 +1035,7 @@ static void rcu_torture_timer(unsigned long unused) return; } if (p->rtort_mbtest == 0) @@ -91630,7 +91066,7 @@ index 948a769..5ca842b 100644 spin_lock(&rand_lock); cur_ops->read_delay(&rand); n_rcu_torture_timers++; -@@ -996,7 +996,7 @@ rcu_torture_reader(void *arg) +@@ -1105,7 +1105,7 @@ rcu_torture_reader(void *arg) continue; } if (p->rtort_mbtest == 0) @@ -91639,31 +91075,30 @@ index 948a769..5ca842b 100644 cur_ops->read_delay(&rand); preempt_disable(); pipe_count = p->rtort_pipe_count; -@@ -1054,15 +1054,15 @@ rcu_torture_printk(char *page) - } - page += sprintf(page, "%s%s ", torture_type, TORTURE_FLAG); - page += sprintf(page, -- "rtc: %p ver: %lu tfle: %d rta: %d rtaf: %d rtf: %d ", -+ "rtc: %pP ver: %lu tfle: %d rta: %d rtaf: %d rtf: %d ", - rcu_torture_current, - rcu_torture_current_version, - list_empty(&rcu_torture_freelist), -- atomic_read(&n_rcu_torture_alloc), -- atomic_read(&n_rcu_torture_alloc_fail), -- atomic_read(&n_rcu_torture_free)); -+ atomic_read_unchecked(&n_rcu_torture_alloc), -+ atomic_read_unchecked(&n_rcu_torture_alloc_fail), -+ atomic_read_unchecked(&n_rcu_torture_free)); - page += sprintf(page, "rtmbe: %d rtbke: %ld rtbre: %ld ", -- atomic_read(&n_rcu_torture_mberror), -+ atomic_read_unchecked(&n_rcu_torture_mberror), - n_rcu_torture_boost_ktrerror, - n_rcu_torture_boost_rterror); - page += sprintf(page, "rtbf: %ld rtb: %ld nt: %ld ", -@@ -1075,14 +1075,14 @@ rcu_torture_printk(char *page) - n_barrier_attempts, - n_rcu_torture_barrier_error); - page += sprintf(page, "\n%s%s ", torture_type, TORTURE_FLAG); +@@ -1172,11 +1172,11 @@ rcu_torture_stats_print(void) + rcu_torture_current, + rcu_torture_current_version, + list_empty(&rcu_torture_freelist), +- atomic_read(&n_rcu_torture_alloc), +- atomic_read(&n_rcu_torture_alloc_fail), +- atomic_read(&n_rcu_torture_free)); ++ atomic_read_unchecked(&n_rcu_torture_alloc), ++ atomic_read_unchecked(&n_rcu_torture_alloc_fail), ++ atomic_read_unchecked(&n_rcu_torture_free)); + pr_cont("rtmbe: %d rtbke: %ld rtbre: %ld ", +- atomic_read(&n_rcu_torture_mberror), ++ atomic_read_unchecked(&n_rcu_torture_mberror), + n_rcu_torture_boost_ktrerror, + n_rcu_torture_boost_rterror); + pr_cont("rtbf: %ld rtb: %ld nt: %ld ", +@@ -1188,17 +1188,17 @@ rcu_torture_stats_print(void) + n_barrier_successes, + n_barrier_attempts, + n_rcu_torture_barrier_error); +- pr_cont("cbflood: %ld\n", atomic_long_read(&n_cbfloods)); ++ pr_cont("cbflood: %ld\n", atomic_long_read_unchecked(&n_cbfloods)); + + pr_alert("%s%s ", torture_type, TORTURE_FLAG); - if (atomic_read(&n_rcu_torture_mberror) != 0 || + if (atomic_read_unchecked(&n_rcu_torture_mberror) != 0 || n_rcu_torture_barrier_error != 0 || @@ -91671,22 +91106,22 @@ index 948a769..5ca842b 100644 n_rcu_torture_boost_rterror != 0 || n_rcu_torture_boost_failure != 0 || i > 1) { - page += sprintf(page, "!!! "); + pr_cont("%s", "!!! "); - atomic_inc(&n_rcu_torture_error); + atomic_inc_unchecked(&n_rcu_torture_error); WARN_ON_ONCE(1); } - page += sprintf(page, "Reader Pipe: "); -@@ -1096,7 +1096,7 @@ rcu_torture_printk(char *page) - page += sprintf(page, "Free-Block Circulation: "); + pr_cont("Reader Pipe: "); +@@ -1215,7 +1215,7 @@ rcu_torture_stats_print(void) + pr_alert("%s%s ", torture_type, TORTURE_FLAG); + pr_cont("Free-Block Circulation: "); for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) { - page += sprintf(page, " %d", -- atomic_read(&rcu_torture_wcount[i])); -+ atomic_read_unchecked(&rcu_torture_wcount[i])); +- pr_cont(" %d", atomic_read(&rcu_torture_wcount[i])); ++ pr_cont(" %d", atomic_read_unchecked(&rcu_torture_wcount[i])); } - page += sprintf(page, "\n"); - if (cur_ops->stats) -@@ -1461,7 +1461,7 @@ rcu_torture_cleanup(void) + pr_cont("\n"); + +@@ -1559,7 +1559,7 @@ rcu_torture_cleanup(void) rcu_torture_stats_print(); /* -After- the stats thread is stopped! */ @@ -91695,7 +91130,7 @@ index 948a769..5ca842b 100644 rcu_torture_print_module_parms(cur_ops, "End of test: FAILURE"); else if (torture_onoff_failures()) rcu_torture_print_module_parms(cur_ops, -@@ -1584,18 +1584,18 @@ rcu_torture_init(void) +@@ -1684,18 +1684,18 @@ rcu_torture_init(void) rcu_torture_current = NULL; rcu_torture_current_version = 0; @@ -91721,7 +91156,7 @@ index 948a769..5ca842b 100644 for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) { per_cpu(rcu_torture_count, cpu)[i] = 0; diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c -index d9efcc1..ea543e9 100644 +index c0623fc..329c091 100644 --- a/kernel/rcu/tiny.c +++ b/kernel/rcu/tiny.c @@ -42,7 +42,7 @@ @@ -91733,7 +91168,7 @@ index d9efcc1..ea543e9 100644 static void __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), struct rcu_ctrlblk *rcp); -@@ -308,7 +308,7 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp) +@@ -310,7 +310,7 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp) false)); } @@ -91768,10 +91203,10 @@ index 858c565..7efd915 100644 static void check_cpu_stalls(void) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c -index 89a404a..f42a019 100644 +index 9815447..2cdf92a 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c -@@ -263,7 +263,7 @@ static void rcu_momentary_dyntick_idle(void) +@@ -274,7 +274,7 @@ static void rcu_momentary_dyntick_idle(void) */ rdtp = this_cpu_ptr(&rcu_dynticks); smp_mb__before_atomic(); /* Earlier stuff before QS. */ @@ -91780,7 +91215,7 @@ index 89a404a..f42a019 100644 smp_mb__after_atomic(); /* Later stuff after QS. */ break; } -@@ -523,9 +523,9 @@ static void rcu_eqs_enter_common(struct rcu_dynticks *rdtp, long long oldval, +@@ -534,9 +534,9 @@ static void rcu_eqs_enter_common(struct rcu_dynticks *rdtp, long long oldval, rcu_prepare_for_idle(smp_processor_id()); /* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */ smp_mb__before_atomic(); /* See above. */ @@ -91789,12 +91224,12 @@ index 89a404a..f42a019 100644 smp_mb__after_atomic(); /* Force ordering with next sojourn. */ - WARN_ON_ONCE(atomic_read(&rdtp->dynticks) & 0x1); + WARN_ON_ONCE(atomic_read_unchecked(&rdtp->dynticks) & 0x1); + rcu_dynticks_task_enter(); /* - * It is illegal to enter an extended quiescent state while -@@ -643,10 +643,10 @@ static void rcu_eqs_exit_common(struct rcu_dynticks *rdtp, long long oldval, - int user) +@@ -656,10 +656,10 @@ static void rcu_eqs_exit_common(struct rcu_dynticks *rdtp, long long oldval, { + rcu_dynticks_task_exit(); smp_mb__before_atomic(); /* Force ordering w/previous sojourn. */ - atomic_inc(&rdtp->dynticks); + atomic_inc_unchecked(&rdtp->dynticks); @@ -91805,7 +91240,7 @@ index 89a404a..f42a019 100644 rcu_cleanup_after_idle(smp_processor_id()); trace_rcu_dyntick(TPS("End"), oldval, rdtp->dynticks_nesting); if (!user && !is_idle_task(current)) { -@@ -767,14 +767,14 @@ void rcu_nmi_enter(void) +@@ -780,14 +780,14 @@ void rcu_nmi_enter(void) struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks); if (rdtp->dynticks_nmi_nesting == 0 && @@ -91823,7 +91258,7 @@ index 89a404a..f42a019 100644 } /** -@@ -793,9 +793,9 @@ void rcu_nmi_exit(void) +@@ -806,9 +806,9 @@ void rcu_nmi_exit(void) return; /* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */ smp_mb__before_atomic(); /* See above. */ @@ -91835,7 +91270,7 @@ index 89a404a..f42a019 100644 } /** -@@ -808,7 +808,7 @@ void rcu_nmi_exit(void) +@@ -821,7 +821,7 @@ void rcu_nmi_exit(void) */ bool notrace __rcu_is_watching(void) { @@ -91844,7 +91279,7 @@ index 89a404a..f42a019 100644 } /** -@@ -891,7 +891,7 @@ static int rcu_is_cpu_rrupt_from_idle(void) +@@ -904,7 +904,7 @@ static int rcu_is_cpu_rrupt_from_idle(void) static int dyntick_save_progress_counter(struct rcu_data *rdp, bool *isidle, unsigned long *maxj) { @@ -91853,7 +91288,7 @@ index 89a404a..f42a019 100644 rcu_sysidle_check_cpu(rdp, isidle, maxj); if ((rdp->dynticks_snap & 0x1) == 0) { trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, TPS("dti")); -@@ -920,7 +920,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, +@@ -933,7 +933,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, int *rcrmp; unsigned int snap; @@ -91862,7 +91297,7 @@ index 89a404a..f42a019 100644 snap = (unsigned int)rdp->dynticks_snap; /* -@@ -983,10 +983,10 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, +@@ -996,10 +996,10 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, rdp->rsp->gp_start + jiffies_till_sched_qs) || ULONG_CMP_GE(jiffies, rdp->rsp->jiffies_resched)) { if (!(ACCESS_ONCE(*rcrmp) & rdp->rsp->flavor_mask)) { @@ -91875,7 +91310,7 @@ index 89a404a..f42a019 100644 ACCESS_ONCE(*rcrmp) + rdp->rsp->flavor_mask; resched_cpu(rdp->cpu); /* Force CPU into scheduler. */ rdp->rsp->jiffies_resched += 5; /* Enable beating. */ -@@ -1008,7 +1008,7 @@ static void record_gp_stall_check_time(struct rcu_state *rsp) +@@ -1021,7 +1021,7 @@ static void record_gp_stall_check_time(struct rcu_state *rsp) rsp->gp_start = j; smp_wmb(); /* Record start time before stall time. */ j1 = rcu_jiffies_till_stall_check(); @@ -91884,7 +91319,7 @@ index 89a404a..f42a019 100644 rsp->jiffies_resched = j + j1 / 2; } -@@ -1049,7 +1049,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp) +@@ -1062,7 +1062,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp) raw_spin_unlock_irqrestore(&rnp->lock, flags); return; } @@ -91893,7 +91328,7 @@ index 89a404a..f42a019 100644 raw_spin_unlock_irqrestore(&rnp->lock, flags); /* -@@ -1126,7 +1126,7 @@ static void print_cpu_stall(struct rcu_state *rsp) +@@ -1139,7 +1139,7 @@ static void print_cpu_stall(struct rcu_state *rsp) raw_spin_lock_irqsave(&rnp->lock, flags); if (ULONG_CMP_GE(jiffies, ACCESS_ONCE(rsp->jiffies_stall))) @@ -91902,7 +91337,7 @@ index 89a404a..f42a019 100644 3 * rcu_jiffies_till_stall_check() + 3; raw_spin_unlock_irqrestore(&rnp->lock, flags); -@@ -1210,7 +1210,7 @@ void rcu_cpu_stall_reset(void) +@@ -1223,7 +1223,7 @@ void rcu_cpu_stall_reset(void) struct rcu_state *rsp; for_each_rcu_flavor(rsp) @@ -91911,7 +91346,7 @@ index 89a404a..f42a019 100644 } /* -@@ -1596,7 +1596,7 @@ static int rcu_gp_init(struct rcu_state *rsp) +@@ -1609,7 +1609,7 @@ static int rcu_gp_init(struct rcu_state *rsp) raw_spin_unlock_irq(&rnp->lock); return 0; } @@ -91920,7 +91355,7 @@ index 89a404a..f42a019 100644 if (WARN_ON_ONCE(rcu_gp_in_progress(rsp))) { /* -@@ -1637,9 +1637,9 @@ static int rcu_gp_init(struct rcu_state *rsp) +@@ -1650,9 +1650,9 @@ static int rcu_gp_init(struct rcu_state *rsp) rdp = this_cpu_ptr(rsp->rda); rcu_preempt_check_blocked_tasks(rnp); rnp->qsmask = rnp->qsmaskinit; @@ -91932,16 +91367,16 @@ index 89a404a..f42a019 100644 if (rnp == rdp->mynode) (void)__note_gp_changes(rsp, rnp, rdp); rcu_preempt_boost_start_gp(rnp); -@@ -1684,7 +1684,7 @@ static int rcu_gp_fqs(struct rcu_state *rsp, int fqs_state_in) +@@ -1697,7 +1697,7 @@ static int rcu_gp_fqs(struct rcu_state *rsp, int fqs_state_in) if (ACCESS_ONCE(rsp->gp_flags) & RCU_GP_FLAG_FQS) { raw_spin_lock_irq(&rnp->lock); smp_mb__after_unlock_lock(); -- ACCESS_ONCE(rsp->gp_flags) &= ~RCU_GP_FLAG_FQS; -+ ACCESS_ONCE_RW(rsp->gp_flags) &= ~RCU_GP_FLAG_FQS; +- ACCESS_ONCE(rsp->gp_flags) = ++ ACCESS_ONCE_RW(rsp->gp_flags) = + ACCESS_ONCE(rsp->gp_flags) & ~RCU_GP_FLAG_FQS; raw_spin_unlock_irq(&rnp->lock); } - return fqs_state; -@@ -1729,7 +1729,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) +@@ -1743,7 +1743,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) rcu_for_each_node_breadth_first(rsp, rnp) { raw_spin_lock_irq(&rnp->lock); smp_mb__after_unlock_lock(); @@ -91950,7 +91385,7 @@ index 89a404a..f42a019 100644 rdp = this_cpu_ptr(rsp->rda); if (rnp == rdp->mynode) needgp = __note_gp_changes(rsp, rnp, rdp) || needgp; -@@ -1744,14 +1744,14 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) +@@ -1758,14 +1758,14 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) rcu_nocb_gp_set(rnp, nocb); /* Declare grace period done. */ @@ -91967,7 +91402,7 @@ index 89a404a..f42a019 100644 trace_rcu_grace_period(rsp->name, ACCESS_ONCE(rsp->gpnum), TPS("newreq")); -@@ -1876,7 +1876,7 @@ rcu_start_gp_advanced(struct rcu_state *rsp, struct rcu_node *rnp, +@@ -1890,7 +1890,7 @@ rcu_start_gp_advanced(struct rcu_state *rsp, struct rcu_node *rnp, */ return false; } @@ -91976,7 +91411,7 @@ index 89a404a..f42a019 100644 trace_rcu_grace_period(rsp->name, ACCESS_ONCE(rsp->gpnum), TPS("newreq")); -@@ -2097,7 +2097,7 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp, +@@ -2111,7 +2111,7 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp, rsp->qlen += rdp->qlen; rdp->n_cbs_orphaned += rdp->qlen; rdp->qlen_lazy = 0; @@ -91985,7 +91420,7 @@ index 89a404a..f42a019 100644 } /* -@@ -2344,7 +2344,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp) +@@ -2356,7 +2356,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp) } smp_mb(); /* List handling before counting for rcu_barrier(). */ rdp->qlen_lazy -= count_lazy; @@ -91994,16 +91429,16 @@ index 89a404a..f42a019 100644 rdp->n_cbs_invoked += count; /* Reinstate batch limit if we have worked down the excess. */ -@@ -2505,7 +2505,7 @@ static void force_quiescent_state(struct rcu_state *rsp) +@@ -2519,7 +2519,7 @@ static void force_quiescent_state(struct rcu_state *rsp) raw_spin_unlock_irqrestore(&rnp_old->lock, flags); return; /* Someone beat us to it. */ } -- ACCESS_ONCE(rsp->gp_flags) |= RCU_GP_FLAG_FQS; -+ ACCESS_ONCE_RW(rsp->gp_flags) |= RCU_GP_FLAG_FQS; +- ACCESS_ONCE(rsp->gp_flags) = ++ ACCESS_ONCE_RW(rsp->gp_flags) = + ACCESS_ONCE(rsp->gp_flags) | RCU_GP_FLAG_FQS; raw_spin_unlock_irqrestore(&rnp_old->lock, flags); rcu_gp_kthread_wake(rsp); - } -@@ -2550,7 +2550,7 @@ __rcu_process_callbacks(struct rcu_state *rsp) +@@ -2565,7 +2565,7 @@ __rcu_process_callbacks(struct rcu_state *rsp) /* * Do RCU core processing for the current CPU. */ @@ -92012,7 +91447,7 @@ index 89a404a..f42a019 100644 { struct rcu_state *rsp; -@@ -2662,7 +2662,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), +@@ -2677,7 +2677,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), WARN_ON_ONCE((unsigned long)head & 0x1); /* Misaligned rcu_head! */ if (debug_rcu_head_queue(head)) { /* Probable double call_rcu(), so leak the callback. */ @@ -92021,7 +91456,7 @@ index 89a404a..f42a019 100644 WARN_ONCE(1, "__call_rcu(): Leaked duplicate callback\n"); return; } -@@ -2690,7 +2690,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), +@@ -2705,7 +2705,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), local_irq_restore(flags); return; } @@ -92030,7 +91465,7 @@ index 89a404a..f42a019 100644 if (lazy) rdp->qlen_lazy++; else -@@ -2965,11 +2965,11 @@ void synchronize_sched_expedited(void) +@@ -2975,11 +2975,11 @@ void synchronize_sched_expedited(void) * counter wrap on a 32-bit system. Quite a few more CPUs would of * course be required on a 64-bit system. */ @@ -92044,16 +91479,22 @@ index 89a404a..f42a019 100644 return; } -@@ -2977,7 +2977,7 @@ void synchronize_sched_expedited(void) +@@ -2987,12 +2987,12 @@ void synchronize_sched_expedited(void) * Take a ticket. Note that atomic_inc_return() implies a * full memory barrier. */ - snap = atomic_long_inc_return(&rsp->expedited_start); + snap = atomic_long_inc_return_unchecked(&rsp->expedited_start); firstsnap = snap; - get_online_cpus(); + if (!try_get_online_cpus()) { + /* CPU hotplug operation in flight, fall back to normal GP. */ + wait_rcu_gp(call_rcu_sched); +- atomic_long_inc(&rsp->expedited_normal); ++ atomic_long_inc_unchecked(&rsp->expedited_normal); + return; + } WARN_ON_ONCE(cpu_is_offline(raw_smp_processor_id())); -@@ -2990,14 +2990,14 @@ void synchronize_sched_expedited(void) +@@ -3005,14 +3005,14 @@ void synchronize_sched_expedited(void) synchronize_sched_expedited_cpu_stop, NULL) == -EAGAIN) { put_online_cpus(); @@ -92070,7 +91511,7 @@ index 89a404a..f42a019 100644 return; } -@@ -3006,7 +3006,7 @@ void synchronize_sched_expedited(void) +@@ -3021,7 +3021,7 @@ void synchronize_sched_expedited(void) udelay(trycount * num_online_cpus()); } else { wait_rcu_gp(call_rcu_sched); @@ -92079,7 +91520,7 @@ index 89a404a..f42a019 100644 return; } -@@ -3015,7 +3015,7 @@ void synchronize_sched_expedited(void) +@@ -3030,7 +3030,7 @@ void synchronize_sched_expedited(void) if (ULONG_CMP_GE((ulong)s, (ulong)firstsnap)) { /* ensure test happens before caller kfree */ smp_mb__before_atomic(); /* ^^^ */ @@ -92088,10 +91529,14 @@ index 89a404a..f42a019 100644 return; } -@@ -3027,10 +3027,10 @@ void synchronize_sched_expedited(void) - * period works for us. - */ - get_online_cpus(); +@@ -3044,13 +3044,13 @@ void synchronize_sched_expedited(void) + if (!try_get_online_cpus()) { + /* CPU hotplug operation in flight, use normal GP. */ + wait_rcu_gp(call_rcu_sched); +- atomic_long_inc(&rsp->expedited_normal); ++ atomic_long_inc_unchecked(&rsp->expedited_normal); + return; + } - snap = atomic_long_read(&rsp->expedited_start); + snap = atomic_long_read_unchecked(&rsp->expedited_start); smp_mb(); /* ensure read is before try_stop_cpus(). */ @@ -92101,7 +91546,7 @@ index 89a404a..f42a019 100644 /* * Everyone up to our most recent fetch is covered by our grace -@@ -3039,16 +3039,16 @@ void synchronize_sched_expedited(void) +@@ -3059,16 +3059,16 @@ void synchronize_sched_expedited(void) * than we did already did their update. */ do { @@ -92121,7 +91566,7 @@ index 89a404a..f42a019 100644 put_online_cpus(); } -@@ -3254,7 +3254,7 @@ static void _rcu_barrier(struct rcu_state *rsp) +@@ -3274,7 +3274,7 @@ static void _rcu_barrier(struct rcu_state *rsp) * ACCESS_ONCE() to prevent the compiler from speculating * the increment to precede the early-exit check. */ @@ -92130,7 +91575,7 @@ index 89a404a..f42a019 100644 WARN_ON_ONCE((rsp->n_barrier_done & 0x1) != 1); _rcu_barrier_trace(rsp, "Inc1", -1, rsp->n_barrier_done); smp_mb(); /* Order ->n_barrier_done increment with below mechanism. */ -@@ -3304,7 +3304,7 @@ static void _rcu_barrier(struct rcu_state *rsp) +@@ -3329,7 +3329,7 @@ static void _rcu_barrier(struct rcu_state *rsp) /* Increment ->n_barrier_done to prevent duplicate work. */ smp_mb(); /* Keep increment after above mechanism. */ @@ -92139,7 +91584,7 @@ index 89a404a..f42a019 100644 WARN_ON_ONCE((rsp->n_barrier_done & 0x1) != 0); _rcu_barrier_trace(rsp, "Inc2", -1, rsp->n_barrier_done); smp_mb(); /* Keep increment before caller's subsequent code. */ -@@ -3349,10 +3349,10 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) +@@ -3374,10 +3374,10 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) rdp->grpmask = 1UL << (cpu - rdp->mynode->grplo); init_callback_list(rdp); rdp->qlen_lazy = 0; @@ -92152,7 +91597,7 @@ index 89a404a..f42a019 100644 rdp->cpu = cpu; rdp->rsp = rsp; rcu_boot_init_nocb_percpu_data(rdp); -@@ -3385,8 +3385,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp) +@@ -3410,8 +3410,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp) init_callback_list(rdp); /* Re-enable callbacks on this CPU. */ rdp->dynticks->dynticks_nesting = DYNTICK_TASK_EXIT_IDLE; rcu_sysidle_init_percpu_data(rdp->dynticks); @@ -92164,7 +91609,7 @@ index 89a404a..f42a019 100644 /* Add CPU to rcu_node bitmasks. */ diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h -index 6a86eb7..022b506 100644 +index bbdc45d..c882ccb 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h @@ -87,11 +87,11 @@ struct rcu_dynticks { @@ -92181,7 +91626,7 @@ index 6a86eb7..022b506 100644 /* "Idle" excludes userspace execution. */ unsigned long dynticks_idle_jiffies; /* End of last non-NMI non-idle period. */ -@@ -461,17 +461,17 @@ struct rcu_state { +@@ -466,17 +466,17 @@ struct rcu_state { /* _rcu_barrier(). */ /* End of fields guarded by barrier_mutex. */ @@ -92211,10 +91656,10 @@ index 6a86eb7..022b506 100644 unsigned long jiffies_force_qs; /* Time at which to invoke */ /* force_quiescent_state(). */ diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h -index a7997e2..9787c9e 100644 +index c1d7f27..a64bf49 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h -@@ -735,7 +735,7 @@ static int rcu_preempted_readers_exp(struct rcu_node *rnp) +@@ -709,7 +709,7 @@ static int rcu_preempted_readers_exp(struct rcu_node *rnp) static int sync_rcu_preempt_exp_done(struct rcu_node *rnp) { return !rcu_preempted_readers_exp(rnp) && @@ -92223,16 +91668,16 @@ index a7997e2..9787c9e 100644 } /* -@@ -897,7 +897,7 @@ void synchronize_rcu_expedited(void) +@@ -870,7 +870,7 @@ void synchronize_rcu_expedited(void) /* Clean up and exit. */ smp_mb(); /* ensure expedited GP seen before counter increment. */ -- ACCESS_ONCE(sync_rcu_preempt_exp_count)++; -+ ACCESS_ONCE_RW(sync_rcu_preempt_exp_count)++; +- ACCESS_ONCE(sync_rcu_preempt_exp_count) = ++ ACCESS_ONCE_RW(sync_rcu_preempt_exp_count) = + sync_rcu_preempt_exp_count + 1; unlock_mb_ret: mutex_unlock(&sync_rcu_preempt_exp_mutex); - mb_ret: -@@ -1452,7 +1452,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu) +@@ -1426,7 +1426,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu) free_cpumask_var(cm); } @@ -92241,7 +91686,7 @@ index a7997e2..9787c9e 100644 .store = &rcu_cpu_kthread_task, .thread_should_run = rcu_cpu_kthread_should_run, .thread_fn = rcu_cpu_kthread, -@@ -1932,7 +1932,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu) +@@ -1900,7 +1900,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu) print_cpu_stall_fast_no_hz(fast_no_hz, cpu); pr_err("\t%d: (%lu %s) idle=%03x/%llx/%d softirq=%u/%u %s\n", cpu, ticks_value, ticks_title, @@ -92250,16 +91695,16 @@ index a7997e2..9787c9e 100644 rdtp->dynticks_nesting, rdtp->dynticks_nmi_nesting, rdp->softirq_snap, kstat_softirqs_cpu(RCU_SOFTIRQ, cpu), fast_no_hz); -@@ -2076,7 +2076,7 @@ static void wake_nocb_leader(struct rcu_data *rdp, bool force) +@@ -2044,7 +2044,7 @@ static void wake_nocb_leader(struct rcu_data *rdp, bool force) return; if (ACCESS_ONCE(rdp_leader->nocb_leader_sleep) || force) { - /* Prior xchg orders against prior callback enqueue. */ + /* Prior smp_mb__after_atomic() orders against prior enqueue. */ - ACCESS_ONCE(rdp_leader->nocb_leader_sleep) = false; + ACCESS_ONCE_RW(rdp_leader->nocb_leader_sleep) = false; wake_up(&rdp_leader->nocb_wq); } } -@@ -2101,7 +2101,7 @@ static void __call_rcu_nocb_enqueue(struct rcu_data *rdp, +@@ -2096,7 +2096,7 @@ static void __call_rcu_nocb_enqueue(struct rcu_data *rdp, /* Enqueue the callback on the nocb list and update counts. */ old_rhpp = xchg(&rdp->nocb_tail, rhtp); @@ -92267,8 +91712,8 @@ index a7997e2..9787c9e 100644 + ACCESS_ONCE_RW(*old_rhpp) = rhp; atomic_long_add(rhcount, &rdp->nocb_q_count); atomic_long_add(rhcount_lazy, &rdp->nocb_q_count_lazy); - -@@ -2272,7 +2272,7 @@ wait_again: + smp_mb__after_atomic(); /* Store *old_rhpp before _wake test. */ +@@ -2286,7 +2286,7 @@ wait_again: continue; /* No CBs here, try next follower. */ /* Move callbacks to wait-for-GP list, which is empty. */ @@ -92277,7 +91722,7 @@ index a7997e2..9787c9e 100644 rdp->nocb_gp_tail = xchg(&rdp->nocb_tail, &rdp->nocb_head); rdp->nocb_gp_count = atomic_long_xchg(&rdp->nocb_q_count, 0); rdp->nocb_gp_count_lazy = -@@ -2398,7 +2398,7 @@ static int rcu_nocb_kthread(void *arg) +@@ -2413,7 +2413,7 @@ static int rcu_nocb_kthread(void *arg) list = ACCESS_ONCE(rdp->nocb_follower_head); BUG_ON(!list); trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, "WokeNonEmpty"); @@ -92286,36 +91731,36 @@ index a7997e2..9787c9e 100644 tail = xchg(&rdp->nocb_follower_tail, &rdp->nocb_follower_head); c = atomic_long_xchg(&rdp->nocb_follower_count, 0); cl = atomic_long_xchg(&rdp->nocb_follower_count_lazy, 0); -@@ -2428,8 +2428,8 @@ static int rcu_nocb_kthread(void *arg) +@@ -2443,8 +2443,8 @@ static int rcu_nocb_kthread(void *arg) list = next; } trace_rcu_batch_end(rdp->rsp->name, c, !!list, 0, 0, 1); -- ACCESS_ONCE(rdp->nocb_p_count) -= c; -- ACCESS_ONCE(rdp->nocb_p_count_lazy) -= cl; -+ ACCESS_ONCE_RW(rdp->nocb_p_count) -= c; -+ ACCESS_ONCE_RW(rdp->nocb_p_count_lazy) -= cl; +- ACCESS_ONCE(rdp->nocb_p_count) = rdp->nocb_p_count - c; +- ACCESS_ONCE(rdp->nocb_p_count_lazy) = ++ ACCESS_ONCE_RW(rdp->nocb_p_count) = rdp->nocb_p_count - c; ++ ACCESS_ONCE_RW(rdp->nocb_p_count_lazy) = + rdp->nocb_p_count_lazy - cl; rdp->n_nocbs_invoked += c; } - return 0; -@@ -2446,7 +2446,7 @@ static void do_nocb_deferred_wakeup(struct rcu_data *rdp) - { +@@ -2465,7 +2465,7 @@ static void do_nocb_deferred_wakeup(struct rcu_data *rdp) if (!rcu_nocb_need_deferred_wakeup(rdp)) return; -- ACCESS_ONCE(rdp->nocb_defer_wakeup) = false; -+ ACCESS_ONCE_RW(rdp->nocb_defer_wakeup) = false; - wake_nocb_leader(rdp, false); - trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, TPS("DeferredWakeEmpty")); + ndw = ACCESS_ONCE(rdp->nocb_defer_wakeup); +- ACCESS_ONCE(rdp->nocb_defer_wakeup) = RCU_NOGP_WAKE_NOT; ++ ACCESS_ONCE_RW(rdp->nocb_defer_wakeup) = RCU_NOGP_WAKE_NOT; + wake_nocb_leader(rdp, ndw == RCU_NOGP_WAKE_FORCE); + trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, TPS("DeferredWake")); } -@@ -2510,7 +2510,7 @@ static void __init rcu_spawn_nocb_kthreads(struct rcu_state *rsp) - t = kthread_run(rcu_nocb_kthread, rdp, - "rcuo%c/%d", rsp->abbr, cpu); - BUG_ON(IS_ERR(t)); -- ACCESS_ONCE(rdp->nocb_kthread) = t; -+ ACCESS_ONCE_RW(rdp->nocb_kthread) = t; - } +@@ -2584,7 +2584,7 @@ static void rcu_spawn_one_nocb_kthread(struct rcu_state *rsp, int cpu) + t = kthread_run(rcu_nocb_kthread, rdp_spawn, + "rcuo%c/%d", rsp->abbr, cpu); + BUG_ON(IS_ERR(t)); +- ACCESS_ONCE(rdp_spawn->nocb_kthread) = t; ++ ACCESS_ONCE_RW(rdp_spawn->nocb_kthread) = t; } -@@ -2641,11 +2641,11 @@ static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq) + /* +@@ -2788,11 +2788,11 @@ static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq) /* Record start of fully idle period. */ j = jiffies; @@ -92330,7 +91775,7 @@ index a7997e2..9787c9e 100644 } /* -@@ -2710,9 +2710,9 @@ static void rcu_sysidle_exit(struct rcu_dynticks *rdtp, int irq) +@@ -2861,9 +2861,9 @@ static void rcu_sysidle_exit(struct rcu_dynticks *rdtp, int irq) /* Record end of idle period. */ smp_mb__before_atomic(); @@ -92342,7 +91787,7 @@ index a7997e2..9787c9e 100644 /* * If we are the timekeeping CPU, we are permitted to be non-idle -@@ -2753,7 +2753,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle, +@@ -2908,7 +2908,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle, WARN_ON_ONCE(smp_processor_id() != tick_do_timer_cpu); /* Pick up current idle and NMI-nesting counter and check. */ @@ -92351,7 +91796,7 @@ index a7997e2..9787c9e 100644 if (cur & 0x1) { *isidle = false; /* We are not idle! */ return; -@@ -2802,7 +2802,7 @@ static void rcu_sysidle(unsigned long j) +@@ -2957,7 +2957,7 @@ static void rcu_sysidle(unsigned long j) case RCU_SYSIDLE_NOT: /* First time all are idle, so note a short idle period. */ @@ -92360,7 +91805,7 @@ index a7997e2..9787c9e 100644 break; case RCU_SYSIDLE_SHORT: -@@ -2840,7 +2840,7 @@ static void rcu_sysidle_cancel(void) +@@ -2995,7 +2995,7 @@ static void rcu_sysidle_cancel(void) { smp_mb(); if (full_sysidle_state > RCU_SYSIDLE_SHORT) @@ -92369,7 +91814,7 @@ index a7997e2..9787c9e 100644 } /* -@@ -2888,7 +2888,7 @@ static void rcu_sysidle_cb(struct rcu_head *rhp) +@@ -3047,7 +3047,7 @@ static void rcu_sysidle_cb(struct rcu_head *rhp) smp_mb(); /* grace period precedes setting inuse. */ rshp = container_of(rhp, struct rcu_sysidle_head, rh); @@ -92378,6 +91823,23 @@ index a7997e2..9787c9e 100644 } /* +@@ -3200,7 +3200,7 @@ static void rcu_bind_gp_kthread(void) + static void rcu_dynticks_task_enter(void) + { + #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) +- ACCESS_ONCE(current->rcu_tasks_idle_cpu) = smp_processor_id(); ++ ACCESS_ONCE_RW(current->rcu_tasks_idle_cpu) = smp_processor_id(); + #endif /* #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) */ + } + +@@ -3208,6 +3208,6 @@ static void rcu_dynticks_task_enter(void) + static void rcu_dynticks_task_exit(void) + { + #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) +- ACCESS_ONCE(current->rcu_tasks_idle_cpu) = -1; ++ ACCESS_ONCE_RW(current->rcu_tasks_idle_cpu) = -1; + #endif /* #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) */ + } diff --git a/kernel/rcu/tree_trace.c b/kernel/rcu/tree_trace.c index 5cdc62e..cc52e88 100644 --- a/kernel/rcu/tree_trace.c @@ -92420,10 +91882,10 @@ index 5cdc62e..cc52e88 100644 } diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c -index 4056d79..c11741a 100644 +index 3ef8ba5..8c5ebfb6 100644 --- a/kernel/rcu/update.c +++ b/kernel/rcu/update.c -@@ -308,10 +308,10 @@ int rcu_jiffies_till_stall_check(void) +@@ -342,10 +342,10 @@ int rcu_jiffies_till_stall_check(void) * for CONFIG_RCU_CPU_STALL_TIMEOUT. */ if (till_stall_check < 3) { @@ -92436,8 +91898,35 @@ index 4056d79..c11741a 100644 till_stall_check = 300; } return till_stall_check * HZ + RCU_STALL_DELAY_DELTA; +@@ -501,7 +501,7 @@ static void check_holdout_task(struct task_struct *t, + !ACCESS_ONCE(t->on_rq) || + (IS_ENABLED(CONFIG_NO_HZ_FULL) && + !is_idle_task(t) && t->rcu_tasks_idle_cpu >= 0)) { +- ACCESS_ONCE(t->rcu_tasks_holdout) = false; ++ ACCESS_ONCE_RW(t->rcu_tasks_holdout) = false; + list_del_init(&t->rcu_tasks_holdout_list); + put_task_struct(t); + return; +@@ -588,7 +588,7 @@ static int __noreturn rcu_tasks_kthread(void *arg) + !is_idle_task(t)) { + get_task_struct(t); + t->rcu_tasks_nvcsw = ACCESS_ONCE(t->nvcsw); +- ACCESS_ONCE(t->rcu_tasks_holdout) = true; ++ ACCESS_ONCE_RW(t->rcu_tasks_holdout) = true; + list_add(&t->rcu_tasks_holdout_list, + &rcu_tasks_holdouts); + } +@@ -685,7 +685,7 @@ static void rcu_spawn_tasks_kthread(void) + t = kthread_run(rcu_tasks_kthread, NULL, "rcu_tasks_kthread"); + BUG_ON(IS_ERR(t)); + smp_mb(); /* Ensure others see full kthread. */ +- ACCESS_ONCE(rcu_tasks_kthread_ptr) = t; ++ ACCESS_ONCE_RW(rcu_tasks_kthread_ptr) = t; + mutex_unlock(&rcu_tasks_kthread_mutex); + } + diff --git a/kernel/resource.c b/kernel/resource.c -index 60c5a38..ed77193 100644 +index 0bcebff..e7cd5b2 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -161,8 +161,18 @@ static const struct file_operations proc_iomem_operations = { @@ -92460,7 +91949,7 @@ index 60c5a38..ed77193 100644 } __initcall(ioresources_init); diff --git a/kernel/sched/auto_group.c b/kernel/sched/auto_group.c -index e73efba..c9bfbd4 100644 +index 8a2e230..6020954 100644 --- a/kernel/sched/auto_group.c +++ b/kernel/sched/auto_group.c @@ -11,7 +11,7 @@ @@ -92513,10 +92002,10 @@ index a63f4dc..349bbb0 100644 unsigned long timeout) { diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 6d7cb91..420f2d2 100644 +index 89e7283..072bc26 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -1857,7 +1857,7 @@ void set_numabalancing_state(bool enabled) +@@ -1885,7 +1885,7 @@ void set_numabalancing_state(bool enabled) int sysctl_numa_balancing(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { @@ -92525,7 +92014,7 @@ index 6d7cb91..420f2d2 100644 int err; int state = numabalancing_enabled; -@@ -2324,8 +2324,10 @@ context_switch(struct rq *rq, struct task_struct *prev, +@@ -2348,8 +2348,10 @@ context_switch(struct rq *rq, struct task_struct *prev, next->active_mm = oldmm; atomic_inc(&oldmm->mm_count); enter_lazy_tlb(oldmm, next); @@ -92537,7 +92026,7 @@ index 6d7cb91..420f2d2 100644 if (!prev->mm) { prev->active_mm = NULL; -@@ -3107,6 +3109,8 @@ int can_nice(const struct task_struct *p, const int nice) +@@ -3160,6 +3162,8 @@ int can_nice(const struct task_struct *p, const int nice) /* convert nice value [19,-20] to rlimit style value [1,40] */ int nice_rlim = nice_to_rlimit(nice); @@ -92546,7 +92035,7 @@ index 6d7cb91..420f2d2 100644 return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) || capable(CAP_SYS_NICE)); } -@@ -3133,7 +3137,8 @@ SYSCALL_DEFINE1(nice, int, increment) +@@ -3186,7 +3190,8 @@ SYSCALL_DEFINE1(nice, int, increment) nice = task_nice(current) + increment; nice = clamp_val(nice, MIN_NICE, MAX_NICE); @@ -92556,7 +92045,7 @@ index 6d7cb91..420f2d2 100644 return -EPERM; retval = security_task_setnice(current, nice); -@@ -3412,6 +3417,7 @@ recheck: +@@ -3465,6 +3470,7 @@ recheck: if (policy != p->policy && !rlim_rtprio) return -EPERM; @@ -92564,7 +92053,7 @@ index 6d7cb91..420f2d2 100644 /* can't increase priority */ if (attr->sched_priority > p->rt_priority && attr->sched_priority > rlim_rtprio) -@@ -4802,6 +4808,7 @@ void idle_task_exit(void) +@@ -4885,6 +4891,7 @@ void idle_task_exit(void) if (mm != &init_mm) { switch_mm(mm, &init_mm, current); @@ -92572,7 +92061,7 @@ index 6d7cb91..420f2d2 100644 finish_arch_post_lock_switch(); } mmdrop(mm); -@@ -4897,7 +4904,7 @@ static void migrate_tasks(unsigned int dead_cpu) +@@ -4980,7 +4987,7 @@ static void migrate_tasks(unsigned int dead_cpu) #if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SYSCTL) @@ -92581,7 +92070,7 @@ index 6d7cb91..420f2d2 100644 { .procname = "sched_domain", .mode = 0555, -@@ -4914,17 +4921,17 @@ static struct ctl_table sd_ctl_root[] = { +@@ -4997,17 +5004,17 @@ static struct ctl_table sd_ctl_root[] = { {} }; @@ -92603,7 +92092,7 @@ index 6d7cb91..420f2d2 100644 /* * In the intermediate directories, both the child directory and -@@ -4932,22 +4939,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep) +@@ -5015,22 +5022,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep) * will always be set. In the lowest directory the names are * static strings and all have proc handlers. */ @@ -92635,7 +92124,7 @@ index 6d7cb91..420f2d2 100644 const char *procname, void *data, int maxlen, umode_t mode, proc_handler *proc_handler, bool load_idx) -@@ -4967,7 +4977,7 @@ set_table_entry(struct ctl_table *entry, +@@ -5050,7 +5060,7 @@ set_table_entry(struct ctl_table *entry, static struct ctl_table * sd_alloc_ctl_domain_table(struct sched_domain *sd) { @@ -92644,7 +92133,7 @@ index 6d7cb91..420f2d2 100644 if (table == NULL) return NULL; -@@ -5005,9 +5015,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd) +@@ -5088,9 +5098,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd) return table; } @@ -92656,7 +92145,7 @@ index 6d7cb91..420f2d2 100644 struct sched_domain *sd; int domain_num = 0, i; char buf[32]; -@@ -5034,11 +5044,13 @@ static struct ctl_table_header *sd_sysctl_header; +@@ -5117,11 +5127,13 @@ static struct ctl_table_header *sd_sysctl_header; static void register_sched_domain_sysctl(void) { int i, cpu_num = num_possible_cpus(); @@ -92671,7 +92160,7 @@ index 6d7cb91..420f2d2 100644 if (entry == NULL) return; -@@ -5061,8 +5073,12 @@ static void unregister_sched_domain_sysctl(void) +@@ -5144,8 +5156,12 @@ static void unregister_sched_domain_sysctl(void) if (sd_sysctl_header) unregister_sysctl_table(sd_sysctl_header); sd_sysctl_header = NULL; @@ -92687,10 +92176,10 @@ index 6d7cb91..420f2d2 100644 #else static void register_sched_domain_sysctl(void) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index bfa3c86..e58767c 100644 +index ef2b104..69961f6 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c -@@ -1873,7 +1873,7 @@ void task_numa_fault(int last_cpupid, int mem_node, int pages, int flags) +@@ -1906,7 +1906,7 @@ void task_numa_fault(int last_cpupid, int mem_node, int pages, int flags) static void reset_ptenuma_scan(struct task_struct *p) { @@ -92699,7 +92188,7 @@ index bfa3c86..e58767c 100644 p->mm->numa_scan_offset = 0; } -@@ -7339,7 +7339,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { } +@@ -7465,7 +7465,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { } * run_rebalance_domains is triggered when needed from the scheduler tick. * Also triggered for nohz idle balancing (with nohz_balancing_kick set). */ @@ -92709,10 +92198,10 @@ index bfa3c86..e58767c 100644 struct rq *this_rq = this_rq(); enum cpu_idle_type idle = this_rq->idle_balance ? diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index 579712f..a338a9d 100644 +index 2df8ef0..aae070f 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h -@@ -1146,7 +1146,7 @@ struct sched_class { +@@ -1140,7 +1140,7 @@ struct sched_class { #ifdef CONFIG_FAIR_GROUP_SCHED void (*task_move_group) (struct task_struct *p, int on_rq); #endif @@ -92721,38 +92210,6 @@ index 579712f..a338a9d 100644 static inline void put_prev_task(struct rq *rq, struct task_struct *prev) { -diff --git a/kernel/seccomp.c b/kernel/seccomp.c -index 44eb005..84922be 100644 ---- a/kernel/seccomp.c -+++ b/kernel/seccomp.c -@@ -395,16 +395,15 @@ static struct seccomp_filter *seccomp_prepare_filter(struct sock_fprog *fprog) - if (!filter) - goto free_prog; - -- filter->prog = kzalloc(bpf_prog_size(new_len), -- GFP_KERNEL|__GFP_NOWARN); -+ filter->prog = bpf_prog_alloc(bpf_prog_size(new_len), __GFP_NOWARN); - if (!filter->prog) - goto free_filter; - - ret = bpf_convert_filter(fp, fprog->len, filter->prog->insnsi, &new_len); - if (ret) - goto free_filter_prog; -- kfree(fp); - -+ kfree(fp); - atomic_set(&filter->usage, 1); - filter->prog->len = new_len; - -@@ -413,7 +412,7 @@ static struct seccomp_filter *seccomp_prepare_filter(struct sock_fprog *fprog) - return filter; - - free_filter_prog: -- kfree(filter->prog); -+ __bpf_prog_free(filter->prog); - free_filter: - kfree(filter); - free_prog: diff --git a/kernel/signal.c b/kernel/signal.c index 8f0876f..1153a5a 100644 --- a/kernel/signal.c @@ -92914,7 +92371,7 @@ index eb89e18..a4e6792 100644 mutex_unlock(&smpboot_threads_lock); put_online_cpus(); diff --git a/kernel/softirq.c b/kernel/softirq.c -index 5918d22..e95d1926 100644 +index 0699add..d365ad8 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -53,7 +53,7 @@ irq_cpustat_t irq_stat[NR_CPUS] ____cacheline_aligned; @@ -92972,7 +92429,7 @@ index 5918d22..e95d1926 100644 .thread_should_run = ksoftirqd_should_run, .thread_fn = run_ksoftirqd, diff --git a/kernel/sys.c b/kernel/sys.c -index ce81291..df2ca85 100644 +index 1eaa2f0..d80d27c 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -148,6 +148,12 @@ static int set_one_prio(struct task_struct *p, int niceval, int error) @@ -92988,7 +92445,7 @@ index ce81291..df2ca85 100644 no_nice = security_task_setnice(p, niceval); if (no_nice) { error = no_nice; -@@ -351,6 +357,20 @@ SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid) +@@ -353,6 +359,20 @@ SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid) goto error; } @@ -93009,7 +92466,7 @@ index ce81291..df2ca85 100644 if (rgid != (gid_t) -1 || (egid != (gid_t) -1 && !gid_eq(kegid, old->gid))) new->sgid = new->egid; -@@ -386,6 +406,10 @@ SYSCALL_DEFINE1(setgid, gid_t, gid) +@@ -388,6 +408,10 @@ SYSCALL_DEFINE1(setgid, gid_t, gid) old = current_cred(); retval = -EPERM; @@ -93020,7 +92477,7 @@ index ce81291..df2ca85 100644 if (ns_capable(old->user_ns, CAP_SETGID)) new->gid = new->egid = new->sgid = new->fsgid = kgid; else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid)) -@@ -403,7 +427,7 @@ error: +@@ -405,7 +429,7 @@ error: /* * change the user struct in a credentials set to match the new UID */ @@ -93029,7 +92486,7 @@ index ce81291..df2ca85 100644 { struct user_struct *new_user; -@@ -483,7 +507,18 @@ SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid) +@@ -485,7 +509,18 @@ SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid) goto error; } @@ -93048,7 +92505,7 @@ index ce81291..df2ca85 100644 retval = set_user(new); if (retval < 0) goto error; -@@ -533,6 +568,12 @@ SYSCALL_DEFINE1(setuid, uid_t, uid) +@@ -535,6 +570,12 @@ SYSCALL_DEFINE1(setuid, uid_t, uid) old = current_cred(); retval = -EPERM; @@ -93061,7 +92518,7 @@ index ce81291..df2ca85 100644 if (ns_capable(old->user_ns, CAP_SETUID)) { new->suid = new->uid = kuid; if (!uid_eq(kuid, old->uid)) { -@@ -602,6 +643,9 @@ SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid) +@@ -604,6 +645,9 @@ SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid) goto error; } @@ -93071,7 +92528,7 @@ index ce81291..df2ca85 100644 if (ruid != (uid_t) -1) { new->uid = kruid; if (!uid_eq(kruid, old->uid)) { -@@ -684,6 +728,9 @@ SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid) +@@ -688,6 +732,9 @@ SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid) goto error; } @@ -93081,7 +92538,7 @@ index ce81291..df2ca85 100644 if (rgid != (gid_t) -1) new->gid = krgid; if (egid != (gid_t) -1) -@@ -745,12 +792,16 @@ SYSCALL_DEFINE1(setfsuid, uid_t, uid) +@@ -752,12 +799,16 @@ SYSCALL_DEFINE1(setfsuid, uid_t, uid) uid_eq(kuid, old->suid) || uid_eq(kuid, old->fsuid) || ns_capable(old->user_ns, CAP_SETUID)) { if (!uid_eq(kuid, old->fsuid)) { @@ -93098,7 +92555,7 @@ index ce81291..df2ca85 100644 abort_creds(new); return old_fsuid; -@@ -783,12 +834,16 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid) +@@ -790,12 +841,16 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid) if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->egid) || gid_eq(kgid, old->sgid) || gid_eq(kgid, old->fsgid) || ns_capable(old->user_ns, CAP_SETGID)) { @@ -93115,7 +92572,7 @@ index ce81291..df2ca85 100644 abort_creds(new); return old_fsgid; -@@ -1167,19 +1222,19 @@ SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name) +@@ -1172,19 +1227,19 @@ SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name) return -EFAULT; down_read(&uts_sem); @@ -93140,7 +92597,7 @@ index ce81291..df2ca85 100644 __OLD_UTS_LEN); error |= __put_user(0, name->machine + __OLD_UTS_LEN); up_read(&uts_sem); -@@ -1381,6 +1436,13 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource, +@@ -1385,6 +1440,13 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource, */ new_rlim->rlim_cur = 1; } @@ -93155,7 +92612,7 @@ index ce81291..df2ca85 100644 if (!retval) { if (old_rlim) diff --git a/kernel/sysctl.c b/kernel/sysctl.c -index 75875a7..cd8e838 100644 +index 15f2511..181b356 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -94,7 +94,6 @@ @@ -93260,7 +92717,7 @@ index 75875a7..cd8e838 100644 { .procname = "sched_child_runs_first", .data = &sysctl_sched_child_runs_first, -@@ -641,7 +671,7 @@ static struct ctl_table kern_table[] = { +@@ -642,7 +672,7 @@ static struct ctl_table kern_table[] = { .data = &modprobe_path, .maxlen = KMOD_PATH_LEN, .mode = 0644, @@ -93269,7 +92726,7 @@ index 75875a7..cd8e838 100644 }, { .procname = "modules_disabled", -@@ -808,16 +838,20 @@ static struct ctl_table kern_table[] = { +@@ -809,16 +839,20 @@ static struct ctl_table kern_table[] = { .extra1 = &zero, .extra2 = &one, }, @@ -93291,7 +92748,7 @@ index 75875a7..cd8e838 100644 { .procname = "ngroups_max", .data = &ngroups_max, -@@ -1073,10 +1107,17 @@ static struct ctl_table kern_table[] = { +@@ -1065,10 +1099,17 @@ static struct ctl_table kern_table[] = { */ { .procname = "perf_event_paranoid", @@ -93312,7 +92769,7 @@ index 75875a7..cd8e838 100644 }, { .procname = "perf_event_mlock_kb", -@@ -1335,6 +1376,13 @@ static struct ctl_table vm_table[] = { +@@ -1327,6 +1368,13 @@ static struct ctl_table vm_table[] = { .proc_handler = proc_dointvec_minmax, .extra1 = &zero, }, @@ -93326,7 +92783,7 @@ index 75875a7..cd8e838 100644 #else { .procname = "nr_trim_pages", -@@ -1824,6 +1872,16 @@ int proc_dostring(struct ctl_table *table, int write, +@@ -1809,6 +1857,16 @@ int proc_dostring(struct ctl_table *table, int write, (char __user *)buffer, lenp, ppos); } @@ -93343,7 +92800,7 @@ index 75875a7..cd8e838 100644 static size_t proc_skip_spaces(char **buf) { size_t ret; -@@ -1929,6 +1987,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val, +@@ -1914,6 +1972,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val, len = strlen(tmp); if (len > *size) len = *size; @@ -93352,7 +92809,7 @@ index 75875a7..cd8e838 100644 if (copy_to_user(*buf, tmp, len)) return -EFAULT; *size -= len; -@@ -2106,7 +2166,7 @@ int proc_dointvec(struct ctl_table *table, int write, +@@ -2091,7 +2151,7 @@ int proc_dointvec(struct ctl_table *table, int write, static int proc_taint(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { @@ -93361,7 +92818,7 @@ index 75875a7..cd8e838 100644 unsigned long tmptaint = get_taint(); int err; -@@ -2134,7 +2194,6 @@ static int proc_taint(struct ctl_table *table, int write, +@@ -2119,7 +2179,6 @@ static int proc_taint(struct ctl_table *table, int write, return err; } @@ -93369,7 +92826,7 @@ index 75875a7..cd8e838 100644 static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { -@@ -2143,7 +2202,6 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, +@@ -2128,7 +2187,6 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, return proc_dointvec_minmax(table, write, buffer, lenp, ppos); } @@ -93377,7 +92834,7 @@ index 75875a7..cd8e838 100644 struct do_proc_dointvec_minmax_conv_param { int *min; -@@ -2703,6 +2761,12 @@ int proc_dostring(struct ctl_table *table, int write, +@@ -2688,6 +2746,12 @@ int proc_dostring(struct ctl_table *table, int write, return -ENOSYS; } @@ -93390,7 +92847,7 @@ index 75875a7..cd8e838 100644 int proc_dointvec(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { -@@ -2759,5 +2823,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax); +@@ -2744,5 +2808,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax); EXPORT_SYMBOL(proc_dointvec_userhz_jiffies); EXPORT_SYMBOL(proc_dointvec_ms_jiffies); EXPORT_SYMBOL(proc_dostring); @@ -93398,7 +92855,7 @@ index 75875a7..cd8e838 100644 EXPORT_SYMBOL(proc_doulongvec_minmax); EXPORT_SYMBOL(proc_doulongvec_ms_jiffies_minmax); diff --git a/kernel/taskstats.c b/kernel/taskstats.c -index 13d2f7c..c93d0b0 100644 +index b312fcc7..753d72d 100644 --- a/kernel/taskstats.c +++ b/kernel/taskstats.c @@ -28,9 +28,12 @@ @@ -93438,7 +92895,7 @@ index a7077d3..dd48a49 100644 .clock_get = alarm_clock_get, .timer_create = alarm_timer_create, diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c -index 1c2fe7d..ce7483d 100644 +index 37e50aa..57a9501 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -1399,7 +1399,7 @@ void hrtimer_peek_ahead_timers(void) @@ -93451,10 +92908,10 @@ index 1c2fe7d..ce7483d 100644 hrtimer_peek_ahead_timers(); } diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c -index 3b89464..5e38379 100644 +index a16b678..8c5bd9d 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c -@@ -1464,14 +1464,14 @@ struct k_clock clock_posix_cpu = { +@@ -1450,14 +1450,14 @@ struct k_clock clock_posix_cpu = { static __init int init_posix_cpu_timers(void) { @@ -93625,7 +93082,7 @@ index ec1791f..6a086cd 100644 write_seqcount_begin(&tk_core.seq); diff --git a/kernel/time/timer.c b/kernel/time/timer.c -index 9bbb834..3caa8ed 100644 +index 3260ffd..c93cd5e 100644 --- a/kernel/time/timer.c +++ b/kernel/time/timer.c @@ -1394,7 +1394,7 @@ void update_process_times(int user_tick) @@ -93764,10 +93221,10 @@ index 1fb08f2..ca4bb1e 100644 return -ENOMEM; return 0; diff --git a/kernel/torture.c b/kernel/torture.c -index d600af2..27a4e9d 100644 +index dd70993..0bf694b 100644 --- a/kernel/torture.c +++ b/kernel/torture.c -@@ -484,7 +484,7 @@ static int torture_shutdown_notify(struct notifier_block *unused1, +@@ -482,7 +482,7 @@ static int torture_shutdown_notify(struct notifier_block *unused1, mutex_lock(&fullstop_mutex); if (ACCESS_ONCE(fullstop) == FULLSTOP_DONTSTOP) { VERBOSE_TOROUT_STRING("Unscheduled system shutdown detected"); @@ -93776,7 +93233,7 @@ index d600af2..27a4e9d 100644 } else { pr_warn("Concurrent rmmod and shutdown illegal!\n"); } -@@ -551,14 +551,14 @@ static int torture_stutter(void *arg) +@@ -549,14 +549,14 @@ static int torture_stutter(void *arg) if (!torture_must_stop()) { if (stutter > 1) { schedule_timeout_interruptible(stutter - 1); @@ -93794,7 +93251,7 @@ index d600af2..27a4e9d 100644 torture_shutdown_absorb("torture_stutter"); } while (!torture_must_stop()); torture_kthread_stopping("torture_stutter"); -@@ -645,7 +645,7 @@ bool torture_cleanup(void) +@@ -648,7 +648,7 @@ bool torture_cleanup_begin(void) schedule_timeout_uninterruptible(10); return true; } @@ -93835,10 +93292,10 @@ index c1bd4ad..4b861dc 100644 ret = -EIO; diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c -index 5916a8e..5cd3b1f 100644 +index 31c90fe..051ce98 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c -@@ -2128,12 +2128,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) +@@ -2183,12 +2183,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) if (unlikely(ftrace_disabled)) return 0; @@ -93858,7 +93315,7 @@ index 5916a8e..5cd3b1f 100644 } /* -@@ -4458,8 +4463,10 @@ static int ftrace_process_locs(struct module *mod, +@@ -4492,8 +4497,10 @@ static int ftrace_process_locs(struct module *mod, if (!count) return 0; @@ -93869,6 +93326,24 @@ index 5916a8e..5cd3b1f 100644 start_pg = ftrace_allocate_pages(count); if (!start_pg) +@@ -5340,7 +5347,7 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list) + + if (t->ret_stack == NULL) { + atomic_set(&t->tracing_graph_pause, 0); +- atomic_set(&t->trace_overrun, 0); ++ atomic_set_unchecked(&t->trace_overrun, 0); + t->curr_ret_stack = -1; + /* Make sure the tasks see the -1 first: */ + smp_wmb(); +@@ -5553,7 +5560,7 @@ static void + graph_init_task(struct task_struct *t, struct ftrace_ret_stack *ret_stack) + { + atomic_set(&t->tracing_graph_pause, 0); +- atomic_set(&t->trace_overrun, 0); ++ atomic_set_unchecked(&t->trace_overrun, 0); + t->ftrace_timestamp = 0; + /* make curr_ret_stack visible before we add the ret_stack */ + smp_wmb(); diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index a56e07c..d46f0ba 100644 --- a/kernel/trace/ring_buffer.c @@ -94148,7 +93623,7 @@ index a56e07c..d46f0ba 100644 *data_page = bpage; diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c -index 1520933..c651ebc 100644 +index 426962b..e8e2d9a 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -3488,7 +3488,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set) @@ -94194,7 +93669,7 @@ index 57b67b1..66082a9 100644 + return atomic64_inc_return_unchecked(&trace_counter); } diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c -index ef06ce7..3ea161d 100644 +index 1b0df1e..4ebb965 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -1720,7 +1720,6 @@ __trace_early_add_new_event(struct ftrace_event_call *call, @@ -94205,6 +93680,28 @@ index ef06ce7..3ea161d 100644 static void __add_event_to_tracers(struct ftrace_event_call *call); /* Add an additional event_call dynamically */ +diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c +index f0a0c98..3692dc8 100644 +--- a/kernel/trace/trace_functions_graph.c ++++ b/kernel/trace/trace_functions_graph.c +@@ -133,7 +133,7 @@ ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth, + + /* The return trace stack is full */ + if (current->curr_ret_stack == FTRACE_RETFUNC_DEPTH - 1) { +- atomic_inc(¤t->trace_overrun); ++ atomic_inc_unchecked(¤t->trace_overrun); + return -EBUSY; + } + +@@ -230,7 +230,7 @@ ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret, + *ret = current->ret_stack[index].ret; + trace->func = current->ret_stack[index].func; + trace->calltime = current->ret_stack[index].calltime; +- trace->overrun = atomic_read(¤t->trace_overrun); ++ trace->overrun = atomic_read_unchecked(¤t->trace_overrun); + trace->depth = index; + } + diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c index 0abd9b8..6a663a2 100644 --- a/kernel/trace/trace_mmiotrace.c @@ -94284,10 +93781,10 @@ index 1f24ed9..10407ec 100644 s->len = p - s->buffer; return 1; diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c -index 8a4e5cb..64f270d 100644 +index 16eddb3..758b308 100644 --- a/kernel/trace/trace_stack.c +++ b/kernel/trace/trace_stack.c -@@ -91,7 +91,7 @@ check_stack(unsigned long ip, unsigned long *stack) +@@ -90,7 +90,7 @@ check_stack(unsigned long ip, unsigned long *stack) return; /* we do not handle interrupt stacks yet */ @@ -94297,7 +93794,7 @@ index 8a4e5cb..64f270d 100644 local_irq_save(flags); diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c -index 7e3cd7a..5156a5fe 100644 +index 29228c4..301bc8c 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c @@ -602,6 +602,8 @@ static int perf_sysenter_enable(struct ftrace_event_call *call) @@ -94337,10 +93834,10 @@ index 7e3cd7a..5156a5fe 100644 mutex_lock(&syscall_trace_lock); sys_perf_refcount_exit--; diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c -index aa312b0..395f343 100644 +index a2e37c5..4fa859b 100644 --- a/kernel/user_namespace.c +++ b/kernel/user_namespace.c -@@ -82,6 +82,21 @@ int create_user_ns(struct cred *new) +@@ -83,6 +83,21 @@ int create_user_ns(struct cred *new) !kgid_has_mapping(parent_ns, group)) return -EPERM; @@ -94362,7 +93859,7 @@ index aa312b0..395f343 100644 ns = kmem_cache_zalloc(user_ns_cachep, GFP_KERNEL); if (!ns) return -ENOMEM; -@@ -872,7 +887,7 @@ static int userns_install(struct nsproxy *nsproxy, void *ns) +@@ -974,7 +989,7 @@ static int userns_install(struct nsproxy *nsproxy, void *ns) if (atomic_read(¤t->mm->mm_users) > 1) return -EINVAL; @@ -94385,10 +93882,10 @@ index c8eac43..4b5f08f 100644 memcpy(&uts_table, table, sizeof(uts_table)); uts_table.data = get_uts(table, write); diff --git a/kernel/watchdog.c b/kernel/watchdog.c -index a8d6914..8fbdb13 100644 +index 70bf118..4be3c37 100644 --- a/kernel/watchdog.c +++ b/kernel/watchdog.c -@@ -521,7 +521,7 @@ static int watchdog_nmi_enable(unsigned int cpu) { return 0; } +@@ -572,7 +572,7 @@ static int watchdog_nmi_enable(unsigned int cpu) { return 0; } static void watchdog_nmi_disable(unsigned int cpu) { return; } #endif /* CONFIG_HARDLOCKUP_DETECTOR */ @@ -94398,10 +93895,10 @@ index a8d6914..8fbdb13 100644 .thread_should_run = watchdog_should_run, .thread_fn = watchdog, diff --git a/kernel/workqueue.c b/kernel/workqueue.c -index 5dbe22a..872413c 100644 +index 09b685d..d3565e3 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c -@@ -4507,7 +4507,7 @@ static void rebind_workers(struct worker_pool *pool) +@@ -4508,7 +4508,7 @@ static void rebind_workers(struct worker_pool *pool) WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND)); worker_flags |= WORKER_REBOUND; worker_flags &= ~WORKER_UNBOUND; @@ -94411,10 +93908,10 @@ index 5dbe22a..872413c 100644 spin_unlock_irq(&pool->lock); diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug -index a285900..5e3b26b 100644 +index 4e35a5d..8a1f3f0 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug -@@ -882,7 +882,7 @@ config DEBUG_MUTEXES +@@ -894,7 +894,7 @@ config DEBUG_MUTEXES config DEBUG_WW_MUTEX_SLOWPATH bool "Wait/wound mutex debugging: Slowpath testing" @@ -94423,7 +93920,7 @@ index a285900..5e3b26b 100644 select DEBUG_LOCK_ALLOC select DEBUG_SPINLOCK select DEBUG_MUTEXES -@@ -899,7 +899,7 @@ config DEBUG_WW_MUTEX_SLOWPATH +@@ -911,7 +911,7 @@ config DEBUG_WW_MUTEX_SLOWPATH config DEBUG_LOCK_ALLOC bool "Lock debugging: detect incorrect freeing of live locks" @@ -94432,7 +93929,7 @@ index a285900..5e3b26b 100644 select DEBUG_SPINLOCK select DEBUG_MUTEXES select LOCKDEP -@@ -913,7 +913,7 @@ config DEBUG_LOCK_ALLOC +@@ -925,7 +925,7 @@ config DEBUG_LOCK_ALLOC config PROVE_LOCKING bool "Lock debugging: prove locking correctness" @@ -94441,7 +93938,7 @@ index a285900..5e3b26b 100644 select LOCKDEP select DEBUG_SPINLOCK select DEBUG_MUTEXES -@@ -964,7 +964,7 @@ config LOCKDEP +@@ -976,7 +976,7 @@ config LOCKDEP config LOCK_STAT bool "Lock usage statistics" @@ -94450,7 +93947,7 @@ index a285900..5e3b26b 100644 select LOCKDEP select DEBUG_SPINLOCK select DEBUG_MUTEXES -@@ -1437,6 +1437,7 @@ config LATENCYTOP +@@ -1449,6 +1449,7 @@ config LATENCYTOP depends on DEBUG_KERNEL depends on STACKTRACE_SUPPORT depends on PROC_FS @@ -94458,7 +93955,7 @@ index a285900..5e3b26b 100644 select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC select KALLSYMS select KALLSYMS_ALL -@@ -1453,7 +1454,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS +@@ -1465,7 +1466,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS config DEBUG_STRICT_USER_COPY_CHECKS bool "Strict user copy size checks" depends on ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS @@ -94467,7 +93964,7 @@ index a285900..5e3b26b 100644 help Enabling this option turns a certain set of sanity checks for user copy operations into compile time failures. -@@ -1581,7 +1582,7 @@ endmenu # runtime tests +@@ -1593,7 +1594,7 @@ endmenu # runtime tests config PROVIDE_OHCI1394_DMA_INIT bool "Remote debugging over FireWire early on boot" @@ -94477,7 +93974,7 @@ index a285900..5e3b26b 100644 If you want to debug problems which hang or crash the kernel early on boot and the crashing machine has a FireWire port, you can use diff --git a/lib/Makefile b/lib/Makefile -index d6b4bc4..a3724eb 100644 +index 0211d2b..93f5cc3 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -55,7 +55,7 @@ obj-$(CONFIG_BTREE) += btree.o @@ -94503,7 +94000,7 @@ index 114d1be..ab0350c 100644 (val << avg->factor)) >> avg->weight : (val << avg->factor); diff --git a/lib/bitmap.c b/lib/bitmap.c -index 33ce011..89e3d6f 100644 +index b499ab6..fbdb76c 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c @@ -433,7 +433,7 @@ int __bitmap_parse(const char *buf, unsigned int buflen, @@ -94591,7 +94088,7 @@ index 4382ad7..08aa558 100644 u32 high = divisor >> 32; u64 quot; diff --git a/lib/dma-debug.c b/lib/dma-debug.c -index 98f2d7e..899da5c 100644 +index add80cc..0d27550 100644 --- a/lib/dma-debug.c +++ b/lib/dma-debug.c @@ -971,7 +971,7 @@ static int dma_debug_device_change(struct notifier_block *nb, unsigned long acti @@ -94609,7 +94106,7 @@ index 98f2d7e..899da5c 100644 { - if (object_is_on_stack(addr)) + if (object_starts_on_stack(addr)) - err_printk(dev, NULL, "DMA-API: device driver maps memory from" + err_printk(dev, NULL, "DMA-API: device driver maps memory from " "stack [addr=%p]\n", addr); } diff --git a/lib/hash.c b/lib/hash.c @@ -95004,18 +94501,18 @@ index d2233de..fa1a2f6 100644 } spin_unlock(&lockref->lock); diff --git a/lib/percpu-refcount.c b/lib/percpu-refcount.c -index a89cf09..1a42c2d 100644 +index 6111bcb..02e816b 100644 --- a/lib/percpu-refcount.c +++ b/lib/percpu-refcount.c -@@ -29,7 +29,7 @@ - * can't hit 0 before we've added up all the percpu refs. +@@ -31,7 +31,7 @@ + * atomic_long_t can't hit 0 before we've added up all the percpu refs. */ --#define PCPU_COUNT_BIAS (1U << 31) -+#define PCPU_COUNT_BIAS (1U << 30) +-#define PERCPU_COUNT_BIAS (1LU << (BITS_PER_LONG - 1)) ++#define PERCPU_COUNT_BIAS (1LU << (BITS_PER_LONG - 2)) + + static DECLARE_WAIT_QUEUE_HEAD(percpu_ref_switch_waitq); - static unsigned __percpu *pcpu_count_ptr(struct percpu_ref *ref) - { diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 3291a8e..346a91e 100644 --- a/lib/radix-tree.c @@ -95030,10 +94527,10 @@ index 3291a8e..346a91e 100644 static inline void *ptr_to_indirect(void *ptr) { diff --git a/lib/random32.c b/lib/random32.c -index c9b6bf3..4752c6d4 100644 +index 0bee183..526f12f 100644 --- a/lib/random32.c +++ b/lib/random32.c -@@ -46,7 +46,7 @@ static inline void prandom_state_selftest(void) +@@ -47,7 +47,7 @@ static inline void prandom_state_selftest(void) } #endif @@ -95058,7 +94555,7 @@ index c16c81a..4dcbda1 100644 void rb_insert_color(struct rb_node *node, struct rb_root *root) diff --git a/lib/show_mem.c b/lib/show_mem.c -index 0922579..9d7adb9 100644 +index 5e25627..3ed9d7f 100644 --- a/lib/show_mem.c +++ b/lib/show_mem.c @@ -44,6 +44,6 @@ void show_mem(unsigned int filter) @@ -95108,19 +94605,6 @@ index 4abda07..b9d3765 100644 { phys_addr_t paddr = dma_to_phys(hwdev, dev_addr); -diff --git a/lib/test_bpf.c b/lib/test_bpf.c -index 89e0345..3347efe 100644 ---- a/lib/test_bpf.c -+++ b/lib/test_bpf.c -@@ -1798,7 +1798,7 @@ static struct bpf_prog *generate_filter(int which, int *err) - break; - - case INTERNAL: -- fp = kzalloc(bpf_prog_size(flen), GFP_KERNEL); -+ fp = bpf_prog_alloc(bpf_prog_size(flen), 0); - if (fp == NULL) { - pr_cont("UNEXPECTED_FAIL no memory left\n"); - *err = -ENOMEM; diff --git a/lib/usercopy.c b/lib/usercopy.c index 4f5b1dd..7cab418 100644 --- a/lib/usercopy.c @@ -95136,7 +94620,7 @@ index 4f5b1dd..7cab418 100644 +} +EXPORT_SYMBOL(copy_to_user_overflow); diff --git a/lib/vsprintf.c b/lib/vsprintf.c -index 6fe2c84..2fe5ec6 100644 +index ec337f6..8484eb2 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -16,6 +16,9 @@ @@ -95149,7 +94633,7 @@ index 6fe2c84..2fe5ec6 100644 #include #include /* for KSYM_SYMBOL_LEN */ #include -@@ -624,7 +627,7 @@ char *symbol_string(char *buf, char *end, void *ptr, +@@ -625,7 +628,7 @@ char *symbol_string(char *buf, char *end, void *ptr, #ifdef CONFIG_KALLSYMS if (*fmt == 'B') sprint_backtrace(sym, value); @@ -95158,7 +94642,7 @@ index 6fe2c84..2fe5ec6 100644 sprint_symbol(sym, value); else sprint_symbol_no_offset(sym, value); -@@ -1183,7 +1186,11 @@ char *address_val(char *buf, char *end, const void *addr, +@@ -1240,7 +1243,11 @@ char *address_val(char *buf, char *end, const void *addr, return number(buf, end, num, spec); } @@ -95170,7 +94654,7 @@ index 6fe2c84..2fe5ec6 100644 /* * Show a '%p' thing. A kernel extension is that the '%p' is followed -@@ -1194,8 +1201,10 @@ int kptr_restrict __read_mostly; +@@ -1251,8 +1258,10 @@ int kptr_restrict __read_mostly; * * - 'F' For symbolic function descriptor pointers with offset * - 'f' For simple symbolic function names without offset @@ -95181,7 +94665,7 @@ index 6fe2c84..2fe5ec6 100644 * - '[FfSs]R' as above with __builtin_extract_return_addr() translation * - 'B' For backtraced symbolic direct pointers with offset * - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref] -@@ -1263,12 +1272,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1331,12 +1340,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, if (!ptr && *fmt != 'K') { /* @@ -95196,7 +94680,7 @@ index 6fe2c84..2fe5ec6 100644 } switch (*fmt) { -@@ -1278,6 +1287,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1346,6 +1355,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, /* Fallthrough */ case 'S': case 's': @@ -95211,7 +94695,7 @@ index 6fe2c84..2fe5ec6 100644 case 'B': return symbol_string(buf, end, ptr, spec, fmt); case 'R': -@@ -1333,6 +1350,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1403,6 +1420,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, va_end(va); return buf; } @@ -95220,7 +94704,7 @@ index 6fe2c84..2fe5ec6 100644 case 'K': /* * %pK cannot be used in IRQ context because its test -@@ -1390,6 +1409,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, +@@ -1460,6 +1479,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, ((const struct file *)ptr)->f_path.dentry, spec, fmt); } @@ -95243,7 +94727,7 @@ index 6fe2c84..2fe5ec6 100644 spec.flags |= SMALL; if (spec.field_width == -1) { spec.field_width = default_width; -@@ -2089,11 +2124,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) +@@ -2160,11 +2195,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) typeof(type) value; \ if (sizeof(type) == 8) { \ args = PTR_ALIGN(args, sizeof(u32)); \ @@ -95258,7 +94742,7 @@ index 6fe2c84..2fe5ec6 100644 } \ args += sizeof(type); \ value; \ -@@ -2156,7 +2191,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) +@@ -2227,7 +2262,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) case FORMAT_TYPE_STR: { const char *str_arg = args; args += strlen(str_arg) + 1; @@ -95275,10 +94759,10 @@ index 0000000..7cd6065 @@ -0,0 +1 @@ +-grsec diff --git a/mm/Kconfig b/mm/Kconfig -index 886db21..f514de2 100644 +index 1d1ae6b..0f05885 100644 --- a/mm/Kconfig +++ b/mm/Kconfig -@@ -333,10 +333,11 @@ config KSM +@@ -341,10 +341,11 @@ config KSM root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set). config DEFAULT_MMAP_MIN_ADDR @@ -95293,7 +94777,7 @@ index 886db21..f514de2 100644 This is the portion of low virtual memory which should be protected from userspace allocation. Keeping a user from writing to low pages can help reduce the impact of kernel NULL pointer bugs. -@@ -367,7 +368,7 @@ config MEMORY_FAILURE +@@ -375,7 +376,7 @@ config MEMORY_FAILURE config HWPOISON_INJECT tristate "HWPoison pages injector" @@ -95303,7 +94787,7 @@ index 886db21..f514de2 100644 config NOMMU_INITIAL_TRIM_EXCESS diff --git a/mm/backing-dev.c b/mm/backing-dev.c -index 1706cbb..f89dbca 100644 +index 0ae0df5..82ac56b 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -12,7 +12,7 @@ @@ -95315,7 +94799,7 @@ index 1706cbb..f89dbca 100644 struct backing_dev_info default_backing_dev_info = { .name = "default", -@@ -533,7 +533,7 @@ int bdi_setup_and_register(struct backing_dev_info *bdi, char *name, +@@ -525,7 +525,7 @@ int bdi_setup_and_register(struct backing_dev_info *bdi, char *name, return err; err = bdi_register(bdi, NULL, "%.28s-%ld", name, @@ -95325,10 +94809,10 @@ index 1706cbb..f89dbca 100644 bdi_destroy(bdi); return err; diff --git a/mm/filemap.c b/mm/filemap.c -index 90effcd..539aa64 100644 +index 14b4642..d71ba82 100644 --- a/mm/filemap.c +++ b/mm/filemap.c -@@ -2092,7 +2092,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma) +@@ -2101,7 +2101,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma) struct address_space *mapping = file->f_mapping; if (!mapping->a_ops->readpage) @@ -95337,7 +94821,7 @@ index 90effcd..539aa64 100644 file_accessed(file); vma->vm_ops = &generic_file_vm_ops; return 0; -@@ -2270,6 +2270,7 @@ inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, i +@@ -2279,6 +2279,7 @@ inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, i *pos = i_size_read(inode); if (limit != RLIM_INFINITY) { @@ -95362,10 +94846,10 @@ index 72b8fa3..c5b39f1 100644 * Make sure the vma is shared, that it supports prefaulting, * and that the remapped range is valid and fully within diff --git a/mm/gup.c b/mm/gup.c -index 91d044b..a58ecf6 100644 +index cd62c8c..3bb2053 100644 --- a/mm/gup.c +++ b/mm/gup.c -@@ -270,11 +270,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma, +@@ -274,11 +274,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma, unsigned int fault_flags = 0; int ret; @@ -95377,7 +94861,7 @@ index 91d044b..a58ecf6 100644 if (*flags & FOLL_WRITE) fault_flags |= FAULT_FLAG_WRITE; if (nonblocking) -@@ -436,14 +431,14 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, +@@ -444,14 +439,14 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, if (!(gup_flags & FOLL_FORCE)) gup_flags |= FOLL_NUMA; @@ -95394,7 +94878,7 @@ index 91d044b..a58ecf6 100644 if (!vma && in_gate_area(mm, start)) { int ret; ret = get_gate_page(mm, start & PAGE_MASK, -@@ -455,7 +450,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, +@@ -463,7 +458,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, goto next_page; } @@ -95403,7 +94887,7 @@ index 91d044b..a58ecf6 100644 return i ? : -EFAULT; if (is_vm_hugetlb_page(vma)) { i = follow_hugetlb_page(mm, vma, pages, vmas, -@@ -510,7 +505,7 @@ next_page: +@@ -518,7 +513,7 @@ next_page: i += page_increm; start += page_increm * PAGE_SIZE; nr_pages -= page_increm; @@ -95441,7 +94925,7 @@ index 123bcd3..0de52ba 100644 set_page_address(page, (void *)vaddr); diff --git a/mm/hugetlb.c b/mm/hugetlb.c -index eeceeeb..a209d58 100644 +index 9fd7227..5628939 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -2258,6 +2258,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy, @@ -95578,7 +95062,7 @@ index eeceeeb..a209d58 100644 if (!ptep) return VM_FAULT_OOM; diff --git a/mm/internal.h b/mm/internal.h -index 5f2772f..4c3882c 100644 +index a4f90ba..fbdc32b 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -134,6 +134,7 @@ __find_buddy_index(unsigned long page_idx, unsigned int order) @@ -95589,7 +95073,7 @@ index 5f2772f..4c3882c 100644 extern void prep_compound_page(struct page *page, unsigned long order); #ifdef CONFIG_MEMORY_FAILURE extern bool is_free_buddy_page(struct page *page); -@@ -376,7 +377,7 @@ extern u32 hwpoison_filter_enable; +@@ -390,7 +391,7 @@ extern u32 hwpoison_filter_enable; extern unsigned long vm_mmap_pgoff(struct file *, unsigned long, unsigned long, unsigned long, @@ -95599,10 +95083,10 @@ index 5f2772f..4c3882c 100644 extern void set_pageblock_order(void); unsigned long reclaim_clean_pages_from_list(struct zone *zone, diff --git a/mm/iov_iter.c b/mm/iov_iter.c -index 141dcf7..7327fd3 100644 +index e34a3cb..a810efe 100644 --- a/mm/iov_iter.c +++ b/mm/iov_iter.c -@@ -173,7 +173,7 @@ static size_t __iovec_copy_from_user_inatomic(char *vaddr, +@@ -307,7 +307,7 @@ static size_t __iovec_copy_from_user_inatomic(char *vaddr, while (bytes) { char __user *buf = iov->iov_base + base; @@ -95611,7 +95095,7 @@ index 141dcf7..7327fd3 100644 base = 0; left = __copy_from_user_inatomic(vaddr, buf, copy); -@@ -201,7 +201,7 @@ static size_t copy_from_user_atomic_iovec(struct page *page, +@@ -335,7 +335,7 @@ static size_t copy_from_user_atomic_iovec(struct page *page, kaddr = kmap_atomic(page); if (likely(i->nr_segs == 1)) { @@ -95620,7 +95104,7 @@ index 141dcf7..7327fd3 100644 char __user *buf = i->iov->iov_base + i->iov_offset; left = __copy_from_user_inatomic(kaddr + offset, buf, bytes); copied = bytes - left; -@@ -231,7 +231,7 @@ static void advance_iovec(struct iov_iter *i, size_t bytes) +@@ -365,7 +365,7 @@ static void advance_iovec(struct iov_iter *i, size_t bytes) * zero-length segments (without overruning the iovec). */ while (bytes || unlikely(i->count && !iov->iov_len)) { @@ -95754,7 +95238,7 @@ index 0938b30..199abe8 100644 if (end == start) return error; diff --git a/mm/memory-failure.c b/mm/memory-failure.c -index 44c6bd2..60369dc3 100644 +index 8639f6b..b623882a 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -61,7 +61,7 @@ int sysctl_memory_failure_early_kill __read_mostly = 0; @@ -95884,7 +95368,7 @@ index 44c6bd2..60369dc3 100644 } unset_migratetype_isolate(page, MIGRATE_MOVABLE); diff --git a/mm/memory.c b/mm/memory.c -index 37b80fc..68218aa 100644 +index d5f2ae9..4d678b2 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -415,6 +415,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud, @@ -96184,7 +95668,7 @@ index 37b80fc..68218aa 100644 /* * This routine handles present pages, when users try to write * to a shared page. It is done by copying the page to a new address -@@ -2217,6 +2424,12 @@ gotten: +@@ -2218,6 +2425,12 @@ gotten: */ page_table = pte_offset_map_lock(mm, pmd, address, &ptl); if (likely(pte_same(*page_table, orig_pte))) { @@ -96197,7 +95681,7 @@ index 37b80fc..68218aa 100644 if (old_page) { if (!PageAnon(old_page)) { dec_mm_counter_fast(mm, MM_FILEPAGES); -@@ -2270,6 +2483,10 @@ gotten: +@@ -2271,6 +2484,10 @@ gotten: page_remove_rmap(old_page); } @@ -96208,7 +95692,7 @@ index 37b80fc..68218aa 100644 /* Free the old page.. */ new_page = old_page; ret |= VM_FAULT_WRITE; -@@ -2544,6 +2761,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2545,6 +2762,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, swap_free(entry); if (vm_swap_full() || (vma->vm_flags & VM_LOCKED) || PageMlocked(page)) try_to_free_swap(page); @@ -96220,7 +95704,7 @@ index 37b80fc..68218aa 100644 unlock_page(page); if (page != swapcache) { /* -@@ -2567,6 +2789,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2568,6 +2790,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, /* No need to invalidate - it was non-present before */ update_mmu_cache(vma, address, page_table); @@ -96232,7 +95716,7 @@ index 37b80fc..68218aa 100644 unlock: pte_unmap_unlock(page_table, ptl); out: -@@ -2586,40 +2813,6 @@ out_release: +@@ -2587,40 +2814,6 @@ out_release: } /* @@ -96273,7 +95757,7 @@ index 37b80fc..68218aa 100644 * We enter with non-exclusive mmap_sem (to exclude vma changes, * but allow concurrent faults), and pte mapped but not yet locked. * We return with mmap_sem still held, but pte unmapped and unlocked. -@@ -2629,27 +2822,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2630,27 +2823,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned int flags) { struct mem_cgroup *memcg; @@ -96306,7 +95790,7 @@ index 37b80fc..68218aa 100644 if (unlikely(anon_vma_prepare(vma))) goto oom; page = alloc_zeroed_user_highpage_movable(vma, address); -@@ -2673,6 +2862,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2674,6 +2863,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, if (!pte_none(*page_table)) goto release; @@ -96318,7 +95802,7 @@ index 37b80fc..68218aa 100644 inc_mm_counter_fast(mm, MM_ANONPAGES); page_add_new_anon_rmap(page, vma, address); mem_cgroup_commit_charge(page, memcg, false); -@@ -2682,6 +2876,12 @@ setpte: +@@ -2683,6 +2877,12 @@ setpte: /* No need to invalidate - it was non-present before */ update_mmu_cache(vma, address, page_table); @@ -96331,7 +95815,7 @@ index 37b80fc..68218aa 100644 unlock: pte_unmap_unlock(page_table, ptl); return 0; -@@ -2912,6 +3112,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2913,6 +3113,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma, return ret; } do_set_pte(vma, address, fault_page, pte, false, false); @@ -96343,7 +95827,7 @@ index 37b80fc..68218aa 100644 unlock_page(fault_page); unlock_out: pte_unmap_unlock(pte, ptl); -@@ -2954,7 +3159,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2955,7 +3160,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma, page_cache_release(fault_page); goto uncharge_out; } @@ -96362,7 +95846,7 @@ index 37b80fc..68218aa 100644 mem_cgroup_commit_charge(new_page, memcg, false); lru_cache_add_active_or_unevictable(new_page, vma); pte_unmap_unlock(pte, ptl); -@@ -3004,6 +3220,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3005,6 +3221,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma, return ret; } do_set_pte(vma, address, fault_page, pte, true, false); @@ -96374,7 +95858,7 @@ index 37b80fc..68218aa 100644 pte_unmap_unlock(pte, ptl); if (set_page_dirty(fault_page)) -@@ -3245,6 +3466,12 @@ static int handle_pte_fault(struct mm_struct *mm, +@@ -3246,6 +3467,12 @@ static int handle_pte_fault(struct mm_struct *mm, if (flags & FAULT_FLAG_WRITE) flush_tlb_fix_spurious_fault(vma, address); } @@ -96387,7 +95871,7 @@ index 37b80fc..68218aa 100644 unlock: pte_unmap_unlock(pte, ptl); return 0; -@@ -3264,9 +3491,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3265,9 +3492,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, pmd_t *pmd; pte_t *pte; @@ -96429,7 +95913,7 @@ index 37b80fc..68218aa 100644 pgd = pgd_offset(mm, address); pud = pud_alloc(mm, pgd, address); if (!pud) -@@ -3400,6 +3659,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) +@@ -3401,6 +3660,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) spin_unlock(&mm->page_table_lock); return 0; } @@ -96453,7 +95937,7 @@ index 37b80fc..68218aa 100644 #endif /* __PAGETABLE_PUD_FOLDED */ #ifndef __PAGETABLE_PMD_FOLDED -@@ -3430,6 +3706,30 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) +@@ -3431,6 +3707,30 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) spin_unlock(&mm->page_table_lock); return 0; } @@ -96484,7 +95968,7 @@ index 37b80fc..68218aa 100644 #endif /* __PAGETABLE_PMD_FOLDED */ static int __follow_pte(struct mm_struct *mm, unsigned long address, -@@ -3539,8 +3839,8 @@ out: +@@ -3540,8 +3840,8 @@ out: return ret; } @@ -96495,7 +95979,7 @@ index 37b80fc..68218aa 100644 { resource_size_t phys_addr; unsigned long prot = 0; -@@ -3566,8 +3866,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys); +@@ -3567,8 +3867,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys); * Access another process' address space as given in mm. If non-NULL, use the * given task for page fault accounting. */ @@ -96506,7 +95990,7 @@ index 37b80fc..68218aa 100644 { struct vm_area_struct *vma; void *old_buf = buf; -@@ -3575,7 +3875,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, +@@ -3576,7 +3876,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, down_read(&mm->mmap_sem); /* ignore errors, just check how much was successfully transferred */ while (len) { @@ -96515,7 +95999,7 @@ index 37b80fc..68218aa 100644 void *maddr; struct page *page = NULL; -@@ -3636,8 +3936,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, +@@ -3637,8 +3937,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, * * The caller must hold a reference on @mm. */ @@ -96526,7 +96010,7 @@ index 37b80fc..68218aa 100644 { return __access_remote_vm(NULL, mm, addr, buf, len, write); } -@@ -3647,11 +3947,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr, +@@ -3648,11 +3948,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr, * Source/target buffer must be kernel space, * Do not walk the page table directly, use get_user_pages */ @@ -96542,7 +96026,7 @@ index 37b80fc..68218aa 100644 mm = get_task_mm(tsk); if (!mm) diff --git a/mm/mempolicy.c b/mm/mempolicy.c -index 8f5330d..b41914b 100644 +index e58725a..e0be017 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -750,6 +750,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, @@ -96573,7 +96057,7 @@ index 8f5330d..b41914b 100644 } out: -@@ -1225,6 +1239,17 @@ static long do_mbind(unsigned long start, unsigned long len, +@@ -1212,6 +1226,17 @@ static long do_mbind(unsigned long start, unsigned long len, if (end < start) return -EINVAL; @@ -96591,7 +96075,7 @@ index 8f5330d..b41914b 100644 if (end == start) return 0; -@@ -1450,8 +1475,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, +@@ -1437,8 +1462,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, */ tcred = __task_cred(task); if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) && @@ -96601,7 +96085,7 @@ index 8f5330d..b41914b 100644 rcu_read_unlock(); err = -EPERM; goto out_put; -@@ -1482,6 +1506,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, +@@ -1469,6 +1493,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, goto out; } @@ -96632,7 +96116,7 @@ index 0143995..b294728 100644 err = -EPERM; goto out; diff --git a/mm/mlock.c b/mm/mlock.c -index ce84cb0..6d5a9aa 100644 +index 73cf098..ab547c7 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -14,6 +14,7 @@ @@ -96707,7 +96191,7 @@ index ce84cb0..6d5a9aa 100644 capable(CAP_IPC_LOCK)) ret = do_mlockall(flags); diff --git a/mm/mmap.c b/mm/mmap.c -index ebc25fa..0ef0db0 100644 +index ae91989..d8308c7 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -41,6 +41,7 @@ @@ -96764,7 +96248,7 @@ index ebc25fa..0ef0db0 100644 } EXPORT_SYMBOL(vm_get_page_prot); -@@ -95,6 +115,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly; +@@ -114,6 +134,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly; int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT; unsigned long sysctl_user_reserve_kbytes __read_mostly = 1UL << 17; /* 128MB */ unsigned long sysctl_admin_reserve_kbytes __read_mostly = 1UL << 13; /* 8MB */ @@ -96772,7 +96256,7 @@ index ebc25fa..0ef0db0 100644 /* * Make sure vm_committed_as in one cacheline and not cacheline shared with * other variables. It can be updated by several CPUs frequently. -@@ -255,6 +276,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) +@@ -274,6 +295,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) struct vm_area_struct *next = vma->vm_next; might_sleep(); @@ -96780,20 +96264,30 @@ index ebc25fa..0ef0db0 100644 if (vma->vm_ops && vma->vm_ops->close) vma->vm_ops->close(vma); if (vma->vm_file) -@@ -299,6 +321,12 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) +@@ -287,6 +309,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len); + + SYSCALL_DEFINE1(brk, unsigned long, brk) + { ++ unsigned long rlim; + unsigned long retval; + unsigned long newbrk, oldbrk; + struct mm_struct *mm = current->mm; +@@ -317,7 +340,13 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) + * segment grow beyond its set limit the in case where the limit is * not page aligned -Ram Gupta */ - rlim = rlimit(RLIMIT_DATA); +- if (check_data_rlimit(rlimit(RLIMIT_DATA), brk, mm->start_brk, ++ rlim = rlimit(RLIMIT_DATA); +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP + /* force a minimum 16MB brk heap on setuid/setgid binaries */ + if (rlim < PAGE_SIZE && (get_dumpable(mm) != SUID_DUMP_USER) && gr_is_global_nonroot(current_uid())) + rlim = 4096 * PAGE_SIZE; +#endif -+ gr_learn_resource(current, RLIMIT_DATA, (brk - mm->start_brk) + (mm->end_data - mm->start_data), 1); - if (rlim < RLIM_INFINITY && (brk - mm->start_brk) + - (mm->end_data - mm->start_data) > rlim) ++ if (check_data_rlimit(rlim, brk, mm->start_brk, + mm->end_data, mm->start_data)) goto out; -@@ -949,6 +977,12 @@ static int + +@@ -976,6 +1005,12 @@ static int can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags, struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff) { @@ -96806,7 +96300,7 @@ index ebc25fa..0ef0db0 100644 if (is_mergeable_vma(vma, file, vm_flags) && is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) { if (vma->vm_pgoff == vm_pgoff) -@@ -968,6 +1002,12 @@ static int +@@ -995,6 +1030,12 @@ static int can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff) { @@ -96819,15 +96313,7 @@ index ebc25fa..0ef0db0 100644 if (is_mergeable_vma(vma, file, vm_flags) && is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) { pgoff_t vm_pglen; -@@ -1010,13 +1050,20 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, - struct vm_area_struct *vma_merge(struct mm_struct *mm, - struct vm_area_struct *prev, unsigned long addr, - unsigned long end, unsigned long vm_flags, -- struct anon_vma *anon_vma, struct file *file, -+ struct anon_vma *anon_vma, struct file *file, - pgoff_t pgoff, struct mempolicy *policy) - { - pgoff_t pglen = (end - addr) >> PAGE_SHIFT; +@@ -1044,6 +1085,13 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, struct vm_area_struct *area, *next; int err; @@ -96841,7 +96327,7 @@ index ebc25fa..0ef0db0 100644 /* * We later require that vma->vm_flags == vm_flags, * so this tests vma->vm_flags & VM_SPECIAL, too. -@@ -1032,6 +1079,15 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, +@@ -1059,6 +1107,15 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, if (next && next->vm_end == end) /* cases 6, 7, 8 */ next = next->vm_next; @@ -96857,7 +96343,7 @@ index ebc25fa..0ef0db0 100644 /* * Can it merge with the predecessor? */ -@@ -1051,9 +1107,24 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, +@@ -1078,9 +1135,24 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, /* cases 1, 6 */ err = vma_adjust(prev, prev->vm_start, next->vm_end, prev->vm_pgoff, NULL); @@ -96883,8 +96369,8 @@ index ebc25fa..0ef0db0 100644 if (err) return NULL; khugepaged_enter_vma_merge(prev, vm_flags); -@@ -1067,12 +1138,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, - mpol_equal(policy, vma_policy(next)) && +@@ -1094,12 +1166,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, + mpol_equal(policy, vma_policy(next)) && can_vma_merge_before(next, vm_flags, anon_vma, file, pgoff+pglen)) { - if (prev && addr < prev->vm_end) /* case 4 */ @@ -96913,7 +96399,7 @@ index ebc25fa..0ef0db0 100644 if (err) return NULL; khugepaged_enter_vma_merge(area, vm_flags); -@@ -1181,8 +1267,10 @@ none: +@@ -1208,8 +1295,10 @@ none: void vm_stat_account(struct mm_struct *mm, unsigned long flags, struct file *file, long pages) { @@ -96926,7 +96412,7 @@ index ebc25fa..0ef0db0 100644 mm->total_vm += pages; -@@ -1190,7 +1278,7 @@ void vm_stat_account(struct mm_struct *mm, unsigned long flags, +@@ -1217,7 +1306,7 @@ void vm_stat_account(struct mm_struct *mm, unsigned long flags, mm->shared_vm += pages; if ((flags & (VM_EXEC|VM_WRITE)) == VM_EXEC) mm->exec_vm += pages; @@ -96935,7 +96421,7 @@ index ebc25fa..0ef0db0 100644 mm->stack_vm += pages; } #endif /* CONFIG_PROC_FS */ -@@ -1220,6 +1308,7 @@ static inline int mlock_future_check(struct mm_struct *mm, +@@ -1247,6 +1336,7 @@ static inline int mlock_future_check(struct mm_struct *mm, locked += mm->locked_vm; lock_limit = rlimit(RLIMIT_MEMLOCK); lock_limit >>= PAGE_SHIFT; @@ -96943,7 +96429,7 @@ index ebc25fa..0ef0db0 100644 if (locked > lock_limit && !capable(CAP_IPC_LOCK)) return -EAGAIN; } -@@ -1246,7 +1335,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, +@@ -1273,7 +1363,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, * (the exception is when the underlying filesystem is noexec * mounted, in which case we dont add PROT_EXEC.) */ @@ -96952,7 +96438,7 @@ index ebc25fa..0ef0db0 100644 if (!(file && (file->f_path.mnt->mnt_flags & MNT_NOEXEC))) prot |= PROT_EXEC; -@@ -1272,7 +1361,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, +@@ -1299,7 +1389,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, /* Obtain the address to map to. we verify (or select) it and ensure * that it represents a valid section of the address space. */ @@ -96961,7 +96447,7 @@ index ebc25fa..0ef0db0 100644 if (addr & ~PAGE_MASK) return addr; -@@ -1283,6 +1372,43 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, +@@ -1310,6 +1400,43 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, vm_flags = calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags) | mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC; @@ -97005,7 +96491,7 @@ index ebc25fa..0ef0db0 100644 if (flags & MAP_LOCKED) if (!can_do_mlock()) return -EPERM; -@@ -1370,6 +1496,9 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, +@@ -1397,6 +1524,9 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, vm_flags |= VM_NORESERVE; } @@ -97015,7 +96501,7 @@ index ebc25fa..0ef0db0 100644 addr = mmap_region(file, addr, len, vm_flags, pgoff); if (!IS_ERR_VALUE(addr) && ((vm_flags & VM_LOCKED) || -@@ -1463,7 +1592,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma) +@@ -1490,7 +1620,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma) vm_flags_t vm_flags = vma->vm_flags; /* If it was private or non-writable, the write bit is already clear */ @@ -97024,7 +96510,7 @@ index ebc25fa..0ef0db0 100644 return 0; /* The backer wishes to know when pages are first written to? */ -@@ -1509,7 +1638,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr, +@@ -1541,7 +1671,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr, struct rb_node **rb_link, *rb_parent; unsigned long charged = 0; @@ -97047,7 +96533,7 @@ index ebc25fa..0ef0db0 100644 if (!may_expand_vm(mm, len >> PAGE_SHIFT)) { unsigned long nr_pages; -@@ -1528,11 +1672,10 @@ unsigned long mmap_region(struct file *file, unsigned long addr, +@@ -1560,11 +1705,10 @@ unsigned long mmap_region(struct file *file, unsigned long addr, /* Clear old maps */ error = -ENOMEM; @@ -97060,7 +96546,7 @@ index ebc25fa..0ef0db0 100644 } /* -@@ -1563,6 +1706,16 @@ munmap_back: +@@ -1595,6 +1739,16 @@ munmap_back: goto unacct_error; } @@ -97077,7 +96563,7 @@ index ebc25fa..0ef0db0 100644 vma->vm_mm = mm; vma->vm_start = addr; vma->vm_end = addr + len; -@@ -1593,6 +1746,13 @@ munmap_back: +@@ -1625,6 +1779,13 @@ munmap_back: if (error) goto unmap_and_free_vma; @@ -97091,7 +96577,7 @@ index ebc25fa..0ef0db0 100644 /* Can addr have changed?? * * Answer: Yes, several device drivers can do it in their -@@ -1626,6 +1786,12 @@ munmap_back: +@@ -1643,6 +1804,12 @@ munmap_back: } vma_link(mm, vma, prev, rb_link, rb_parent); @@ -97104,7 +96590,7 @@ index ebc25fa..0ef0db0 100644 /* Once vma denies write, undo our temporary denial count */ if (file) { if (vm_flags & VM_SHARED) -@@ -1638,6 +1804,7 @@ out: +@@ -1655,6 +1822,7 @@ out: perf_event_mmap(vma); vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT); @@ -97112,7 +96598,7 @@ index ebc25fa..0ef0db0 100644 if (vm_flags & VM_LOCKED) { if (!((vm_flags & VM_SPECIAL) || is_vm_hugetlb_page(vma) || vma == get_gate_vma(current->mm))) -@@ -1673,6 +1840,12 @@ allow_write_and_free_vma: +@@ -1692,6 +1860,12 @@ allow_write_and_free_vma: if (vm_flags & VM_DENYWRITE) allow_write_access(file); free_vma: @@ -97125,7 +96611,7 @@ index ebc25fa..0ef0db0 100644 kmem_cache_free(vm_area_cachep, vma); unacct_error: if (charged) -@@ -1680,7 +1853,63 @@ unacct_error: +@@ -1699,7 +1873,63 @@ unacct_error: return error; } @@ -97190,7 +96676,7 @@ index ebc25fa..0ef0db0 100644 { /* * We implement the search by looking for an rbtree node that -@@ -1728,11 +1957,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info) +@@ -1747,11 +1977,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info) } } @@ -97221,7 +96707,7 @@ index ebc25fa..0ef0db0 100644 if (gap_end >= low_limit && gap_end - gap_start >= length) goto found; -@@ -1782,7 +2029,7 @@ found: +@@ -1801,7 +2049,7 @@ found: return gap_start; } @@ -97230,7 +96716,7 @@ index ebc25fa..0ef0db0 100644 { struct mm_struct *mm = current->mm; struct vm_area_struct *vma; -@@ -1836,6 +2083,24 @@ check_current: +@@ -1855,6 +2103,24 @@ check_current: gap_end = vma->vm_start; if (gap_end < low_limit) return -ENOMEM; @@ -97255,7 +96741,7 @@ index ebc25fa..0ef0db0 100644 if (gap_start <= high_limit && gap_end - gap_start >= length) goto found; -@@ -1899,6 +2164,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, +@@ -1918,6 +2184,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, struct mm_struct *mm = current->mm; struct vm_area_struct *vma; struct vm_unmapped_area_info info; @@ -97263,7 +96749,7 @@ index ebc25fa..0ef0db0 100644 if (len > TASK_SIZE - mmap_min_addr) return -ENOMEM; -@@ -1906,11 +2172,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, +@@ -1925,11 +2192,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, if (flags & MAP_FIXED) return addr; @@ -97280,15 +96766,15 @@ index ebc25fa..0ef0db0 100644 return addr; } -@@ -1919,6 +2189,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, +@@ -1938,6 +2209,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, info.low_limit = mm->mmap_base; info.high_limit = TASK_SIZE; info.align_mask = 0; + info.threadstack_offset = offset; return vm_unmapped_area(&info); } - #endif -@@ -1937,6 +2208,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, + #endif +@@ -1956,6 +2228,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, struct mm_struct *mm = current->mm; unsigned long addr = addr0; struct vm_unmapped_area_info info; @@ -97296,7 +96782,7 @@ index ebc25fa..0ef0db0 100644 /* requested length too big for entire address space */ if (len > TASK_SIZE - mmap_min_addr) -@@ -1945,12 +2217,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, +@@ -1964,12 +2237,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, if (flags & MAP_FIXED) return addr; @@ -97314,7 +96800,7 @@ index ebc25fa..0ef0db0 100644 return addr; } -@@ -1959,6 +2235,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, +@@ -1978,6 +2255,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, info.low_limit = max(PAGE_SIZE, mmap_min_addr); info.high_limit = mm->mmap_base; info.align_mask = 0; @@ -97322,7 +96808,7 @@ index ebc25fa..0ef0db0 100644 addr = vm_unmapped_area(&info); /* -@@ -1971,6 +2248,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, +@@ -1990,6 +2268,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, VM_BUG_ON(addr != -ENOMEM); info.flags = 0; info.low_limit = TASK_UNMAPPED_BASE; @@ -97335,7 +96821,7 @@ index ebc25fa..0ef0db0 100644 info.high_limit = TASK_SIZE; addr = vm_unmapped_area(&info); } -@@ -2071,6 +2354,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr, +@@ -2090,6 +2374,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr, return vma; } @@ -97364,7 +96850,7 @@ index ebc25fa..0ef0db0 100644 /* * Verify that the stack growth is acceptable and * update accounting. This is shared with both the -@@ -2087,6 +2392,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns +@@ -2106,6 +2412,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns return -ENOMEM; /* Stack limit test */ @@ -97372,7 +96858,7 @@ index ebc25fa..0ef0db0 100644 if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur)) return -ENOMEM; -@@ -2097,6 +2403,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns +@@ -2116,6 +2423,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns locked = mm->locked_vm + grow; limit = ACCESS_ONCE(rlim[RLIMIT_MEMLOCK].rlim_cur); limit >>= PAGE_SHIFT; @@ -97380,7 +96866,7 @@ index ebc25fa..0ef0db0 100644 if (locked > limit && !capable(CAP_IPC_LOCK)) return -ENOMEM; } -@@ -2126,37 +2433,48 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns +@@ -2145,37 +2453,48 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns * PA-RISC uses this for its stack; IA64 for its Register Backing Store. * vma is the last one with address > vma->vm_end. Have to extend vma. */ @@ -97438,7 +96924,7 @@ index ebc25fa..0ef0db0 100644 unsigned long size, grow; size = address - vma->vm_start; -@@ -2191,6 +2509,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) +@@ -2210,6 +2529,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) } } } @@ -97447,7 +96933,7 @@ index ebc25fa..0ef0db0 100644 vma_unlock_anon_vma(vma); khugepaged_enter_vma_merge(vma, vma->vm_flags); validate_mm(vma->vm_mm); -@@ -2205,6 +2525,8 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2224,6 +2545,8 @@ int expand_downwards(struct vm_area_struct *vma, unsigned long address) { int error; @@ -97456,7 +96942,7 @@ index ebc25fa..0ef0db0 100644 /* * We must make sure the anon_vma is allocated -@@ -2218,6 +2540,15 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2237,6 +2560,15 @@ int expand_downwards(struct vm_area_struct *vma, if (error) return error; @@ -97472,7 +96958,7 @@ index ebc25fa..0ef0db0 100644 vma_lock_anon_vma(vma); /* -@@ -2227,9 +2558,17 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2246,9 +2578,17 @@ int expand_downwards(struct vm_area_struct *vma, */ /* Somebody else might have raced and expanded it already */ @@ -97491,7 +96977,7 @@ index ebc25fa..0ef0db0 100644 size = vma->vm_end - address; grow = (vma->vm_start - address) >> PAGE_SHIFT; -@@ -2254,13 +2593,27 @@ int expand_downwards(struct vm_area_struct *vma, +@@ -2273,13 +2613,27 @@ int expand_downwards(struct vm_area_struct *vma, vma->vm_pgoff -= grow; anon_vma_interval_tree_post_update_vma(vma); vma_gap_update(vma); @@ -97519,7 +97005,7 @@ index ebc25fa..0ef0db0 100644 khugepaged_enter_vma_merge(vma, vma->vm_flags); validate_mm(vma->vm_mm); return error; -@@ -2358,6 +2711,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -2377,6 +2731,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma) do { long nrpages = vma_pages(vma); @@ -97533,7 +97019,7 @@ index ebc25fa..0ef0db0 100644 if (vma->vm_flags & VM_ACCOUNT) nr_accounted += nrpages; vm_stat_account(mm, vma->vm_flags, vma->vm_file, -nrpages); -@@ -2402,6 +2762,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2421,6 +2782,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma, insertion_point = (prev ? &prev->vm_next : &mm->mmap); vma->vm_prev = NULL; do { @@ -97550,7 +97036,7 @@ index ebc25fa..0ef0db0 100644 vma_rb_erase(vma, &mm->mm_rb); mm->map_count--; tail_vma = vma; -@@ -2429,14 +2799,33 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2448,14 +2819,33 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, struct vm_area_struct *new; int err = -ENOMEM; @@ -97584,7 +97070,7 @@ index ebc25fa..0ef0db0 100644 /* most fields are the same, copy all, and then fixup */ *new = *vma; -@@ -2449,6 +2838,22 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2468,6 +2858,22 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT); } @@ -97607,7 +97093,7 @@ index ebc25fa..0ef0db0 100644 err = vma_dup_policy(vma, new); if (err) goto out_free_vma; -@@ -2468,6 +2873,38 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2488,6 +2894,38 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, else err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new); @@ -97646,7 +97132,7 @@ index ebc25fa..0ef0db0 100644 /* Success. */ if (!err) return 0; -@@ -2477,10 +2914,18 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2497,10 +2935,18 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, new->vm_ops->close(new); if (new->vm_file) fput(new->vm_file); @@ -97666,7 +97152,7 @@ index ebc25fa..0ef0db0 100644 kmem_cache_free(vm_area_cachep, new); out_err: return err; -@@ -2493,6 +2938,15 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2513,6 +2959,15 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, int new_below) { @@ -97682,7 +97168,7 @@ index ebc25fa..0ef0db0 100644 if (mm->map_count >= sysctl_max_map_count) return -ENOMEM; -@@ -2504,11 +2958,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -2524,11 +2979,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, * work. This now handles partial unmappings. * Jeremy Fitzhardinge */ @@ -97713,7 +97199,7 @@ index ebc25fa..0ef0db0 100644 if ((start & ~PAGE_MASK) || start > TASK_SIZE || len > TASK_SIZE-start) return -EINVAL; -@@ -2583,6 +3056,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) +@@ -2604,6 +3078,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) /* Fix up all other VM information */ remove_vma_list(mm, vma); @@ -97722,7 +97208,7 @@ index ebc25fa..0ef0db0 100644 return 0; } -@@ -2591,6 +3066,13 @@ int vm_munmap(unsigned long start, size_t len) +@@ -2612,6 +3088,13 @@ int vm_munmap(unsigned long start, size_t len) int ret; struct mm_struct *mm = current->mm; @@ -97736,7 +97222,7 @@ index ebc25fa..0ef0db0 100644 down_write(&mm->mmap_sem); ret = do_munmap(mm, start, len); up_write(&mm->mmap_sem); -@@ -2604,16 +3086,6 @@ SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) +@@ -2625,16 +3108,6 @@ SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) return vm_munmap(addr, len); } @@ -97753,15 +97239,15 @@ index ebc25fa..0ef0db0 100644 /* * this is really a simplified "do_mmap". it only handles * anonymous maps. eventually we may be able to do some -@@ -2627,6 +3099,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) - struct rb_node ** rb_link, * rb_parent; +@@ -2648,6 +3121,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) + struct rb_node **rb_link, *rb_parent; pgoff_t pgoff = addr >> PAGE_SHIFT; int error; + unsigned long charged; len = PAGE_ALIGN(len); if (!len) -@@ -2634,10 +3107,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2655,10 +3129,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags; @@ -97786,7 +97272,7 @@ index ebc25fa..0ef0db0 100644 error = mlock_future_check(mm, mm->def_flags, len); if (error) return error; -@@ -2651,21 +3138,20 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2672,21 +3160,20 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) /* * Clear old maps. this also does some error checking for us */ @@ -97811,7 +97297,7 @@ index ebc25fa..0ef0db0 100644 return -ENOMEM; /* Can we just expand an old private anonymous mapping? */ -@@ -2679,7 +3165,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2700,7 +3187,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) */ vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL); if (!vma) { @@ -97820,7 +97306,7 @@ index ebc25fa..0ef0db0 100644 return -ENOMEM; } -@@ -2693,10 +3179,11 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) +@@ -2714,10 +3201,11 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) vma_link(mm, vma, prev, rb_link, rb_parent); out: perf_event_mmap(vma); @@ -97834,7 +97320,7 @@ index ebc25fa..0ef0db0 100644 return addr; } -@@ -2758,6 +3245,7 @@ void exit_mmap(struct mm_struct *mm) +@@ -2779,6 +3267,7 @@ void exit_mmap(struct mm_struct *mm) while (vma) { if (vma->vm_flags & VM_ACCOUNT) nr_accounted += vma_pages(vma); @@ -97842,7 +97328,7 @@ index ebc25fa..0ef0db0 100644 vma = remove_vma(vma); } vm_unacct_memory(nr_accounted); -@@ -2775,6 +3263,13 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -2796,6 +3285,13 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) struct vm_area_struct *prev; struct rb_node **rb_link, *rb_parent; @@ -97856,7 +97342,7 @@ index ebc25fa..0ef0db0 100644 /* * The vm_pgoff of a purely anonymous vma should be irrelevant * until its first write fault, when page's anon_vma and index -@@ -2798,7 +3293,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -2819,7 +3315,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) security_vm_enough_memory_mm(mm, vma_pages(vma))) return -ENOMEM; @@ -97878,7 +97364,7 @@ index ebc25fa..0ef0db0 100644 return 0; } -@@ -2817,6 +3326,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, +@@ -2838,6 +3348,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, struct rb_node **rb_link, *rb_parent; bool faulted_in_anon_vma = true; @@ -97887,7 +97373,7 @@ index ebc25fa..0ef0db0 100644 /* * If anonymous vma has not yet been faulted, update new pgoff * to match new location, to increase its chance of merging. -@@ -2881,6 +3392,39 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, +@@ -2902,6 +3414,39 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, return NULL; } @@ -97927,7 +97413,7 @@ index ebc25fa..0ef0db0 100644 /* * Return true if the calling process may expand its vm space by the passed * number of pages -@@ -2892,6 +3436,7 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages) +@@ -2913,6 +3458,7 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages) lim = rlimit(RLIMIT_AS) >> PAGE_SHIFT; @@ -97935,7 +97421,7 @@ index ebc25fa..0ef0db0 100644 if (cur + npages > lim) return 0; return 1; -@@ -2974,6 +3519,22 @@ static struct vm_area_struct *__install_special_mapping( +@@ -2995,6 +3541,22 @@ static struct vm_area_struct *__install_special_mapping( vma->vm_start = addr; vma->vm_end = addr + len; @@ -97959,7 +97445,7 @@ index ebc25fa..0ef0db0 100644 vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); diff --git a/mm/mprotect.c b/mm/mprotect.c -index c43d557..0b7ccd2 100644 +index ace9345..63320dc 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -24,10 +24,18 @@ @@ -97979,9 +97465,9 @@ index c43d557..0b7ccd2 100644 #include +#include - #ifndef pgprot_modify - static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot) -@@ -256,6 +264,48 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start, + /* + * For a prot_numa update we only hold mmap_sem for read so there is a +@@ -251,6 +259,48 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start, return pages; } @@ -98030,7 +97516,7 @@ index c43d557..0b7ccd2 100644 int mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, unsigned long start, unsigned long end, unsigned long newflags) -@@ -268,11 +318,29 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, +@@ -263,11 +313,29 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, int error; int dirty_accountable = 0; @@ -98060,7 +97546,7 @@ index c43d557..0b7ccd2 100644 /* * If we make a private mapping writable we increase our commit; * but (without finer accounting) cannot reduce our commit if we -@@ -289,6 +357,42 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, +@@ -284,6 +352,42 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev, } } @@ -98103,7 +97589,7 @@ index c43d557..0b7ccd2 100644 /* * First try to merge with previous and/or next vma. */ -@@ -319,9 +423,21 @@ success: +@@ -314,7 +418,19 @@ success: * vm_flags and vm_page_prot are protected by the mmap_sem * held in write mode. */ @@ -98120,13 +97606,10 @@ index c43d557..0b7ccd2 100644 + mm->binfmt->handle_mprotect(vma, newflags); +#endif + - vma->vm_page_prot = pgprot_modify(vma->vm_page_prot, -- vm_get_page_prot(newflags)); -+ vm_get_page_prot(vma->vm_flags)); + dirty_accountable = vma_wants_writenotify(vma); + vma_set_page_prot(vma); - if (vma_wants_writenotify(vma)) { - vma->vm_page_prot = vm_get_page_prot(newflags & ~VM_SHARED); -@@ -360,6 +476,17 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -350,6 +466,17 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, end = start + len; if (end <= start) return -ENOMEM; @@ -98144,7 +97627,7 @@ index c43d557..0b7ccd2 100644 if (!arch_validate_prot(prot)) return -EINVAL; -@@ -367,7 +494,7 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -357,7 +484,7 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, /* * Does the application expect PROT_READ to imply PROT_EXEC: */ @@ -98153,7 +97636,7 @@ index c43d557..0b7ccd2 100644 prot |= PROT_EXEC; vm_flags = calc_vm_prot_bits(prot); -@@ -399,6 +526,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -389,6 +516,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, if (start > vma->vm_start) prev = vma; @@ -98165,7 +97648,7 @@ index c43d557..0b7ccd2 100644 for (nstart = start ; ; ) { unsigned long newflags; -@@ -409,6 +541,14 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -399,6 +531,14 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, /* newflags >> 4 shift VM_MAY% in place of VM_% */ if ((newflags & ~(newflags >> 4)) & (VM_READ | VM_WRITE | VM_EXEC)) { @@ -98180,7 +97663,7 @@ index c43d557..0b7ccd2 100644 error = -EACCES; goto out; } -@@ -423,6 +563,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, +@@ -413,6 +553,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, error = mprotect_fixup(vma, &prev, nstart, tmp, newflags); if (error) goto out; @@ -98191,7 +97674,7 @@ index c43d557..0b7ccd2 100644 if (nstart < prev->vm_end) diff --git a/mm/mremap.c b/mm/mremap.c -index 05f1180..c3cde48 100644 +index b147f66..98a695a 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -144,6 +144,12 @@ static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd, @@ -98207,7 +97690,7 @@ index 05f1180..c3cde48 100644 pte = move_soft_dirty_pte(pte); set_pte_at(mm, new_addr, new_pte, pte); } -@@ -344,6 +350,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr, +@@ -345,6 +351,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr, if (is_vm_hugetlb_page(vma)) goto Einval; @@ -98219,7 +97702,7 @@ index 05f1180..c3cde48 100644 /* We can't remap across vm area boundaries */ if (old_len > vma->vm_end - addr) goto Efault; -@@ -399,20 +410,25 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len, +@@ -400,20 +411,25 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len, unsigned long ret = -EINVAL; unsigned long charged = 0; unsigned long map_flags; @@ -98250,7 +97733,7 @@ index 05f1180..c3cde48 100644 goto out; ret = do_munmap(mm, new_addr, new_len); -@@ -481,6 +497,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, +@@ -482,6 +498,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, unsigned long ret = -EINVAL; unsigned long charged = 0; bool locked = false; @@ -98258,7 +97741,7 @@ index 05f1180..c3cde48 100644 if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE)) return ret; -@@ -502,6 +519,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, +@@ -503,6 +520,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, if (!new_len) return ret; @@ -98276,7 +97759,7 @@ index 05f1180..c3cde48 100644 down_write(¤t->mm->mmap_sem); if (flags & MREMAP_FIXED) { -@@ -552,6 +580,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, +@@ -553,6 +581,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, new_addr = addr; } ret = addr; @@ -98284,7 +97767,7 @@ index 05f1180..c3cde48 100644 goto out; } } -@@ -575,7 +604,12 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, +@@ -576,7 +605,12 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, goto out; } @@ -98298,7 +97781,7 @@ index 05f1180..c3cde48 100644 out: if (ret & ~PAGE_MASK) diff --git a/mm/nommu.c b/mm/nommu.c -index a881d96..e5932cd 100644 +index bd1808e..b63d87c 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -70,7 +70,6 @@ int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT; @@ -98365,7 +97848,7 @@ index a881d96..e5932cd 100644 struct mm_struct *mm; diff --git a/mm/page-writeback.c b/mm/page-writeback.c -index ba5fd97..5a95869 100644 +index 19ceae8..70848ee 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -664,7 +664,7 @@ static long long pos_ratio_polynom(unsigned long setpoint, @@ -98378,10 +97861,10 @@ index ba5fd97..5a95869 100644 unsigned long bg_thresh, unsigned long dirty, diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index c5fe124..2cf7f17 100644 +index 616a2c9..0e755f6 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c -@@ -61,6 +61,7 @@ +@@ -59,6 +59,7 @@ #include #include #include @@ -98389,7 +97872,7 @@ index c5fe124..2cf7f17 100644 #include #include -@@ -357,7 +358,7 @@ out: +@@ -356,7 +357,7 @@ out: * This usage means that zero-order pages may not be compound. */ @@ -98398,7 +97881,7 @@ index c5fe124..2cf7f17 100644 { __free_pages_ok(page, compound_order(page)); } -@@ -740,6 +741,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order) +@@ -741,6 +742,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order) int i; int bad = 0; @@ -98409,7 +97892,7 @@ index c5fe124..2cf7f17 100644 trace_mm_page_free(page, order); kmemcheck_free_shadow(page, order); -@@ -756,6 +761,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order) +@@ -757,6 +762,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order) debug_check_no_obj_freed(page_address(page), PAGE_SIZE << order); } @@ -98422,7 +97905,7 @@ index c5fe124..2cf7f17 100644 arch_free_page(page, order); kernel_map_pages(page, 1 << order, 0); -@@ -779,6 +790,20 @@ static void __free_pages_ok(struct page *page, unsigned int order) +@@ -780,6 +791,20 @@ static void __free_pages_ok(struct page *page, unsigned int order) local_irq_restore(flags); } @@ -98443,7 +97926,7 @@ index c5fe124..2cf7f17 100644 void __init __free_pages_bootmem(struct page *page, unsigned int order) { unsigned int nr_pages = 1 << order; -@@ -794,6 +819,19 @@ void __init __free_pages_bootmem(struct page *page, unsigned int order) +@@ -795,6 +820,19 @@ void __init __free_pages_bootmem(struct page *page, unsigned int order) __ClearPageReserved(p); set_page_count(p, 0); @@ -98463,7 +97946,7 @@ index c5fe124..2cf7f17 100644 page_zone(page)->managed_pages += nr_pages; set_page_refcounted(page); __free_pages(page, order); -@@ -922,8 +960,10 @@ static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags) +@@ -923,8 +961,10 @@ static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags) arch_alloc_page(page, order); kernel_map_pages(page, 1 << order, 1); @@ -98474,25 +97957,25 @@ index c5fe124..2cf7f17 100644 if (order && (gfp_flags & __GFP_COMP)) prep_compound_page(page, order); -@@ -1601,7 +1641,7 @@ again: +@@ -1602,7 +1642,7 @@ again: } __mod_zone_page_state(zone, NR_ALLOC_BATCH, -(1 << order)); - if (atomic_long_read(&zone->vm_stat[NR_ALLOC_BATCH]) <= 0 && + if (atomic_long_read_unchecked(&zone->vm_stat[NR_ALLOC_BATCH]) <= 0 && - !zone_is_fair_depleted(zone)) - zone_set_flag(zone, ZONE_FAIR_DEPLETED); + !test_bit(ZONE_FAIR_DEPLETED, &zone->flags)) + set_bit(ZONE_FAIR_DEPLETED, &zone->flags); -@@ -1922,7 +1962,7 @@ static void reset_alloc_batches(struct zone *preferred_zone) +@@ -1923,7 +1963,7 @@ static void reset_alloc_batches(struct zone *preferred_zone) do { mod_zone_page_state(zone, NR_ALLOC_BATCH, high_wmark_pages(zone) - low_wmark_pages(zone) - - atomic_long_read(&zone->vm_stat[NR_ALLOC_BATCH])); + atomic_long_read_unchecked(&zone->vm_stat[NR_ALLOC_BATCH])); - zone_clear_flag(zone, ZONE_FAIR_DEPLETED); + clear_bit(ZONE_FAIR_DEPLETED, &zone->flags); } while (zone++ != preferred_zone); } -@@ -5699,7 +5739,7 @@ static void __setup_per_zone_wmarks(void) +@@ -5698,7 +5738,7 @@ static void __setup_per_zone_wmarks(void) __mod_zone_page_state(zone, NR_ALLOC_BATCH, high_wmark_pages(zone) - low_wmark_pages(zone) - @@ -98502,10 +97985,10 @@ index c5fe124..2cf7f17 100644 setup_zone_migrate_reserve(zone); spin_unlock_irqrestore(&zone->lock, flags); diff --git a/mm/percpu.c b/mm/percpu.c -index 2139e30..1d45bce 100644 +index 014bab6..db5a76f 100644 --- a/mm/percpu.c +++ b/mm/percpu.c -@@ -123,7 +123,7 @@ static unsigned int pcpu_low_unit_cpu __read_mostly; +@@ -131,7 +131,7 @@ static unsigned int pcpu_low_unit_cpu __read_mostly; static unsigned int pcpu_high_unit_cpu __read_mostly; /* the address of the first chunk which starts with the kernel static area */ @@ -98566,7 +98049,7 @@ index 5077afc..846c9ef 100644 if (!mm || IS_ERR(mm)) { rc = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH; diff --git a/mm/rmap.c b/mm/rmap.c -index e01318d..25117ca 100644 +index 3e4c721..a5e3e39 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -164,6 +164,10 @@ int anon_vma_prepare(struct vm_area_struct *vma) @@ -98655,7 +98138,7 @@ index e01318d..25117ca 100644 { struct anon_vma_chain *avc; struct anon_vma *anon_vma; -@@ -374,8 +408,10 @@ static void anon_vma_ctor(void *data) +@@ -376,8 +410,10 @@ static void anon_vma_ctor(void *data) void __init anon_vma_init(void) { anon_vma_cachep = kmem_cache_create("anon_vma", sizeof(struct anon_vma), @@ -98669,7 +98152,7 @@ index e01318d..25117ca 100644 /* diff --git a/mm/shmem.c b/mm/shmem.c -index 469f90d..34a09ee 100644 +index 185836b..d7255a1 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -33,7 +33,7 @@ @@ -98690,7 +98173,7 @@ index 469f90d..34a09ee 100644 /* * shmem_fallocate communicates with shmem_fault or shmem_writepage via -@@ -2524,6 +2524,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = { +@@ -2558,6 +2558,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = { static int shmem_xattr_validate(const char *name) { struct { const char *prefix; size_t len; } arr[] = { @@ -98702,7 +98185,7 @@ index 469f90d..34a09ee 100644 { XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN }, { XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN } }; -@@ -2579,6 +2584,15 @@ static int shmem_setxattr(struct dentry *dentry, const char *name, +@@ -2613,6 +2618,15 @@ static int shmem_setxattr(struct dentry *dentry, const char *name, if (err) return err; @@ -98718,7 +98201,7 @@ index 469f90d..34a09ee 100644 return simple_xattr_set(&info->xattrs, name, value, size, flags); } -@@ -2962,8 +2976,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) +@@ -2996,8 +3010,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) int err = -ENOMEM; /* Round up to L1_CACHE_BYTES to resist false sharing */ @@ -98729,10 +98212,10 @@ index 469f90d..34a09ee 100644 return -ENOMEM; diff --git a/mm/slab.c b/mm/slab.c -index 7c52b38..3ccc17e 100644 +index f34e053..78a3839 100644 --- a/mm/slab.c +++ b/mm/slab.c -@@ -316,10 +316,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent) +@@ -314,10 +314,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent) if ((x)->max_freeable < i) \ (x)->max_freeable = i; \ } while (0) @@ -98749,7 +98232,7 @@ index 7c52b38..3ccc17e 100644 #else #define STATS_INC_ACTIVE(x) do { } while (0) #define STATS_DEC_ACTIVE(x) do { } while (0) -@@ -336,6 +338,8 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent) +@@ -334,6 +336,8 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent) #define STATS_INC_ALLOCMISS(x) do { } while (0) #define STATS_INC_FREEHIT(x) do { } while (0) #define STATS_INC_FREEMISS(x) do { } while (0) @@ -98758,7 +98241,7 @@ index 7c52b38..3ccc17e 100644 #endif #if DEBUG -@@ -452,7 +456,7 @@ static inline void *index_to_obj(struct kmem_cache *cache, struct page *page, +@@ -450,7 +454,7 @@ static inline void *index_to_obj(struct kmem_cache *cache, struct page *page, * reciprocal_divide(offset, cache->reciprocal_buffer_size) */ static inline unsigned int obj_to_index(const struct kmem_cache *cache, @@ -98767,22 +98250,25 @@ index 7c52b38..3ccc17e 100644 { u32 offset = (obj - page->s_mem); return reciprocal_divide(offset, cache->reciprocal_buffer_size); -@@ -1462,12 +1466,12 @@ void __init kmem_cache_init(void) +@@ -1438,7 +1442,7 @@ void __init kmem_cache_init(void) + * structures first. Without this, further allocations will bug. */ - - kmalloc_caches[INDEX_AC] = create_kmalloc_cache("kmalloc-ac", -- kmalloc_size(INDEX_AC), ARCH_KMALLOC_FLAGS); -+ kmalloc_size(INDEX_AC), SLAB_USERCOPY | ARCH_KMALLOC_FLAGS); - - if (INDEX_AC != INDEX_NODE) - kmalloc_caches[INDEX_NODE] = - create_kmalloc_cache("kmalloc-node", + kmalloc_caches[INDEX_NODE] = create_kmalloc_cache("kmalloc-node", - kmalloc_size(INDEX_NODE), ARCH_KMALLOC_FLAGS); + kmalloc_size(INDEX_NODE), SLAB_USERCOPY | ARCH_KMALLOC_FLAGS); + slab_state = PARTIAL_NODE; slab_early_init = 0; +@@ -2059,7 +2063,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, + + cachep = find_mergeable(size, align, flags, name, ctor); + if (cachep) { +- cachep->refcount++; ++ atomic_inc(&cachep->refcount); -@@ -3384,6 +3388,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp, + /* + * Adjust the object sizes so that we clear +@@ -3352,6 +3356,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp, struct array_cache *ac = cpu_cache_get(cachep); check_irq_off(); @@ -98803,7 +98289,7 @@ index 7c52b38..3ccc17e 100644 kmemleak_free_recursive(objp, cachep->flags); objp = cache_free_debugcheck(cachep, objp, caller); -@@ -3607,6 +3625,7 @@ void kfree(const void *objp) +@@ -3557,6 +3575,7 @@ void kfree(const void *objp) if (unlikely(ZERO_OR_NULL_PTR(objp))) return; @@ -98811,7 +98297,7 @@ index 7c52b38..3ccc17e 100644 local_irq_save(flags); kfree_debugcheck(objp); c = virt_to_cache(objp); -@@ -4056,14 +4075,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep) +@@ -3979,14 +3998,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep) } /* cpu stats */ { @@ -98838,7 +98324,7 @@ index 7c52b38..3ccc17e 100644 #endif } -@@ -4281,13 +4308,69 @@ static const struct file_operations proc_slabstats_operations = { +@@ -4200,13 +4227,69 @@ static const struct file_operations proc_slabstats_operations = { static int __init slab_proc_init(void) { #ifdef CONFIG_DEBUG_SLAB_LEAK @@ -98910,10 +98396,19 @@ index 7c52b38..3ccc17e 100644 * ksize - get the actual amount of memory allocated for a given object * @objp: Pointer to the object diff --git a/mm/slab.h b/mm/slab.h -index 0e0fdd3..d0fd761 100644 +index ab019e6..fbcac34 100644 --- a/mm/slab.h +++ b/mm/slab.h -@@ -32,6 +32,20 @@ extern struct list_head slab_caches; +@@ -22,7 +22,7 @@ struct kmem_cache { + unsigned int align; /* Alignment as calculated */ + unsigned long flags; /* Active flags on the slab */ + const char *name; /* Slab name for sysfs */ +- int refcount; /* Use counter */ ++ atomic_t refcount; /* Use counter */ + void (*ctor)(void *); /* Called on object slot creation */ + struct list_head list; /* List of all slab caches on the system */ + }; +@@ -66,6 +66,20 @@ extern struct list_head slab_caches; /* The slab cache that manages slab cache information */ extern struct kmem_cache *kmem_cache; @@ -98934,7 +98429,7 @@ index 0e0fdd3..d0fd761 100644 unsigned long calculate_alignment(unsigned long flags, unsigned long align, unsigned long size); -@@ -67,7 +81,8 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, +@@ -116,7 +130,8 @@ static inline unsigned long kmem_cache_flags(unsigned long object_size, /* Legal flag mask for kmem_cache_create(), for various configurations */ #define SLAB_CORE_FLAGS (SLAB_HWCACHE_ALIGN | SLAB_CACHE_DMA | SLAB_PANIC | \ @@ -98944,7 +98439,7 @@ index 0e0fdd3..d0fd761 100644 #if defined(CONFIG_DEBUG_SLAB) #define SLAB_DEBUG_FLAGS (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER) -@@ -251,6 +266,9 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x) +@@ -300,6 +315,9 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x) return s; page = virt_to_head_page(x); @@ -98955,7 +98450,7 @@ index 0e0fdd3..d0fd761 100644 if (slab_equal_or_root(cachep, s)) return cachep; diff --git a/mm/slab_common.c b/mm/slab_common.c -index d319502..da7714e 100644 +index dcdab81..3576646 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -25,11 +25,35 @@ @@ -98992,10 +98487,28 @@ index d319502..da7714e 100644 +early_param("pax_sanitize_slab", pax_sanitize_slab_setup); +#endif + - #ifdef CONFIG_DEBUG_VM - static int kmem_cache_sanity_check(const char *name, size_t size) + /* + * Set of flags that will prevent slab merging + */ +@@ -44,7 +68,7 @@ struct kmem_cache *kmem_cache; + * Merge control. If this is set then no merging of slab caches will occur. + * (Could be removed. This was introduced to pacify the merge skeptics.) + */ +-static int slab_nomerge; ++static int slab_nomerge = 1; + + static int __init setup_slab_nomerge(char *str) { -@@ -160,7 +184,7 @@ do_kmem_cache_create(char *name, size_t object_size, size_t size, size_t align, +@@ -218,7 +242,7 @@ int slab_unmergeable(struct kmem_cache *s) + /* + * We may have set a slab to be unmergeable during bootstrap. + */ +- if (s->refcount < 0) ++ if (atomic_read(&s->refcount) < 0) + return 1; + + return 0; +@@ -322,7 +346,7 @@ do_kmem_cache_create(char *name, size_t object_size, size_t size, size_t align, if (err) goto out_free_cache; @@ -99004,7 +98517,7 @@ index d319502..da7714e 100644 list_add(&s->list, &slab_caches); out: if (err) -@@ -222,6 +246,13 @@ kmem_cache_create(const char *name, size_t size, size_t align, +@@ -386,6 +410,13 @@ kmem_cache_create(const char *name, size_t size, size_t align, */ flags &= CACHE_CREATE_MASK; @@ -99018,7 +98531,7 @@ index d319502..da7714e 100644 s = __kmem_cache_alias(name, size, align, flags, ctor); if (s) goto out_unlock; -@@ -341,8 +372,7 @@ void kmem_cache_destroy(struct kmem_cache *s) +@@ -505,8 +536,7 @@ void kmem_cache_destroy(struct kmem_cache *s) mutex_lock(&slab_mutex); @@ -99028,7 +98541,7 @@ index d319502..da7714e 100644 goto out_unlock; if (memcg_cleanup_cache_params(s) != 0) -@@ -362,7 +392,7 @@ void kmem_cache_destroy(struct kmem_cache *s) +@@ -526,7 +556,7 @@ void kmem_cache_destroy(struct kmem_cache *s) rcu_barrier(); memcg_free_cache_params(s); @@ -99037,7 +98550,7 @@ index d319502..da7714e 100644 sysfs_slab_remove(s); #else slab_kmem_cache_release(s); -@@ -418,7 +448,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t siz +@@ -582,7 +612,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t siz panic("Creation of kmalloc slab %s size=%zu failed. Reason %d\n", name, size, err); @@ -99046,7 +98559,7 @@ index d319502..da7714e 100644 } struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, -@@ -431,7 +461,7 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, +@@ -595,7 +625,7 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, create_boot_cache(s, name, size, flags); list_add(&s->list, &slab_caches); @@ -99055,7 +98568,7 @@ index d319502..da7714e 100644 return s; } -@@ -443,6 +473,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; +@@ -607,6 +637,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; EXPORT_SYMBOL(kmalloc_dma_caches); #endif @@ -99067,7 +98580,7 @@ index d319502..da7714e 100644 /* * Conversion table for small slabs sizes / 8 to the index in the * kmalloc array. This is necessary for slabs < 192 since we have non power -@@ -507,6 +542,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags) +@@ -671,6 +706,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags) return kmalloc_dma_caches[index]; #endif @@ -99081,7 +98594,7 @@ index d319502..da7714e 100644 return kmalloc_caches[index]; } -@@ -563,7 +605,7 @@ void __init create_kmalloc_caches(unsigned long flags) +@@ -727,7 +769,7 @@ void __init create_kmalloc_caches(unsigned long flags) for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) { if (!kmalloc_caches[i]) { kmalloc_caches[i] = create_kmalloc_cache(NULL, @@ -99090,7 +98603,7 @@ index d319502..da7714e 100644 } /* -@@ -572,10 +614,10 @@ void __init create_kmalloc_caches(unsigned long flags) +@@ -736,10 +778,10 @@ void __init create_kmalloc_caches(unsigned long flags) * earlier power of two caches */ if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6) @@ -99103,7 +98616,7 @@ index d319502..da7714e 100644 } /* Kmalloc array is now usable */ -@@ -608,6 +650,23 @@ void __init create_kmalloc_caches(unsigned long flags) +@@ -772,6 +814,23 @@ void __init create_kmalloc_caches(unsigned long flags) } } #endif @@ -99127,7 +98640,7 @@ index d319502..da7714e 100644 } #endif /* !CONFIG_SLOB */ -@@ -666,6 +725,9 @@ void print_slabinfo_header(struct seq_file *m) +@@ -830,6 +889,9 @@ void print_slabinfo_header(struct seq_file *m) seq_puts(m, " : globalstat " " "); seq_puts(m, " : cpustat "); @@ -99138,7 +98651,7 @@ index d319502..da7714e 100644 seq_putc(m, '\n'); } diff --git a/mm/slob.c b/mm/slob.c -index 21980e0..975f1bf 100644 +index 96a8620..3e7e663 100644 --- a/mm/slob.c +++ b/mm/slob.c @@ -157,7 +157,7 @@ static void set_slob(slob_t *s, slobidx_t size, slob_t *next) @@ -99307,7 +98820,7 @@ index 21980e0..975f1bf 100644 return ret; } -@@ -493,34 +517,112 @@ void kfree(const void *block) +@@ -491,34 +515,112 @@ void kfree(const void *block) return; kmemleak_free(block); @@ -99429,7 +98942,7 @@ index 21980e0..975f1bf 100644 } EXPORT_SYMBOL(ksize); -@@ -536,23 +638,33 @@ int __kmem_cache_create(struct kmem_cache *c, unsigned long flags) +@@ -534,23 +636,33 @@ int __kmem_cache_create(struct kmem_cache *c, unsigned long flags) void *slob_alloc_node(struct kmem_cache *c, gfp_t flags, int node) { @@ -99465,7 +98978,7 @@ index 21980e0..975f1bf 100644 if (b && c->ctor) c->ctor(b); -@@ -582,12 +694,16 @@ void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t gfp, int node) +@@ -580,12 +692,16 @@ void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t gfp, int node) EXPORT_SYMBOL(kmem_cache_alloc_node); #endif @@ -99486,7 +98999,7 @@ index 21980e0..975f1bf 100644 } static void kmem_rcu_free(struct rcu_head *head) -@@ -595,22 +711,36 @@ static void kmem_rcu_free(struct rcu_head *head) +@@ -593,22 +709,36 @@ static void kmem_rcu_free(struct rcu_head *head) struct slob_rcu *slob_rcu = (struct slob_rcu *)head; void *b = (void *)slob_rcu - (slob_rcu->size - sizeof(struct slob_rcu)); @@ -99528,10 +99041,10 @@ index 21980e0..975f1bf 100644 EXPORT_SYMBOL(kmem_cache_free); diff --git a/mm/slub.c b/mm/slub.c -index 3e8afcc..d6e2c89 100644 +index ae7b9f1..7b3fdbe 100644 --- a/mm/slub.c +++ b/mm/slub.c -@@ -207,7 +207,7 @@ struct track { +@@ -197,7 +197,7 @@ struct track { enum track_item { TRACK_ALLOC, TRACK_FREE }; @@ -99540,7 +99053,7 @@ index 3e8afcc..d6e2c89 100644 static int sysfs_slab_add(struct kmem_cache *); static int sysfs_slab_alias(struct kmem_cache *, const char *); static void memcg_propagate_slab_attrs(struct kmem_cache *s); -@@ -545,7 +545,7 @@ static void print_track(const char *s, struct track *t) +@@ -535,7 +535,7 @@ static void print_track(const char *s, struct track *t) if (!t->addr) return; @@ -99549,7 +99062,7 @@ index 3e8afcc..d6e2c89 100644 s, (void *)t->addr, jiffies - t->when, t->cpu, t->pid); #ifdef CONFIG_STACKTRACE { -@@ -2643,6 +2643,14 @@ static __always_inline void slab_free(struct kmem_cache *s, +@@ -2645,6 +2645,14 @@ static __always_inline void slab_free(struct kmem_cache *s, slab_free_hook(s, x); @@ -99564,16 +99077,7 @@ index 3e8afcc..d6e2c89 100644 redo: /* * Determine the currently cpus per cpu slab. -@@ -2710,7 +2718,7 @@ static int slub_min_objects; - * Merge control. If this is set then no merging of slab caches will occur. - * (Could be removed. This was introduced to pacify the merge skeptics.) - */ --static int slub_nomerge; -+static int slub_nomerge = 1; - - /* - * Calculate the order of allocation given an slab object size. -@@ -2986,6 +2994,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order) +@@ -2982,6 +2990,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order) s->inuse = size; if (((flags & (SLAB_DESTROY_BY_RCU | SLAB_POISON)) || @@ -99583,7 +99087,7 @@ index 3e8afcc..d6e2c89 100644 s->ctor)) { /* * Relocate free pointer after the object if it is not -@@ -3313,6 +3324,59 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node) +@@ -3301,6 +3312,59 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node) EXPORT_SYMBOL(__kmalloc_node); #endif @@ -99643,7 +99147,7 @@ index 3e8afcc..d6e2c89 100644 size_t ksize(const void *object) { struct page *page; -@@ -3341,6 +3405,7 @@ void kfree(const void *x) +@@ -3329,6 +3393,7 @@ void kfree(const void *x) if (unlikely(ZERO_OR_NULL_PTR(x))) return; @@ -99651,16 +99155,7 @@ index 3e8afcc..d6e2c89 100644 page = virt_to_head_page(x); if (unlikely(!PageSlab(page))) { BUG_ON(!PageCompound(page)); -@@ -3642,7 +3707,7 @@ static int slab_unmergeable(struct kmem_cache *s) - /* - * We may have set a slab to be unmergeable during bootstrap. - */ -- if (s->refcount < 0) -+ if (atomic_read(&s->refcount) < 0) - return 1; - - return 0; -@@ -3699,7 +3764,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, +@@ -3624,7 +3689,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, int i; struct kmem_cache *c; @@ -99669,7 +99164,7 @@ index 3e8afcc..d6e2c89 100644 /* * Adjust the object sizes so that we clear -@@ -3718,7 +3783,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, +@@ -3643,7 +3708,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, } if (sysfs_slab_alias(s, name)) { @@ -99678,7 +99173,7 @@ index 3e8afcc..d6e2c89 100644 s = NULL; } } -@@ -3835,7 +3900,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags, +@@ -3760,7 +3825,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags, } #endif @@ -99687,7 +99182,7 @@ index 3e8afcc..d6e2c89 100644 static int count_inuse(struct page *page) { return page->inuse; -@@ -4116,7 +4181,11 @@ static int list_locations(struct kmem_cache *s, char *buf, +@@ -4041,7 +4106,11 @@ static int list_locations(struct kmem_cache *s, char *buf, len += sprintf(buf + len, "%7ld ", l->count); if (l->addr) @@ -99699,7 +99194,7 @@ index 3e8afcc..d6e2c89 100644 else len += sprintf(buf + len, ""); -@@ -4218,12 +4287,12 @@ static void __init resiliency_test(void) +@@ -4143,12 +4212,12 @@ static void __init resiliency_test(void) validate_slab_cache(kmalloc_caches[9]); } #else @@ -99714,7 +99209,7 @@ index 3e8afcc..d6e2c89 100644 enum slab_stat_type { SL_ALL, /* All slabs */ SL_PARTIAL, /* Only partially allocated slabs */ -@@ -4460,13 +4529,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf) +@@ -4385,13 +4454,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf) { if (!s->ctor) return 0; @@ -99733,7 +99228,7 @@ index 3e8afcc..d6e2c89 100644 } SLAB_ATTR_RO(aliases); -@@ -4554,6 +4627,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf) +@@ -4479,6 +4552,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf) SLAB_ATTR_RO(cache_dma); #endif @@ -99756,7 +99251,25 @@ index 3e8afcc..d6e2c89 100644 static ssize_t destroy_by_rcu_show(struct kmem_cache *s, char *buf) { return sprintf(buf, "%d\n", !!(s->flags & SLAB_DESTROY_BY_RCU)); -@@ -4888,6 +4977,12 @@ static struct attribute *slab_attrs[] = { +@@ -4534,7 +4623,7 @@ static ssize_t trace_store(struct kmem_cache *s, const char *buf, + * as well as cause other issues like converting a mergeable + * cache into an umergeable one. + */ +- if (s->refcount > 1) ++ if (atomic_read(&s->refcount) > 1) + return -EINVAL; + + s->flags &= ~SLAB_TRACE; +@@ -4654,7 +4743,7 @@ static ssize_t failslab_show(struct kmem_cache *s, char *buf) + static ssize_t failslab_store(struct kmem_cache *s, const char *buf, + size_t length) + { +- if (s->refcount > 1) ++ if (atomic_read(&s->refcount) > 1) + return -EINVAL; + + s->flags &= ~SLAB_FAILSLAB; +@@ -4824,6 +4913,12 @@ static struct attribute *slab_attrs[] = { #ifdef CONFIG_ZONE_DMA &cache_dma_attr.attr, #endif @@ -99769,7 +99282,7 @@ index 3e8afcc..d6e2c89 100644 #ifdef CONFIG_NUMA &remote_node_defrag_ratio_attr.attr, #endif -@@ -5132,6 +5227,7 @@ static char *create_unique_id(struct kmem_cache *s) +@@ -5068,6 +5163,7 @@ static char *create_unique_id(struct kmem_cache *s) return name; } @@ -99777,7 +99290,7 @@ index 3e8afcc..d6e2c89 100644 static int sysfs_slab_add(struct kmem_cache *s) { int err; -@@ -5205,6 +5301,7 @@ void sysfs_slab_remove(struct kmem_cache *s) +@@ -5141,6 +5237,7 @@ void sysfs_slab_remove(struct kmem_cache *s) kobject_del(&s->kobj); kobject_put(&s->kobj); } @@ -99785,7 +99298,7 @@ index 3e8afcc..d6e2c89 100644 /* * Need to buffer aliases during bootup until sysfs becomes -@@ -5218,6 +5315,7 @@ struct saved_alias { +@@ -5154,6 +5251,7 @@ struct saved_alias { static struct saved_alias *alias_list; @@ -99793,7 +99306,7 @@ index 3e8afcc..d6e2c89 100644 static int sysfs_slab_alias(struct kmem_cache *s, const char *name) { struct saved_alias *al; -@@ -5240,6 +5338,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name) +@@ -5176,6 +5274,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name) alias_list = al; return 0; } @@ -99837,7 +99350,7 @@ index d1b48b6..6e8590e 100644 } } diff --git a/mm/swap.c b/mm/swap.c -index 6b2dc38..46b79ba 100644 +index 8a12b33..7068e78 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -31,6 +31,7 @@ @@ -99909,10 +99422,10 @@ index 8798b2e..348f9dd 100644 if (S_ISREG(inode->i_mode)) diff --git a/mm/util.c b/mm/util.c -index 093c973..b70a268 100644 +index fec39d4..3e60325 100644 --- a/mm/util.c +++ b/mm/util.c -@@ -202,6 +202,12 @@ done: +@@ -195,6 +195,12 @@ struct task_struct *task_of_stack(struct task_struct *task, void arch_pick_mmap_layout(struct mm_struct *mm) { mm->mmap_base = TASK_UNMAPPED_BASE; @@ -99925,7 +99438,7 @@ index 093c973..b70a268 100644 mm->get_unmapped_area = arch_get_unmapped_area; } #endif -@@ -378,6 +384,9 @@ int get_cmdline(struct task_struct *task, char *buffer, int buflen) +@@ -371,6 +377,9 @@ int get_cmdline(struct task_struct *task, char *buffer, int buflen) if (!mm->arg_end) goto out_mm; /* Shh! No looking before we're done */ @@ -99936,7 +99449,7 @@ index 093c973..b70a268 100644 if (len > buflen) diff --git a/mm/vmalloc.c b/mm/vmalloc.c -index 2b0aa54..b451f74 100644 +index 90520af..24231aa 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -40,6 +40,21 @@ struct vfree_deferred { @@ -100219,10 +99732,10 @@ index 2b0aa54..b451f74 100644 if (v->nr_pages) seq_printf(m, " pages=%d", v->nr_pages); diff --git a/mm/vmstat.c b/mm/vmstat.c -index e9ab104..de275bd 100644 +index 1b12d39..57b29b2 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c -@@ -20,6 +20,7 @@ +@@ -22,6 +22,7 @@ #include #include #include @@ -100230,7 +99743,7 @@ index e9ab104..de275bd 100644 #include "internal.h" -@@ -79,7 +80,7 @@ void vm_events_fold_cpu(int cpu) +@@ -81,7 +82,7 @@ void vm_events_fold_cpu(int cpu) * * vm_stat contains the global counters */ @@ -100239,16 +99752,16 @@ index e9ab104..de275bd 100644 EXPORT_SYMBOL(vm_stat); #ifdef CONFIG_SMP -@@ -425,7 +426,7 @@ static inline void fold_diff(int *diff) +@@ -433,7 +434,7 @@ static int fold_diff(int *diff) for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) - if (diff[i]) + if (diff[i]) { - atomic_long_add(diff[i], &vm_stat[i]); + atomic_long_add_unchecked(diff[i], &vm_stat[i]); - } - - /* -@@ -457,7 +458,7 @@ static void refresh_cpu_vm_stats(void) + changes++; + } + return changes; +@@ -471,7 +472,7 @@ static int refresh_cpu_vm_stats(void) v = this_cpu_xchg(p->vm_stat_diff[i], 0); if (v) { @@ -100257,7 +99770,7 @@ index e9ab104..de275bd 100644 global_diff[i] += v; #ifdef CONFIG_NUMA /* 3 seconds idle till flush */ -@@ -519,7 +520,7 @@ void cpu_vm_stats_fold(int cpu) +@@ -535,7 +536,7 @@ void cpu_vm_stats_fold(int cpu) v = p->vm_stat_diff[i]; p->vm_stat_diff[i] = 0; @@ -100266,7 +99779,7 @@ index e9ab104..de275bd 100644 global_diff[i] += v; } } -@@ -539,8 +540,8 @@ void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset) +@@ -555,8 +556,8 @@ void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset) if (pset->vm_stat_diff[i]) { int v = pset->vm_stat_diff[i]; pset->vm_stat_diff[i] = 0; @@ -100277,7 +99790,7 @@ index e9ab104..de275bd 100644 } } #endif -@@ -1163,10 +1164,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos) +@@ -1189,10 +1190,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos) stat_items_size += sizeof(struct vm_event_state); #endif @@ -100301,7 +99814,7 @@ index e9ab104..de275bd 100644 for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) v[i] = global_page_state(i); v += NR_VM_ZONE_STAT_ITEMS; -@@ -1315,10 +1328,16 @@ static int __init setup_vmstat(void) +@@ -1424,10 +1437,16 @@ static int __init setup_vmstat(void) cpu_notifier_register_done(); #endif #ifdef CONFIG_PROC_FS @@ -100345,6 +99858,19 @@ index 64c6bed..b79a5de 100644 struct vlan_net *vn; vn = net_generic(net, vlan_net_id); +diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c +index 8ac8a5c..991defc 100644 +--- a/net/8021q/vlan_netlink.c ++++ b/net/8021q/vlan_netlink.c +@@ -238,7 +238,7 @@ nla_put_failure: + return -EMSGSIZE; + } + +-struct rtnl_link_ops vlan_link_ops __read_mostly = { ++struct rtnl_link_ops vlan_link_ops = { + .kind = "vlan", + .maxtype = IFLA_VLAN_MAX, + .policy = vlan_policy, diff --git a/net/9p/client.c b/net/9p/client.c index e86a9bea..e91f70e 100644 --- a/net/9p/client.c @@ -100637,9 +100163,18 @@ index 1e80539..676c37a 100644 if (ogm_packet->flags & BATADV_DIRECTLINK) has_directlink_flag = true; diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c -index fc1835c..eead856 100644 +index fc1835c..42f2c2f 100644 --- a/net/batman-adv/fragmentation.c +++ b/net/batman-adv/fragmentation.c +@@ -251,7 +251,7 @@ batadv_frag_merge_packets(struct hlist_head *chain, struct sk_buff *skb) + kfree(entry); + + /* Make room for the rest of the fragments. */ +- if (pskb_expand_head(skb_out, 0, size - skb->len, GFP_ATOMIC) < 0) { ++ if (pskb_expand_head(skb_out, 0, size - skb_out->len, GFP_ATOMIC) < 0) { + kfree_skb(skb_out); + skb_out = NULL; + goto free; @@ -450,7 +450,7 @@ bool batadv_frag_send_packet(struct sk_buff *skb, frag_header.packet_type = BATADV_UNICAST_FRAG; frag_header.version = BATADV_COMPAT_VERSION; @@ -100650,7 +100185,7 @@ index fc1835c..eead856 100644 frag_header.no = 0; frag_header.total_size = htons(skb->len); diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c -index 5467955..30cc771 100644 +index 5467955..75ad4e3 100644 --- a/net/batman-adv/soft-interface.c +++ b/net/batman-adv/soft-interface.c @@ -296,7 +296,7 @@ send: @@ -100680,6 +100215,15 @@ index 5467955..30cc771 100644 bat_priv->primary_if = NULL; bat_priv->num_ifaces = 0; +@@ -983,7 +983,7 @@ int batadv_softif_is_valid(const struct net_device *net_dev) + return 0; + } + +-struct rtnl_link_ops batadv_link_ops __read_mostly = { ++struct rtnl_link_ops batadv_link_ops = { + .kind = "batadv", + .priv_size = sizeof(struct batadv_priv), + .setup = batadv_softif_init_early, diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h index 8854c05..ee5d5497 100644 --- a/net/batman-adv/types.h @@ -100711,6 +100255,46 @@ index 8854c05..ee5d5497 100644 atomic_t bcast_queue_left; atomic_t batman_queue_left; char num_ifaces; +diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c +index c2e0d14..bfa852b 100644 +--- a/net/bluetooth/6lowpan.c ++++ b/net/bluetooth/6lowpan.c +@@ -367,7 +367,6 @@ static int recv_pkt(struct sk_buff *skb, struct net_device *dev, + + drop: + dev->stats.rx_dropped++; +- kfree_skb(skb); + return NET_RX_DROP; + } + +diff --git a/net/bluetooth/bnep/core.c b/net/bluetooth/bnep/core.c +index 85bcc21..ce82722d 100644 +--- a/net/bluetooth/bnep/core.c ++++ b/net/bluetooth/bnep/core.c +@@ -533,6 +533,9 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock) + + BT_DBG(""); + ++ if (!l2cap_is_socket(sock)) ++ return -EBADFD; ++ + baswap((void *) dst, &l2cap_pi(sock->sk)->chan->dst); + baswap((void *) src, &l2cap_pi(sock->sk)->chan->src); + +diff --git a/net/bluetooth/cmtp/core.c b/net/bluetooth/cmtp/core.c +index 67fe5e8..278a194 100644 +--- a/net/bluetooth/cmtp/core.c ++++ b/net/bluetooth/cmtp/core.c +@@ -334,6 +334,9 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock) + + BT_DBG(""); + ++ if (!l2cap_is_socket(sock)) ++ return -EBADFD; ++ + session = kzalloc(sizeof(struct cmtp_session), GFP_KERNEL); + if (!session) + return -ENOMEM; diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c index 115f149..f0ba286 100644 --- a/net/bluetooth/hci_sock.c @@ -100724,11 +100308,31 @@ index 115f149..f0ba286 100644 if (copy_from_user(&uf, optval, len)) { err = -EFAULT; break; +diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c +index 1b7d605..02ebd10 100644 +--- a/net/bluetooth/hidp/core.c ++++ b/net/bluetooth/hidp/core.c +@@ -1318,13 +1318,14 @@ int hidp_connection_add(struct hidp_connadd_req *req, + { + struct hidp_session *session; + struct l2cap_conn *conn; +- struct l2cap_chan *chan = l2cap_pi(ctrl_sock->sk)->chan; ++ struct l2cap_chan *chan; + int ret; + + ret = hidp_verify_sockets(ctrl_sock, intr_sock); + if (ret) + return ret; + ++ chan = l2cap_pi(ctrl_sock->sk)->chan; + conn = NULL; + l2cap_chan_lock(chan); + if (chan->conn) diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c -index 14ca8ae..262d49a 100644 +index b6f9777..36d3039 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c -@@ -3565,8 +3565,10 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, +@@ -3512,8 +3512,10 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, break; case L2CAP_CONF_RFC: @@ -100742,10 +100346,10 @@ index 14ca8ae..262d49a 100644 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) && rfc.mode != chan->mode) diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c -index 1884f72..b3b71f9 100644 +index 31f106e..323f606 100644 --- a/net/bluetooth/l2cap_sock.c +++ b/net/bluetooth/l2cap_sock.c -@@ -629,7 +629,8 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, +@@ -628,7 +628,8 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, struct sock *sk = sock->sk; struct l2cap_chan *chan = l2cap_pi(sk)->chan; struct l2cap_options opts; @@ -100755,7 +100359,7 @@ index 1884f72..b3b71f9 100644 u32 opt; BT_DBG("sk %p", sk); -@@ -656,7 +657,7 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, +@@ -655,7 +656,7 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, opts.max_tx = chan->max_tx; opts.txwin_size = chan->tx_win; @@ -100764,7 +100368,7 @@ index 1884f72..b3b71f9 100644 if (copy_from_user((char *) &opts, optval, len)) { err = -EFAULT; break; -@@ -743,7 +744,8 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, +@@ -742,7 +743,8 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, struct bt_security sec; struct bt_power pwr; struct l2cap_conn *conn; @@ -100774,7 +100378,7 @@ index 1884f72..b3b71f9 100644 u32 opt; BT_DBG("sk %p", sk); -@@ -767,7 +769,7 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, +@@ -766,7 +768,7 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, sec.level = BT_SECURITY_LOW; @@ -100836,11 +100440,24 @@ index 8e385a0..a5bdd8e 100644 tty_port_close(&dev->port, tty, filp); } +diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c +index e5ec470..cbfabd1 100644 +--- a/net/bridge/br_netlink.c ++++ b/net/bridge/br_netlink.c +@@ -564,7 +564,7 @@ static struct rtnl_af_ops br_af_ops = { + .get_link_af_size = br_get_link_af_size, + }; + +-struct rtnl_link_ops br_link_ops __read_mostly = { ++struct rtnl_link_ops br_link_ops = { + .kind = "bridge", + .priv_size = sizeof(struct net_bridge), + .setup = br_dev_setup, diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c -index 6d69631..b8fdc85 100644 +index d9a8c05..8dadc6c6 100644 --- a/net/bridge/netfilter/ebtables.c +++ b/net/bridge/netfilter/ebtables.c -@@ -1518,7 +1518,7 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) +@@ -1533,7 +1533,7 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len) tmp.valid_hooks = t->table->valid_hooks; } mutex_unlock(&ebt_mutex); @@ -100849,7 +100466,7 @@ index 6d69631..b8fdc85 100644 BUGPRINT("c2u Didn't work\n"); ret = -EFAULT; break; -@@ -2324,7 +2324,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd, +@@ -2339,7 +2339,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd, goto out; tmp.valid_hooks = t->valid_hooks; @@ -100858,7 +100475,7 @@ index 6d69631..b8fdc85 100644 ret = -EFAULT; break; } -@@ -2335,7 +2335,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd, +@@ -2350,7 +2350,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd, tmp.entries_size = t->table->entries_size; tmp.valid_hooks = t->table->valid_hooks; @@ -100910,6 +100527,19 @@ index f5afda1..dcf770a 100644 p->sequence_no); list_del(&p->list); goto out; +diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c +index 4589ff67..46d6b8f 100644 +--- a/net/caif/chnl_net.c ++++ b/net/caif/chnl_net.c +@@ -516,7 +516,7 @@ static const struct nla_policy ipcaif_policy[IFLA_CAIF_MAX + 1] = { + }; + + +-static struct rtnl_link_ops ipcaif_link_ops __read_mostly = { ++static struct rtnl_link_ops ipcaif_link_ops = { + .kind = "caif", + .priv_size = sizeof(struct chnl_net), + .setup = ipcaif_net_setup, diff --git a/net/can/af_can.c b/net/can/af_can.c index ce82337..5d17b4d 100644 --- a/net/can/af_can.c @@ -100981,7 +100611,7 @@ index 1a19b98..df2b4ec 100644 if (!can_dir) { printk(KERN_INFO "can: failed to create /proc/net/can . " diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c -index 9f02369..e6160e9 100644 +index 8d1653c..77ad145 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c @@ -188,7 +188,7 @@ static void con_fault(struct ceph_connection *con); @@ -101156,7 +100786,7 @@ index fdbc9a8..cd6972c 100644 return err; diff --git a/net/core/dev.c b/net/core/dev.c -index cf8a95f..2837211 100644 +index 945bbd0..8b1a370 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1683,14 +1683,14 @@ int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb) @@ -101176,25 +100806,16 @@ index cf8a95f..2837211 100644 kfree_skb(skb); return NET_RX_DROP; } -@@ -2487,7 +2487,7 @@ static int illegal_highdma(struct net_device *dev, struct sk_buff *skb) - - struct dev_gso_cb { - void (*destructor)(struct sk_buff *skb); --}; -+} __no_const; - - #define DEV_GSO_CB(skb) ((struct dev_gso_cb *)(skb)->cb) - -@@ -2952,7 +2952,7 @@ recursion_alert: - rc = -ENETDOWN; +@@ -2985,7 +2985,7 @@ recursion_alert: + drop: rcu_read_unlock_bh(); - atomic_long_inc(&dev->tx_dropped); + atomic_long_inc_unchecked(&dev->tx_dropped); - kfree_skb(skb); + kfree_skb_list(skb); return rc; out: -@@ -3296,7 +3296,7 @@ enqueue: +@@ -3328,7 +3328,7 @@ enqueue: local_irq_restore(flags); @@ -101203,16 +100824,16 @@ index cf8a95f..2837211 100644 kfree_skb(skb); return NET_RX_DROP; } -@@ -3373,7 +3373,7 @@ int netif_rx_ni(struct sk_buff *skb) +@@ -3405,7 +3405,7 @@ int netif_rx_ni(struct sk_buff *skb) } EXPORT_SYMBOL(netif_rx_ni); -static void net_tx_action(struct softirq_action *h) +static __latent_entropy void net_tx_action(void) { - struct softnet_data *sd = &__get_cpu_var(softnet_data); + struct softnet_data *sd = this_cpu_ptr(&softnet_data); -@@ -3706,7 +3706,7 @@ ncls: +@@ -3738,7 +3738,7 @@ ncls: ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev); } else { drop: @@ -101221,16 +100842,16 @@ index cf8a95f..2837211 100644 kfree_skb(skb); /* Jamal, now you will not able to escape explaining * me how you were going to use this. :-) -@@ -4426,7 +4426,7 @@ void netif_napi_del(struct napi_struct *napi) +@@ -4502,7 +4502,7 @@ void netif_napi_del(struct napi_struct *napi) } EXPORT_SYMBOL(netif_napi_del); -static void net_rx_action(struct softirq_action *h) +static __latent_entropy void net_rx_action(void) { - struct softnet_data *sd = &__get_cpu_var(softnet_data); + struct softnet_data *sd = this_cpu_ptr(&softnet_data); unsigned long time_limit = jiffies + 2; -@@ -6480,8 +6480,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, +@@ -6548,8 +6548,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, } else { netdev_stats_to_stats64(storage, &dev->stats); } @@ -101242,28 +100863,29 @@ index cf8a95f..2837211 100644 } EXPORT_SYMBOL(dev_get_stats); diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c -index cf999e0..c59a9754 100644 +index 72e899a..79a9409 100644 --- a/net/core/dev_ioctl.c +++ b/net/core/dev_ioctl.c -@@ -366,9 +366,13 @@ void dev_load(struct net *net, const char *name) +@@ -365,8 +365,13 @@ void dev_load(struct net *net, const char *name) + no_module = !dev; if (no_module && capable(CAP_NET_ADMIN)) no_module = request_module("netdev-%s", name); - if (no_module && capable(CAP_SYS_MODULE)) { +- if (no_module && capable(CAP_SYS_MODULE)) ++ if (no_module && capable(CAP_SYS_MODULE)) { +#ifdef CONFIG_GRKERNSEC_MODHARDEN + ___request_module(true, "grsec_modharden_netdev", "%s", name); +#else - if (!request_module("%s", name)) - pr_warn("Loading kernel module for a network device with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-%s instead.\n", - name); + request_module("%s", name); +#endif - } ++ } } EXPORT_SYMBOL(dev_load); + diff --git a/net/core/filter.c b/net/core/filter.c -index d814b8a..b5ab778 100644 +index 647b122..18a7ff6 100644 --- a/net/core/filter.c +++ b/net/core/filter.c -@@ -559,7 +559,11 @@ do_pass: +@@ -532,7 +532,11 @@ do_pass: /* Unkown instruction. */ default: @@ -101276,7 +100898,7 @@ index d814b8a..b5ab778 100644 } insn++; -@@ -606,7 +610,7 @@ static int check_load_and_stores(const struct sock_filter *filter, int flen) +@@ -576,7 +580,7 @@ static int check_load_and_stores(const struct sock_filter *filter, int flen) u16 *masks, memvalid = 0; /* One bit per cell, 16 cells */ int pc, ret = 0; @@ -101285,21 +100907,7 @@ index d814b8a..b5ab778 100644 masks = kmalloc_array(flen, sizeof(*masks), GFP_KERNEL); if (!masks) -@@ -933,7 +937,7 @@ static struct bpf_prog *bpf_migrate_filter(struct bpf_prog *fp) - - /* Expand fp for appending the new filter representation. */ - old_fp = fp; -- fp = krealloc(old_fp, bpf_prog_size(new_len), GFP_KERNEL); -+ fp = bpf_prog_realloc(old_fp, bpf_prog_size(new_len), 0); - if (!fp) { - /* The old_fp is still around in case we couldn't - * allocate new memory, so uncharge on that one. -@@ -1013,11 +1017,11 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog) - if (fprog->filter == NULL) - return -EINVAL; - -- fp = kmalloc(bpf_prog_size(fprog->len), GFP_KERNEL); -+ fp = bpf_prog_alloc(bpf_prog_size(fprog->len), 0); +@@ -987,7 +991,7 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog) if (!fp) return -ENOMEM; @@ -101308,30 +100916,6 @@ index d814b8a..b5ab778 100644 fp->len = fprog->len; /* Since unattached filters are not copied back to user -@@ -1069,12 +1073,12 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk) - if (fprog->filter == NULL) - return -EINVAL; - -- prog = kmalloc(bpf_fsize, GFP_KERNEL); -+ prog = bpf_prog_alloc(bpf_fsize, 0); - if (!prog) - return -ENOMEM; - - if (copy_from_user(prog->insns, fprog->filter, fsize)) { -- kfree(prog); -+ __bpf_prog_free(prog); - return -EFAULT; - } - -@@ -1082,7 +1086,7 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk) - - err = bpf_prog_store_orig_filter(prog, fprog); - if (err) { -- kfree(prog); -+ __bpf_prog_free(prog); - return -ENOMEM; - } - diff --git a/net/core/flow.c b/net/core/flow.c index a0348fd..6951c76 100644 --- a/net/core/flow.c @@ -101472,7 +101056,7 @@ index 9dd0669..c52fb1b 100644 static DEVICE_ATTR_RO(carrier_changes); diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c -index 7c6b51a..e9dd57f 100644 +index 7f15517..f7d65c0 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -445,7 +445,7 @@ static int __register_pernet_operations(struct list_head *list, @@ -101512,10 +101096,10 @@ index 7c6b51a..e9dd57f 100644 return error; } diff --git a/net/core/netpoll.c b/net/core/netpoll.c -index 907fb5e..8260f040b 100644 +index e6645b4..43e1af9 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c -@@ -382,7 +382,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len) +@@ -379,7 +379,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len) struct udphdr *udph; struct iphdr *iph; struct ethhdr *eth; @@ -101524,7 +101108,7 @@ index 907fb5e..8260f040b 100644 struct ipv6hdr *ip6h; udp_len = len + sizeof(*udph); -@@ -453,7 +453,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len) +@@ -450,7 +450,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len) put_unaligned(0x45, (unsigned char *)iph); iph->tos = 0; put_unaligned(htons(ip_len), &(iph->tot_len)); @@ -101534,10 +101118,10 @@ index 907fb5e..8260f040b 100644 iph->ttl = 64; iph->protocol = IPPROTO_UDP; diff --git a/net/core/pktgen.c b/net/core/pktgen.c -index 8b849dd..cd88bfc 100644 +index 443256b..bbff424 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c -@@ -3723,7 +3723,7 @@ static int __net_init pg_net_init(struct net *net) +@@ -3753,7 +3753,7 @@ static int __net_init pg_net_init(struct net *net) pn->net = net; INIT_LIST_HEAD(&pn->pktgen_threads); pn->pktgen_exiting = false; @@ -101547,7 +101131,7 @@ index 8b849dd..cd88bfc 100644 pr_warn("cannot create /proc/net/%s\n", PG_PROC_DIR); return -ENODEV; diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c -index f0493e3..0f43f7a 100644 +index 76321ea..3129bd6 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -58,7 +58,7 @@ struct rtnl_link { @@ -101635,47 +101219,10 @@ index b442e7e..6f5b5a2 100644 { struct socket *sock; diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index 8d28969..4d36260 100644 +index 32e31c2..e981248 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c -@@ -360,18 +360,29 @@ refill: - goto end; - } - nc->frag.size = PAGE_SIZE << order; --recycle: -- atomic_set(&nc->frag.page->_count, NETDEV_PAGECNT_MAX_BIAS); -+ /* Even if we own the page, we do not use atomic_set(). -+ * This would break get_page_unless_zero() users. -+ */ -+ atomic_add(NETDEV_PAGECNT_MAX_BIAS - 1, -+ &nc->frag.page->_count); - nc->pagecnt_bias = NETDEV_PAGECNT_MAX_BIAS; - nc->frag.offset = 0; - } - - if (nc->frag.offset + fragsz > nc->frag.size) { -- /* avoid unnecessary locked operations if possible */ -- if ((atomic_read(&nc->frag.page->_count) == nc->pagecnt_bias) || -- atomic_sub_and_test(nc->pagecnt_bias, &nc->frag.page->_count)) -- goto recycle; -- goto refill; -+ if (atomic_read(&nc->frag.page->_count) != nc->pagecnt_bias) { -+ if (!atomic_sub_and_test(nc->pagecnt_bias, -+ &nc->frag.page->_count)) -+ goto refill; -+ /* OK, page count is 0, we can safely set it */ -+ atomic_set(&nc->frag.page->_count, -+ NETDEV_PAGECNT_MAX_BIAS); -+ } else { -+ atomic_add(NETDEV_PAGECNT_MAX_BIAS - nc->pagecnt_bias, -+ &nc->frag.page->_count); -+ } -+ nc->pagecnt_bias = NETDEV_PAGECNT_MAX_BIAS; -+ nc->frag.offset = 0; - } - - data = page_address(nc->frag.page) + nc->frag.offset; -@@ -2011,7 +2022,7 @@ EXPORT_SYMBOL(__skb_checksum); +@@ -2025,7 +2025,7 @@ EXPORT_SYMBOL(__skb_checksum); __wsum skb_checksum(const struct sk_buff *skb, int offset, int len, __wsum csum) { @@ -101684,7 +101231,7 @@ index 8d28969..4d36260 100644 .update = csum_partial_ext, .combine = csum_block_add_ext, }; -@@ -3237,13 +3248,15 @@ void __init skb_init(void) +@@ -3255,12 +3255,14 @@ void __init skb_init(void) skbuff_head_cache = kmem_cache_create("skbuff_head_cache", sizeof(struct sk_buff), 0, @@ -101693,8 +101240,7 @@ index 8d28969..4d36260 100644 + SLAB_NO_SANITIZE, NULL); skbuff_fclone_cache = kmem_cache_create("skbuff_fclone_cache", - (2*sizeof(struct sk_buff)) + - sizeof(atomic_t), + sizeof(struct sk_buff_fclones), 0, - SLAB_HWCACHE_ALIGN|SLAB_PANIC, + SLAB_HWCACHE_ALIGN|SLAB_PANIC| @@ -101703,10 +101249,10 @@ index 8d28969..4d36260 100644 } diff --git a/net/core/sock.c b/net/core/sock.c -index 9c3f823..bd8c884 100644 +index 15e0c67..0310f4a 100644 --- a/net/core/sock.c +++ b/net/core/sock.c -@@ -442,7 +442,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) +@@ -441,7 +441,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) struct sk_buff_head *list = &sk->sk_receive_queue; if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf) { @@ -101715,7 +101261,7 @@ index 9c3f823..bd8c884 100644 trace_sock_rcvqueue_full(sk, skb); return -ENOMEM; } -@@ -452,7 +452,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) +@@ -451,7 +451,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) return err; if (!sk_rmem_schedule(sk, skb, skb->truesize)) { @@ -101724,7 +101270,7 @@ index 9c3f823..bd8c884 100644 return -ENOBUFS; } -@@ -472,7 +472,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) +@@ -464,7 +464,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) skb_dst_force(skb); spin_lock_irqsave(&list->lock, flags); @@ -101733,7 +101279,7 @@ index 9c3f823..bd8c884 100644 __skb_queue_tail(list, skb); spin_unlock_irqrestore(&list->lock, flags); -@@ -492,7 +492,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested) +@@ -484,7 +484,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested) skb->dev = NULL; if (sk_rcvqueues_full(sk, sk->sk_rcvbuf)) { @@ -101742,7 +101288,7 @@ index 9c3f823..bd8c884 100644 goto discard_and_relse; } if (nested) -@@ -510,7 +510,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested) +@@ -502,7 +502,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested) mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_); } else if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) { bh_unlock_sock(sk); @@ -101751,7 +101297,7 @@ index 9c3f823..bd8c884 100644 goto discard_and_relse; } -@@ -999,12 +999,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname, +@@ -991,12 +991,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname, struct timeval tm; } v; @@ -101767,7 +101313,7 @@ index 9c3f823..bd8c884 100644 return -EINVAL; memset(&v, 0, sizeof(v)); -@@ -1142,11 +1142,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname, +@@ -1134,11 +1134,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname, case SO_PEERNAME: { @@ -101781,7 +101327,7 @@ index 9c3f823..bd8c884 100644 return -EINVAL; if (copy_to_user(optval, address, len)) return -EFAULT; -@@ -1227,7 +1227,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname, +@@ -1219,7 +1219,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname, if (len > lv) len = lv; @@ -101790,16 +101336,7 @@ index 9c3f823..bd8c884 100644 return -EFAULT; lenout: if (put_user(len, optlen)) -@@ -1723,6 +1723,8 @@ EXPORT_SYMBOL(sock_kmalloc); - */ - void sock_kfree_s(struct sock *sk, void *mem, int size) - { -+ if (WARN_ON_ONCE(!mem)) -+ return; - kfree(mem); - atomic_sub(size, &sk->sk_omem_alloc); - } -@@ -2369,7 +2371,7 @@ void sock_init_data(struct socket *sock, struct sock *sk) +@@ -2315,7 +2315,7 @@ void sock_init_data(struct socket *sock, struct sock *sk) */ smp_wmb(); atomic_set(&sk->sk_refcnt, 1); @@ -101808,15 +101345,15 @@ index 9c3f823..bd8c884 100644 } EXPORT_SYMBOL(sock_init_data); -@@ -2497,6 +2499,7 @@ void sock_enable_timestamp(struct sock *sk, int flag) +@@ -2443,6 +2443,7 @@ void sock_enable_timestamp(struct sock *sk, int flag) int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len, int level, int type) { + struct sock_extended_err ee; struct sock_exterr_skb *serr; - struct sk_buff *skb, *skb2; + struct sk_buff *skb; int copied, err; -@@ -2518,7 +2521,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len, +@@ -2464,7 +2465,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len, sock_recv_timestamp(msg, sk, skb); serr = SKB_EXT_ERR(skb); @@ -101967,10 +101504,10 @@ index cf9cd13..50683950 100644 .exit = sysctl_core_net_exit, }; diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c -index ae011b4..d2d18bf 100644 +index 25733d5..b9360f0 100644 --- a/net/decnet/af_decnet.c +++ b/net/decnet/af_decnet.c -@@ -465,6 +465,7 @@ static struct proto dn_proto = { +@@ -466,6 +466,7 @@ static struct proto dn_proto = { .sysctl_rmem = sysctl_decnet_rmem, .max_header = DN_MAX_NSP_DATA_HEADER + 64, .obj_size = sizeof(struct dn_sock), @@ -101979,10 +101516,10 @@ index ae011b4..d2d18bf 100644 static struct sock *dn_alloc_sock(struct net *net, struct socket *sock, gfp_t gfp) diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c -index 3b726f3..1af6368 100644 +index 4400da7..3429972 100644 --- a/net/decnet/dn_dev.c +++ b/net/decnet/dn_dev.c -@@ -200,7 +200,7 @@ static struct dn_dev_sysctl_table { +@@ -201,7 +201,7 @@ static struct dn_dev_sysctl_table { .extra1 = &min_t3, .extra2 = &max_t3 }, @@ -102013,8 +101550,34 @@ index 5325b54..a0d4d69 100644 return -EFAULT; *lenp = len; +diff --git a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c +index a2c7e4c..3dc9f67 100644 +--- a/net/hsr/hsr_netlink.c ++++ b/net/hsr/hsr_netlink.c +@@ -102,7 +102,7 @@ nla_put_failure: + return -EMSGSIZE; + } + +-static struct rtnl_link_ops hsr_link_ops __read_mostly = { ++static struct rtnl_link_ops hsr_link_ops = { + .kind = "hsr", + .maxtype = IFLA_HSR_MAX, + .policy = hsr_policy, +diff --git a/net/ieee802154/6lowpan_rtnl.c b/net/ieee802154/6lowpan_rtnl.c +index 4413629..dea596a 100644 +--- a/net/ieee802154/6lowpan_rtnl.c ++++ b/net/ieee802154/6lowpan_rtnl.c +@@ -635,7 +635,7 @@ static void lowpan_dellink(struct net_device *dev, struct list_head *head) + dev_put(real_dev); + } + +-static struct rtnl_link_ops lowpan_link_ops __read_mostly = { ++static struct rtnl_link_ops lowpan_link_ops = { + .kind = "lowpan", + .priv_size = sizeof(struct lowpan_dev_info), + .setup = lowpan_setup, diff --git a/net/ieee802154/reassembly.c b/net/ieee802154/reassembly.c -index 32755cb..236d827 100644 +index 7cfcd68..84ca5b7 100644 --- a/net/ieee802154/reassembly.c +++ b/net/ieee802154/reassembly.c @@ -433,14 +433,13 @@ static struct ctl_table lowpan_frags_ctl_table[] = { @@ -102057,11 +101620,44 @@ index 32755cb..236d827 100644 err_alloc: return -ENOMEM; } +diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c +index e67da4e..da217942 100644 +--- a/net/ipv4/af_inet.c ++++ b/net/ipv4/af_inet.c +@@ -1392,7 +1392,7 @@ int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len) + return ip_recv_error(sk, msg, len, addr_len); + #if IS_ENABLED(CONFIG_IPV6) + if (sk->sk_family == AF_INET6) +- return pingv6_ops.ipv6_recv_error(sk, msg, len, addr_len); ++ return pingv6_ops->ipv6_recv_error(sk, msg, len, addr_len); + #endif + return -EINVAL; + } diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c -index 214882e..f958b50 100644 +index 214882e..ec032f6 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c -@@ -1548,7 +1548,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb) +@@ -69,7 +69,8 @@ + + static struct ipv4_devconf ipv4_devconf = { + .data = { +- [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1, ++ [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 0, ++ [IPV4_DEVCONF_RP_FILTER - 1] = 1, + [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1, + [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1, + [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1, +@@ -80,7 +81,8 @@ static struct ipv4_devconf ipv4_devconf = { + + static struct ipv4_devconf ipv4_devconf_dflt = { + .data = { +- [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1, ++ [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 0, ++ [IPV4_DEVCONF_RP_FILTER - 1] = 1, + [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1, + [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1, + [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1, +@@ -1548,7 +1550,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb) idx = 0; head = &net->dev_index_head[h]; rcu_read_lock(); @@ -102070,7 +101666,7 @@ index 214882e..f958b50 100644 net->dev_base_seq; hlist_for_each_entry_rcu(dev, head, index_hlist) { if (idx < s_idx) -@@ -1866,7 +1866,7 @@ static int inet_netconf_dump_devconf(struct sk_buff *skb, +@@ -1866,7 +1868,7 @@ static int inet_netconf_dump_devconf(struct sk_buff *skb, idx = 0; head = &net->dev_index_head[h]; rcu_read_lock(); @@ -102079,7 +101675,7 @@ index 214882e..f958b50 100644 net->dev_base_seq; hlist_for_each_entry_rcu(dev, head, index_hlist) { if (idx < s_idx) -@@ -2101,7 +2101,7 @@ static int ipv4_doint_and_flush(struct ctl_table *ctl, int write, +@@ -2101,7 +2103,7 @@ static int ipv4_doint_and_flush(struct ctl_table *ctl, int write, #define DEVINET_SYSCTL_FLUSHING_ENTRY(attr, name) \ DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, ipv4_doint_and_flush) @@ -102088,7 +101684,7 @@ index 214882e..f958b50 100644 struct ctl_table_header *sysctl_header; struct ctl_table devinet_vars[__IPV4_DEVCONF_MAX]; } devinet_sysctl = { -@@ -2233,7 +2233,7 @@ static __net_init int devinet_init_net(struct net *net) +@@ -2233,7 +2235,7 @@ static __net_init int devinet_init_net(struct net *net) int err; struct ipv4_devconf *all, *dflt; #ifdef CONFIG_SYSCTL @@ -102097,7 +101693,7 @@ index 214882e..f958b50 100644 struct ctl_table_header *forw_hdr; #endif -@@ -2251,7 +2251,7 @@ static __net_init int devinet_init_net(struct net *net) +@@ -2251,7 +2253,7 @@ static __net_init int devinet_init_net(struct net *net) goto err_alloc_dflt; #ifdef CONFIG_SYSCTL @@ -102106,7 +101702,7 @@ index 214882e..f958b50 100644 if (tbl == NULL) goto err_alloc_ctl; -@@ -2271,7 +2271,10 @@ static __net_init int devinet_init_net(struct net *net) +@@ -2271,7 +2273,10 @@ static __net_init int devinet_init_net(struct net *net) goto err_reg_dflt; err = -ENOMEM; @@ -102118,7 +101714,7 @@ index 214882e..f958b50 100644 if (forw_hdr == NULL) goto err_reg_ctl; net->ipv4.forw_hdr = forw_hdr; -@@ -2287,8 +2290,7 @@ err_reg_ctl: +@@ -2287,8 +2292,7 @@ err_reg_ctl: err_reg_dflt: __devinet_sysctl_unregister(all); err_reg_all: @@ -102129,10 +101725,10 @@ index 214882e..f958b50 100644 #endif if (dflt != &ipv4_devconf_dflt) diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c -index 255aa99..45c78f8 100644 +index 23104a3..9f5570b 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c -@@ -1015,12 +1015,12 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event, +@@ -1017,12 +1017,12 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event, #ifdef CONFIG_IP_ROUTE_MULTIPATH fib_sync_up(dev); #endif @@ -102147,7 +101743,7 @@ index 255aa99..45c78f8 100644 if (ifa->ifa_dev->ifa_list == NULL) { /* Last address was deleted from this interface. * Disable IP. -@@ -1058,7 +1058,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo +@@ -1060,7 +1060,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo #ifdef CONFIG_IP_ROUTE_MULTIPATH fib_sync_up(dev); #endif @@ -102157,10 +101753,10 @@ index 255aa99..45c78f8 100644 break; case NETDEV_DOWN: diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c -index 4a74ea8..32335a7 100644 +index f99f41b..1879da9 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c -@@ -768,7 +768,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh) +@@ -770,7 +770,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh) nh->nh_saddr = inet_select_addr(nh->nh_dev, nh->nh_gw, nh->nh_parent->fib_scope); @@ -102169,29 +101765,8 @@ index 4a74ea8..32335a7 100644 return nh->nh_saddr; } -diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c -index dd73bea..a2eec02 100644 ---- a/net/ipv4/gre_offload.c -+++ b/net/ipv4/gre_offload.c -@@ -59,13 +59,13 @@ static struct sk_buff *gre_gso_segment(struct sk_buff *skb, - if (csum) - skb->encap_hdr_csum = 1; - -- if (unlikely(!pskb_may_pull(skb, ghl))) -- goto out; -- - /* setup inner skb. */ - skb->protocol = greh->protocol; - skb->encapsulation = 0; - -+ if (unlikely(!pskb_may_pull(skb, ghl))) -+ goto out; -+ - __skb_pull(skb, ghl); - skb_reset_mac_header(skb); - skb_set_network_header(skb, skb_inner_network_offset(skb)); diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c -index 43116e8..ba0916a8 100644 +index 9111a4e..3576905 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c @@ -18,6 +18,7 @@ @@ -102221,10 +101796,10 @@ index 43116e8..ba0916a8 100644 inet_twsk_deschedule(tw, death_row); while (twrefcnt) { diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c -index bd5f592..e80e605 100644 +index 241afd7..31b95d5 100644 --- a/net/ipv4/inetpeer.c +++ b/net/ipv4/inetpeer.c -@@ -482,7 +482,7 @@ relookup: +@@ -461,7 +461,7 @@ relookup: if (p) { p->daddr = *daddr; atomic_set(&p->refcnt, 1); @@ -102234,7 +101809,7 @@ index bd5f592..e80e605 100644 p->rate_tokens = 0; /* 60*HZ is arbitrary, but chosen enough high so that the first diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c -index 15f0e2b..8cf8177 100644 +index 2811cc1..ad5a534 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c @@ -268,7 +268,7 @@ static inline int ip_frag_too_far(struct ipq *qp) @@ -102285,7 +101860,7 @@ index 15f0e2b..8cf8177 100644 return -ENOMEM; } diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c -index 9b84254..c776611 100644 +index 12055fd..df852c4 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -115,7 +115,7 @@ static bool log_ecn_error = true; @@ -102297,8 +101872,8 @@ index 9b84254..c776611 100644 static int ipgre_tunnel_init(struct net_device *dev); static int ipgre_net_id __read_mostly; -@@ -733,7 +733,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = { - [IFLA_GRE_PMTUDISC] = { .type = NLA_U8 }, +@@ -815,7 +815,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = { + [IFLA_GRE_ENCAP_DPORT] = { .type = NLA_U16 }, }; -static struct rtnl_link_ops ipgre_link_ops __read_mostly = { @@ -102306,7 +101881,7 @@ index 9b84254..c776611 100644 .kind = "gre", .maxtype = IFLA_GRE_MAX, .policy = ipgre_policy, -@@ -747,7 +747,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = { +@@ -829,7 +829,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = { .fill_info = ipgre_fill_info, }; @@ -102340,24 +101915,11 @@ index 3d4da2c..40f9c29 100644 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, 0); } -diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c -index c43a1e2..73cbbe1 100644 ---- a/net/ipv4/ip_output.c -+++ b/net/ipv4/ip_output.c -@@ -231,7 +231,7 @@ static int ip_finish_output_gso(struct sk_buff *skb) - */ - features = netif_skb_features(skb); - segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK); -- if (IS_ERR(segs)) { -+ if (IS_ERR_OR_NULL(segs)) { - kfree_skb(skb); - return -ENOMEM; - } diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c -index 2407e5d..edc2f1a 100644 +index 9daf217..dc6972d 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c -@@ -1188,7 +1188,8 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname, +@@ -1177,7 +1177,8 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname, len = min_t(unsigned int, len, opt->optlen); if (put_user(len, optlen)) return -EFAULT; @@ -102367,7 +101929,7 @@ index 2407e5d..edc2f1a 100644 return -EFAULT; return 0; } -@@ -1319,7 +1320,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname, +@@ -1308,7 +1309,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname, if (sk->sk_type != SOCK_STREAM) return -ENOPROTOOPT; @@ -102377,7 +101939,7 @@ index 2407e5d..edc2f1a 100644 msg.msg_flags = flags; diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c -index e453cb7..3c8d952 100644 +index 1a7e979..fd05aa4 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c @@ -45,7 +45,7 @@ @@ -102399,10 +101961,10 @@ index e453cb7..3c8d952 100644 .maxtype = IFLA_VTI_MAX, .policy = vti_policy, diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c -index 5bbef4f..5bc4fb6 100644 +index 648fa14..97864d0 100644 --- a/net/ipv4/ipconfig.c +++ b/net/ipv4/ipconfig.c -@@ -332,7 +332,7 @@ static int __init ic_devinet_ioctl(unsigned int cmd, struct ifreq *arg) +@@ -333,7 +333,7 @@ static int __init ic_devinet_ioctl(unsigned int cmd, struct ifreq *arg) mm_segment_t oldfs = get_fs(); set_fs(get_ds()); @@ -102411,7 +101973,7 @@ index 5bbef4f..5bc4fb6 100644 set_fs(oldfs); return res; } -@@ -343,7 +343,7 @@ static int __init ic_dev_ioctl(unsigned int cmd, struct ifreq *arg) +@@ -344,7 +344,7 @@ static int __init ic_dev_ioctl(unsigned int cmd, struct ifreq *arg) mm_segment_t oldfs = get_fs(); set_fs(get_ds()); @@ -102420,7 +101982,7 @@ index 5bbef4f..5bc4fb6 100644 set_fs(oldfs); return res; } -@@ -354,7 +354,7 @@ static int __init ic_route_ioctl(unsigned int cmd, struct rtentry *arg) +@@ -355,7 +355,7 @@ static int __init ic_route_ioctl(unsigned int cmd, struct rtentry *arg) mm_segment_t oldfs = get_fs(); set_fs(get_ds()); @@ -102430,7 +101992,7 @@ index 5bbef4f..5bc4fb6 100644 return res; } diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c -index 62eaa00..29b2dc2 100644 +index 37096d6..86abb03 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c @@ -124,7 +124,7 @@ MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN"); @@ -102442,8 +102004,8 @@ index 62eaa00..29b2dc2 100644 static int ipip_err(struct sk_buff *skb, u32 info) { -@@ -409,7 +409,7 @@ static const struct nla_policy ipip_policy[IFLA_IPTUN_MAX + 1] = { - [IFLA_IPTUN_PMTUDISC] = { .type = NLA_U8 }, +@@ -487,7 +487,7 @@ static const struct nla_policy ipip_policy[IFLA_IPTUN_MAX + 1] = { + [IFLA_IPTUN_ENCAP_DPORT] = { .type = NLA_U16 }, }; -static struct rtnl_link_ops ipip_link_ops __read_mostly = { @@ -102550,7 +102112,7 @@ index 99e810f..3711b81 100644 case IPT_SO_GET_ENTRIES: diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c -index 2510c02..cfb34fa 100644 +index e90f83a..3e6acca 100644 --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c @@ -720,7 +720,7 @@ static int clusterip_net_init(struct net *net) @@ -102563,7 +102125,7 @@ index 2510c02..cfb34fa 100644 pr_err("Unable to proc dir entry\n"); return -ENOMEM; diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c -index a3c59a0..ec620a50 100644 +index 5d740cc..b2842b9 100644 --- a/net/ipv4/ping.c +++ b/net/ipv4/ping.c @@ -59,7 +59,7 @@ struct ping_table { @@ -102575,7 +102137,7 @@ index a3c59a0..ec620a50 100644 EXPORT_SYMBOL_GPL(pingv6_ops); static u16 ping_port_rover; -@@ -348,7 +348,7 @@ static int ping_check_bind_addr(struct sock *sk, struct inet_sock *isk, +@@ -350,7 +350,7 @@ static int ping_check_bind_addr(struct sock *sk, struct inet_sock *isk, return -ENODEV; } } @@ -102584,7 +102146,7 @@ index a3c59a0..ec620a50 100644 scoped); rcu_read_unlock(); -@@ -556,7 +556,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info) +@@ -558,7 +558,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info) } #if IS_ENABLED(CONFIG_IPV6) } else if (skb->protocol == htons(ETH_P_IPV6)) { @@ -102593,7 +102155,7 @@ index a3c59a0..ec620a50 100644 #endif } -@@ -574,7 +574,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info) +@@ -576,7 +576,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info) info, (u8 *)icmph); #if IS_ENABLED(CONFIG_IPV6) } else if (family == AF_INET6) { @@ -102602,16 +102164,7 @@ index a3c59a0..ec620a50 100644 info, (u8 *)icmph); #endif } -@@ -858,7 +858,7 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, - return ip_recv_error(sk, msg, len, addr_len); - #if IS_ENABLED(CONFIG_IPV6) - } else if (family == AF_INET6) { -- return pingv6_ops.ipv6_recv_error(sk, msg, len, -+ return pingv6_ops->ipv6_recv_error(sk, msg, len, - addr_len); - #endif - } -@@ -916,10 +916,10 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, +@@ -910,10 +910,10 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, } if (inet6_sk(sk)->rxopt.all) @@ -102624,7 +102177,7 @@ index a3c59a0..ec620a50 100644 else if (skb->protocol == htons(ETH_P_IP) && isk->cmsg_flags) ip_cmsg_recv(msg, skb); #endif -@@ -1111,7 +1111,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f, +@@ -1105,7 +1105,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f, from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)), 0, sock_i_ino(sp), atomic_read(&sp->sk_refcnt), sp, @@ -102689,7 +102242,7 @@ index 739db31..74f0210 100644 static int raw_seq_show(struct seq_file *seq, void *v) diff --git a/net/ipv4/route.c b/net/ipv4/route.c -index 29836f8..bd1e2ba 100644 +index 6a2155b..d426880 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -228,7 +228,7 @@ static const struct seq_operations rt_cache_seq_ops = { @@ -102810,7 +102363,7 @@ index 29836f8..bd1e2ba 100644 #ifdef CONFIG_IP_ROUTE_CLASSID ip_rt_acct = __alloc_percpu(256 * sizeof(struct ip_rt_acct), __alignof__(struct ip_rt_acct)); diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c -index 79a007c..5023029 100644 +index b3c53c8..35cc18d 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -60,7 +60,7 @@ static int ipv4_local_port_range(struct ctl_table *table, int write, @@ -102867,7 +102420,7 @@ index 79a007c..5023029 100644 struct tcp_fastopen_context *ctxt; int ret; u32 user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */ -@@ -857,13 +857,12 @@ static struct ctl_table ipv4_net_table[] = { +@@ -874,13 +874,12 @@ static struct ctl_table ipv4_net_table[] = { static __net_init int ipv4_sysctl_init_net(struct net *net) { @@ -102883,7 +102436,7 @@ index 79a007c..5023029 100644 if (table == NULL) goto err_alloc; -@@ -872,7 +871,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net) +@@ -889,7 +888,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net) table[i].data += (void *)net - (void *)&init_net; } @@ -102896,10 +102449,10 @@ index 79a007c..5023029 100644 goto err_reg; diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c -index a906e02..f3b6a0f 100644 +index d107ee2..bcebf11 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -755,7 +755,7 @@ static void tcp_update_pacing_rate(struct sock *sk) +@@ -765,7 +765,7 @@ static void tcp_update_pacing_rate(struct sock *sk) * without any lock. We want to make sure compiler wont store * intermediate values in this location. */ @@ -102908,7 +102461,7 @@ index a906e02..f3b6a0f 100644 sk->sk_max_pacing_rate); } -@@ -4488,7 +4488,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb, +@@ -4527,7 +4527,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb, * simplifies code) */ static void @@ -102917,7 +102470,7 @@ index a906e02..f3b6a0f 100644 struct sk_buff *head, struct sk_buff *tail, u32 start, u32 end) { -@@ -5546,6 +5546,7 @@ discard: +@@ -5506,6 +5506,7 @@ discard: tcp_paws_reject(&tp->rx_opt, 0)) goto discard_and_undo; @@ -102925,7 +102478,7 @@ index a906e02..f3b6a0f 100644 if (th->syn) { /* We see SYN without ACK. It is attempt of * simultaneous connect with crossed SYNs. -@@ -5596,6 +5597,7 @@ discard: +@@ -5556,6 +5557,7 @@ discard: goto discard; #endif } @@ -102933,7 +102486,7 @@ index a906e02..f3b6a0f 100644 /* "fifth, if neither of the SYN or RST bits is set then * drop the segment and return." */ -@@ -5642,7 +5644,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, +@@ -5602,7 +5604,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, goto discard; if (th->syn) { @@ -102943,13 +102496,13 @@ index a906e02..f3b6a0f 100644 if (icsk->icsk_af_ops->conn_request(sk, skb) < 0) return 1; diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c -index 3f49eae..bde687a 100644 +index ef7089c..a3e65fb 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c -@@ -91,6 +91,10 @@ int sysctl_tcp_low_latency __read_mostly; +@@ -89,6 +89,10 @@ int sysctl_tcp_tw_reuse __read_mostly; + int sysctl_tcp_low_latency __read_mostly; EXPORT_SYMBOL(sysctl_tcp_low_latency); - +#ifdef CONFIG_GRKERNSEC_BLACKHOLE +extern int grsec_enable_blackhole; +#endif @@ -102957,7 +102510,7 @@ index 3f49eae..bde687a 100644 #ifdef CONFIG_TCP_MD5SIG static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key, __be32 daddr, __be32 saddr, const struct tcphdr *th); -@@ -1487,6 +1491,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) +@@ -1469,6 +1473,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) return 0; reset: @@ -102990,7 +102543,7 @@ index 3f49eae..bde687a 100644 if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) { NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP); -@@ -1704,6 +1718,10 @@ csum_error: +@@ -1694,6 +1708,10 @@ csum_error: bad_packet: TCP_INC_STATS_BH(net, TCP_MIB_INERRS); } else { @@ -103002,7 +102555,7 @@ index 3f49eae..bde687a 100644 } diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c -index 1649988..6251843 100644 +index 63d2680..2db9d6b 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c @@ -27,6 +27,10 @@ @@ -103016,7 +102569,7 @@ index 1649988..6251843 100644 int sysctl_tcp_syncookies __read_mostly = 1; EXPORT_SYMBOL(sysctl_tcp_syncookies); -@@ -740,7 +744,10 @@ embryonic_reset: +@@ -739,7 +743,10 @@ embryonic_reset: * avoid becoming vulnerable to outside attack aiming at * resetting legit local connections. */ @@ -103029,10 +102582,10 @@ index 1649988..6251843 100644 reqsk_fastopen_remove(sk, req, true); tcp_reset(sk); diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c -index 3b66610..bfbe23a 100644 +index ebf5ff5..4d1ff32 100644 --- a/net/ipv4/tcp_probe.c +++ b/net/ipv4/tcp_probe.c -@@ -238,7 +238,7 @@ static ssize_t tcpprobe_read(struct file *file, char __user *buf, +@@ -236,7 +236,7 @@ static ssize_t tcpprobe_read(struct file *file, char __user *buf, if (cnt + width >= len) break; @@ -103042,7 +102595,7 @@ index 3b66610..bfbe23a 100644 cnt += width; } diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c -index df90cd1..9ab2c9b 100644 +index 9b21ae8..4eb67df 100644 --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c @@ -22,6 +22,10 @@ @@ -103056,7 +102609,7 @@ index df90cd1..9ab2c9b 100644 int sysctl_tcp_syn_retries __read_mostly = TCP_SYN_RETRIES; int sysctl_tcp_synack_retries __read_mostly = TCP_SYNACK_RETRIES; int sysctl_tcp_keepalive_time __read_mostly = TCP_KEEPALIVE_TIME; -@@ -192,6 +196,13 @@ static int tcp_write_timeout(struct sock *sk) +@@ -191,6 +195,13 @@ static int tcp_write_timeout(struct sock *sk) } } @@ -103071,7 +102624,7 @@ index df90cd1..9ab2c9b 100644 syn_set ? 0 : icsk->icsk_user_timeout, syn_set)) { /* Has it gone just too far? */ diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c -index f57c0e4..cf24bd0 100644 +index cd0db54..93a6518 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -87,6 +87,7 @@ @@ -103082,7 +102635,7 @@ index f57c0e4..cf24bd0 100644 #include #include #include -@@ -113,6 +114,10 @@ +@@ -114,6 +115,10 @@ #include #include "udp_impl.h" @@ -103093,7 +102646,7 @@ index f57c0e4..cf24bd0 100644 struct udp_table udp_table __read_mostly; EXPORT_SYMBOL(udp_table); -@@ -594,6 +599,9 @@ static inline bool __udp_is_mcast_sock(struct net *net, struct sock *sk, +@@ -595,6 +600,9 @@ static inline bool __udp_is_mcast_sock(struct net *net, struct sock *sk, return true; } @@ -103103,7 +102656,7 @@ index f57c0e4..cf24bd0 100644 /* * This routine is called by the ICMP module when it gets some * sort of error condition. If err < 0 then the socket should -@@ -931,9 +939,18 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, +@@ -932,9 +940,18 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, dport = usin->sin_port; if (dport == 0) return -EINVAL; @@ -103122,7 +102675,7 @@ index f57c0e4..cf24bd0 100644 daddr = inet->inet_daddr; dport = inet->inet_dport; /* Open fast path for connected socket. -@@ -1181,7 +1198,7 @@ static unsigned int first_packet_length(struct sock *sk) +@@ -1182,7 +1199,7 @@ static unsigned int first_packet_length(struct sock *sk) IS_UDPLITE(sk)); UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, IS_UDPLITE(sk)); @@ -103131,7 +102684,7 @@ index f57c0e4..cf24bd0 100644 __skb_unlink(skb, rcvq); __skb_queue_tail(&list_kill, skb); } -@@ -1261,6 +1278,10 @@ try_again: +@@ -1262,6 +1279,10 @@ try_again: if (!skb) goto out; @@ -103142,7 +102695,7 @@ index f57c0e4..cf24bd0 100644 ulen = skb->len - sizeof(struct udphdr); copied = len; if (copied > ulen) -@@ -1294,7 +1315,7 @@ try_again: +@@ -1295,7 +1316,7 @@ try_again: if (unlikely(err)) { trace_kfree_skb(skb, udp_recvmsg); if (!peeked) { @@ -103151,7 +102704,7 @@ index f57c0e4..cf24bd0 100644 UDP_INC_STATS_USER(sock_net(sk), UDP_MIB_INERRORS, is_udplite); } -@@ -1591,7 +1612,7 @@ csum_error: +@@ -1592,7 +1613,7 @@ csum_error: UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite); drop: UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite); @@ -103160,7 +102713,7 @@ index f57c0e4..cf24bd0 100644 kfree_skb(skb); return -1; } -@@ -1610,7 +1631,7 @@ static void flush_stack(struct sock **stack, unsigned int count, +@@ -1611,7 +1632,7 @@ static void flush_stack(struct sock **stack, unsigned int count, skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC); if (!skb1) { @@ -103169,7 +102722,7 @@ index f57c0e4..cf24bd0 100644 UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS, IS_UDPLITE(sk)); UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, -@@ -1807,6 +1828,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, +@@ -1812,6 +1833,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, goto csum_error; UDP_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE); @@ -103179,7 +102732,7 @@ index f57c0e4..cf24bd0 100644 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0); /* -@@ -2393,7 +2417,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f, +@@ -2398,7 +2422,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f, from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)), 0, sock_i_ino(sp), atomic_read(&sp->sk_refcnt), sp, @@ -103242,9 +102795,27 @@ index 6156f68..d6ab46d 100644 return -ENOMEM; } diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c -index 3e118df..27b16cf 100644 +index 0169ccf..50d7b04 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c +@@ -171,7 +171,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = { + .hop_limit = IPV6_DEFAULT_HOPLIMIT, + .mtu6 = IPV6_MIN_MTU, + .accept_ra = 1, +- .accept_redirects = 1, ++ .accept_redirects = 0, + .autoconf = 1, + .force_mld_version = 0, + .mldv1_unsolicited_report_interval = 10 * HZ, +@@ -208,7 +208,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = { + .hop_limit = IPV6_DEFAULT_HOPLIMIT, + .mtu6 = IPV6_MIN_MTU, + .accept_ra = 1, +- .accept_redirects = 1, ++ .accept_redirects = 0, + .autoconf = 1, + .force_mld_version = 0, + .mldv1_unsolicited_report_interval = 10 * HZ, @@ -604,7 +604,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb, idx = 0; head = &net->dev_index_head[h]; @@ -103263,7 +102834,7 @@ index 3e118df..27b16cf 100644 if (ops->ndo_do_ioctl) { mm_segment_t oldfs = get_fs(); -@@ -3531,16 +3531,23 @@ static const struct file_operations if6_fops = { +@@ -3534,16 +3534,23 @@ static const struct file_operations if6_fops = { .release = seq_release_net, }; @@ -103288,7 +102859,7 @@ index 3e118df..27b16cf 100644 } static struct pernet_operations if6_proc_net_ops = { -@@ -4156,7 +4163,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb, +@@ -4159,7 +4166,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb, s_ip_idx = ip_idx = cb->args[2]; rcu_read_lock(); @@ -103297,7 +102868,7 @@ index 3e118df..27b16cf 100644 for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) { idx = 0; head = &net->dev_index_head[h]; -@@ -4784,7 +4791,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) +@@ -4788,7 +4795,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) rt_genid_bump_ipv6(net); break; } @@ -103306,7 +102877,7 @@ index 3e118df..27b16cf 100644 } static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) -@@ -4804,7 +4811,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write, +@@ -4808,7 +4815,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write, int *valp = ctl->data; int val = *valp; loff_t pos = *ppos; @@ -103315,7 +102886,7 @@ index 3e118df..27b16cf 100644 int ret; /* -@@ -4889,7 +4896,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write, +@@ -4893,7 +4900,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write, int *valp = ctl->data; int val = *valp; loff_t pos = *ppos; @@ -103325,23 +102896,23 @@ index 3e118df..27b16cf 100644 /* diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c -index 2daa3a1..341066c 100644 +index e8c4400..a4cd5da 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -766,7 +766,7 @@ static int __net_init inet6_net_init(struct net *net) net->ipv6.sysctl.icmpv6_time = 1*HZ; net->ipv6.sysctl.flowlabel_consistency = 1; net->ipv6.sysctl.auto_flowlabels = 0; -- atomic_set(&net->ipv6.rt_genid, 0); -+ atomic_set_unchecked(&net->ipv6.rt_genid, 0); +- atomic_set(&net->ipv6.fib6_sernum, 1); ++ atomic_set_unchecked(&net->ipv6.fib6_sernum, 1); err = ipv6_init_mibs(net); if (err) diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c -index 2753319..b7e625c 100644 +index 2cdc383..09cffb8 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c -@@ -939,5 +939,5 @@ void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp, +@@ -928,5 +928,5 @@ void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp, 0, sock_i_ino(sp), atomic_read(&sp->sk_refcnt), sp, @@ -103349,10 +102920,10 @@ index 2753319..b7e625c 100644 + atomic_read_unchecked(&sp->sk_drops)); } diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c -index 06ba3e5..5c08d38 100644 +index 97ae700..18dcae0 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c -@@ -993,7 +993,7 @@ static struct ctl_table ipv6_icmp_table_template[] = { +@@ -997,7 +997,7 @@ static struct ctl_table ipv6_icmp_table_template[] = { struct ctl_table * __net_init ipv6_icmp_sysctl_init(struct net *net) { @@ -103361,8 +102932,24 @@ index 06ba3e5..5c08d38 100644 table = kmemdup(ipv6_icmp_table_template, sizeof(ipv6_icmp_table_template), +diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c +index b2d1838..0194c04 100644 +--- a/net/ipv6/ip6_fib.c ++++ b/net/ipv6/ip6_fib.c +@@ -99,9 +99,9 @@ static int fib6_new_sernum(struct net *net) + int new, old; + + do { +- old = atomic_read(&net->ipv6.fib6_sernum); ++ old = atomic_read_unchecked(&net->ipv6.fib6_sernum); + new = old < INT_MAX ? old + 1 : 1; +- } while (atomic_cmpxchg(&net->ipv6.fib6_sernum, ++ } while (atomic_cmpxchg_unchecked(&net->ipv6.fib6_sernum, + old, new) != old); + return new; + } diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c -index cacb493..3cae894 100644 +index 0e32d2e..98cbe65 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c @@ -71,8 +71,8 @@ struct ip6gre_net { @@ -103376,7 +102963,7 @@ index cacb493..3cae894 100644 static int ip6gre_tunnel_init(struct net_device *dev); static void ip6gre_tunnel_setup(struct net_device *dev); static void ip6gre_tunnel_link(struct ip6gre_net *ign, struct ip6_tnl *t); -@@ -1285,7 +1285,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev) +@@ -1289,7 +1289,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev) } @@ -103385,7 +102972,7 @@ index cacb493..3cae894 100644 .handler = ip6gre_rcv, .err_handler = ip6gre_err, .flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL, -@@ -1646,7 +1646,7 @@ static const struct nla_policy ip6gre_policy[IFLA_GRE_MAX + 1] = { +@@ -1650,7 +1650,7 @@ static const struct nla_policy ip6gre_policy[IFLA_GRE_MAX + 1] = { [IFLA_GRE_FLAGS] = { .type = NLA_U32 }, }; @@ -103394,7 +102981,7 @@ index cacb493..3cae894 100644 .kind = "ip6gre", .maxtype = IFLA_GRE_MAX, .policy = ip6gre_policy, -@@ -1660,7 +1660,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = { +@@ -1664,7 +1664,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = { .fill_info = ip6gre_fill_info, }; @@ -103403,20 +102990,8 @@ index cacb493..3cae894 100644 .kind = "ip6gretap", .maxtype = IFLA_GRE_MAX, .policy = ip6gre_policy, -diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c -index 65eda2a..620a102 100644 ---- a/net/ipv6/ip6_offload.c -+++ b/net/ipv6/ip6_offload.c -@@ -46,6 +46,7 @@ static int ipv6_gso_pull_exthdrs(struct sk_buff *skb, int proto) - if (unlikely(!pskb_may_pull(skb, len))) - break; - -+ opth = (void *)skb->data; - proto = opth->nexthdr; - __skb_pull(skb, len); - } diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c -index d2eeb3b..c186e9a 100644 +index 9cb94cf..5678108 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c @@ -86,7 +86,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2) @@ -103438,7 +103013,7 @@ index d2eeb3b..c186e9a 100644 .maxtype = IFLA_IPTUN_MAX, .policy = ip6_tnl_policy, diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c -index 99c9487..63f4d92 100644 +index bcda14d..49378c9 100644 --- a/net/ipv6/ip6_vti.c +++ b/net/ipv6/ip6_vti.c @@ -62,7 +62,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2) @@ -103450,7 +103025,7 @@ index 99c9487..63f4d92 100644 static int vti6_net_id __read_mostly; struct vti6_net { -@@ -972,7 +972,7 @@ static const struct nla_policy vti6_policy[IFLA_VTI_MAX + 1] = { +@@ -981,7 +981,7 @@ static const struct nla_policy vti6_policy[IFLA_VTI_MAX + 1] = { [IFLA_VTI_OKEY] = { .type = NLA_U32 }, }; @@ -103460,10 +103035,10 @@ index 99c9487..63f4d92 100644 .maxtype = IFLA_VTI_MAX, .policy = vti6_policy, diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c -index 0c28998..d0a2ecd 100644 +index e1a9583..7dd8f4d 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c -@@ -995,7 +995,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, +@@ -993,7 +993,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, if (sk->sk_type != SOCK_STREAM) return -ENOPROTOOPT; @@ -103624,7 +103199,7 @@ index 5b7a1ed..d9da205 100644 inet6_unregister_protosw(&pingv6_protosw); } diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c -index 2d6f860..b0165f5 100644 +index 1752cd0..3c6af41 100644 --- a/net/ipv6/proc.c +++ b/net/ipv6/proc.c @@ -309,7 +309,7 @@ static int __net_init ipv6_proc_init_net(struct net *net) @@ -103637,7 +103212,7 @@ index 2d6f860..b0165f5 100644 goto proc_dev_snmp6_fail; return 0; diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c -index 39d4422..b0979547 100644 +index 896af88..6e2ba628 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -388,7 +388,7 @@ static inline int rawv6_rcv_skb(struct sock *sk, struct sk_buff *skb) @@ -103712,10 +103287,10 @@ index 39d4422..b0979547 100644 return 0; default: diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c -index c6557d9..173e728 100644 +index 1a157ca..9fc05f4 100644 --- a/net/ipv6/reassembly.c +++ b/net/ipv6/reassembly.c -@@ -627,12 +627,11 @@ static struct ctl_table ip6_frags_ctl_table[] = { +@@ -625,12 +625,11 @@ static struct ctl_table ip6_frags_ctl_table[] = { static int __net_init ip6_frags_ns_sysctl_register(struct net *net) { @@ -103730,7 +103305,7 @@ index c6557d9..173e728 100644 if (table == NULL) goto err_alloc; -@@ -646,9 +645,10 @@ static int __net_init ip6_frags_ns_sysctl_register(struct net *net) +@@ -644,9 +643,10 @@ static int __net_init ip6_frags_ns_sysctl_register(struct net *net) /* Don't export sysctls to unprivileged users */ if (net->user_ns != &init_user_ns) table[0].procname = NULL; @@ -103743,7 +103318,7 @@ index c6557d9..173e728 100644 if (hdr == NULL) goto err_reg; -@@ -656,8 +656,7 @@ static int __net_init ip6_frags_ns_sysctl_register(struct net *net) +@@ -654,8 +654,7 @@ static int __net_init ip6_frags_ns_sysctl_register(struct net *net) return 0; err_reg: @@ -103754,10 +103329,10 @@ index c6557d9..173e728 100644 return -ENOMEM; } diff --git a/net/ipv6/route.c b/net/ipv6/route.c -index bafde82..af2c91f 100644 +index a318dd89..7ecfea6 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c -@@ -2967,7 +2967,7 @@ struct ctl_table ipv6_route_table_template[] = { +@@ -2965,7 +2965,7 @@ struct ctl_table ipv6_route_table_template[] = { struct ctl_table * __net_init ipv6_route_sysctl_init(struct net *net) { @@ -103767,7 +103342,7 @@ index bafde82..af2c91f 100644 table = kmemdup(ipv6_route_table_template, sizeof(ipv6_route_table_template), diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c -index ca1c7c4..37fba59 100644 +index a24557a..00a9ed1 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c @@ -74,7 +74,7 @@ static void ipip6_tunnel_setup(struct net_device *dev); @@ -103779,30 +103354,7 @@ index ca1c7c4..37fba59 100644 static int sit_net_id __read_mostly; struct sit_net { -@@ -484,11 +484,11 @@ static void ipip6_tunnel_uninit(struct net_device *dev) - */ - static int ipip6_err_gen_icmpv6_unreach(struct sk_buff *skb) - { -- const struct iphdr *iph = (const struct iphdr *) skb->data; -+ int ihl = ((const struct iphdr *)skb->data)->ihl*4; - struct rt6_info *rt; - struct sk_buff *skb2; - -- if (!pskb_may_pull(skb, iph->ihl * 4 + sizeof(struct ipv6hdr) + 8)) -+ if (!pskb_may_pull(skb, ihl + sizeof(struct ipv6hdr) + 8)) - return 1; - - skb2 = skb_clone(skb, GFP_ATOMIC); -@@ -497,7 +497,7 @@ static int ipip6_err_gen_icmpv6_unreach(struct sk_buff *skb) - return 1; - - skb_dst_drop(skb2); -- skb_pull(skb2, iph->ihl * 4); -+ skb_pull(skb2, ihl); - skb_reset_network_header(skb2); - - rt = rt6_lookup(dev_net(skb->dev), &ipv6_hdr(skb2)->saddr, NULL, 0, 0); -@@ -1659,7 +1659,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head) +@@ -1750,7 +1750,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head) unregister_netdevice_queue(dev, head); } @@ -103812,10 +103364,10 @@ index ca1c7c4..37fba59 100644 .maxtype = IFLA_IPTUN_MAX, .policy = ipip6_policy, diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c -index 0c56c93..ece50df 100644 +index c5c10fa..2577d51 100644 --- a/net/ipv6/sysctl_net_ipv6.c +++ b/net/ipv6/sysctl_net_ipv6.c -@@ -68,7 +68,7 @@ static struct ctl_table ipv6_rotable[] = { +@@ -78,7 +78,7 @@ static struct ctl_table ipv6_rotable[] = { static int __net_init ipv6_sysctl_net_init(struct net *net) { @@ -103825,11 +103377,11 @@ index 0c56c93..ece50df 100644 struct ctl_table *ipv6_icmp_table; int err; diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c -index 264c0f2..b6512c6 100644 +index c277951..c7ee5bf 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c -@@ -102,6 +102,10 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb) - inet6_sk(sk)->rx_dst_cookie = rt->rt6i_node->fn_sernum; +@@ -104,6 +104,10 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb) + } } +#ifdef CONFIG_GRKERNSEC_BLACKHOLE @@ -103839,7 +103391,7 @@ index 264c0f2..b6512c6 100644 static void tcp_v6_hash(struct sock *sk) { if (sk->sk_state != TCP_CLOSE) { -@@ -1333,6 +1337,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) +@@ -1341,6 +1345,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) return 0; reset: @@ -103849,10 +103401,10 @@ index 264c0f2..b6512c6 100644 tcp_v6_send_reset(sk, skb); discard: if (opt_skb) -@@ -1417,12 +1424,20 @@ static int tcp_v6_rcv(struct sk_buff *skb) - TCP_SKB_CB(skb)->sacked = 0; +@@ -1434,12 +1441,20 @@ static int tcp_v6_rcv(struct sk_buff *skb) - sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest); + sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest, + tcp_v6_iif(skb)); - if (!sk) + if (!sk) { +#ifdef CONFIG_GRKERNSEC_BLACKHOLE @@ -103872,7 +103424,7 @@ index 264c0f2..b6512c6 100644 if (hdr->hop_limit < inet6_sk(sk)->min_hopcount) { NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP); -@@ -1479,6 +1494,10 @@ csum_error: +@@ -1486,6 +1501,10 @@ csum_error: bad_packet: TCP_INC_STATS_BH(net, TCP_MIB_INERRS); } else { @@ -103884,7 +103436,7 @@ index 264c0f2..b6512c6 100644 } diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c -index 4836af8..0e52bbd 100644 +index f6ba535..b41033f 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -76,6 +76,10 @@ static unsigned int udp6_ehashfn(struct net *net, @@ -103925,7 +103477,7 @@ index 4836af8..0e52bbd 100644 UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS, IS_UDPLITE(sk)); UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, -@@ -915,6 +919,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, +@@ -919,6 +923,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, goto csum_error; UDP6_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE); @@ -103936,45 +103488,20 @@ index 4836af8..0e52bbd 100644 kfree_skb(skb); diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c -index 2a0bbda..442240d 100644 +index 5f98364..5ca982a 100644 --- a/net/ipv6/xfrm6_policy.c +++ b/net/ipv6/xfrm6_policy.c -@@ -170,8 +170,10 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse) - case IPPROTO_DCCP: - if (!onlyproto && (nh + offset + 4 < skb->data || - pskb_may_pull(skb, nh + offset + 4 - skb->data))) { -- __be16 *ports = (__be16 *)exthdr; -+ __be16 *ports; - -+ nh = skb_network_header(skb); -+ ports = (__be16 *)(nh + offset); - fl6->fl6_sport = ports[!!reverse]; - fl6->fl6_dport = ports[!reverse]; - } -@@ -180,8 +182,10 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse) - - case IPPROTO_ICMPV6: - if (!onlyproto && pskb_may_pull(skb, nh + offset + 2 - skb->data)) { -- u8 *icmp = (u8 *)exthdr; -+ u8 *icmp; - -+ nh = skb_network_header(skb); -+ icmp = (u8 *)(nh + offset); - fl6->fl6_icmp_type = icmp[0]; - fl6->fl6_icmp_code = icmp[1]; - } -@@ -192,8 +196,9 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse) - case IPPROTO_MH: - if (!onlyproto && pskb_may_pull(skb, nh + offset + 3 - skb->data)) { - struct ip6_mh *mh; -- mh = (struct ip6_mh *)exthdr; - -+ nh = skb_network_header(skb); -+ mh = (struct ip6_mh *)(nh + offset); - fl6->fl6_mh_type = mh->ip6mh_type; - } - fl6->flowi6_proto = nexthdr; -@@ -212,11 +217,11 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse) +@@ -130,8 +130,8 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse) + { + struct flowi6 *fl6 = &fl->u.ip6; + int onlyproto = 0; +- u16 offset = skb_network_header_len(skb); + const struct ipv6hdr *hdr = ipv6_hdr(skb); ++ u16 offset = sizeof(*hdr); + struct ipv6_opt_hdr *exthdr; + const unsigned char *nh = skb_network_header(skb); + u8 nexthdr = nh[IP6CB(skb)->nhoff]; +@@ -217,11 +217,11 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse) } } @@ -103988,7 +103515,7 @@ index 2a0bbda..442240d 100644 return dst_entries_get_fast(ops) > ops->gc_thresh * 2; } -@@ -329,19 +334,19 @@ static struct ctl_table xfrm6_policy_table[] = { +@@ -334,19 +334,19 @@ static struct ctl_table xfrm6_policy_table[] = { static int __net_init xfrm6_net_init(struct net *net) { @@ -104013,7 +103540,7 @@ index 2a0bbda..442240d 100644 if (!hdr) goto err_reg; -@@ -349,8 +354,7 @@ static int __net_init xfrm6_net_init(struct net *net) +@@ -354,8 +354,7 @@ static int __net_init xfrm6_net_init(struct net *net) return 0; err_reg: @@ -104141,7 +103668,7 @@ index a089b6b..3ca3b60 100644 memcpy(iucv->src_name, name, 8); } diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c -index da78793..bdd78cf 100644 +index 2a6a1fd..6c112b0 100644 --- a/net/iucv/iucv.c +++ b/net/iucv/iucv.c @@ -702,7 +702,7 @@ static int iucv_cpu_notify(struct notifier_block *self, @@ -104260,10 +103787,10 @@ index 1a3c7e0..80f8b0c 100644 goto out; diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c -index 927b4ea..88a30e2 100644 +index 343da1e..509873f 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -540,7 +540,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy, +@@ -541,7 +541,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy, ret = ieee80211_vif_use_channel(sdata, chandef, IEEE80211_CHANCTX_EXCLUSIVE); } @@ -104272,7 +103799,7 @@ index 927b4ea..88a30e2 100644 local->_oper_chandef = *chandef; ieee80211_hw_config(local, 0); } -@@ -3286,7 +3286,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy, +@@ -3326,7 +3326,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy, else local->probe_req_reg--; @@ -104281,9 +103808,9 @@ index 927b4ea..88a30e2 100644 break; ieee80211_queue_work(&local->hw, &local->reconfig_filter); -@@ -3420,8 +3420,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy, +@@ -3460,8 +3460,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy, if (chanctx_conf) { - *chandef = chanctx_conf->def; + *chandef = sdata->vif.bss_conf.chandef; ret = 0; - } else if (local->open_count > 0 && - local->open_count == local->monitors && @@ -104293,10 +103820,10 @@ index 927b4ea..88a30e2 100644 if (local->use_chanctx) *chandef = local->monitor_chandef; diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h -index 5d102b5..6199fca 100644 +index 8c68da3..0695016 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -28,6 +28,7 @@ +@@ -29,6 +29,7 @@ #include #include #include @@ -104304,7 +103831,7 @@ index 5d102b5..6199fca 100644 #include "key.h" #include "sta_info.h" #include "debug.h" -@@ -1055,7 +1056,7 @@ struct ieee80211_local { +@@ -1057,7 +1058,7 @@ struct ieee80211_local { /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */ spinlock_t queue_stop_reason_lock; @@ -104314,10 +103841,10 @@ index 5d102b5..6199fca 100644 /* number of interfaces with corresponding FIF_ flags */ int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll, diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c -index 3538e5e..0aa7879 100644 +index eeae0ab..0f24585 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c -@@ -531,7 +531,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) +@@ -533,7 +533,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) break; } @@ -104326,7 +103853,7 @@ index 3538e5e..0aa7879 100644 res = drv_start(local); if (res) goto err_del_bss; -@@ -578,7 +578,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) +@@ -580,7 +580,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) res = drv_add_interface(local, sdata); if (res) goto err_stop; @@ -104335,7 +103862,7 @@ index 3538e5e..0aa7879 100644 res = ieee80211_add_virtual_monitor(local); if (res) goto err_stop; -@@ -687,7 +687,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) +@@ -689,7 +689,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) atomic_inc(&local->iff_promiscs); if (coming_up) @@ -104344,7 +103871,7 @@ index 3538e5e..0aa7879 100644 if (hw_reconf_flags) ieee80211_hw_config(local, hw_reconf_flags); -@@ -725,7 +725,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) +@@ -727,7 +727,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) err_del_interface: drv_remove_interface(local, sdata); err_stop: @@ -104353,7 +103880,7 @@ index 3538e5e..0aa7879 100644 drv_stop(local); err_del_bss: sdata->bss = NULL; -@@ -891,7 +891,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, +@@ -893,7 +893,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, } if (going_down) @@ -104362,7 +103889,7 @@ index 3538e5e..0aa7879 100644 switch (sdata->vif.type) { case NL80211_IFTYPE_AP_VLAN: -@@ -952,7 +952,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, +@@ -955,7 +955,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, } spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); @@ -104371,7 +103898,7 @@ index 3538e5e..0aa7879 100644 ieee80211_clear_tx_pending(local); /* -@@ -995,7 +995,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, +@@ -998,7 +998,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, if (cancel_scan) flush_delayed_work(&local->scan_work); @@ -104380,7 +103907,7 @@ index 3538e5e..0aa7879 100644 ieee80211_stop_device(local); /* no reconfiguring after stop! */ -@@ -1006,7 +1006,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, +@@ -1009,7 +1009,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, ieee80211_configure_filter(local); ieee80211_hw_config(local, hw_reconf_flags); @@ -104390,10 +103917,10 @@ index 3538e5e..0aa7879 100644 } diff --git a/net/mac80211/main.c b/net/mac80211/main.c -index e0ab432..36b7b94 100644 +index 0de7c93..884b2ca 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c -@@ -174,7 +174,7 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed) +@@ -175,7 +175,7 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed) changed &= ~(IEEE80211_CONF_CHANGE_CHANNEL | IEEE80211_CONF_CHANGE_POWER); @@ -104447,10 +103974,10 @@ index 6081329..ab23834 100644 if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) { diff --git a/net/mac80211/util.c b/net/mac80211/util.c -index 725af7a..a21a20a 100644 +index 3c61060..7bed2e3 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c -@@ -1643,7 +1643,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) +@@ -1669,7 +1669,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) } #endif /* everything else happens only if HW was up & running */ @@ -104459,7 +103986,7 @@ index 725af7a..a21a20a 100644 goto wake_up; /* -@@ -1869,7 +1869,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) +@@ -1895,7 +1895,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) local->in_reconfig = false; barrier(); @@ -104469,10 +103996,10 @@ index 725af7a..a21a20a 100644 /* diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig -index 6d77cce..36e2fc3 100644 +index ae5096ab..e5aa70a 100644 --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig -@@ -1096,6 +1096,16 @@ config NETFILTER_XT_MATCH_ESP +@@ -1105,6 +1105,16 @@ config NETFILTER_XT_MATCH_ESP To compile it as a module, choose M here. If unsure, say N. @@ -104490,10 +104017,10 @@ index 6d77cce..36e2fc3 100644 tristate '"hashlimit" match support' depends on (IP6_NF_IPTABLES || IP6_NF_IPTABLES=n) diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile -index fad5fdb..ba3672a 100644 +index a9571be..c59e173 100644 --- a/net/netfilter/Makefile +++ b/net/netfilter/Makefile -@@ -136,6 +136,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_DEVGROUP) += xt_devgroup.o +@@ -137,6 +137,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_DEVGROUP) += xt_devgroup.o obj-$(CONFIG_NETFILTER_XT_MATCH_DSCP) += xt_dscp.o obj-$(CONFIG_NETFILTER_XT_MATCH_ECN) += xt_ecn.o obj-$(CONFIG_NETFILTER_XT_MATCH_ESP) += xt_esp.o @@ -104502,10 +104029,10 @@ index fad5fdb..ba3672a 100644 obj-$(CONFIG_NETFILTER_XT_MATCH_HELPER) += xt_helper.o obj-$(CONFIG_NETFILTER_XT_MATCH_HL) += xt_hl.o diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c -index 6582dce..a911da7 100644 +index d259da3..6a32b2c 100644 --- a/net/netfilter/ipset/ip_set_core.c +++ b/net/netfilter/ipset/ip_set_core.c -@@ -1921,7 +1921,7 @@ done: +@@ -1952,7 +1952,7 @@ done: return ret; } @@ -104515,10 +104042,10 @@ index 6582dce..a911da7 100644 .get_optmin = SO_IP_SET, .get_optmax = SO_IP_SET + 1, diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c -index 610e19c..08d0c3f 100644 +index b0f7b62..0541842 100644 --- a/net/netfilter/ipvs/ip_vs_conn.c +++ b/net/netfilter/ipvs/ip_vs_conn.c -@@ -556,7 +556,7 @@ ip_vs_bind_dest(struct ip_vs_conn *cp, struct ip_vs_dest *dest) +@@ -572,7 +572,7 @@ ip_vs_bind_dest(struct ip_vs_conn *cp, struct ip_vs_dest *dest) /* Increase the refcnt counter of the dest */ ip_vs_dest_hold(dest); @@ -104527,7 +104054,7 @@ index 610e19c..08d0c3f 100644 if (cp->protocol != IPPROTO_UDP) conn_flags &= ~IP_VS_CONN_F_ONE_PACKET; flags = cp->flags; -@@ -899,7 +899,7 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p, +@@ -922,7 +922,7 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p, int dest_af, cp->control = NULL; atomic_set(&cp->n_control, 0); @@ -104536,7 +104063,7 @@ index 610e19c..08d0c3f 100644 cp->packet_xmit = NULL; cp->app = NULL; -@@ -1187,7 +1187,7 @@ static inline int todrop_entry(struct ip_vs_conn *cp) +@@ -1229,7 +1229,7 @@ static inline int todrop_entry(struct ip_vs_conn *cp) /* Don't drop the entry if its number of incoming packets is not located in [0, 8] */ @@ -104546,10 +104073,10 @@ index 610e19c..08d0c3f 100644 if (!todrop_rate[i]) return 0; diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c -index 5c34e8d..0d8eb7f 100644 +index 990decb..5075248 100644 --- a/net/netfilter/ipvs/ip_vs_core.c +++ b/net/netfilter/ipvs/ip_vs_core.c -@@ -567,7 +567,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb, +@@ -568,7 +568,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb, ret = cp->packet_xmit(skb, cp, pd->pp, iph); /* do not touch skb anymore */ @@ -104558,7 +104085,7 @@ index 5c34e8d..0d8eb7f 100644 ip_vs_conn_put(cp); return ret; } -@@ -1711,7 +1711,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af) +@@ -1712,7 +1712,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af) if (cp->flags & IP_VS_CONN_F_ONE_PACKET) pkts = sysctl_sync_threshold(ipvs); else @@ -104568,10 +104095,10 @@ index 5c34e8d..0d8eb7f 100644 if (ipvs->sync_state & IP_VS_STATE_MASTER) ip_vs_sync_conn(net, cp, pkts); diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c -index fd3f444..ab28fa24 100644 +index ac7ba68..9735acb9 100644 --- a/net/netfilter/ipvs/ip_vs_ctl.c +++ b/net/netfilter/ipvs/ip_vs_ctl.c -@@ -794,7 +794,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest, +@@ -800,7 +800,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest, */ ip_vs_rs_hash(ipvs, dest); } @@ -104580,7 +104107,7 @@ index fd3f444..ab28fa24 100644 /* bind the service */ old_svc = rcu_dereference_protected(dest->svc, 1); -@@ -1654,7 +1654,7 @@ proc_do_sync_ports(struct ctl_table *table, int write, +@@ -1665,7 +1665,7 @@ proc_do_sync_ports(struct ctl_table *table, int write, * align with netns init in ip_vs_control_net_init() */ @@ -104589,7 +104116,7 @@ index fd3f444..ab28fa24 100644 { .procname = "amemthresh", .maxlen = sizeof(int), -@@ -1989,7 +1989,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v) +@@ -2000,7 +2000,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v) " %-7s %-6d %-10d %-10d\n", &dest->addr.in6, ntohs(dest->port), @@ -104598,7 +104125,7 @@ index fd3f444..ab28fa24 100644 atomic_read(&dest->weight), atomic_read(&dest->activeconns), atomic_read(&dest->inactconns)); -@@ -2000,7 +2000,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v) +@@ -2011,7 +2011,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v) "%-7s %-6d %-10d %-10d\n", ntohl(dest->addr.ip), ntohs(dest->port), @@ -104607,7 +104134,7 @@ index fd3f444..ab28fa24 100644 atomic_read(&dest->weight), atomic_read(&dest->activeconns), atomic_read(&dest->inactconns)); -@@ -2471,7 +2471,7 @@ __ip_vs_get_dest_entries(struct net *net, const struct ip_vs_get_dests *get, +@@ -2500,7 +2500,7 @@ __ip_vs_get_dest_entries(struct net *net, const struct ip_vs_get_dests *get, entry.addr = dest->addr.ip; entry.port = dest->port; @@ -104616,7 +104143,7 @@ index fd3f444..ab28fa24 100644 entry.weight = atomic_read(&dest->weight); entry.u_threshold = dest->u_threshold; entry.l_threshold = dest->l_threshold; -@@ -3010,7 +3010,7 @@ static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest) +@@ -3040,7 +3040,7 @@ static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest) if (nla_put(skb, IPVS_DEST_ATTR_ADDR, sizeof(dest->addr), &dest->addr) || nla_put_be16(skb, IPVS_DEST_ATTR_PORT, dest->port) || nla_put_u32(skb, IPVS_DEST_ATTR_FWD_METHOD, @@ -104625,7 +104152,7 @@ index fd3f444..ab28fa24 100644 IP_VS_CONN_F_FWD_MASK)) || nla_put_u32(skb, IPVS_DEST_ATTR_WEIGHT, atomic_read(&dest->weight)) || -@@ -3600,7 +3600,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct net *net) +@@ -3673,7 +3673,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct net *net) { int idx; struct netns_ipvs *ipvs = net_ipvs(net); @@ -104635,7 +104162,7 @@ index fd3f444..ab28fa24 100644 atomic_set(&ipvs->dropentry, 0); spin_lock_init(&ipvs->dropentry_lock); diff --git a/net/netfilter/ipvs/ip_vs_lblc.c b/net/netfilter/ipvs/ip_vs_lblc.c -index 547ff33..c8c8117 100644 +index 127f140..553d652 100644 --- a/net/netfilter/ipvs/ip_vs_lblc.c +++ b/net/netfilter/ipvs/ip_vs_lblc.c @@ -118,7 +118,7 @@ struct ip_vs_lblc_table { @@ -104648,7 +104175,7 @@ index 547ff33..c8c8117 100644 .procname = "lblc_expiration", .data = NULL, diff --git a/net/netfilter/ipvs/ip_vs_lblcr.c b/net/netfilter/ipvs/ip_vs_lblcr.c -index 3f21a2f..a112e85 100644 +index 2229d2d..b32b785 100644 --- a/net/netfilter/ipvs/ip_vs_lblcr.c +++ b/net/netfilter/ipvs/ip_vs_lblcr.c @@ -289,7 +289,7 @@ struct ip_vs_lblcr_table { @@ -104661,7 +104188,7 @@ index 3f21a2f..a112e85 100644 .procname = "lblcr_expiration", .data = NULL, diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c -index eadffb2..c2feeae 100644 +index 7162c86..9eeb60e 100644 --- a/net/netfilter/ipvs/ip_vs_sync.c +++ b/net/netfilter/ipvs/ip_vs_sync.c @@ -609,7 +609,7 @@ static void ip_vs_sync_conn_v0(struct net *net, struct ip_vs_conn *cp, @@ -104682,7 +104209,7 @@ index eadffb2..c2feeae 100644 else pkts = sysctl_sync_threshold(ipvs); goto sloop; -@@ -894,7 +894,7 @@ static void ip_vs_proc_conn(struct net *net, struct ip_vs_conn_param *param, +@@ -901,7 +901,7 @@ static void ip_vs_proc_conn(struct net *net, struct ip_vs_conn_param *param, if (opt) memcpy(&cp->in_seq, opt, sizeof(*opt)); @@ -104692,10 +104219,10 @@ index eadffb2..c2feeae 100644 cp->old_state = cp->state; /* diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c -index 56896a4..dfe3806 100644 +index bd90bf8..816a020d 100644 --- a/net/netfilter/ipvs/ip_vs_xmit.c +++ b/net/netfilter/ipvs/ip_vs_xmit.c -@@ -1114,7 +1114,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, +@@ -1215,7 +1215,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, else rc = NF_ACCEPT; /* do not touch skb anymore */ @@ -104704,7 +104231,7 @@ index 56896a4..dfe3806 100644 goto out; } -@@ -1206,7 +1206,7 @@ ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp, +@@ -1308,7 +1308,7 @@ ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp, else rc = NF_ACCEPT; /* do not touch skb anymore */ @@ -104727,7 +104254,7 @@ index a4b5e2a..13b1de3 100644 table = kmemdup(acct_sysctl_table, sizeof(acct_sysctl_table), GFP_KERNEL); diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c -index de88c4a..ec84234 100644 +index 5016a69..594f8e9 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c @@ -1739,6 +1739,10 @@ void nf_conntrack_init_end(void) @@ -104793,7 +104320,7 @@ index b65d586..beec902 100644 { if (users > 0) diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c -index f641751..d3c5b51 100644 +index cf65a1e..2f291e9 100644 --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c @@ -471,7 +471,7 @@ static struct ctl_table nf_ct_netfilter_table[] = { @@ -104819,7 +104346,7 @@ index 7a394df..bd91a8a 100644 table = kmemdup(tstamp_sysctl_table, sizeof(tstamp_sysctl_table), GFP_KERNEL); diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c -index daad602..384be13 100644 +index d719764..311bc60 100644 --- a/net/netfilter/nf_log.c +++ b/net/netfilter/nf_log.c @@ -353,7 +353,7 @@ static const struct file_operations nflog_file_ops = { @@ -104874,7 +104401,7 @@ index c68c1e5..8b5d670 100644 } EXPORT_SYMBOL(nf_unregister_sockopt); diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c -index 3250735..1fac969 100644 +index 5f1be5b..2cba8cd 100644 --- a/net/netfilter/nfnetlink_log.c +++ b/net/netfilter/nfnetlink_log.c @@ -80,7 +80,7 @@ static int nfnl_log_net_id __read_mostly; @@ -104895,41 +104422,6 @@ index 3250735..1fac969 100644 goto nla_put_failure; if (data_len) { -diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c -index 108120f..5b169db 100644 ---- a/net/netfilter/nfnetlink_queue_core.c -+++ b/net/netfilter/nfnetlink_queue_core.c -@@ -665,7 +665,7 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum) - * returned by nf_queue. For instance, callers rely on -ECANCELED to - * mean 'ignore this hook'. - */ -- if (IS_ERR(segs)) -+ if (IS_ERR_OR_NULL(segs)) - goto out_err; - queued = 0; - err = 0; -diff --git a/net/netfilter/nft_compat.c b/net/netfilter/nft_compat.c -index 5b5ab9e..fc1015c 100644 ---- a/net/netfilter/nft_compat.c -+++ b/net/netfilter/nft_compat.c -@@ -225,7 +225,7 @@ target_dump_info(struct sk_buff *skb, const struct xt_target *t, const void *in) - /* We want to reuse existing compat_to_user */ - old_fs = get_fs(); - set_fs(KERNEL_DS); -- t->compat_to_user(out, in); -+ t->compat_to_user((void __force_user *)out, in); - set_fs(old_fs); - ret = nla_put(skb, NFTA_TARGET_INFO, XT_ALIGN(t->targetsize), out); - kfree(out); -@@ -421,7 +421,7 @@ match_dump_info(struct sk_buff *skb, const struct xt_match *m, const void *in) - /* We want to reuse existing compat_to_user */ - old_fs = get_fs(); - set_fs(KERNEL_DS); -- m->compat_to_user(out, in); -+ m->compat_to_user((void __force_user *)out, in); - set_fs(old_fs); - ret = nla_put(skb, NFTA_MATCH_INFO, XT_ALIGN(m->matchsize), out); - kfree(out); diff --git a/net/netfilter/xt_gradm.c b/net/netfilter/xt_gradm.c new file mode 100644 index 0000000..c566332 @@ -104988,7 +104480,7 @@ index 0000000..c566332 +MODULE_ALIAS("ipt_gradm"); +MODULE_ALIAS("ip6t_gradm"); diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c -index 47dc683..2e0d52c 100644 +index 05fbc2a..4424b5c 100644 --- a/net/netfilter/xt_hashlimit.c +++ b/net/netfilter/xt_hashlimit.c @@ -871,11 +871,11 @@ static int __net_init hashlimit_proc_net_init(struct net *net) @@ -105053,7 +104545,7 @@ index 11de55e..f25e448 100644 return 0; } diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c -index 0007b81..cb08369 100644 +index b6bf8e8..7884ddf 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -273,7 +273,7 @@ static void netlink_overrun(struct sock *sk) @@ -105074,24 +104566,86 @@ index 0007b81..cb08369 100644 sock_i_ino(s) ); -diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c -index 64dc864..7a9e2a4 100644 ---- a/net/openvswitch/datapath.c -+++ b/net/openvswitch/datapath.c -@@ -332,6 +332,8 @@ static int queue_gso_packets(struct datapath *dp, struct sk_buff *skb, - segs = __skb_gso_segment(skb, NETIF_F_SG, false); - if (IS_ERR(segs)) - return PTR_ERR(segs); -+ if (segs == NULL) -+ return -EINVAL; +diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c +index 8451612..c8872bc 100644 +--- a/net/openvswitch/vport-internal_dev.c ++++ b/net/openvswitch/vport-internal_dev.c +@@ -122,7 +122,7 @@ static const struct net_device_ops internal_dev_netdev_ops = { + .ndo_get_stats64 = internal_dev_get_stats, + }; - /* Queue all of the segments. */ - skb = segs; +-static struct rtnl_link_ops internal_dev_link_ops __read_mostly = { ++static struct rtnl_link_ops internal_dev_link_ops = { + .kind = "openvswitch", + }; + +diff --git a/net/openvswitch/vport.c b/net/openvswitch/vport.c +index 6015802..e81e8bf 100644 +--- a/net/openvswitch/vport.c ++++ b/net/openvswitch/vport.c +@@ -269,10 +269,10 @@ void ovs_vport_get_stats(struct vport *vport, struct ovs_vport_stats *stats) + * netdev-stats can be directly read over netlink-ioctl. + */ + +- stats->rx_errors = atomic_long_read(&vport->err_stats.rx_errors); +- stats->tx_errors = atomic_long_read(&vport->err_stats.tx_errors); +- stats->tx_dropped = atomic_long_read(&vport->err_stats.tx_dropped); +- stats->rx_dropped = atomic_long_read(&vport->err_stats.rx_dropped); ++ stats->rx_errors = atomic_long_read_unchecked(&vport->err_stats.rx_errors); ++ stats->tx_errors = atomic_long_read_unchecked(&vport->err_stats.tx_errors); ++ stats->tx_dropped = atomic_long_read_unchecked(&vport->err_stats.tx_dropped); ++ stats->rx_dropped = atomic_long_read_unchecked(&vport->err_stats.rx_dropped); + + for_each_possible_cpu(i) { + const struct pcpu_sw_netstats *percpu_stats; +@@ -503,19 +503,19 @@ static void ovs_vport_record_error(struct vport *vport, + { + switch (err_type) { + case VPORT_E_RX_DROPPED: +- atomic_long_inc(&vport->err_stats.rx_dropped); ++ atomic_long_inc_unchecked(&vport->err_stats.rx_dropped); + break; + + case VPORT_E_RX_ERROR: +- atomic_long_inc(&vport->err_stats.rx_errors); ++ atomic_long_inc_unchecked(&vport->err_stats.rx_errors); + break; + + case VPORT_E_TX_DROPPED: +- atomic_long_inc(&vport->err_stats.tx_dropped); ++ atomic_long_inc_unchecked(&vport->err_stats.tx_dropped); + break; + + case VPORT_E_TX_ERROR: +- atomic_long_inc(&vport->err_stats.tx_errors); ++ atomic_long_inc_unchecked(&vport->err_stats.tx_errors); + break; + } + +diff --git a/net/openvswitch/vport.h b/net/openvswitch/vport.h +index 8942125..03ed887 100644 +--- a/net/openvswitch/vport.h ++++ b/net/openvswitch/vport.h +@@ -61,10 +61,10 @@ int ovs_vport_send(struct vport *, struct sk_buff *); + /* The following definitions are for implementers of vport devices: */ + + struct vport_err_stats { +- atomic_long_t rx_dropped; +- atomic_long_t rx_errors; +- atomic_long_t tx_dropped; +- atomic_long_t tx_errors; ++ atomic_long_unchecked_t rx_dropped; ++ atomic_long_unchecked_t rx_errors; ++ atomic_long_unchecked_t tx_dropped; ++ atomic_long_unchecked_t tx_errors; + }; + /** + * struct vport_portids - array of netlink portids of a vport. diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c -index 93896d2..b701c88 100644 +index 07c04a8..3ca11eb 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c -@@ -275,7 +275,7 @@ static int packet_direct_xmit(struct sk_buff *skb) +@@ -269,7 +269,7 @@ static int packet_direct_xmit(struct sk_buff *skb) return ret; drop: @@ -105100,7 +104654,7 @@ index 93896d2..b701c88 100644 kfree_skb(skb); return NET_XMIT_DROP; } -@@ -1842,7 +1842,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, +@@ -1836,7 +1836,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, spin_lock(&sk->sk_receive_queue.lock); po->stats.stats1.tp_packets++; @@ -105109,7 +104663,7 @@ index 93896d2..b701c88 100644 __skb_queue_tail(&sk->sk_receive_queue, skb); spin_unlock(&sk->sk_receive_queue.lock); sk->sk_data_ready(sk); -@@ -1851,7 +1851,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, +@@ -1845,7 +1845,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, drop_n_acct: spin_lock(&sk->sk_receive_queue.lock); po->stats.stats1.tp_drops++; @@ -105118,7 +104672,7 @@ index 93896d2..b701c88 100644 spin_unlock(&sk->sk_receive_queue.lock); drop_n_restore: -@@ -3466,7 +3466,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, +@@ -3460,7 +3460,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, case PACKET_HDRLEN: if (len > sizeof(int)) len = sizeof(int); @@ -105127,7 +104681,7 @@ index 93896d2..b701c88 100644 return -EFAULT; switch (val) { case TPACKET_V1: -@@ -3512,7 +3512,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, +@@ -3506,7 +3506,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, len = lv; if (put_user(len, optlen)) return -EFAULT; @@ -105320,42 +104874,6 @@ index aa8bf67..b70133c 100644 } #endif -diff --git a/net/rds/rdma.c b/net/rds/rdma.c -index 4e37c1c..40084d8 100644 ---- a/net/rds/rdma.c -+++ b/net/rds/rdma.c -@@ -564,12 +564,12 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm, - - if (rs->rs_bound_addr == 0) { - ret = -ENOTCONN; /* XXX not a great errno */ -- goto out; -+ goto out_ret; - } - - if (args->nr_local > UIO_MAXIOV) { - ret = -EMSGSIZE; -- goto out; -+ goto out_ret; - } - - /* Check whether to allocate the iovec area */ -@@ -578,7 +578,7 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm, - iovs = sock_kmalloc(rds_rs_to_sk(rs), iov_size, GFP_KERNEL); - if (!iovs) { - ret = -ENOMEM; -- goto out; -+ goto out_ret; - } - } - -@@ -696,6 +696,7 @@ out: - if (iovs != iovstack) - sock_kfree_s(rds_rs_to_sk(rs), iovs, iov_size); - kfree(pages); -+out_ret: - if (ret) - rds_rdma_free_op(op); - else diff --git a/net/rds/rds.h b/net/rds/rds.h index 48f8ffc..0ef3eec 100644 --- a/net/rds/rds.h @@ -105369,43 +104887,6 @@ index 48f8ffc..0ef3eec 100644 struct rds_sock { struct sock rs_sk; -diff --git a/net/rds/send.c b/net/rds/send.c -index 2371816..0a64541 100644 ---- a/net/rds/send.c -+++ b/net/rds/send.c -@@ -593,8 +593,11 @@ static void rds_send_remove_from_sock(struct list_head *messages, int status) - sock_put(rds_rs_to_sk(rs)); - } - rs = rm->m_rs; -- sock_hold(rds_rs_to_sk(rs)); -+ if (rs) -+ sock_hold(rds_rs_to_sk(rs)); - } -+ if (!rs) -+ goto unlock_and_drop; - spin_lock(&rs->rs_lock); - - if (test_and_clear_bit(RDS_MSG_ON_SOCK, &rm->m_flags)) { -@@ -638,9 +641,6 @@ unlock_and_drop: - * queue. This means that in the TCP case, the message may not have been - * assigned the m_ack_seq yet - but that's fine as long as tcp_is_acked - * checks the RDS_MSG_HAS_ACK_SEQ bit. -- * -- * XXX It's not clear to me how this is safely serialized with socket -- * destruction. Maybe it should bail if it sees SOCK_DEAD. - */ - void rds_send_drop_acked(struct rds_connection *conn, u64 ack, - is_acked_func is_acked) -@@ -711,6 +711,9 @@ void rds_send_drop_to(struct rds_sock *rs, struct sockaddr_in *dest) - */ - if (!test_and_clear_bit(RDS_MSG_ON_CONN, &rm->m_flags)) { - spin_unlock_irqrestore(&conn->c_lock, flags); -+ spin_lock_irqsave(&rm->m_rs_lock, flags); -+ rm->m_rs = NULL; -+ spin_unlock_irqrestore(&rm->m_rs_lock, flags); - continue; - } - list_del_init(&rm->m_conn_item); diff --git a/net/rds/tcp.c b/net/rds/tcp.c index edac9ef..16bcb98 100644 --- a/net/rds/tcp.c @@ -105552,10 +105033,10 @@ index e7ed43a..6afa140 100644 ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 2, len); diff --git a/net/rxrpc/ar-input.c b/net/rxrpc/ar-input.c -index 63b21e5..330232e 100644 +index 481f89f..ceeaf8d 100644 --- a/net/rxrpc/ar-input.c +++ b/net/rxrpc/ar-input.c -@@ -338,9 +338,9 @@ void rxrpc_fast_process_packet(struct rxrpc_call *call, struct sk_buff *skb) +@@ -331,9 +331,9 @@ void rxrpc_fast_process_packet(struct rxrpc_call *call, struct sk_buff *skb) /* track the latest serial number on this connection for ACK packet * information */ serial = ntohl(sp->hdr.serial); @@ -105698,10 +105179,10 @@ index f226709..0e735a8 100644 ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 3, len); diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c -index fc04fe9..8167357 100644 +index 6efca30..1259f82 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c -@@ -310,7 +310,7 @@ void netif_carrier_on(struct net_device *dev) +@@ -349,7 +349,7 @@ void netif_carrier_on(struct net_device *dev) if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) { if (dev->reg_state == NETREG_UNINITIALIZED) return; @@ -105710,7 +105191,7 @@ index fc04fe9..8167357 100644 linkwatch_fire_event(dev); if (netif_running(dev)) __netdev_watchdog_up(dev); -@@ -329,7 +329,7 @@ void netif_carrier_off(struct net_device *dev) +@@ -368,7 +368,7 @@ void netif_carrier_off(struct net_device *dev) if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state)) { if (dev->reg_state == NETREG_UNINITIALIZED) return; @@ -105751,7 +105232,7 @@ index 0e4198e..f94193e 100644 /* Initialize IPv6 support and register with socket layer. */ diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c -index 6240834..cac4b52 100644 +index 8f34b27..b105385 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c @@ -836,8 +836,10 @@ int sctp_register_af(struct sctp_af *af) @@ -105938,7 +105419,7 @@ index 2e9ada1..40f425d 100644 table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL); diff --git a/net/socket.c b/net/socket.c -index 4cdbc10..f075204 100644 +index fe20c31..83a0ed6 100644 --- a/net/socket.c +++ b/net/socket.c @@ -89,6 +89,7 @@ @@ -105976,7 +105457,7 @@ index 4cdbc10..f075204 100644 static struct file_system_type sock_fs_type = { .name = "sockfs", -@@ -1265,6 +1268,8 @@ int __sock_create(struct net *net, int family, int type, int protocol, +@@ -1263,6 +1266,8 @@ int __sock_create(struct net *net, int family, int type, int protocol, return -EAFNOSUPPORT; if (type < 0 || type >= SOCK_MAX) return -EINVAL; @@ -105985,7 +105466,7 @@ index 4cdbc10..f075204 100644 /* Compatibility. -@@ -1285,6 +1290,20 @@ int __sock_create(struct net *net, int family, int type, int protocol, +@@ -1283,6 +1288,20 @@ int __sock_create(struct net *net, int family, int type, int protocol, if (err) return err; @@ -106006,7 +105487,7 @@ index 4cdbc10..f075204 100644 /* * Allocate the socket and allow the family to set things up. if * the protocol is 0, the family is instructed to select an appropriate -@@ -1536,6 +1555,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) +@@ -1534,6 +1553,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) if (sock) { err = move_addr_to_kernel(umyaddr, addrlen, &address); if (err >= 0) { @@ -106021,7 +105502,7 @@ index 4cdbc10..f075204 100644 err = security_socket_bind(sock, (struct sockaddr *)&address, addrlen); -@@ -1544,6 +1571,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) +@@ -1542,6 +1569,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) (struct sockaddr *) &address, addrlen); } @@ -106029,7 +105510,7 @@ index 4cdbc10..f075204 100644 fput_light(sock->file, fput_needed); } return err; -@@ -1567,10 +1595,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog) +@@ -1565,10 +1593,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog) if ((unsigned int)backlog > somaxconn) backlog = somaxconn; @@ -106050,7 +105531,7 @@ index 4cdbc10..f075204 100644 fput_light(sock->file, fput_needed); } return err; -@@ -1614,6 +1652,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, +@@ -1612,6 +1650,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, newsock->type = sock->type; newsock->ops = sock->ops; @@ -106069,7 +105550,7 @@ index 4cdbc10..f075204 100644 /* * We don't need try_module_get here, as the listening socket (sock) * has the protocol module (sock->ops->owner) held. -@@ -1659,6 +1709,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, +@@ -1657,6 +1707,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, fd_install(newfd, newfile); err = newfd; @@ -106078,7 +105559,7 @@ index 4cdbc10..f075204 100644 out_put: fput_light(sock->file, fput_needed); out: -@@ -1691,6 +1743,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, +@@ -1689,6 +1741,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, int, addrlen) { struct socket *sock; @@ -106086,7 +105567,7 @@ index 4cdbc10..f075204 100644 struct sockaddr_storage address; int err, fput_needed; -@@ -1701,6 +1754,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, +@@ -1699,6 +1752,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, if (err < 0) goto out_put; @@ -106104,7 +105585,7 @@ index 4cdbc10..f075204 100644 err = security_socket_connect(sock, (struct sockaddr *)&address, addrlen); if (err) -@@ -1782,6 +1846,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, +@@ -1780,6 +1844,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, * the protocol. */ @@ -106113,7 +105594,7 @@ index 4cdbc10..f075204 100644 SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len, unsigned int, flags, struct sockaddr __user *, addr, int, addr_len) -@@ -1848,7 +1914,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size, +@@ -1846,7 +1912,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size, struct socket *sock; struct iovec iov; struct msghdr msg; @@ -106122,7 +105603,7 @@ index 4cdbc10..f075204 100644 int err, err2; int fput_needed; -@@ -2077,7 +2143,7 @@ static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg, +@@ -2075,7 +2141,7 @@ static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg, * checking falls down on this. */ if (copy_from_user(ctl_buf, @@ -106131,7 +105612,7 @@ index 4cdbc10..f075204 100644 ctl_len)) goto out_freectl; msg_sys->msg_control = ctl_buf; -@@ -2228,7 +2294,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg, +@@ -2226,7 +2292,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg, int err, total_len, len; /* kernel mode address */ @@ -106140,7 +105621,7 @@ index 4cdbc10..f075204 100644 /* user mode address pointers */ struct sockaddr __user *uaddr; -@@ -2257,7 +2323,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg, +@@ -2255,7 +2321,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg, /* Save the user-mode address (verify_iovec will change the * kernel msghdr to use the kernel address space) */ @@ -106149,7 +105630,7 @@ index 4cdbc10..f075204 100644 uaddr_len = COMPAT_NAMELEN(msg); if (MSG_CMSG_COMPAT & flags) err = verify_compat_iovec(msg_sys, iov, &addr, VERIFY_WRITE); -@@ -2898,7 +2964,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32) +@@ -2896,7 +2962,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32) ifr = compat_alloc_user_space(buf_size); rxnfc = (void __user *)ifr + ALIGN(sizeof(struct ifreq), 8); @@ -106158,7 +105639,7 @@ index 4cdbc10..f075204 100644 return -EFAULT; if (put_user(convert_in ? rxnfc : compat_ptr(data), -@@ -3009,7 +3075,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd, +@@ -3007,7 +3073,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd, old_fs = get_fs(); set_fs(KERNEL_DS); err = dev_ioctl(net, cmd, @@ -106167,7 +105648,7 @@ index 4cdbc10..f075204 100644 set_fs(old_fs); return err; -@@ -3102,7 +3168,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd, +@@ -3100,7 +3166,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd, old_fs = get_fs(); set_fs(KERNEL_DS); @@ -106176,7 +105657,7 @@ index 4cdbc10..f075204 100644 set_fs(old_fs); if (cmd == SIOCGIFMAP && !err) { -@@ -3186,7 +3252,7 @@ static int routing_ioctl(struct net *net, struct socket *sock, +@@ -3184,7 +3250,7 @@ static int routing_ioctl(struct net *net, struct socket *sock, ret |= get_user(rtdev, &(ur4->rt_dev)); if (rtdev) { ret |= copy_from_user(devname, compat_ptr(rtdev), 15); @@ -106185,7 +105666,7 @@ index 4cdbc10..f075204 100644 devname[15] = 0; } else r4.rt_dev = NULL; -@@ -3413,8 +3479,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname, +@@ -3411,8 +3477,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname, int __user *uoptlen; int err; @@ -106196,7 +105677,7 @@ index 4cdbc10..f075204 100644 set_fs(KERNEL_DS); if (level == SOL_SOCKET) -@@ -3434,7 +3500,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname, +@@ -3432,7 +3498,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname, char __user *uoptval; int err; @@ -106241,7 +105722,7 @@ index 0663621..c4928d4 100644 goto out_nomem; cd->u.procfs.channel_ent = NULL; diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c -index e0b94ce..6135813 100644 +index 9acd6ce..4353a72 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -1428,7 +1428,9 @@ call_start(struct rpc_task *task) @@ -106256,7 +105737,7 @@ index e0b94ce..6135813 100644 task->tk_action = call_reserve; } diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c -index 9358c79..22d0a5b 100644 +index fe3441a..922c29e 100644 --- a/net/sunrpc/sched.c +++ b/net/sunrpc/sched.c @@ -261,9 +261,9 @@ static int rpc_wait_bit_killable(struct wait_bit_key *key) @@ -106285,10 +105766,10 @@ index 5453049..465669a 100644 return -ENOMEM; diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c -index 1db5007..6e66296 100644 +index ca8a795..ddfc41b 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c -@@ -1167,7 +1167,9 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) +@@ -1165,7 +1165,9 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) svc_putnl(resv, RPC_SUCCESS); /* Bump per-procedure stats counter */ @@ -106486,7 +105967,7 @@ index 9f1b506..2e0b321 100644 goto err; return write_len - bc; diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c -index 374feb4..46487d5 100644 +index 4e61880..1f0d963 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_transport.c +++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c @@ -295,7 +295,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt) @@ -106548,10 +106029,10 @@ index e7000be..e3b0ba7 100644 int mode = (table->mode >> 6) & 7; return (mode << 6) | (mode << 3) | mode; diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c -index 6424372..afd36e9 100644 +index 31b5cb2..566ff01 100644 --- a/net/tipc/subscr.c +++ b/net/tipc/subscr.c -@@ -97,7 +97,7 @@ static void subscr_send_event(struct tipc_subscription *sub, u32 found_lower, +@@ -96,7 +96,7 @@ static void subscr_send_event(struct tipc_subscription *sub, u32 found_lower, struct tipc_subscriber *subscriber = sub->subscriber; struct kvec msg_sect; @@ -106792,21 +106273,8 @@ index 0917f04..f4e3d8c 100644 return -ENOMEM; if (!proc_create("x25/route", S_IRUGO, init_net.proc_net, -diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c -index c51e8f7b..e44f360 100644 ---- a/net/xfrm/xfrm_output.c -+++ b/net/xfrm/xfrm_output.c -@@ -157,6 +157,8 @@ static int xfrm_output_gso(struct sk_buff *skb) - kfree_skb(skb); - if (IS_ERR(segs)) - return PTR_ERR(segs); -+ if (segs == NULL) -+ return -EINVAL; - - do { - struct sk_buff *nskb = segs->next; diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c -index fdde51f..4839450 100644 +index 88bf289..7b0741b 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -330,7 +330,7 @@ static void xfrm_policy_kill(struct xfrm_policy *policy) @@ -106818,7 +106286,7 @@ index fdde51f..4839450 100644 if (del_timer(&policy->polq.hold_timer)) xfrm_pol_put(policy); -@@ -664,7 +664,7 @@ int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) +@@ -781,7 +781,7 @@ int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl) hlist_add_head(&policy->bydst, chain); xfrm_pol_hold(policy); net->xfrm.policy_count[dir]++; @@ -106827,7 +106295,7 @@ index fdde51f..4839450 100644 /* After previous checking, family can either be AF_INET or AF_INET6 */ if (policy->family == AF_INET) -@@ -1754,7 +1754,7 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols, +@@ -1871,7 +1871,7 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols, xdst->num_pols = num_pols; memcpy(xdst->pols, pols, sizeof(struct xfrm_policy *) * num_pols); @@ -106836,7 +106304,7 @@ index fdde51f..4839450 100644 return xdst; } -@@ -2570,10 +2570,11 @@ void xfrm_garbage_collect(struct net *net) +@@ -2685,10 +2685,11 @@ void xfrm_garbage_collect(struct net *net) } EXPORT_SYMBOL(xfrm_garbage_collect); @@ -106849,7 +106317,7 @@ index fdde51f..4839450 100644 static void xfrm_init_pmtu(struct dst_entry *dst) { -@@ -2623,7 +2624,7 @@ static int xfrm_bundle_ok(struct xfrm_dst *first) +@@ -2738,7 +2739,7 @@ static int xfrm_bundle_ok(struct xfrm_dst *first) if (xdst->xfrm_genid != dst->xfrm->genid) return 0; if (xdst->num_pols > 0 && @@ -106858,7 +106326,7 @@ index fdde51f..4839450 100644 return 0; mtu = dst_mtu(dst->child); -@@ -2711,8 +2712,6 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo) +@@ -2826,8 +2827,6 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo) dst_ops->link_failure = xfrm_link_failure; if (likely(dst_ops->neigh_lookup == NULL)) dst_ops->neigh_lookup = xfrm_neigh_lookup; @@ -106867,7 +106335,7 @@ index fdde51f..4839450 100644 rcu_assign_pointer(xfrm_policy_afinfo[afinfo->family], afinfo); } spin_unlock(&xfrm_policy_afinfo_lock); -@@ -2766,7 +2765,6 @@ int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo) +@@ -2881,7 +2880,6 @@ int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo) dst_ops->check = NULL; dst_ops->negative_advice = NULL; dst_ops->link_failure = NULL; @@ -106875,7 +106343,7 @@ index fdde51f..4839450 100644 } return err; } -@@ -3151,7 +3149,7 @@ static int xfrm_policy_migrate(struct xfrm_policy *pol, +@@ -3277,7 +3275,7 @@ static int xfrm_policy_migrate(struct xfrm_policy *pol, sizeof(pol->xfrm_vec[i].saddr)); pol->xfrm_vec[i].encap_family = mp->new_family; /* flush bundles */ @@ -106885,10 +106353,10 @@ index fdde51f..4839450 100644 } diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c -index 0ab5413..73dd2cf 100644 +index de971b6..b843409 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c -@@ -173,12 +173,14 @@ int xfrm_register_type(const struct xfrm_type *type, unsigned short family) +@@ -166,12 +166,14 @@ int xfrm_register_type(const struct xfrm_type *type, unsigned short family) if (unlikely(afinfo == NULL)) return -EAFNOSUPPORT; @@ -106906,7 +106374,7 @@ index 0ab5413..73dd2cf 100644 err = -EEXIST; spin_unlock_bh(&xfrm_type_lock); xfrm_state_put_afinfo(afinfo); -@@ -194,13 +196,16 @@ int xfrm_unregister_type(const struct xfrm_type *type, unsigned short family) +@@ -187,13 +189,16 @@ int xfrm_unregister_type(const struct xfrm_type *type, unsigned short family) if (unlikely(afinfo == NULL)) return -EAFNOSUPPORT; @@ -106925,7 +106393,7 @@ index 0ab5413..73dd2cf 100644 spin_unlock_bh(&xfrm_type_lock); xfrm_state_put_afinfo(afinfo); return err; -@@ -210,7 +215,6 @@ EXPORT_SYMBOL(xfrm_unregister_type); +@@ -203,7 +208,6 @@ EXPORT_SYMBOL(xfrm_unregister_type); static const struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family) { struct xfrm_state_afinfo *afinfo; @@ -106933,7 +106401,7 @@ index 0ab5413..73dd2cf 100644 const struct xfrm_type *type; int modload_attempted = 0; -@@ -218,9 +222,8 @@ retry: +@@ -211,9 +215,8 @@ retry: afinfo = xfrm_state_get_afinfo(family); if (unlikely(afinfo == NULL)) return NULL; @@ -106944,7 +106412,7 @@ index 0ab5413..73dd2cf 100644 if (unlikely(type && !try_module_get(type->owner))) type = NULL; if (!type && !modload_attempted) { -@@ -254,7 +257,7 @@ int xfrm_register_mode(struct xfrm_mode *mode, int family) +@@ -247,7 +250,7 @@ int xfrm_register_mode(struct xfrm_mode *mode, int family) return -EAFNOSUPPORT; err = -EEXIST; @@ -106953,7 +106421,7 @@ index 0ab5413..73dd2cf 100644 spin_lock_bh(&xfrm_mode_lock); if (modemap[mode->encap]) goto out; -@@ -263,8 +266,10 @@ int xfrm_register_mode(struct xfrm_mode *mode, int family) +@@ -256,8 +259,10 @@ int xfrm_register_mode(struct xfrm_mode *mode, int family) if (!try_module_get(afinfo->owner)) goto out; @@ -106965,7 +106433,7 @@ index 0ab5413..73dd2cf 100644 err = 0; out: -@@ -288,10 +293,12 @@ int xfrm_unregister_mode(struct xfrm_mode *mode, int family) +@@ -281,10 +286,12 @@ int xfrm_unregister_mode(struct xfrm_mode *mode, int family) return -EAFNOSUPPORT; err = -ENOENT; @@ -106979,7 +106447,7 @@ index 0ab5413..73dd2cf 100644 module_put(mode->afinfo->owner); err = 0; } -@@ -1512,10 +1519,10 @@ EXPORT_SYMBOL(xfrm_find_acq_byseq); +@@ -1505,10 +1512,10 @@ EXPORT_SYMBOL(xfrm_find_acq_byseq); u32 xfrm_get_acqseq(void) { u32 res; @@ -107006,7 +106474,7 @@ index 05a6e3d..6716ec9 100644 __xfrm_sysctl_init(net); diff --git a/scripts/Makefile.build b/scripts/Makefile.build -index bf3e677..c7d426e 100644 +index 649ce68..f6bc05c 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -60,7 +60,7 @@ endif @@ -107019,10 +106487,10 @@ index bf3e677..c7d426e 100644 endif diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean -index a651cee..6b3b9a3 100644 +index b1c668d..638055f 100644 --- a/scripts/Makefile.clean +++ b/scripts/Makefile.clean -@@ -43,7 +43,8 @@ subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) +@@ -41,7 +41,8 @@ subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) __clean-files := $(extra-y) $(extra-m) $(extra-) \ $(always) $(targets) $(clean-files) \ $(host-progs) \ @@ -107033,7 +106501,7 @@ index a651cee..6b3b9a3 100644 __clean-files := $(filter-out $(no-clean-files), $(__clean-files)) diff --git a/scripts/Makefile.host b/scripts/Makefile.host -index ab5980f..85fd3e1 100644 +index 133edfa..c9aa07f 100644 --- a/scripts/Makefile.host +++ b/scripts/Makefile.host @@ -20,7 +20,19 @@ @@ -107087,25 +106555,7 @@ index ab5980f..85fd3e1 100644 host-objdirs := $(addprefix $(obj)/,$(host-objdirs)) obj-dirs += $(host-objdirs) -@@ -96,7 +125,7 @@ quiet_cmd_host-cmulti = HOSTLD $@ - cmd_host-cmulti = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \ - $(addprefix $(obj)/,$($(@F)-objs)) \ - $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) --$(host-cmulti): $(obj)/%: $(host-cobjs) FORCE -+$(host-cmulti): $(obj)/%: $(host-cobjs) $(host-cshlib) FORCE - $(call if_changed,host-cmulti) - - # Create .o file from a single .c file -@@ -113,7 +142,7 @@ quiet_cmd_host-cxxmulti = HOSTLD $@ - $(foreach o,objs cxxobjs,\ - $(addprefix $(obj)/,$($(@F)-$(o)))) \ - $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) --$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) FORCE -+$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE - $(call if_changed,host-cxxmulti) - - # Create .o file from a single .cc (C++) file -@@ -122,5 +151,37 @@ quiet_cmd_host-cxxobjs = HOSTCXX $@ +@@ -124,5 +153,37 @@ quiet_cmd_host-cxxobjs = HOSTCXX $@ $(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE $(call if_changed_dep,host-cxxobjs) @@ -107249,7 +106699,7 @@ index 0000000..42018ed +fi +exit 1 diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh -index 5de5660..d3deb89 100644 +index fdebd66..a349e33 100755 --- a/scripts/headers_install.sh +++ b/scripts/headers_install.sh @@ -32,6 +32,7 @@ do @@ -107261,7 +106711,7 @@ index 5de5660..d3deb89 100644 -e 's@^#include @@' \ -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \ diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh -index 86a4fe7..99e91f9 100644 +index 86a4fe7..99e91f9 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -166,7 +166,7 @@ else @@ -107341,10 +106791,10 @@ index e614ef6..d9d2b01 100644 sprintf(alias, "dmi*"); diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c -index 091d905..77b88c7 100644 +index d439856..10c1eac 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c -@@ -920,6 +920,7 @@ enum mismatch { +@@ -921,6 +921,7 @@ enum mismatch { ANY_INIT_TO_ANY_EXIT, ANY_EXIT_TO_ANY_INIT, EXPORT_TO_INIT_EXIT, @@ -107352,7 +106802,7 @@ index 091d905..77b88c7 100644 }; struct sectioncheck { -@@ -1006,6 +1007,12 @@ const struct sectioncheck sectioncheck[] = { +@@ -1007,6 +1008,12 @@ static const struct sectioncheck sectioncheck[] = { .tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL }, .mismatch = EXPORT_TO_INIT_EXIT, .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL }, @@ -107365,7 +106815,7 @@ index 091d905..77b88c7 100644 } }; -@@ -1126,10 +1133,10 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr, +@@ -1127,10 +1134,10 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr, continue; if (ELF_ST_TYPE(sym->st_info) == STT_SECTION) continue; @@ -107378,7 +106828,7 @@ index 091d905..77b88c7 100644 if (d < 0) d = addr - sym->st_value; if (d < distance) { -@@ -1407,6 +1414,14 @@ static void report_sec_mismatch(const char *modname, +@@ -1408,6 +1415,14 @@ static void report_sec_mismatch(const char *modname, tosym, prl_to, prl_to, tosym); free(prl_to); break; @@ -107393,7 +106843,7 @@ index 091d905..77b88c7 100644 } fprintf(stderr, "\n"); } -@@ -1658,7 +1673,7 @@ static void section_rel(const char *modname, struct elf_info *elf, +@@ -1659,7 +1674,7 @@ static void section_rel(const char *modname, struct elf_info *elf, static void check_sec_ref(struct module *mod, const char *modname, struct elf_info *elf) { @@ -107402,7 +106852,7 @@ index 091d905..77b88c7 100644 Elf_Shdr *sechdrs = elf->sechdrs; /* Walk through all sections */ -@@ -1789,7 +1804,7 @@ void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf, +@@ -1790,7 +1805,7 @@ void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf, va_end(ap); } @@ -107411,7 +106861,7 @@ index 091d905..77b88c7 100644 { if (buf->size - buf->pos < len) { buf->size += len + SZ; -@@ -2008,7 +2023,7 @@ static void write_if_changed(struct buffer *b, const char *fname) +@@ -2009,7 +2024,7 @@ static void write_if_changed(struct buffer *b, const char *fname) if (fstat(fileno(file), &st) < 0) goto close_write; @@ -107471,8 +106921,21 @@ index 0865b3e..7235dd4 100644 __ksymtab : { *(SORT(___ksymtab+*)) } __ksymtab_gpl : { *(SORT(___ksymtab_gpl+*)) } __ksymtab_unused : { *(SORT(___ksymtab_unused+*)) } +diff --git a/scripts/package/Makefile b/scripts/package/Makefile +index 99ca6e7..3a1a1a1 100644 +--- a/scripts/package/Makefile ++++ b/scripts/package/Makefile +@@ -46,7 +46,7 @@ rpm-pkg rpm: FORCE + ln -sf $(srctree) $(KERNELPATH) + $(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec + $(CONFIG_SHELL) $(srctree)/scripts/setlocalversion --save-scmversion +- tar -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(TAR_CONTENT) ++ tar --owner=root --group=root -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(TAR_CONTENT) + rm $(KERNELPATH) + rm -f $(objtree)/.scmversion + $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version diff --git a/scripts/package/builddeb b/scripts/package/builddeb -index 7c0e6e4..bf2c90e 100644 +index 5972624..4028795 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -293,6 +293,7 @@ fi @@ -107484,13 +106947,22 @@ index 7c0e6e4..bf2c90e 100644 mkdir -p "$destdir" (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) diff --git a/scripts/package/mkspec b/scripts/package/mkspec -index 1395760..e4f4ac4 100755 +index 1395760..bca2734 100755 --- a/scripts/package/mkspec +++ b/scripts/package/mkspec -@@ -82,6 +82,16 @@ echo "" - fi +@@ -121,29 +121,40 @@ echo 'rm -f $RPM_BUILD_ROOT'"/lib/modules/$KERNELRELEASE/{build,source}" + echo "mkdir -p "'$RPM_BUILD_ROOT'"/usr/src/kernels/$KERNELRELEASE" + echo "EXCLUDES=\"$RCS_TAR_IGNORE --exclude .tmp_versions --exclude=*vmlinux* --exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation --exclude=firmware --exclude .config.old --exclude .missing-syscalls.d\"" + echo "tar "'$EXCLUDES'" -cf- . | (cd "'$RPM_BUILD_ROOT'"/usr/src/kernels/$KERNELRELEASE;tar xvf -)" +-echo 'cd $RPM_BUILD_ROOT'"/lib/modules/$KERNELRELEASE" +-echo "ln -sf /usr/src/kernels/$KERNELRELEASE build" +-echo "ln -sf /usr/src/kernels/$KERNELRELEASE source" - echo "%install" + echo "" + echo "%clean" + echo 'rm -rf $RPM_BUILD_ROOT' + echo "" ++echo "%pre" +echo 'chmod -f 0500 /boot' +echo 'if [ -d /lib/modules ]; then' +echo 'chmod -f 0500 /lib/modules' @@ -107501,27 +106973,46 @@ index 1395760..e4f4ac4 100755 +echo 'if [ -d /lib64/modules ]; then' +echo 'chmod -f 0500 /lib64/modules' +echo 'fi' - echo 'KBUILD_IMAGE=$(make image_name)' - echo "%ifarch ia64" - echo 'mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib/modules' -@@ -139,7 +149,7 @@ echo "rm -f /boot/vmlinuz-$KERNELRELEASE-rpm /boot/System.map-$KERNELRELEASE-rpm ++echo "" ++echo "%post devel" ++echo "ln -sf /usr/src/kernels/$KERNELRELEASE /lib/modules/$KERNELRELEASE/build" ++echo "ln -sf /usr/src/kernels/$KERNELRELEASE /lib/modules/$KERNELRELEASE/source" ++echo "" + echo "%post" +-echo "if [ -x /sbin/installkernel -a -r /boot/vmlinuz-$KERNELRELEASE -a -r /boot/System.map-$KERNELRELEASE ]; then" +-echo "cp /boot/vmlinuz-$KERNELRELEASE /boot/vmlinuz-$KERNELRELEASE-rpm" +-echo "cp /boot/System.map-$KERNELRELEASE /boot/System.map-$KERNELRELEASE-rpm" +-echo "rm -f /boot/vmlinuz-$KERNELRELEASE /boot/System.map-$KERNELRELEASE" +-echo "/sbin/installkernel $KERNELRELEASE /boot/vmlinuz-$KERNELRELEASE-rpm /boot/System.map-$KERNELRELEASE-rpm" +-echo "rm -f /boot/vmlinuz-$KERNELRELEASE-rpm /boot/System.map-$KERNELRELEASE-rpm" ++echo "if [ -x /sbin/dracut ]; then" ++echo '/sbin/new-kernel-pkg --dracut --mkinitrd --depmod --install --make-default '"$KERNELRELEASE"' || exit $?' ++echo "else" ++echo '/sbin/new-kernel-pkg --mkinitrd --depmod --install --make-default '"$KERNELRELEASE"' || exit $?' echo "fi" echo "" echo "%files" -echo '%defattr (-, root, root)' +echo '%defattr (400, root, root, 500)' echo "%dir /lib/modules" - echo "/lib/modules/$KERNELRELEASE" +-echo "/lib/modules/$KERNELRELEASE" echo "%exclude /lib/modules/$KERNELRELEASE/build" -@@ -152,7 +162,7 @@ echo '%defattr (-, root, root)' + echo "%exclude /lib/modules/$KERNELRELEASE/source" ++echo "/lib/modules/$KERNELRELEASE" + echo "/lib/firmware/$KERNELRELEASE" + echo "/boot/*" + echo "" +@@ -152,8 +163,7 @@ echo '%defattr (-, root, root)' echo "/usr/include" echo "" echo "%files devel" -echo '%defattr (-, root, root)' +echo '%defattr (400, root, root, 500)' ++echo "%dir /lib/modules/$KERNELRELEASE" echo "/usr/src/kernels/$KERNELRELEASE" - echo "/lib/modules/$KERNELRELEASE/build" - echo "/lib/modules/$KERNELRELEASE/source" +-echo "/lib/modules/$KERNELRELEASE/build" +-echo "/lib/modules/$KERNELRELEASE/source" + echo "" diff --git a/scripts/pnmtologo.c b/scripts/pnmtologo.c index 4718d78..9220d58 100644 --- a/scripts/pnmtologo.c @@ -107553,7 +107044,7 @@ index 4718d78..9220d58 100644 write_hex_cnt = 0; for (i = 0; i < logo_clutsize; i++) { diff --git a/scripts/sortextable.h b/scripts/sortextable.h -index 8fac3fd..32ff38d 100644 +index ba87004..3f4852c 100644 --- a/scripts/sortextable.h +++ b/scripts/sortextable.h @@ -108,9 +108,9 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort) @@ -107570,7 +107061,7 @@ index 8fac3fd..32ff38d 100644 unsigned int secindex_strings; diff --git a/scripts/tags.sh b/scripts/tags.sh -index 293828b..9fbe696 100755 +index cdb491d..8d32bfc 100755 --- a/scripts/tags.sh +++ b/scripts/tags.sh @@ -26,7 +26,7 @@ else @@ -107583,10 +107074,10 @@ index 293828b..9fbe696 100755 # Find all available archs find_all_archs() diff --git a/security/Kconfig b/security/Kconfig -index beb86b5..00daaca 100644 +index beb86b5..1a953b1 100644 --- a/security/Kconfig +++ b/security/Kconfig -@@ -4,6 +4,969 @@ +@@ -4,6 +4,974 @@ menu "Security options" @@ -107750,6 +107241,11 @@ index beb86b5..00daaca 100644 + help + Choose this option if this kernel is running as a VirtualBox guest or host. + ++config GRKERNSEC_CONFIG_VIRT_HYPERV ++ bool "Hyper-V" ++ help ++ Choose this option if this kernel is running as a Hyper-V guest. ++ +endchoice + +choice @@ -108556,7 +108052,7 @@ index beb86b5..00daaca 100644 source security/keys/Kconfig config SECURITY_DMESG_RESTRICT -@@ -103,7 +1066,7 @@ config INTEL_TXT +@@ -103,7 +1071,7 @@ config INTEL_TXT config LSM_MMAP_MIN_ADDR int "Low address space for LSM to protect from user allocation" depends on SECURITY && SECURITY_SELINUX @@ -108581,7 +108077,7 @@ index fdaa50c..2761dcb 100644 old_dentry->d_inode->i_uid, old_dentry->d_inode->i_mode diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c -index 9981000..eb21356 100644 +index 65ca451..ad6f22d 100644 --- a/security/apparmor/lsm.c +++ b/security/apparmor/lsm.c @@ -186,7 +186,7 @@ static int common_perm_dir_dentry(int op, struct path *dir, @@ -108670,10 +108166,10 @@ index bab0611..f9a0ff5 100644 if (bprm->cap_effective) return 1; diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h -index 0fb456c..83711f9 100644 +index 8ee997d..24c174b 100644 --- a/security/integrity/ima/ima.h +++ b/security/integrity/ima/ima.h -@@ -118,8 +118,8 @@ int ima_init_template(void); +@@ -116,8 +116,8 @@ int ima_init_template(void); extern spinlock_t ima_queue_lock; struct ima_h_table { @@ -108685,7 +108181,7 @@ index 0fb456c..83711f9 100644 }; extern struct ima_h_table ima_htable; diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c -index d9cd5ce..c5c29ac 100644 +index 8688597..9fa80d2 100644 --- a/security/integrity/ima/ima_api.c +++ b/security/integrity/ima/ima_api.c @@ -137,7 +137,7 @@ void ima_add_violation(struct file *file, const unsigned char *filename, @@ -108743,7 +108239,7 @@ index 3478965..ec7bb9e 100644 if (iov != iovstack) kfree(iov); diff --git a/security/keys/internal.h b/security/keys/internal.h -index 5f20da0..444ccf1 100644 +index 200e378..cdc74b5 100644 --- a/security/keys/internal.h +++ b/security/keys/internal.h @@ -244,7 +244,7 @@ extern long keyctl_instantiate_key_iov(key_serial_t, @@ -108756,7 +108252,7 @@ index 5f20da0..444ccf1 100644 #ifdef CONFIG_PERSISTENT_KEYRINGS extern long keyctl_get_persistent(uid_t, key_serial_t); diff --git a/security/keys/key.c b/security/keys/key.c -index 6d0cad1..8f957df 100644 +index e17ba6a..2cc04a6 100644 --- a/security/keys/key.c +++ b/security/keys/key.c @@ -285,7 +285,7 @@ struct key *key_alloc(struct key_type *type, const char *desc, @@ -108813,10 +108309,10 @@ index 6d0cad1..8f957df 100644 /* record the root user tracking */ rb_link_node(&root_key_user.node, diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c -index eff88a5..51d35ef 100644 +index 4743d71..170a185 100644 --- a/security/keys/keyctl.c +++ b/security/keys/keyctl.c -@@ -1004,7 +1004,7 @@ static int keyctl_change_reqkey_auth(struct key *key) +@@ -1000,7 +1000,7 @@ static int keyctl_change_reqkey_auth(struct key *key) /* * Copy the iovec data from userspace */ @@ -108825,7 +108321,7 @@ index eff88a5..51d35ef 100644 unsigned ioc) { for (; ioc > 0; ioc--) { -@@ -1026,7 +1026,7 @@ static long copy_from_user_iovec(void *buffer, const struct iovec *iov, +@@ -1022,7 +1022,7 @@ static long copy_from_user_iovec(void *buffer, const struct iovec *iov, * If successful, 0 will be returned. */ long keyctl_instantiate_key_common(key_serial_t id, @@ -108834,7 +108330,7 @@ index eff88a5..51d35ef 100644 unsigned ioc, size_t plen, key_serial_t ringid) -@@ -1121,7 +1121,7 @@ long keyctl_instantiate_key(key_serial_t id, +@@ -1117,7 +1117,7 @@ long keyctl_instantiate_key(key_serial_t id, [0].iov_len = plen }; @@ -108843,7 +108339,7 @@ index eff88a5..51d35ef 100644 } return keyctl_instantiate_key_common(id, NULL, 0, 0, ringid); -@@ -1154,7 +1154,7 @@ long keyctl_instantiate_key_iov(key_serial_t id, +@@ -1150,7 +1150,7 @@ long keyctl_instantiate_key_iov(key_serial_t id, if (ret == 0) goto no_payload_free; @@ -108873,7 +108369,7 @@ index f728728..6457a0c 100644 /* diff --git a/security/security.c b/security/security.c -index e41b1a8..b66a558 100644 +index 18b35c6..c9fbc92 100644 --- a/security/security.c +++ b/security/security.c @@ -33,8 +33,8 @@ @@ -108931,7 +108427,7 @@ index a18f1fa..c9b9fc4 100644 lock = &avc_cache.slots_lock[hvalue]; diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c -index e03bad5..b15da09 100644 +index c603b20..8716ec9 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -95,8 +95,6 @@ @@ -108943,7 +108439,7 @@ index e03bad5..b15da09 100644 /* SECMARK reference count */ static atomic_t selinux_secmark_refcount = ATOMIC_INIT(0); -@@ -5772,7 +5770,7 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer) +@@ -5809,7 +5807,7 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer) #endif @@ -108952,7 +108448,7 @@ index e03bad5..b15da09 100644 .name = "selinux", .ptrace_access_check = selinux_ptrace_access_check, -@@ -6128,6 +6126,9 @@ static void selinux_nf_ip_exit(void) +@@ -6150,6 +6148,9 @@ static void selinux_nf_ip_exit(void) #ifdef CONFIG_SECURITY_SELINUX_DISABLE static int selinux_disabled; @@ -108962,7 +108458,7 @@ index e03bad5..b15da09 100644 int selinux_disable(void) { if (ss_initialized) { -@@ -6145,7 +6146,9 @@ int selinux_disable(void) +@@ -6167,7 +6168,9 @@ int selinux_disable(void) selinux_disabled = 1; selinux_enabled = 0; @@ -108987,10 +108483,10 @@ index 1450f85..a91e0bc 100644 } rtnl_unlock(); diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c -index e6ab307..2008c98 100644 +index d515ec2..8a4ca71 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c -@@ -3849,7 +3849,7 @@ static int smack_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) +@@ -4079,7 +4079,7 @@ static int smack_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) return 0; } @@ -109358,10 +108854,10 @@ index 2d957ba..fda022c 100644 if (err < 0) return err; diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c -index a95356f..0f5eabf 100644 +index 166d59c..89e3889 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c -@@ -2815,11 +2815,11 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream, +@@ -2931,11 +2931,11 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream, switch (substream->stream) { case SNDRV_PCM_STREAM_PLAYBACK: result = snd_pcm_playback_ioctl1(NULL, substream, cmd, @@ -109785,7 +109281,7 @@ index 4c41c90..37f3631 100644 return snd_seq_device_register_driver(SNDRV_SEQ_DEV_ID_EMU10K1_SYNTH, &ops, sizeof(struct snd_emu10k1_synth_arg)); diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c -index ec6a7d0..4e578f7 100644 +index 15e0089..ad6bc9b 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -966,14 +966,10 @@ find_codec_preset(struct hda_codec *codec) @@ -109805,7 +109301,7 @@ index ec6a7d0..4e578f7 100644 mod_requested++; goto again; } -@@ -2780,7 +2776,7 @@ static int get_kctl_0dB_offset(struct hda_codec *codec, +@@ -2800,7 +2796,7 @@ static int get_kctl_0dB_offset(struct hda_codec *codec, /* FIXME: set_fs() hack for obtaining user-space TLV data */ mm_segment_t fs = get_fs(); set_fs(get_ds()); @@ -109872,10 +109368,10 @@ index 81c916a..516f0bf 100644 chip->pci = pci; chip->irq = -1; diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c -index a3e0a0d..ab98399 100644 +index b60ff56..7307f0f 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c -@@ -2286,8 +2286,10 @@ int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops, +@@ -2132,8 +2132,10 @@ int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops, if (ret) return ret; @@ -117683,10 +117179,10 @@ index 0000000..4378111 +} diff --git a/tools/gcc/size_overflow_plugin/size_overflow_hash.data b/tools/gcc/size_overflow_plugin/size_overflow_hash.data new file mode 100644 -index 0000000..f527934 +index 0000000..f38f762 --- /dev/null +++ b/tools/gcc/size_overflow_plugin/size_overflow_hash.data -@@ -0,0 +1,5911 @@ +@@ -0,0 +1,6029 @@ +intel_fake_agp_alloc_by_type_1 intel_fake_agp_alloc_by_type 1 1 NULL +storvsc_connect_to_vsp_22 storvsc_connect_to_vsp 2 22 NULL +compat_sock_setsockopt_23 compat_sock_setsockopt 5 23 NULL @@ -117708,6 +117204,7 @@ index 0000000..f527934 +iscsi_session_setup_196 iscsi_session_setup 4-5 196 NULL +obd_proc_jobid_var_seq_write_199 obd_proc_jobid_var_seq_write 3 199 NULL +ll_xattr_cache_seq_write_250 ll_xattr_cache_seq_write 3 250 NULL ++vpdma_create_desc_list_255 vpdma_create_desc_list 2 255 NULL +br_port_info_size_268 br_port_info_size 0 268 NULL +read_file_war_stats_292 read_file_war_stats 3 292 NULL +SYSC_connect_304 SYSC_connect 3 304 NULL @@ -117721,6 +117218,7 @@ index 0000000..f527934 +nvme_trans_modesel_data_488 nvme_trans_modesel_data 4 488 NULL +iwl_dbgfs_protection_mode_write_502 iwl_dbgfs_protection_mode_write 3 502 NULL +rx_rx_defrag_end_read_505 rx_rx_defrag_end_read 3 505 NULL ++smp_send_cmd_512 smp_send_cmd 3 512 NULL +ocfs2_validate_meta_ecc_bhs_527 ocfs2_validate_meta_ecc_bhs 0 527 NULL +zlib_deflate_workspacesize_537 zlib_deflate_workspacesize 0-1-2 537 NULL +iwl_dbgfs_wowlan_sram_read_540 iwl_dbgfs_wowlan_sram_read 3 540 NULL @@ -117842,6 +117340,7 @@ index 0000000..f527934 +nvif_object_sclass_1940 nvif_object_sclass 3 1940 &cyttsp_probe_1940 +ieee80211_if_fmt_dot11MeshConfirmTimeout_1945 ieee80211_if_fmt_dot11MeshConfirmTimeout 3 1945 NULL +ivtv_v4l2_read_1964 ivtv_v4l2_read 3 1964 NULL ++qla2xxx_get_vpd_field_1965 qla2xxx_get_vpd_field 4 1965 NULL +sel_read_avc_hash_stats_1984 sel_read_avc_hash_stats 3 1984 NULL +gpio_power_write_1991 gpio_power_write 3 1991 NULL +__alloc_bootmem_node_1992 __alloc_bootmem_node 2 1992 NULL @@ -117876,6 +117375,7 @@ index 0000000..f527934 +sel_write_avc_cache_threshold_2256 sel_write_avc_cache_threshold 3 2256 NULL +do_update_counters_2259 do_update_counters 4 2259 NULL +ath6kl_wmi_bssinfo_event_rx_2275 ath6kl_wmi_bssinfo_event_rx 3 2275 NULL ++vpdma_alloc_desc_buf_2278 vpdma_alloc_desc_buf 2 2278 NULL +debug_debug5_read_2291 debug_debug5_read 3 2291 NULL +sr_read_cmd_2299 sr_read_cmd 5 2299 NULL +kvm_clear_guest_page_2308 kvm_clear_guest_page 4 2308 NULL @@ -117913,6 +117413,7 @@ index 0000000..f527934 +osc_build_ppga_2670 osc_build_ppga 2 2670 NULL +ffs_ep0_read_2672 ffs_ep0_read 3 2672 NULL +oti6858_write_2692 oti6858_write 4 2692 NULL ++copy_to_iter_iovec_2697 copy_to_iter_iovec 2 2697 NULL +nfc_llcp_send_ui_frame_2702 nfc_llcp_send_ui_frame 5 2702 NULL +memcpy_fromiovecend_2707 memcpy_fromiovecend 3-4 2707 NULL +lprocfs_stats_counter_size_2708 lprocfs_stats_counter_size 0 2708 NULL @@ -117957,6 +117458,7 @@ index 0000000..f527934 +hfsplus_asc2uni_3071 hfsplus_asc2uni 0 3071 NULL nohasharray +dac960_user_command_proc_write_3071 dac960_user_command_proc_write 3 3071 &hfsplus_asc2uni_3071 +read_file_antenna_diversity_3077 read_file_antenna_diversity 3 3077 NULL ++bio_integrity_intervals_3094 bio_integrity_intervals 0-2 3094 NULL +ttusb2_msg_3100 ttusb2_msg 4 3100 NULL +rb_alloc_3102 rb_alloc 1 3102 NULL +ufshcd_get_rsp_upiu_result_3114 ufshcd_get_rsp_upiu_result 0 3114 NULL @@ -117971,6 +117473,7 @@ index 0000000..f527934 +compat_do_ip6t_set_ctl_3184 compat_do_ip6t_set_ctl 4 3184 NULL +mempool_create_node_3191 mempool_create_node 1 3191 NULL +alloc_context_3194 alloc_context 1 3194 NULL ++dma_init_coherent_memory_3197 dma_init_coherent_memory 3 3197 NULL +shmem_pread_slow_3198 shmem_pread_slow 3-2 3198 NULL +codec_reg_write_file_3204 codec_reg_write_file 3 3204 NULL +SyS_sendto_3219 SyS_sendto 6 3219 NULL @@ -118006,6 +117509,7 @@ index 0000000..f527934 +mem_tx_free_mem_blks_read_3521 mem_tx_free_mem_blks_read 3 3521 NULL +SyS_semtimedop_3532 SyS_semtimedop 3 3532 NULL +SyS_readv_3539 SyS_readv 3 3539 NULL ++nouveau_fuse_create__3546 nouveau_fuse_create_ 4 3546 NULL +btrfs_dir_name_len_3549 btrfs_dir_name_len 0 3549 NULL +alloc_smp_resp_3566 alloc_smp_resp 1 3566 NULL +evtchn_read_3569 evtchn_read 3 3569 NULL @@ -118016,6 +117520,7 @@ index 0000000..f527934 +edac_mc_alloc_3611 edac_mc_alloc 4 3611 NULL +tx_tx_starts_read_3617 tx_tx_starts_read 3 3617 NULL +aligned_kmalloc_3628 aligned_kmalloc 1 3628 NULL ++fm10k_alloc_q_vector_3638 fm10k_alloc_q_vector 4-6 3638 NULL +ath6kl_disconnect_timeout_read_3650 ath6kl_disconnect_timeout_read 3 3650 NULL +i915_compat_ioctl_3656 i915_compat_ioctl 2 3656 NULL +_iwl_dbgfs_tx_flush_write_3675 _iwl_dbgfs_tx_flush_write 3 3675 NULL @@ -118025,6 +117530,7 @@ index 0000000..f527934 +sctp_setsockopt_auth_key_3793 sctp_setsockopt_auth_key 3 3793 NULL +ncp_file_write_3813 ncp_file_write 3 3813 NULL +llc_ui_recvmsg_3826 llc_ui_recvmsg 4 3826 NULL ++ceph_do_getattr_3838 ceph_do_getattr 0 3838 NULL +create_one_cdev_3852 create_one_cdev 2 3852 NULL +smk_read_onlycap_3855 smk_read_onlycap 3 3855 NULL +get_fd_set_3866 get_fd_set 1 3866 NULL @@ -118066,7 +117572,8 @@ index 0000000..f527934 +get_connectors_for_crtc_4291 get_connectors_for_crtc 0 4291 NULL +__usbnet_read_cmd_4299 __usbnet_read_cmd 7 4299 NULL +dvb_ringbuffer_pkt_read_user_4303 dvb_ringbuffer_pkt_read_user 2-3-5 4303 NULL -+count_strings_4315 count_strings 0 4315 NULL ++count_strings_4315 count_strings 0 4315 NULL nohasharray ++cfg80211_inform_bss_4315 cfg80211_inform_bss 9 4315 &count_strings_4315 +nouveau_fifo_create__4327 nouveau_fifo_create_ 5-6 4327 NULL +snd_rawmidi_kernel_read_4328 snd_rawmidi_kernel_read 3 4328 NULL +ima_eventdigest_init_common_4338 ima_eventdigest_init_common 2 4338 NULL @@ -118139,6 +117646,8 @@ index 0000000..f527934 +ppp_cp_parse_cr_5214 ppp_cp_parse_cr 4 5214 NULL +dwc2_hcd_urb_alloc_5217 dwc2_hcd_urb_alloc 2 5217 NULL +ath6kl_debug_roam_tbl_event_5224 ath6kl_debug_roam_tbl_event 3 5224 NULL ++ipv4_tun_to_nlattr_5261 ipv4_tun_to_nlattr 4 5261 NULL ++dvb_ringbuffer_write_user_5270 dvb_ringbuffer_write_user 3 5270 NULL +xgmac_reg_addr_read_5278 xgmac_reg_addr_read 3 5278 NULL +usb_descriptor_fillbuf_5302 usb_descriptor_fillbuf 0 5302 NULL +r592_write_fifo_pio_5315 r592_write_fifo_pio 3 5315 NULL @@ -118152,6 +117661,7 @@ index 0000000..f527934 +ll_xattr_cache_refill_5468 ll_xattr_cache_refill 0 5468 NULL +kernfs_fop_write_5471 kernfs_fop_write 3 5471 NULL +xfs_efi_init_5476 xfs_efi_init 2 5476 NULL ++pci_enable_msix_exact_5482 pci_enable_msix_exact 3 5482 NULL +cifs_security_flags_proc_write_5484 cifs_security_flags_proc_write 3 5484 NULL +tty_write_5494 tty_write 3 5494 NULL +tomoyo_update_domain_5498 tomoyo_update_domain 2 5498 NULL nohasharray @@ -118172,7 +117682,8 @@ index 0000000..f527934 +sctp_setsockopt_autoclose_5775 sctp_setsockopt_autoclose 3 5775 NULL +__vxge_hw_blockpool_malloc_5786 __vxge_hw_blockpool_malloc 2 5786 NULL +nvme_trans_bdev_char_page_5797 nvme_trans_bdev_char_page 3 5797 NULL -+skb_copy_datagram_iovec_5806 skb_copy_datagram_iovec 2-4 5806 NULL ++skb_copy_datagram_iovec_5806 skb_copy_datagram_iovec 2-4 5806 NULL nohasharray ++ath10k_core_create_5806 ath10k_core_create 1 5806 &skb_copy_datagram_iovec_5806 +nv50_disp_pioc_create__5812 nv50_disp_pioc_create_ 5 5812 NULL +ceph_x_encrypt_buflen_5829 ceph_x_encrypt_buflen 0-1 5829 NULL +ceph_msg_new_5846 ceph_msg_new 2 5846 NULL @@ -118255,6 +117766,7 @@ index 0000000..f527934 +check_clk_sync_6717 check_clk_sync 2 6717 NULL +video_proc_write_6724 video_proc_write 3 6724 NULL +posix_acl_xattr_count_6725 posix_acl_xattr_count 0-1 6725 NULL ++inet_recv_error_6744 inet_recv_error 3 6744 NULL +kobject_add_varg_6781 kobject_add_varg 0 6781 NULL +iwl_dbgfs_channels_read_6784 iwl_dbgfs_channels_read 3 6784 NULL +ieee80211_if_read_6785 ieee80211_if_read 3 6785 NULL @@ -118262,8 +117774,10 @@ index 0000000..f527934 +hdlcdrv_register_6792 hdlcdrv_register 2 6792 NULL +ll_xattr_cache_find_6798 ll_xattr_cache_find 0 6798 NULL +tx_tx_done_data_read_6799 tx_tx_done_data_read 3 6799 NULL ++rounded_hashtable_size_6802 rounded_hashtable_size 0 6802 NULL +lbs_rdrf_write_6826 lbs_rdrf_write 3 6826 NULL +calc_pages_for_6838 calc_pages_for 0-1-2 6838 NULL ++blk_alloc_flush_queue_6839 blk_alloc_flush_queue 3 6839 NULL +mon_bin_read_6841 mon_bin_read 3 6841 NULL +snd_cs4281_BA0_read_6847 snd_cs4281_BA0_read 5 6847 NULL +perf_output_sample_ustack_6868 perf_output_sample_ustack 2 6868 NULL @@ -118302,6 +117816,7 @@ index 0000000..f527934 +osc_resend_count_seq_write_7120 osc_resend_count_seq_write 3 7120 NULL +qib_format_hwerrors_7133 qib_format_hwerrors 5 7133 NULL +kvm_mmu_notifier_test_young_7139 kvm_mmu_notifier_test_young 3 7139 NULL ++qlcnic_enable_msix_7144 qlcnic_enable_msix 2 7144 NULL +__alloc_objio_seg_7203 __alloc_objio_seg 1 7203 NULL +hdlc_loop_7255 hdlc_loop 0 7255 NULL +rx_rate_rx_frames_per_rates_read_7282 rx_rate_rx_frames_per_rates_read 3 7282 NULL nohasharray @@ -118426,8 +117941,10 @@ index 0000000..f527934 +ctrl_out_8712 ctrl_out 3-5 8712 NULL +tracing_max_lat_write_8728 tracing_max_lat_write 3 8728 NULL +jffs2_acl_count_8729 jffs2_acl_count 0-1 8729 NULL ++iov_iter_zero_8748 iov_iter_zero 1 8748 NULL +tx_tx_exch_expiry_read_8749 tx_tx_exch_expiry_read 3 8749 NULL +compound_order_8750 compound_order 0 8750 NULL ++cfg80211_inform_bss_width_8754 cfg80211_inform_bss_width 10 8754 NULL +yurex_write_8761 yurex_write 3 8761 NULL +joydev_compat_ioctl_8765 joydev_compat_ioctl 2 8765 NULL +kstrtoint_from_user_8778 kstrtoint_from_user 2 8778 NULL @@ -118576,6 +118093,7 @@ index 0000000..f527934 +SYSC_move_pages_9986 SYSC_move_pages 2 9986 NULL +ceph_oloc_oid_to_pg_10003 ceph_oloc_oid_to_pg 0 10003 NULL +aat2870_dump_reg_10019 aat2870_dump_reg 0 10019 NULL ++asymmetric_key_generate_id_10064 asymmetric_key_generate_id 2-4 10064 NULL +ieee80211_set_probe_resp_10077 ieee80211_set_probe_resp 3 10077 NULL +get_elem_size_10110 get_elem_size 0-2 10110 NULL nohasharray +dynamic_ps_timeout_read_10110 dynamic_ps_timeout_read 3 10110 &get_elem_size_10110 @@ -118661,16 +118179,19 @@ index 0000000..f527934 +SetLineNumber_11023 SetLineNumber 0 11023 NULL +nouveau_gpio_create__11048 nouveau_gpio_create_ 4 11048 NULL +tda10048_writeregbulk_11050 tda10048_writeregbulk 4 11050 NULL -+insert_inline_extent_backref_11063 insert_inline_extent_backref 8 11063 NULL ++insert_inline_extent_backref_11063 insert_inline_extent_backref 8 11063 NULL nohasharray ++qlcnic_83xx_calculate_msix_vector_11063 qlcnic_83xx_calculate_msix_vector 0 11063 &insert_inline_extent_backref_11063 +xfs_collapse_file_space_11075 xfs_collapse_file_space 2-3 11075 NULL +tcp_send_mss_11079 tcp_send_mss 0 11079 NULL +count_argc_11083 count_argc 0 11083 NULL +kvm_write_guest_cached_11106 kvm_write_guest_cached 4 11106 NULL +tw_change_queue_depth_11116 tw_change_queue_depth 2 11116 NULL ++tc90522_master_xfer_11119 tc90522_master_xfer 3 11119 NULL +page_offset_11120 page_offset 0 11120 NULL +tracing_buffers_read_11124 tracing_buffers_read 3 11124 NULL +alloc_alien_cache_11127 alloc_alien_cache 2 11127 NULL +snd_gf1_pcm_playback_silence_11172 snd_gf1_pcm_playback_silence 3-4 11172 NULL ++copy_from_iter_iovec_11196 copy_from_iter_iovec 2 11196 NULL +il_dbgfs_rx_queue_read_11221 il_dbgfs_rx_queue_read 3 11221 NULL +comedi_alloc_spriv_11234 comedi_alloc_spriv 2 11234 NULL +of_irq_count_11253 of_irq_count 0 11253 NULL @@ -118746,6 +118267,7 @@ index 0000000..f527934 +sctp_setsockopt_maxseg_11829 sctp_setsockopt_maxseg 3 11829 NULL +rts51x_read_status_11830 rts51x_read_status 4 11830 NULL +unix_stream_connect_11844 unix_stream_connect 3 11844 NULL ++pci_enable_msix_range_11852 pci_enable_msix_range 0-4 11852 NULL +ecryptfs_copy_filename_11868 ecryptfs_copy_filename 4 11868 NULL +l2cap_chan_send_11878 l2cap_chan_send 3 11878 NULL +ieee80211_rx_bss_info_11887 ieee80211_rx_bss_info 3 11887 NULL @@ -118915,6 +118437,7 @@ index 0000000..f527934 +udf_direct_IO_13765 udf_direct_IO 4 13765 NULL +ieee802154_alloc_device_13767 ieee802154_alloc_device 1 13767 NULL +fb_sys_read_13778 fb_sys_read 3 13778 NULL ++alloc_indirect_13783 alloc_indirect 1 13783 NULL +ath6kl_mgmt_powersave_ap_13791 ath6kl_mgmt_powersave_ap 6 13791 NULL +random_read_13815 random_read 3 13815 NULL +mutex_lock_interruptible_nested_13817 mutex_lock_interruptible_nested 0 13817 NULL @@ -119062,6 +118585,7 @@ index 0000000..f527934 +kovaplus_sysfs_read_15337 kovaplus_sysfs_read 6 15337 NULL +ioread16_15342 ioread16 0 15342 NULL +ept_prefetch_gpte_15348 ept_prefetch_gpte 4 15348 NULL ++blkdev_readpages_15357 blkdev_readpages 4 15357 NULL +acpi_ut_create_string_object_15360 acpi_ut_create_string_object 1 15360 NULL +graph_depth_read_15371 graph_depth_read 3 15371 NULL +fq_codel_zalloc_15378 fq_codel_zalloc 1 15378 NULL @@ -119232,6 +118756,7 @@ index 0000000..f527934 +ath6kl_wmi_send_mgmt_cmd_17347 ath6kl_wmi_send_mgmt_cmd 7 17347 NULL +mdc_import_seq_write_17409 mdc_import_seq_write 3 17409 NULL +lpfc_debugfs_dif_err_write_17424 lpfc_debugfs_dif_err_write 3 17424 NULL ++copy_from_iter_17433 copy_from_iter 2 17433 NULL +sta_connected_time_read_17435 sta_connected_time_read 3 17435 NULL +libcfs_ipif_enumerate_17445 libcfs_ipif_enumerate 0 17445 NULL +nla_get_u32_17455 nla_get_u32 0 17455 NULL @@ -119261,6 +118786,7 @@ index 0000000..f527934 +nv92_gpio_intr_mask_17773 nv92_gpio_intr_mask 4-3 17773 NULL +shrink_slab_node_17794 shrink_slab_node 3 17794 NULL +lpuart_copy_rx_to_tty_17801 lpuart_copy_rx_to_tty 3 17801 NULL ++_iwl_dbgfs_set_nic_temperature_write_17804 _iwl_dbgfs_set_nic_temperature_write 3 17804 NULL +gnet_stats_copy_app_17821 gnet_stats_copy_app 3 17821 NULL +cipso_v4_gentag_rbm_17836 cipso_v4_gentag_rbm 0 17836 NULL +em28xx_audio_ep_packet_size_17844 em28xx_audio_ep_packet_size 0 17844 NULL @@ -119383,6 +118909,7 @@ index 0000000..f527934 +devm_mdiobus_alloc_size_18902 devm_mdiobus_alloc_size 2 18902 NULL +tracing_thresh_write_18909 tracing_thresh_write 3 18909 NULL +ceph_setxattr_18913 ceph_setxattr 4 18913 NULL ++xfs_buf_read_uncached_18922 xfs_buf_read_uncached 3 18922 NULL +ieee80211_rx_mgmt_disassoc_18927 ieee80211_rx_mgmt_disassoc 3 18927 NULL +snapshot_write_next_18937 snapshot_write_next 0 18937 NULL +__nla_reserve_18974 __nla_reserve 3 18974 NULL @@ -119470,6 +118997,7 @@ index 0000000..f527934 +aes_decrypt_interrupt_read_19910 aes_decrypt_interrupt_read 3 19910 NULL +ps_upsd_max_apturn_read_19918 ps_upsd_max_apturn_read 3 19918 NULL +mangle_name_19923 mangle_name 0 19923 NULL ++tipc_sk_show_19928 tipc_sk_show 3-0 19928 NULL +cgroup_task_count_19930 cgroup_task_count 0 19930 NULL +guest_read_tsc_19931 guest_read_tsc 0 19931 NULL +azx_get_pos_lpib_19933 azx_get_pos_lpib 0 19933 NULL @@ -119479,7 +119007,8 @@ index 0000000..f527934 +ll_xattr_cache_list_19954 ll_xattr_cache_list 0 19954 NULL +get_jack_mode_name_19976 get_jack_mode_name 4 19976 NULL +attach_hdlc_protocol_19986 attach_hdlc_protocol 3 19986 NULL -+rtw_set_wps_probe_resp_19989 rtw_set_wps_probe_resp 3 19989 NULL ++rtw_set_wps_probe_resp_19989 rtw_set_wps_probe_resp 3 19989 NULL nohasharray ++i40e_reserve_msix_vectors_19989 i40e_reserve_msix_vectors 2 19989 &rtw_set_wps_probe_resp_19989 +lustre_pack_request_19992 lustre_pack_request 3 19992 NULL +find_overflow_devnum_19995 find_overflow_devnum 0 19995 NULL +diva_um_idi_read_20003 diva_um_idi_read 0 20003 NULL @@ -119577,6 +119106,7 @@ index 0000000..f527934 +vfio_msi_enable_20906 vfio_msi_enable 2 20906 NULL +lbs_rdbbp_write_20918 lbs_rdbbp_write 3 20918 NULL +htable_bits_20933 htable_bits 0 20933 NULL ++cfg80211_rx_assoc_resp_20934 cfg80211_rx_assoc_resp 4 20934 NULL +altera_set_ir_post_20948 altera_set_ir_post 2 20948 NULL +rx_rx_phy_hdr_read_20950 rx_rx_phy_hdr_read 3 20950 NULL +rsxx_cram_read_20957 rsxx_cram_read 3 20957 NULL @@ -119600,6 +119130,7 @@ index 0000000..f527934 +_efx_mcdi_rpc_async_21119 _efx_mcdi_rpc_async 4-5 21119 NULL +i2400m_rx_trace_21127 i2400m_rx_trace 3 21127 NULL +mei_dbgfs_read_active_21172 mei_dbgfs_read_active 3 21172 NULL ++bioset_create_nobvec_21180 bioset_create_nobvec 1 21180 NULL +cx18_v4l2_read_21196 cx18_v4l2_read 3 21196 NULL +ipc_rcu_alloc_21208 ipc_rcu_alloc 1 21208 NULL +scsi_execute_req_flags_21215 scsi_execute_req_flags 5 21215 NULL @@ -119646,7 +119177,8 @@ index 0000000..f527934 +atalk_sendmsg_21677 atalk_sendmsg 4 21677 NULL +ocfs2_xattr_get_nolock_21678 ocfs2_xattr_get_nolock 0 21678 NULL +regmap_register_patch_21681 regmap_register_patch 3 21681 NULL -+rtllib_alloc_txb_21687 rtllib_alloc_txb 1 21687 NULL ++rtllib_alloc_txb_21687 rtllib_alloc_txb 1 21687 NULL nohasharray ++proc_maps_open_21687 proc_maps_open 4 21687 &rtllib_alloc_txb_21687 +evdev_ioctl_handler_21705 evdev_ioctl_handler 2 21705 NULL +unix_skb_len_21722 unix_skb_len 0 21722 NULL +lprocfs_wr_import_21728 lprocfs_wr_import 3 21728 NULL @@ -119659,10 +119191,12 @@ index 0000000..f527934 +oom_adj_read_21847 oom_adj_read 3 21847 NULL +lpfc_idiag_extacc_avail_get_21865 lpfc_idiag_extacc_avail_get 0-3 21865 NULL +brcms_debugfs_hardware_read_21867 brcms_debugfs_hardware_read 3 21867 NULL ++msix_capability_init_21870 msix_capability_init 0 21870 NULL +sisusbcon_bmove_21873 sisusbcon_bmove 6-5-7 21873 NULL +ldlm_lock_create_21888 ldlm_lock_create 7 21888 NULL +__btrfs_direct_write_21894 __btrfs_direct_write 3 21894 NULL -+dbAllocCtl_21911 dbAllocCtl 0 21911 NULL ++dbAllocCtl_21911 dbAllocCtl 0 21911 NULL nohasharray ++nvme_submit_sync_cmd_21911 nvme_submit_sync_cmd 0 21911 &dbAllocCtl_21911 +qsfp_1_read_21915 qsfp_1_read 3 21915 NULL +twl_i2c_write_u16_21953 twl_i2c_write_u16 3 21953 NULL +__build_xattrs_21979 __build_xattrs 0 21979 NULL @@ -119708,10 +119242,12 @@ index 0000000..f527934 +queue_max_segments_22441 queue_max_segments 0 22441 NULL +handle_received_packet_22457 handle_received_packet 3 22457 NULL +ecryptfs_write_22488 ecryptfs_write 4-3 22488 NULL -+qib_user_sdma_alloc_header_22490 qib_user_sdma_alloc_header 2 22490 NULL ++qib_user_sdma_alloc_header_22490 qib_user_sdma_alloc_header 2 22490 NULL nohasharray ++video_write_22490 video_write 3 22490 &qib_user_sdma_alloc_header_22490 +cache_write_procfs_22491 cache_write_procfs 3 22491 NULL +mutex_lock_interruptible_22505 mutex_lock_interruptible 0 22505 NULL +trim_no_bitmap_22524 trim_no_bitmap 4-3 22524 NULL ++ntb_setup_bwd_msix_22549 ntb_setup_bwd_msix 2 22549 NULL +ocfs2_read_extent_block_22550 ocfs2_read_extent_block 0 22550 NULL +agp_alloc_page_array_22554 agp_alloc_page_array 1 22554 NULL +dbFindCtl_22587 dbFindCtl 0 22587 NULL @@ -119783,6 +119319,7 @@ index 0000000..f527934 +gss_pipe_downcall_23182 gss_pipe_downcall 3 23182 NULL +mpi_alloc_limb_space_23190 mpi_alloc_limb_space 1 23190 NULL +tipc_sendmcast_23214 tipc_sendmcast 4 23214 NULL ++mcryptd_alloc_instance_23221 mcryptd_alloc_instance 2-3 23221 NULL +nft_hash_tbl_alloc_23224 nft_hash_tbl_alloc 1 23224 NULL +tty_buffer_request_room_23228 tty_buffer_request_room 2-0 23228 NULL +xlog_get_bp_23229 xlog_get_bp 2 23229 NULL nohasharray @@ -119854,6 +119391,7 @@ index 0000000..f527934 +size_roundup_power2_23958 size_roundup_power2 0-1 23958 NULL +sddr55_write_data_23983 sddr55_write_data 4 23983 NULL +zd_usb_iowrite16v_async_23984 zd_usb_iowrite16v_async 3 23984 NULL ++xfs_zero_file_space_24000 xfs_zero_file_space 2-3 24000 NULL +cxgb_alloc_mem_24007 cxgb_alloc_mem 1 24007 NULL +give_pages_24021 give_pages 3 24021 NULL +adis16400_show_serial_number_24037 adis16400_show_serial_number 3 24037 NULL @@ -119874,6 +119412,7 @@ index 0000000..f527934 +safe_prepare_write_buffer_24187 safe_prepare_write_buffer 3 24187 NULL +nv94_aux_24197 nv94_aux 3-6 24197 NULL +ieee80211_if_read_dot11MeshHWMPpreqMinInterval_24208 ieee80211_if_read_dot11MeshHWMPpreqMinInterval 3 24208 NULL ++efx_vf_size_24213 efx_vf_size 0 24213 NULL +tcpprobe_sprint_24222 tcpprobe_sprint 0-2 24222 NULL +pcpu_embed_first_chunk_24224 pcpu_embed_first_chunk 3-2-1 24224 NULL nohasharray +mei_amthif_read_24224 mei_amthif_read 4 24224 &pcpu_embed_first_chunk_24224 @@ -119896,6 +119435,7 @@ index 0000000..f527934 +osc_cur_grant_bytes_seq_write_24396 osc_cur_grant_bytes_seq_write 3 24396 NULL +getxattr_24398 getxattr 4 24398 NULL nohasharray +pvr2_v4l2_ioctl_24398 pvr2_v4l2_ioctl 2 24398 &getxattr_24398 ++populate_msi_sysfs_24399 populate_msi_sysfs 0 24399 NULL +blk_update_bidi_request_24415 blk_update_bidi_request 3-4 24415 NULL +nvme_trans_log_supp_pages_24418 nvme_trans_log_supp_pages 3 24418 NULL +b43_debugfs_read_24425 b43_debugfs_read 3 24425 NULL @@ -119918,7 +119458,8 @@ index 0000000..f527934 +SyS_pselect6_24582 SyS_pselect6 1 24582 NULL +udf_compute_nr_groups_24594 udf_compute_nr_groups 0 24594 NULL +sensor_hub_get_physical_device_count_24605 sensor_hub_get_physical_device_count 0 24605 NULL nohasharray -+lov_alloc_memmd_24605 lov_alloc_memmd 2 24605 &sensor_hub_get_physical_device_count_24605 ++lov_alloc_memmd_24605 lov_alloc_memmd 2 24605 &sensor_hub_get_physical_device_count_24605 nohasharray ++i915_error_state_buf_init_24605 i915_error_state_buf_init 3 24605 &lov_alloc_memmd_24605 +SyS_poll_24620 SyS_poll 2 24620 NULL +context_alloc_24645 context_alloc 3 24645 NULL +blk_rq_err_bytes_24650 blk_rq_err_bytes 0 24650 NULL @@ -119947,7 +119488,8 @@ index 0000000..f527934 +ocfs2_fiemap_24949 ocfs2_fiemap 4-3 24949 NULL +packet_sendmsg_24954 packet_sendmsg 4 24954 NULL +twl_i2c_write_u8_24976 twl_i2c_write_u8 3 24976 NULL -+llc_ui_sendmsg_24987 llc_ui_sendmsg 4 24987 NULL ++llc_ui_sendmsg_24987 llc_ui_sendmsg 4 24987 NULL nohasharray ++ath10k_fw_crash_dump_read_24987 ath10k_fw_crash_dump_read 3 24987 &llc_ui_sendmsg_24987 +info_debugfs_read_helper_24988 info_debugfs_read_helper 0 24988 NULL +key_conf_hw_key_idx_read_25003 key_conf_hw_key_idx_read 3 25003 NULL +il_dbgfs_channels_read_25005 il_dbgfs_channels_read 3 25005 NULL @@ -119957,6 +119499,7 @@ index 0000000..f527934 +btrfs_stack_key_blockptr_25058 btrfs_stack_key_blockptr 0 25058 NULL +gs_buf_alloc_25067 gs_buf_alloc 2 25067 NULL +ll_track_pid_seq_write_25068 ll_track_pid_seq_write 3 25068 NULL ++do_add_page_to_bio_25071 do_add_page_to_bio 2 25071 NULL +SYSC_listxattr_25072 SYSC_listxattr 3 25072 NULL +ima_appraise_measurement_25093 ima_appraise_measurement 6 25093 NULL +snd_rawmidi_kernel_write_25106 snd_rawmidi_kernel_write 3 25106 NULL @@ -119970,6 +119513,7 @@ index 0000000..f527934 +crypto_alloc_instance2_25277 crypto_alloc_instance2 3 25277 NULL +vfs_writev_25278 vfs_writev 3 25278 NULL +l2tp_session_create_25286 l2tp_session_create 1 25286 NULL ++cx25821_write_frame_25315 cx25821_write_frame 3 25315 NULL +ath9k_debugfs_read_buf_25316 ath9k_debugfs_read_buf 3 25316 NULL +rng_buffer_size_25348 rng_buffer_size 0 25348 NULL +SYSC_kexec_load_25361 SYSC_kexec_load 2 25361 NULL @@ -120046,6 +119590,7 @@ index 0000000..f527934 +mwifiex_regrdwr_write_26225 mwifiex_regrdwr_write 3 26225 NULL +_scsih_change_queue_depth_26230 _scsih_change_queue_depth 2 26230 NULL +rxrpc_recvmsg_26233 rxrpc_recvmsg 4 26233 NULL ++nlm_end_grace_read_26234 nlm_end_grace_read 3 26234 NULL +genwqe_ffdc_buff_size_26263 genwqe_ffdc_buff_size 0 26263 NULL +crypto_ctxsize_26278 crypto_ctxsize 0 26278 NULL +wacom_set_device_mode_26280 wacom_set_device_mode 3 26280 NULL @@ -120063,7 +119608,8 @@ index 0000000..f527934 +enc_pools_add_pages_26461 enc_pools_add_pages 1 26461 &tower_read_26461 +ib_alloc_device_26483 ib_alloc_device 1 26483 NULL +ulong_write_file_26485 ulong_write_file 3 26485 NULL -+dvb_ca_en50221_io_ioctl_26490 dvb_ca_en50221_io_ioctl 2 26490 NULL ++dvb_ca_en50221_io_ioctl_26490 dvb_ca_en50221_io_ioctl 2 26490 NULL nohasharray ++msi_verify_entries_26490 msi_verify_entries 0 26490 &dvb_ca_en50221_io_ioctl_26490 +read_vmcore_26501 read_vmcore 3 26501 NULL +uhid_char_write_26502 uhid_char_write 3 26502 NULL +vfio_pci_set_msi_trigger_26507 vfio_pci_set_msi_trigger 4-3 26507 NULL @@ -120090,6 +119636,7 @@ index 0000000..f527934 +cipso_v4_genopt_26812 cipso_v4_genopt 0 26812 NULL +iwl_trans_read_mem32_26825 iwl_trans_read_mem32 0 26825 NULL +smk_write_load_26829 smk_write_load 3 26829 NULL ++snd_pcm_action_mutex_26832 snd_pcm_action_mutex 0 26832 NULL +scnprint_id_26842 scnprint_id 3-0 26842 NULL +ecryptfs_miscdev_write_26847 ecryptfs_miscdev_write 3 26847 NULL +ss_alloc_ep_req_26848 ss_alloc_ep_req 2 26848 NULL @@ -120147,7 +119694,8 @@ index 0000000..f527934 +hcd_buffer_alloc_27495 hcd_buffer_alloc 2 27495 NULL +ip_set_get_h32_27498 ip_set_get_h32 0 27498 NULL +btrfs_get_64_27499 btrfs_get_64 0 27499 NULL -+garmin_read_process_27509 garmin_read_process 3 27509 NULL ++garmin_read_process_27509 garmin_read_process 3 27509 NULL nohasharray ++mcryptd_hash_setkey_27509 mcryptd_hash_setkey 3 27509 &garmin_read_process_27509 +oti_alloc_cookies_27510 oti_alloc_cookies 2 27510 NULL +ib_copy_to_udata_27525 ib_copy_to_udata 3 27525 NULL +snd_sonicvibes_getdmaa_27552 snd_sonicvibes_getdmaa 0 27552 NULL @@ -120259,6 +119807,7 @@ index 0000000..f527934 +setup_usemap_28636 setup_usemap 3-4 28636 NULL +qib_handle_6120_hwerrors_28642 qib_handle_6120_hwerrors 3 28642 NULL +p9_fcall_alloc_28652 p9_fcall_alloc 1 28652 NULL ++iwl_dbgfs_nic_temp_read_28662 iwl_dbgfs_nic_temp_read 3 28662 NULL +blk_queue_resize_tags_28670 blk_queue_resize_tags 2 28670 NULL +SyS_setgroups16_28686 SyS_setgroups16 1 28686 NULL +kvm_mmu_get_page_28692 kvm_mmu_get_page 2 28692 NULL @@ -120326,6 +119875,7 @@ index 0000000..f527934 +crypto_ahash_alignmask_29445 crypto_ahash_alignmask 0 29445 NULL +p9_client_prepare_req_29448 p9_client_prepare_req 3 29448 NULL +validate_scan_freqs_29462 validate_scan_freqs 0 29462 NULL ++memcg_update_cache_params_29465 memcg_update_cache_params 2 29465 NULL +SyS_flistxattr_29474 SyS_flistxattr 3 29474 NULL +do_register_entry_29478 do_register_entry 4 29478 NULL +simple_strtoul_29480 simple_strtoul 0 29480 NULL @@ -120334,6 +119884,7 @@ index 0000000..f527934 +usnic_vnic_spec_dump_29508 usnic_vnic_spec_dump 2 29508 NULL +write_file_regidx_29517 write_file_regidx 3 29517 NULL +atk_debugfs_ggrp_read_29522 atk_debugfs_ggrp_read 3 29522 NULL ++pci_enable_msix_29524 pci_enable_msix 0 29524 NULL +mic_vringh_copy_29531 mic_vringh_copy 4 29531 NULL +ftrace_write_29551 ftrace_write 3 29551 NULL +idetape_queue_rw_tail_29562 idetape_queue_rw_tail 3 29562 NULL @@ -120358,6 +119909,7 @@ index 0000000..f527934 +xfs_new_eof_29737 xfs_new_eof 2 29737 NULL +std_nic_write_29752 std_nic_write 3 29752 NULL +static_key_count_29771 static_key_count 0 29771 NULL ++tg3_irq_count_29786 tg3_irq_count 0 29786 NULL +dbAlloc_29794 dbAlloc 0 29794 NULL +tcp_sendpage_29829 tcp_sendpage 4 29829 NULL +__probe_kernel_write_29842 __probe_kernel_write 3 29842 NULL @@ -120372,6 +119924,7 @@ index 0000000..f527934 +write_file_queue_29922 write_file_queue 3 29922 NULL +__btrfs_getxattr_29947 __btrfs_getxattr 0 29947 NULL nohasharray +ipv6_recv_error_29947 ipv6_recv_error 3 29947 &__btrfs_getxattr_29947 ++zero_iovec_29955 zero_iovec 1 29955 NULL +dev_mem_write_30028 dev_mem_write 3 30028 NULL +alloc_netdev_mqs_30030 alloc_netdev_mqs 1 30030 NULL +sysfs_add_file_mode_ns_30038 sysfs_add_file_mode_ns 0 30038 NULL @@ -120423,7 +119976,8 @@ index 0000000..f527934 +dwc3_testmode_write_30516 dwc3_testmode_write 3 30516 NULL +debug_debug2_read_30526 debug_debug2_read 3 30526 NULL nohasharray +set_config_30526 set_config 0 30526 &debug_debug2_read_30526 -+xfs_sb_version_hasftype_30559 xfs_sb_version_hasftype 0 30559 NULL ++xfs_sb_version_hasftype_30559 xfs_sb_version_hasftype 0 30559 NULL nohasharray ++ixgbevf_acquire_msix_vectors_30559 ixgbevf_acquire_msix_vectors 2 30559 &xfs_sb_version_hasftype_30559 +disk_expand_part_tbl_30561 disk_expand_part_tbl 2 30561 NULL +set_le_30581 set_le 4 30581 NULL +blk_init_tags_30592 blk_init_tags 1 30592 NULL @@ -120451,9 +120005,11 @@ index 0000000..f527934 +ath10k_write_fw_dbglog_30835 ath10k_write_fw_dbglog 3 30835 NULL +of_gpio_named_count_30841 of_gpio_named_count 0 30841 NULL +sctp_setsockopt_auth_chunk_30843 sctp_setsockopt_auth_chunk 3 30843 NULL ++cfg80211_rx_mgmt_30844 cfg80211_rx_mgmt 5 30844 NULL +wd_autoreset_write_30862 wd_autoreset_write 3 30862 NULL +ieee80211_if_fmt_dropped_frames_no_route_30884 ieee80211_if_fmt_dropped_frames_no_route 3 30884 NULL +pn_recvmsg_30887 pn_recvmsg 4 30887 NULL ++copy_to_iter_30901 copy_to_iter 2 30901 NULL +usnic_debugfs_buildinfo_read_30928 usnic_debugfs_buildinfo_read 3 30928 NULL +sctp_setsockopt_rtoinfo_30941 sctp_setsockopt_rtoinfo 3 30941 NULL +tty_insert_flip_string_flags_30969 tty_insert_flip_string_flags 4 30969 NULL @@ -120471,6 +120027,7 @@ index 0000000..f527934 +kimage_normal_alloc_31140 kimage_normal_alloc 3 31140 NULL +size_inside_page_31141 size_inside_page 0 31141 NULL +w9966_v4l_read_31148 w9966_v4l_read 3 31148 NULL ++nvme_set_features_31169 nvme_set_features 0 31169 NULL +ch_do_scsi_31171 ch_do_scsi 4 31171 NULL +r592_read_fifo_pio_31198 r592_read_fifo_pio 3 31198 NULL +mtdchar_readoob_31200 mtdchar_readoob 4 31200 NULL @@ -120482,6 +120039,7 @@ index 0000000..f527934 +_create_sg_bios_31244 _create_sg_bios 4 31244 NULL +ieee80211_if_read_last_beacon_31257 ieee80211_if_read_last_beacon 3 31257 NULL +hash_netportnet4_expire_31290 hash_netportnet4_expire 4 31290 NULL ++iwl_dbgfs_set_nic_temperature_read_31300 iwl_dbgfs_set_nic_temperature_read 3 31300 NULL +uvc_simplify_fraction_31303 uvc_simplify_fraction 3 31303 NULL +sisusbcon_scroll_31315 sisusbcon_scroll 5-2-3 31315 NULL +command_file_write_31318 command_file_write 3 31318 NULL @@ -120573,6 +120131,7 @@ index 0000000..f527934 +kiblnd_alloc_pages_32092 kiblnd_alloc_pages 3 32092 NULL +bio_alloc_32095 bio_alloc 2 32095 NULL +ath6kl_fwlog_read_32101 ath6kl_fwlog_read 3 32101 NULL ++wil_read_file_recovery_32104 wil_read_file_recovery 3 32104 NULL +disk_status_32120 disk_status 4 32120 NULL +kobject_add_internal_32133 kobject_add_internal 0 32133 NULL +venus_link_32165 venus_link 5 32165 NULL @@ -120745,7 +120304,8 @@ index 0000000..f527934 +ixgbe_dbg_netdev_ops_write_34141 ixgbe_dbg_netdev_ops_write 3 34141 NULL +shmem_pread_fast_34147 shmem_pread_fast 3 34147 NULL +skb_to_sgvec_34171 skb_to_sgvec 0 34171 NULL -+rsi_debug_zone_write_34206 rsi_debug_zone_write 3 34206 NULL ++rsi_debug_zone_write_34206 rsi_debug_zone_write 3 34206 NULL nohasharray ++rbd_osd_req_create_34206 rbd_osd_req_create 3 34206 &rsi_debug_zone_write_34206 +ext4_da_write_begin_34215 ext4_da_write_begin 3-4 34215 NULL +bl_pipe_downcall_34264 bl_pipe_downcall 3 34264 NULL +device_private_init_34279 device_private_init 0 34279 NULL @@ -120831,6 +120391,7 @@ index 0000000..f527934 +sisusb_copy_memory_35016 sisusb_copy_memory 4 35016 NULL +coda_psdev_read_35029 coda_psdev_read 3 35029 NULL +hwdep_read_locked_35037 hwdep_read_locked 3 35037 NULL ++proc_setgroups_write_35039 proc_setgroups_write 3 35039 NULL +pwr_connection_out_of_sync_read_35061 pwr_connection_out_of_sync_read 3 35061 NULL +__kfifo_uint_must_check_helper_35097 __kfifo_uint_must_check_helper 0-1 35097 NULL +capi_write_35104 capi_write 3 35104 NULL nohasharray @@ -120853,7 +120414,8 @@ index 0000000..f527934 +dma_show_regs_35266 dma_show_regs 3 35266 NULL +irda_recvmsg_stream_35280 irda_recvmsg_stream 4 35280 NULL +i2o_block_end_request_35282 i2o_block_end_request 3 35282 NULL -+isr_rx_rdys_read_35283 isr_rx_rdys_read 3 35283 NULL ++isr_rx_rdys_read_35283 isr_rx_rdys_read 3 35283 NULL nohasharray ++nvkm_notify_init_35283 nvkm_notify_init 7 35283 &isr_rx_rdys_read_35283 +__btrfs_buffered_write_35311 __btrfs_buffered_write 3 35311 NULL nohasharray +brcmf_sdio_forensic_read_35311 brcmf_sdio_forensic_read 3 35311 &__btrfs_buffered_write_35311 +tracing_read_pipe_35312 tracing_read_pipe 3 35312 NULL @@ -120987,6 +120549,7 @@ index 0000000..f527934 +iscsi_host_alloc_36671 iscsi_host_alloc 2 36671 NULL +xillybus_read_36678 xillybus_read 3 36678 NULL +gsmtty_write_36702 gsmtty_write 3 36702 NULL ++path_getxattr_36717 path_getxattr 4 36717 NULL +snd_rawmidi_kernel_read1_36740 snd_rawmidi_kernel_read1 4-0 36740 NULL +cxgbi_device_register_36746 cxgbi_device_register 1-2 36746 NULL +ps_poll_upsd_timeouts_read_36755 ps_poll_upsd_timeouts_read 3 36755 NULL @@ -121154,6 +120717,7 @@ index 0000000..f527934 +dev_names_read_38509 dev_names_read 3 38509 NULL +iscsi_create_iface_38510 iscsi_create_iface 5 38510 NULL +event_rx_mismatch_read_38518 event_rx_mismatch_read 3 38518 NULL ++set_queue_count_38519 set_queue_count 0 38519 NULL +ubifs_idx_node_sz_38546 ubifs_idx_node_sz 0-2 38546 NULL +btrfs_discard_extent_38547 btrfs_discard_extent 2 38547 NULL +kuc_len_38557 kuc_len 0-1 38557 NULL @@ -121207,6 +120771,7 @@ index 0000000..f527934 +ath9k_hw_ar9003_dump_eeprom_39156 ath9k_hw_ar9003_dump_eeprom 5-4 39156 NULL +echo_client_kbrw_39170 echo_client_kbrw 6 39170 NULL +ext3_xattr_check_names_39174 ext3_xattr_check_names 0 39174 NULL ++mlx4_en_create_tx_ring_39179 mlx4_en_create_tx_ring 4 39179 NULL +ubi_more_update_data_39189 ubi_more_update_data 4 39189 NULL +qcam_read_bytes_39205 qcam_read_bytes 0 39205 NULL +ivtv_v4l2_write_39226 ivtv_v4l2_write 3 39226 NULL @@ -121288,7 +120853,8 @@ index 0000000..f527934 +sctp_setsockopt_delayed_ack_40129 sctp_setsockopt_delayed_ack 3 40129 NULL +dwc2_max_desc_num_40132 dwc2_max_desc_num 0 40132 NULL +rx_rx_frame_checksum_read_40140 rx_rx_frame_checksum_read 3 40140 NULL -+ath10k_write_simulate_fw_crash_40143 ath10k_write_simulate_fw_crash 3 40143 NULL ++ath10k_write_simulate_fw_crash_40143 ath10k_write_simulate_fw_crash 3 40143 NULL nohasharray ++kvm_mmu_notifier_clear_flush_young_40143 kvm_mmu_notifier_clear_flush_young 3-4 40143 &ath10k_write_simulate_fw_crash_40143 +iwch_alloc_fastreg_pbl_40153 iwch_alloc_fastreg_pbl 2 40153 NULL +pt_write_40159 pt_write 3 40159 NULL +scsi_sg_count_40182 scsi_sg_count 0 40182 NULL @@ -121315,6 +120881,7 @@ index 0000000..f527934 +get_chars_40373 get_chars 3 40373 NULL +fb_prepare_extra_logos_40429 fb_prepare_extra_logos 0-2 40429 NULL +proc_write_driver_40432 proc_write_driver 3 40432 NULL ++repair_io_failure_40452 repair_io_failure 4-3 40452 NULL +tomoyo_update_policy_40458 tomoyo_update_policy 2 40458 NULL +zd_usb_scnprint_id_40459 zd_usb_scnprint_id 0-3 40459 NULL +gp2ap020a00f_write_event_threshold_40461 gp2ap020a00f_write_event_threshold 2 40461 NULL @@ -121328,6 +120895,7 @@ index 0000000..f527934 +ixgbe_dbg_reg_ops_read_40540 ixgbe_dbg_reg_ops_read 3 40540 NULL +ima_write_policy_40548 ima_write_policy 3 40548 NULL +esp_alloc_tmp_40558 esp_alloc_tmp 3-2 40558 NULL ++bl_alloc_init_bio_40569 bl_alloc_init_bio 1 40569 NULL +get_priv_descr_and_size_40612 get_priv_descr_and_size 0 40612 NULL +twl4030_kpwrite_u8_40665 twl4030_kpwrite_u8 3 40665 NULL +__cfg80211_roamed_40668 __cfg80211_roamed 4-6 40668 NULL @@ -121364,6 +120932,7 @@ index 0000000..f527934 +gfs2_ea_find_40913 gfs2_ea_find 0 40913 NULL +vol_cdev_write_40915 vol_cdev_write 3 40915 NULL +snd_vx_create_40948 snd_vx_create 4 40948 NULL ++path_listxattr_40949 path_listxattr 3 40949 NULL +rds_sendmsg_40976 rds_sendmsg 4 40976 NULL +ima_appraise_measurement_40978 ima_appraise_measurement 6 40978 NULL +il_dbgfs_fh_reg_read_40993 il_dbgfs_fh_reg_read 3 40993 NULL @@ -121382,12 +120951,14 @@ index 0000000..f527934 +nvme_map_user_pages_41093 nvme_map_user_pages 4-3 41093 NULL nohasharray +roccat_read_41093 roccat_read 3 41093 &nvme_map_user_pages_41093 +dma_attach_41094 dma_attach 5-6 41094 NULL ++nl80211_send_mlme_event_41099 nl80211_send_mlme_event 4 41099 NULL +provide_user_output_41105 provide_user_output 3 41105 NULL +f_audio_buffer_alloc_41110 f_audio_buffer_alloc 1 41110 NULL +ath10k_read_wmi_services_41112 ath10k_read_wmi_services 3 41112 NULL +v4l2_ctrl_new_int_menu_41151 v4l2_ctrl_new_int_menu 4 41151 NULL +tx_frag_mpdu_alloc_failed_read_41167 tx_frag_mpdu_alloc_failed_read 3 41167 NULL +dvb_ca_write_41171 dvb_ca_write 3 41171 NULL ++netif_get_num_default_rss_queues_41187 netif_get_num_default_rss_queues 0 41187 NULL +dfs_file_write_41196 dfs_file_write 3 41196 NULL +nfs_page_array_len_41219 nfs_page_array_len 0-2-1 41219 NULL +cfg80211_process_disassoc_41231 cfg80211_process_disassoc 3 41231 NULL @@ -121524,7 +121095,8 @@ index 0000000..f527934 +ieee80211_if_fmt_dot11MeshHWMPactivePathTimeout_42635 ieee80211_if_fmt_dot11MeshHWMPactivePathTimeout 3 42635 NULL +scsi_activate_tcq_42640 scsi_activate_tcq 2 42640 NULL +br_mdb_rehash_42643 br_mdb_rehash 2 42643 NULL -+parport_pc_compat_write_block_pio_42644 parport_pc_compat_write_block_pio 3 42644 NULL ++parport_pc_compat_write_block_pio_42644 parport_pc_compat_write_block_pio 3 42644 NULL nohasharray ++num_controllers_42644 num_controllers 0 42644 &parport_pc_compat_write_block_pio_42644 +_regmap_raw_write_42652 _regmap_raw_write 4-2 42652 NULL +request_key_and_link_42693 request_key_and_link 4 42693 NULL +vb2_read_42703 vb2_read 3 42703 NULL @@ -121553,11 +121125,13 @@ index 0000000..f527934 +sta_last_rx_rate_read_42909 sta_last_rx_rate_read 3 42909 NULL +sctp_getsockopt_maxburst_42941 sctp_getsockopt_maxburst 2 42941 NULL +vx_reset_chk_42946 vx_reset_chk 0 42946 NULL ++ntb_setup_snb_msix_42971 ntb_setup_snb_msix 2 42971 NULL +compat_udpv6_setsockopt_42981 compat_udpv6_setsockopt 5 42981 NULL +nfs_idmap_get_desc_42990 nfs_idmap_get_desc 4-2 42990 NULL nohasharray +rtw_os_xmit_resource_alloc_42990 rtw_os_xmit_resource_alloc 3 42990 &nfs_idmap_get_desc_42990 +isr_rx_mem_overflow_read_43025 isr_rx_mem_overflow_read 3 43025 NULL +wep_default_key_count_read_43035 wep_default_key_count_read 3 43035 NULL ++__bioset_create_43059 __bioset_create 1 43059 NULL +nouveau_gpuobj_create__43072 nouveau_gpuobj_create_ 9 43072 NULL +nfs_map_group_to_gid_43082 nfs_map_group_to_gid 3 43082 NULL +_xfer_secondary_pool_43089 _xfer_secondary_pool 2 43089 NULL @@ -121697,6 +121271,7 @@ index 0000000..f527934 +mpi_resize_44674 mpi_resize 2 44674 NULL +sysfs_create_link_44685 sysfs_create_link 0 44685 NULL +ts_read_44687 ts_read 3 44687 NULL ++write_file_spectral_bins_44696 write_file_spectral_bins 3 44696 NULL +lov_emerg_alloc_44698 lov_emerg_alloc 1 44698 NULL +C_SYSC_select_44701 C_SYSC_select 1 44701 NULL +__generic_block_fiemap_44713 __generic_block_fiemap 4 44713 NULL nohasharray @@ -121705,6 +121280,7 @@ index 0000000..f527934 +_zd_iowrite32v_locked_44725 _zd_iowrite32v_locked 3 44725 NULL +clusterip_proc_write_44729 clusterip_proc_write 3 44729 NULL +fib_count_nexthops_44730 fib_count_nexthops 0 44730 NULL ++efx_wanted_parallelism_44732 efx_wanted_parallelism 0 44732 NULL +key_tx_rx_count_read_44742 key_tx_rx_count_read 3 44742 NULL +bch_bio_max_sectors_44755 bch_bio_max_sectors 0 44755 NULL +tnode_new_44757 tnode_new 3 44757 NULL nohasharray @@ -121859,6 +121435,7 @@ index 0000000..f527934 +mthca_alloc_cq_buf_46512 mthca_alloc_cq_buf 3 46512 NULL +kmsg_read_46514 kmsg_read 3 46514 NULL nohasharray +nouveau_drm_ioctl_46514 nouveau_drm_ioctl 2 46514 &kmsg_read_46514 ++nlm_end_grace_write_46517 nlm_end_grace_write 3 46517 NULL +nl80211_send_rx_assoc_46538 nl80211_send_rx_assoc 4 46538 NULL +__btrfs_free_extent_46573 __btrfs_free_extent 7 46573 NULL +dn_current_mss_46574 dn_current_mss 0 46574 NULL @@ -121891,6 +121468,7 @@ index 0000000..f527934 +lov_iocontrol_46876 lov_iocontrol 3 46876 NULL +ixgbe_dbg_reg_ops_write_46895 ixgbe_dbg_reg_ops_write 3 46895 NULL +sk_mem_pages_46896 sk_mem_pages 0-1 46896 NULL ++alloc_cmdid_46904 alloc_cmdid 0 46904 NULL +ieee80211_if_fmt_power_mode_46906 ieee80211_if_fmt_power_mode 3 46906 NULL +wlcore_alloc_hw_46917 wlcore_alloc_hw 1-3 46917 NULL +fb_write_46924 fb_write 3 46924 NULL @@ -121923,8 +121501,10 @@ index 0000000..f527934 +vsnprintf_47291 vsnprintf 0 47291 NULL +SYSC_semop_47292 SYSC_semop 3 47292 NULL +tx_internal_desc_overflow_read_47300 tx_internal_desc_overflow_read 3 47300 NULL ++virtqueue_add_47306 virtqueue_add 3 47306 NULL +nouveau_fb_create__47316 nouveau_fb_create_ 4 47316 NULL +ieee80211_if_read_dot11MeshHoldingTimeout_47356 ieee80211_if_read_dot11MeshHoldingTimeout 3 47356 NULL ++nvme_submit_admin_cmd_47357 nvme_submit_admin_cmd 0 47357 NULL +avc_get_hash_stats_47359 avc_get_hash_stats 0 47359 NULL +kvm_arch_create_memslot_47364 kvm_arch_create_memslot 3 47364 NULL nohasharray +__output_copy_user_47364 __output_copy_user 3 47364 &kvm_arch_create_memslot_47364 @@ -121980,6 +121560,7 @@ index 0000000..f527934 +W6692_empty_Bfifo_47804 W6692_empty_Bfifo 2 47804 NULL +lov_packmd_47810 lov_packmd 0 47810 NULL +tree_mod_log_insert_move_47823 tree_mod_log_insert_move 5 47823 NULL ++read_file_spectral_bins_47829 read_file_spectral_bins 3 47829 NULL +pinconf_dbg_config_write_47835 pinconf_dbg_config_write 3 47835 NULL +KEY_SIZE_47855 KEY_SIZE 0 47855 NULL +vhci_read_47878 vhci_read 3 47878 NULL @@ -121987,6 +121568,7 @@ index 0000000..f527934 +cfs_percpt_alloc_47918 cfs_percpt_alloc 2 47918 NULL +comedi_write_47926 comedi_write 3 47926 NULL +nvme_trans_get_blk_desc_len_47946 nvme_trans_get_blk_desc_len 0-2 47946 NULL ++arch_setup_msi_irq_47959 arch_setup_msi_irq 0 47959 NULL +gether_get_ifname_47972 gether_get_ifname 3 47972 NULL +mempool_resize_47983 mempool_resize 2 47983 NULL nohasharray +iwl_dbgfs_ucode_tracing_read_47983 iwl_dbgfs_ucode_tracing_read 3 47983 &mempool_resize_47983 @@ -122100,7 +121682,8 @@ index 0000000..f527934 +compat_do_readv_writev_49102 compat_do_readv_writev 4 49102 NULL +xfrm_replay_state_esn_len_49119 xfrm_replay_state_esn_len 0 49119 NULL +ll_max_cached_mb_seq_write_49122 ll_max_cached_mb_seq_write 3 49122 NULL -+pt_read_49136 pt_read 3 49136 NULL ++pt_read_49136 pt_read 3 49136 NULL nohasharray ++netxen_setup_msi_interrupts_49136 netxen_setup_msi_interrupts 2 49136 &pt_read_49136 +ipwireless_tty_received_49154 ipwireless_tty_received 3 49154 NULL +f2fs_acl_count_49155 f2fs_acl_count 0-1 49155 NULL +ipw_queue_tx_init_49161 ipw_queue_tx_init 3 49161 NULL @@ -122183,6 +121766,7 @@ index 0000000..f527934 +security_context_to_sid_50019 security_context_to_sid 2 50019 NULL +isdn_read_50021 isdn_read 3 50021 NULL +mdc_rename_pack_50023 mdc_rename_pack 4-6 50023 NULL ++xlog_recovery_process_trans_50028 xlog_recovery_process_trans 4 50028 NULL +brcmf_debugfs_chipinfo_read_50033 brcmf_debugfs_chipinfo_read 3 50033 NULL +ioread8_50049 ioread8 0 50049 NULL +fuse_conn_max_background_write_50061 fuse_conn_max_background_write 3 50061 NULL @@ -122286,12 +121870,15 @@ index 0000000..f527934 +srpt_alloc_ioctx_51042 srpt_alloc_ioctx 2-3 51042 NULL +do_arpt_set_ctl_51053 do_arpt_set_ctl 4 51053 NULL +wusb_prf_64_51065 wusb_prf_64 7 51065 NULL ++rsc_mgr_init_51067 rsc_mgr_init 3 51067 NULL +jbd2_journal_init_revoke_51088 jbd2_journal_init_revoke 2 51088 NULL ++__ipv4_tun_to_nlattr_51095 __ipv4_tun_to_nlattr 4 51095 NULL +__ocfs2_find_path_51096 __ocfs2_find_path 0 51096 NULL +ti_recv_51110 ti_recv 3 51110 NULL +alloc_rtllib_51136 alloc_rtllib 1 51136 NULL +simple_xattr_set_51140 simple_xattr_set 4 51140 NULL +xfs_trans_get_efd_51148 xfs_trans_get_efd 3 51148 NULL ++i40evf_acquire_msix_vectors_51190 i40evf_acquire_msix_vectors 2 51190 NULL +iwl_dbgfs_bcast_filters_macs_read_51231 iwl_dbgfs_bcast_filters_macs_read 3 51231 NULL +nf_ct_ext_create_51232 nf_ct_ext_create 3 51232 NULL +snd_pcm_write_51235 snd_pcm_write 3 51235 NULL @@ -122316,6 +121903,7 @@ index 0000000..f527934 +hfsplus_brec_read_51436 hfsplus_brec_read 0 51436 NULL +ieee80211_if_read_dot11MeshHWMPRootMode_51441 ieee80211_if_read_dot11MeshHWMPRootMode 3 51441 NULL +print_devstats_dot11ACKFailureCount_51443 print_devstats_dot11ACKFailureCount 3 51443 NULL ++vmxnet3_acquire_msix_vectors_51462 vmxnet3_acquire_msix_vectors 2 51462 NULL +____alloc_ei_netdev_51475 ____alloc_ei_netdev 1 51475 NULL +xfs_buf_get_uncached_51477 xfs_buf_get_uncached 2 51477 NULL +osc_brw_internal_51489 osc_brw_internal 5 51489 NULL @@ -122463,6 +122051,7 @@ index 0000000..f527934 +pvr2_ctrl_value_to_sym_internal_52881 pvr2_ctrl_value_to_sym_internal 5 52881 NULL +cache_read_procfs_52882 cache_read_procfs 3 52882 NULL +kvm_kvzalloc_52894 kvm_kvzalloc 1 52894 NULL ++copy_from_iter_bvec_52912 copy_from_iter_bvec 0-2 52912 NULL +dio_bio_reap_52913 dio_bio_reap 0 52913 NULL +__kfifo_out_peek_r_52919 __kfifo_out_peek_r 3 52919 NULL +iblock_get_bio_52936 iblock_get_bio 3 52936 NULL @@ -122476,10 +122065,12 @@ index 0000000..f527934 +bio_cur_bytes_53037 bio_cur_bytes 0 53037 NULL +nv50_chan_create_53039 nv50_chan_create 5 53039 NULL +regcache_lzo_block_count_53056 regcache_lzo_block_count 0 53056 NULL ++fimc_get_alpha_mask_53057 fimc_get_alpha_mask 0 53057 NULL +cfi_read_query_53066 cfi_read_query 0 53066 NULL +iwl_dbgfs_interrupt_write_53069 iwl_dbgfs_interrupt_write 3 53069 NULL +mwifiex_debug_read_53074 mwifiex_debug_read 3 53074 NULL +mic_virtio_copy_from_user_53107 mic_virtio_copy_from_user 3 53107 NULL ++ath10k_mac_create_53118 ath10k_mac_create 1 53118 NULL +verity_status_53120 verity_status 5 53120 NULL +brcmf_usb_dl_cmd_53130 brcmf_usb_dl_cmd 4 53130 NULL +ps_poll_ps_poll_max_ap_turn_read_53140 ps_poll_ps_poll_max_ap_turn_read 3 53140 NULL @@ -122572,6 +122163,7 @@ index 0000000..f527934 +pi_read_regr_54231 pi_read_regr 0 54231 NULL +mcp23s08_read_regs_54246 mcp23s08_read_regs 4 54246 NULL +reada_add_block_54247 reada_add_block 2 54247 NULL ++write_file_spec_scan_ctl_54248 write_file_spec_scan_ctl 3 54248 NULL +xfs_dir2_sf_addname_hard_54254 xfs_dir2_sf_addname_hard 3 54254 NULL +ceph_msgpool_get_54258 ceph_msgpool_get 2 54258 NULL +audio_write_54261 audio_write 4 54261 NULL nohasharray @@ -122583,6 +122175,7 @@ index 0000000..f527934 +dlm_alloc_pagevec_54296 dlm_alloc_pagevec 1 54296 NULL +reclaim_pages_54301 reclaim_pages 3 54301 NULL +sprintf_54306 sprintf 0 54306 NULL ++path_setxattr_54308 path_setxattr 4 54308 NULL +bio_add_pc_page_54319 bio_add_pc_page 4 54319 NULL +br_fdb_fillbuf_54339 br_fdb_fillbuf 0 54339 NULL +__alloc_dev_table_54343 __alloc_dev_table 2 54343 NULL @@ -122593,7 +122186,8 @@ index 0000000..f527934 +do_dccp_setsockopt_54377 do_dccp_setsockopt 5 54377 &intel_sdvo_write_cmd_54377 +ah_alloc_tmp_54378 ah_alloc_tmp 3-2 54378 NULL +snd_pcm_oss_read2_54387 snd_pcm_oss_read2 0-3 54387 NULL -+iwl_dbgfs_power_save_status_read_54392 iwl_dbgfs_power_save_status_read 3 54392 NULL ++iwl_dbgfs_power_save_status_read_54392 iwl_dbgfs_power_save_status_read 3 54392 NULL nohasharray ++hash_mac4_expire_54392 hash_mac4_expire 4 54392 &iwl_dbgfs_power_save_status_read_54392 +ll_ra_count_get_54410 ll_ra_count_get 3 54410 NULL +copy_gadget_strings_54417 copy_gadget_strings 2-3 54417 NULL +sparse_early_mem_maps_alloc_node_54485 sparse_early_mem_maps_alloc_node 4 54485 NULL @@ -122616,6 +122210,7 @@ index 0000000..f527934 +irq_timeout_read_54653 irq_timeout_read 3 54653 NULL +dns_resolver_read_54658 dns_resolver_read 3 54658 NULL +twl6030_interrupt_mask_54659 twl6030_interrupt_mask 2 54659 NULL ++simple_alloc_urb_54661 simple_alloc_urb 3 54661 NULL +tdp_page_fault_54663 tdp_page_fault 2 54663 NULL +bus_add_device_54665 bus_add_device 0 54665 NULL +cw1200_queue_stats_init_54670 cw1200_queue_stats_init 2 54670 NULL @@ -122673,6 +122268,7 @@ index 0000000..f527934 +sched_feat_write_55202 sched_feat_write 3 55202 NULL +ht40allow_map_read_55209 ht40allow_map_read 3 55209 NULL +__kfifo_dma_out_prepare_r_55211 __kfifo_dma_out_prepare_r 4-5 55211 NULL ++mlx4_load_one_55213 mlx4_load_one 3 55213 NULL +do_raw_setsockopt_55215 do_raw_setsockopt 5 55215 NULL +qxl_alloc_client_monitors_config_55216 qxl_alloc_client_monitors_config 2 55216 NULL +nouveau_mc_create__55217 nouveau_mc_create_ 4 55217 NULL @@ -122786,7 +122382,8 @@ index 0000000..f527934 +ocfs2_control_read_56405 ocfs2_control_read 3 56405 NULL +store_msg_56417 store_msg 3 56417 NULL +pppol2tp_sendmsg_56420 pppol2tp_sendmsg 4 56420 NULL -+l2cap_segment_le_sdu_56426 l2cap_segment_le_sdu 4 56426 NULL ++l2cap_segment_le_sdu_56426 l2cap_segment_le_sdu 4 56426 NULL nohasharray ++nvme_submit_cmd_56426 nvme_submit_cmd 0 56426 &l2cap_segment_le_sdu_56426 +lprocfs_fid_space_seq_write_56431 lprocfs_fid_space_seq_write 3 56431 NULL nohasharray +ec_dbgfs_cmd_read_56431 ec_dbgfs_cmd_read 3 56431 &lprocfs_fid_space_seq_write_56431 +fl_create_56435 fl_create 5 56435 NULL @@ -122891,6 +122488,7 @@ index 0000000..f527934 +bzImage64_load_57388 bzImage64_load 7 57388 NULL +read_file_blob_57406 read_file_blob 3 57406 NULL +enclosure_register_57412 enclosure_register 3 57412 NULL ++read_file_eeprom_57428 read_file_eeprom 3 57428 NULL +compat_keyctl_instantiate_key_iov_57431 compat_keyctl_instantiate_key_iov 3 57431 NULL +copy_to_user_fromio_57432 copy_to_user_fromio 3 57432 NULL +__roundup_pow_of_two_57461 __roundup_pow_of_two 0 57461 NULL @@ -122915,6 +122513,7 @@ index 0000000..f527934 +ldlm_cli_enqueue_local_57582 ldlm_cli_enqueue_local 11 57582 NULL +il_dbgfs_interrupt_write_57591 il_dbgfs_interrupt_write 3 57591 NULL +read_file_spectral_fft_period_57593 read_file_spectral_fft_period 3 57593 NULL ++copy_to_iter_bvec_57604 copy_to_iter_bvec 0-2 57604 NULL +tx_tx_retry_template_read_57623 tx_tx_retry_template_read 3 57623 NULL +sisusbcon_putcs_57630 sisusbcon_putcs 3 57630 NULL +mem_read_57631 mem_read 3 57631 NULL @@ -122992,6 +122591,7 @@ index 0000000..f527934 +nv_rd08_58472 nv_rd08 0 58472 NULL +snd_gf1_read_addr_58483 snd_gf1_read_addr 0 58483 NULL +snd_rme96_capture_copy_58484 snd_rme96_capture_copy 5 58484 NULL ++dw_spi_show_regs_58486 dw_spi_show_regs 3 58486 NULL +btrfs_cont_expand_58498 btrfs_cont_expand 2-3 58498 NULL +tcf_hash_create_58507 tcf_hash_create 4 58507 NULL +cifs_write_from_iter_58526 cifs_write_from_iter 2 58526 NULL @@ -123076,6 +122676,7 @@ index 0000000..f527934 +ib_copy_from_udata_59502 ib_copy_from_udata 3 59502 NULL +C_SYSC_get_mempolicy_59516 C_SYSC_get_mempolicy 3 59516 NULL +mic_vringh_copy_59523 mic_vringh_copy 4 59523 NULL ++msix_setup_entries_59545 msix_setup_entries 0 59545 NULL +mpi_get_nbits_59551 mpi_get_nbits 0 59551 NULL +tunables_write_59563 tunables_write 3 59563 NULL +bio_split_59564 bio_split 2 59564 NULL @@ -123140,6 +122741,7 @@ index 0000000..f527934 +ieee80211_if_fmt_fwded_frames_60103 ieee80211_if_fmt_fwded_frames 3 60103 NULL +SYSC_msgsnd_60113 SYSC_msgsnd 3 60113 NULL +nfs_idmap_request_key_60124 nfs_idmap_request_key 2 60124 NULL ++pcpu_need_to_extend_60133 pcpu_need_to_extend 0 60133 NULL +__mutex_lock_common_60134 __mutex_lock_common 0 60134 NULL +ld_usb_read_60156 ld_usb_read 3 60156 NULL +jmb38x_ms_count_slots_60164 jmb38x_ms_count_slots 0 60164 NULL @@ -123147,7 +122749,8 @@ index 0000000..f527934 +jffs2_alloc_full_dirent_60179 jffs2_alloc_full_dirent 1 60179 NULL nohasharray +sg_build_sgat_60179 sg_build_sgat 3 60179 &jffs2_alloc_full_dirent_60179 +fuse_async_req_send_60183 fuse_async_req_send 0-3 60183 NULL -+rx_rx_tkip_replays_read_60193 rx_rx_tkip_replays_read 3 60193 NULL ++rx_rx_tkip_replays_read_60193 rx_rx_tkip_replays_read 3 60193 NULL nohasharray ++arch_setup_msi_irqs_60193 arch_setup_msi_irqs 0 60193 &rx_rx_tkip_replays_read_60193 +qib_reg_phys_mr_60202 qib_reg_phys_mr 3 60202 NULL +btrfs_get_token_16_60220 btrfs_get_token_16 0 60220 NULL +irq_alloc_domain_generic_chips_60264 irq_alloc_domain_generic_chips 2-3 60264 NULL @@ -123206,6 +122809,7 @@ index 0000000..f527934 +ath6kl_lrssi_roam_read_61022 ath6kl_lrssi_roam_read 3 61022 NULL +graph_depth_write_61024 graph_depth_write 3 61024 NULL +sdhci_pltfm_register_61031 sdhci_pltfm_register 3 61031 NULL ++read_file_ackto_61037 read_file_ackto 3 61037 NULL +lpfc_idiag_queacc_write_61043 lpfc_idiag_queacc_write 3 61043 NULL +symtab_init_61050 symtab_init 2 61050 NULL +fuse_send_write_61053 fuse_send_write 0-4 61053 NULL @@ -123225,6 +122829,7 @@ index 0000000..f527934 +arch_hibernation_header_save_61212 arch_hibernation_header_save 0 61212 NULL +smk_read_ambient_61220 smk_read_ambient 3 61220 NULL +v9fs_mmap_file_read_61262 v9fs_mmap_file_read 3 61262 NULL ++kvm_age_hva_61267 kvm_age_hva 2-3 61267 NULL +find_get_pages_tag_61270 find_get_pages_tag 0 61270 NULL nohasharray +btrfs_bio_alloc_61270 btrfs_bio_alloc 3 61270 &find_get_pages_tag_61270 nohasharray +ifalias_store_61270 ifalias_store 4 61270 &btrfs_bio_alloc_61270 @@ -123239,6 +122844,7 @@ index 0000000..f527934 +rx_rx_wa_ba_not_expected_read_61341 rx_rx_wa_ba_not_expected_read 3 61341 NULL +__dm_get_reserved_ios_61342 __dm_get_reserved_ios 0-3-2 61342 NULL +f1x_map_sysaddr_to_csrow_61344 f1x_map_sysaddr_to_csrow 2 61344 NULL ++wil_write_file_recovery_61354 wil_write_file_recovery 3 61354 NULL +debug_debug4_read_61367 debug_debug4_read 3 61367 NULL +system_enable_write_61396 system_enable_write 3 61396 NULL +xfs_zero_remaining_bytes_61423 xfs_zero_remaining_bytes 3 61423 NULL @@ -123281,6 +122887,7 @@ index 0000000..f527934 +bfad_debugfs_write_regwr_61841 bfad_debugfs_write_regwr 3 61841 NULL +regcache_sync_block_61846 regcache_sync_block 5-4 61846 NULL +ath9k_hw_def_dump_eeprom_61853 ath9k_hw_def_dump_eeprom 5-4 61853 NULL ++__skb_flow_dissect_61855 __skb_flow_dissect 5 61855 NULL +evdev_compute_buffer_size_61863 evdev_compute_buffer_size 0 61863 NULL +SYSC_lsetxattr_61869 SYSC_lsetxattr 4 61869 NULL +get_fw_name_61874 get_fw_name 3 61874 NULL @@ -123304,6 +122911,7 @@ index 0000000..f527934 +SyS_setxattr_62019 SyS_setxattr 4 62019 NULL +jffs2_do_unlink_62020 jffs2_do_unlink 4 62020 NULL +SYSC_select_62024 SYSC_select 1 62024 NULL ++comedi_write_array_to_buffer_62032 comedi_write_array_to_buffer 3 62032 NULL +pmcraid_build_passthrough_ioadls_62034 pmcraid_build_passthrough_ioadls 2 62034 NULL +sctp_user_addto_chunk_62047 sctp_user_addto_chunk 2-3 62047 NULL +do_pselect_62061 do_pselect 1 62061 NULL @@ -123367,6 +122975,7 @@ index 0000000..f527934 +ptlrpc_req_set_repsize_62784 ptlrpc_req_set_repsize 2 62784 NULL +SyS_sched_getaffinity_62786 SyS_sched_getaffinity 2 62786 NULL +dm_stats_account_io_62787 dm_stats_account_io 3 62787 NULL ++__add_action_62798 __add_action 4 62798 NULL +tracing_total_entries_read_62817 tracing_total_entries_read 3 62817 NULL +__rounddown_pow_of_two_62836 __rounddown_pow_of_two 0 62836 NULL +bio_get_nr_vecs_62838 bio_get_nr_vecs 0 62838 NULL @@ -123436,6 +123045,7 @@ index 0000000..f527934 +write_file_spectral_fft_period_63696 write_file_spectral_fft_period 3 63696 NULL +nouveau_object_create__63715 nouveau_object_create_ 5 63715 NULL +btrfs_insert_delayed_dir_index_63720 btrfs_insert_delayed_dir_index 4 63720 NULL ++ntb_debugfs_read_63728 ntb_debugfs_read 3 63728 NULL +selinux_secctx_to_secid_63744 selinux_secctx_to_secid 2 63744 NULL +snd_pcm_oss_read1_63771 snd_pcm_oss_read1 3 63771 NULL +snd_opl4_mem_proc_read_63774 snd_opl4_mem_proc_read 5 63774 NULL @@ -123461,6 +123071,7 @@ index 0000000..f527934 +SyS_rt_sigpending_64018 SyS_rt_sigpending 2 64018 NULL +dbAllocDmapLev_64030 dbAllocDmapLev 0 64030 NULL +SyS_fsetxattr_64039 SyS_fsetxattr 4 64039 NULL ++nl80211_send_rx_assoc_64040 nl80211_send_rx_assoc 4 64040 NULL +__sock_create_64069 __sock_create 0 64069 NULL +get_u8_64076 get_u8 0 64076 NULL +xilly_malloc_64077 xilly_malloc 2 64077 NULL @@ -123496,9 +123107,11 @@ index 0000000..f527934 +sisusbcon_clear_64329 sisusbcon_clear 4-3-5 64329 NULL +ts_write_64336 ts_write 3 64336 NULL +usbtmc_write_64340 usbtmc_write 3 64340 NULL ++qlcnic_82xx_calculate_msix_vector_64354 qlcnic_82xx_calculate_msix_vector 0 64354 NULL +user_regset_copyin_64360 user_regset_copyin 7 64360 NULL +wlc_phy_loadsampletable_nphy_64367 wlc_phy_loadsampletable_nphy 3 64367 NULL -+reg_create_64372 reg_create 5 64372 NULL ++reg_create_64372 reg_create 5 64372 NULL nohasharray ++bnx2_enable_msix_64372 bnx2_enable_msix 2 64372 ®_create_64372 +ilo_write_64378 ilo_write 3 64378 NULL +btrfs_map_block_64379 btrfs_map_block 3 64379 NULL +vmcs_readl_64381 vmcs_readl 0 64381 NULL @@ -123569,6 +123182,7 @@ index 0000000..f527934 +batadv_socket_write_65083 batadv_socket_write 3 65083 NULL +ocfs2_truncate_cluster_pages_65086 ocfs2_truncate_cluster_pages 2 65086 NULL +ath9k_dump_mci_btcoex_65090 ath9k_dump_mci_btcoex 0-3 65090 NULL ++usbtest_alloc_urb_65115 usbtest_alloc_urb 3-5 65115 NULL +rx_rx_done_read_65217 rx_rx_done_read 3 65217 NULL +nouveau_event_create_65229 nouveau_event_create 2-1 65229 NULL +print_endpoint_stat_65232 print_endpoint_stat 0-4-3 65232 NULL @@ -125032,10 +124646,10 @@ index 88461f0..6fb70a0 100644 #endif /* _TOOLS_LINUX_COMPILER_H */ diff --git a/tools/lib/api/Makefile b/tools/lib/api/Makefile -index ce00f7e..0aca5e4 100644 +index 36c08b1..87c72d1 100644 --- a/tools/lib/api/Makefile +++ b/tools/lib/api/Makefile -@@ -16,7 +16,7 @@ LIB_OBJS += $(OUTPUT)fs/fs.o +@@ -21,7 +21,7 @@ LIB_OBJS += $(OUTPUT)fd/array.o LIBFILE = libapikfs.a @@ -125070,10 +124684,10 @@ index 0a578fe..b81f62d 100644 }) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c -index 6a3f29b..a1d2e93 100644 +index 3cee7b1..29cb7d8 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c -@@ -77,12 +77,17 @@ LIST_HEAD(vm_list); +@@ -78,12 +78,17 @@ LIST_HEAD(vm_list); static cpumask_var_t cpus_hardware_enabled; static int kvm_usage_count = 0; @@ -125093,7 +124707,7 @@ index 6a3f29b..a1d2e93 100644 struct dentry *kvm_debugfs_dir; -@@ -780,7 +785,7 @@ int __kvm_set_memory_region(struct kvm *kvm, +@@ -786,7 +791,7 @@ int __kvm_set_memory_region(struct kvm *kvm, /* We can read the guest memory with __xxx_user() later on. */ if ((mem->slot < KVM_USER_MEM_SLOTS) && ((mem->userspace_addr & (PAGE_SIZE - 1)) || @@ -125102,7 +124716,7 @@ index 6a3f29b..a1d2e93 100644 (void __user *)(unsigned long)mem->userspace_addr, mem->memory_size))) goto out; -@@ -1637,9 +1642,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached); +@@ -1690,9 +1695,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached); int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len) { @@ -125122,7 +124736,7 @@ index 6a3f29b..a1d2e93 100644 } EXPORT_SYMBOL_GPL(kvm_clear_guest_page); -@@ -1889,7 +1902,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp) +@@ -1941,7 +1954,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp) return 0; } @@ -125131,7 +124745,7 @@ index 6a3f29b..a1d2e93 100644 .release = kvm_vcpu_release, .unlocked_ioctl = kvm_vcpu_ioctl, #ifdef CONFIG_COMPAT -@@ -2593,7 +2606,7 @@ out: +@@ -2650,7 +2663,7 @@ out: } #endif @@ -125140,7 +124754,7 @@ index 6a3f29b..a1d2e93 100644 .release = kvm_vm_release, .unlocked_ioctl = kvm_vm_ioctl, #ifdef CONFIG_COMPAT -@@ -2666,7 +2679,7 @@ out: +@@ -2721,7 +2734,7 @@ out: return r; } @@ -125149,7 +124763,7 @@ index 6a3f29b..a1d2e93 100644 .unlocked_ioctl = kvm_dev_ioctl, .compat_ioctl = kvm_dev_ioctl, .llseek = noop_llseek, -@@ -2692,7 +2705,7 @@ static void hardware_enable_nolock(void *junk) +@@ -2747,7 +2760,7 @@ static void hardware_enable_nolock(void *junk) if (r) { cpumask_clear_cpu(cpu, cpus_hardware_enabled); @@ -125158,7 +124772,7 @@ index 6a3f29b..a1d2e93 100644 printk(KERN_INFO "kvm: enabling virtualization on " "CPU%d failed\n", cpu); } -@@ -2748,10 +2761,10 @@ static int hardware_enable_all(void) +@@ -2803,10 +2816,10 @@ static int hardware_enable_all(void) kvm_usage_count++; if (kvm_usage_count == 1) { @@ -125171,7 +124785,7 @@ index 6a3f29b..a1d2e93 100644 hardware_disable_all_nolock(); r = -EBUSY; } -@@ -3156,7 +3169,7 @@ static void kvm_sched_out(struct preempt_notifier *pn, +@@ -3213,7 +3226,7 @@ static void kvm_sched_out(struct preempt_notifier *pn, kvm_arch_vcpu_put(vcpu); } @@ -125180,7 +124794,7 @@ index 6a3f29b..a1d2e93 100644 struct module *module) { int r; -@@ -3203,7 +3216,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, +@@ -3260,7 +3273,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, if (!vcpu_align) vcpu_align = __alignof__(struct kvm_vcpu); kvm_vcpu_cache = kmem_cache_create("kvm_vcpu", vcpu_size, vcpu_align, @@ -125189,7 +124803,7 @@ index 6a3f29b..a1d2e93 100644 if (!kvm_vcpu_cache) { r = -ENOMEM; goto out_free_3; -@@ -3213,9 +3226,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, +@@ -3270,9 +3283,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, if (r) goto out_free; @@ -125201,7 +124815,7 @@ index 6a3f29b..a1d2e93 100644 r = misc_register(&kvm_dev); if (r) { -@@ -3225,9 +3240,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, +@@ -3282,9 +3297,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, register_syscore_ops(&kvm_syscore_ops); -- 2.39.2