Update odroidxu4 current to 5.4.210 and edge to 5.19.0 (#4068)
* Update odroidxu4-current to 5.4.210 * Adjust kernel configs and move EDGE to 5.19.y Co-authored-by: Igor Pecovnik <igor.pecovnik@gmail.com>
This commit is contained in:
parent
3435c46367
commit
63ad684261
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.4.195 Kernel Configuration
|
||||
# Linux/arm 5.4.210 Kernel Configuration
|
||||
#
|
||||
|
||||
#
|
||||
@ -490,6 +490,7 @@ CONFIG_SECCOMP=y
|
||||
# CONFIG_PARAVIRT is not set
|
||||
# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
|
||||
# CONFIG_XEN is not set
|
||||
CONFIG_STACKPROTECTOR_PER_TASK=y
|
||||
# end of Kernel Features
|
||||
|
||||
#
|
||||
@ -649,9 +650,11 @@ CONFIG_VHOST=m
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
CONFIG_KPROBES=y
|
||||
# CONFIG_JUMP_LABEL is not set
|
||||
CONFIG_OPTPROBES=y
|
||||
CONFIG_UPROBES=y
|
||||
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
|
||||
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
|
||||
CONFIG_KRETPROBES=y
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
CONFIG_HAVE_KRETPROBES=y
|
||||
CONFIG_HAVE_OPTPROBES=y
|
||||
@ -702,7 +705,6 @@ CONFIG_STRICT_KERNEL_RWX=y
|
||||
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
|
||||
CONFIG_STRICT_MODULE_RWX=y
|
||||
CONFIG_ARCH_HAS_PHYS_TO_DMA=y
|
||||
CONFIG_REFCOUNT_FULL=y
|
||||
# CONFIG_LOCK_EVENT_COUNTS is not set
|
||||
|
||||
#
|
||||
@ -712,8 +714,12 @@ CONFIG_REFCOUNT_FULL=y
|
||||
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
|
||||
# end of GCOV-based kernel profiling
|
||||
|
||||
CONFIG_PLUGIN_HOSTCC=""
|
||||
CONFIG_PLUGIN_HOSTCC="g++"
|
||||
CONFIG_HAVE_GCC_PLUGINS=y
|
||||
CONFIG_GCC_PLUGINS=y
|
||||
# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set
|
||||
# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set
|
||||
CONFIG_GCC_PLUGIN_ARM_SSP_PER_TASK=y
|
||||
# end of General architecture-dependent options
|
||||
|
||||
CONFIG_RT_MUTEXES=y
|
||||
@ -2767,9 +2773,8 @@ CONFIG_TCG_TIS_I2C_INFINEON=y
|
||||
# CONFIG_TCG_TIS_ST33ZP24_SPI is not set
|
||||
# CONFIG_XILLYBUS is not set
|
||||
CONFIG_EXYNOS_GPIOMEM=m
|
||||
# end of Character devices
|
||||
|
||||
# CONFIG_RANDOM_TRUST_BOOTLOADER is not set
|
||||
# end of Character devices
|
||||
|
||||
#
|
||||
# I2C support
|
||||
@ -6280,24 +6285,6 @@ CONFIG_EROFS_FS_XATTR=y
|
||||
CONFIG_EROFS_FS_POSIX_ACL=y
|
||||
CONFIG_EROFS_FS_SECURITY=y
|
||||
# CONFIG_EROFS_FS_ZIP is not set
|
||||
CONFIG_AUFS_FS=m
|
||||
CONFIG_AUFS_BRANCH_MAX_127=y
|
||||
# CONFIG_AUFS_BRANCH_MAX_511 is not set
|
||||
# CONFIG_AUFS_BRANCH_MAX_1023 is not set
|
||||
# CONFIG_AUFS_BRANCH_MAX_32767 is not set
|
||||
CONFIG_AUFS_SBILIST=y
|
||||
# CONFIG_AUFS_HNOTIFY is not set
|
||||
CONFIG_AUFS_EXPORT=y
|
||||
CONFIG_AUFS_XATTR=y
|
||||
# CONFIG_AUFS_FHSM is not set
|
||||
# CONFIG_AUFS_RDU is not set
|
||||
CONFIG_AUFS_DIRREN=y
|
||||
# CONFIG_AUFS_SHWH is not set
|
||||
# CONFIG_AUFS_BR_RAMFS is not set
|
||||
# CONFIG_AUFS_BR_FUSE is not set
|
||||
CONFIG_AUFS_BR_HFSPLUS=y
|
||||
CONFIG_AUFS_BDEV_LOOP=y
|
||||
# CONFIG_AUFS_DEBUG is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=m
|
||||
CONFIG_NFS_V2=m
|
||||
@ -6492,6 +6479,9 @@ CONFIG_LSM="lockdown,yama,integrity,apparmor"
|
||||
# Memory initialization
|
||||
#
|
||||
CONFIG_INIT_STACK_NONE=y
|
||||
# CONFIG_GCC_PLUGIN_STRUCTLEAK_USER is not set
|
||||
# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF is not set
|
||||
# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL is not set
|
||||
CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
|
||||
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
|
||||
# end of Memory initialization
|
||||
@ -6931,6 +6921,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
|
||||
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
|
||||
# CONFIG_STACK_TRACER is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
CONFIG_KPROBE_EVENTS=y
|
||||
CONFIG_UPROBE_EVENTS=y
|
||||
CONFIG_BPF_EVENTS=y
|
||||
CONFIG_DYNAMIC_EVENTS=y
|
||||
@ -6989,6 +6980,7 @@ CONFIG_ARM_UNWIND=y
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
|
||||
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
|
||||
CONFIG_ARM_KPROBES_TEST=m
|
||||
# CONFIG_PID_IN_CONTEXTIDR is not set
|
||||
# CONFIG_CORESIGHT is not set
|
||||
# end of Kernel hacking
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.18.12 Kernel Configuration
|
||||
# Linux/arm 5.19.0 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
@ -42,7 +42,6 @@ CONFIG_KERNEL_GZIP=y
|
||||
# CONFIG_KERNEL_LZ4 is not set
|
||||
CONFIG_DEFAULT_INIT=""
|
||||
CONFIG_DEFAULT_HOSTNAME="(none)"
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_SYSVIPC_SYSCTL=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
@ -201,6 +200,7 @@ CONFIG_RD_LZO=y
|
||||
CONFIG_RD_LZ4=y
|
||||
CONFIG_RD_ZSTD=y
|
||||
# CONFIG_BOOT_CONFIG is not set
|
||||
CONFIG_INITRAMFS_PRESERVE_MTIME=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_LD_ORPHAN_WARN=y
|
||||
@ -229,7 +229,6 @@ CONFIG_ADVISE_SYSCALLS=y
|
||||
CONFIG_MEMBARRIER=y
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_BASE_RELATIVE=y
|
||||
# CONFIG_USERFAULTFD is not set
|
||||
CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
|
||||
CONFIG_KCMP=y
|
||||
CONFIG_RSEQ=y
|
||||
@ -243,16 +242,6 @@ CONFIG_PERF_USE_VMALLOC=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
# end of Kernel Performance Events And Counters
|
||||
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
# CONFIG_SLAB is not set
|
||||
CONFIG_SLUB=y
|
||||
CONFIG_SLAB_MERGE_DEFAULT=y
|
||||
# CONFIG_SLAB_FREELIST_RANDOM is not set
|
||||
# CONFIG_SLAB_FREELIST_HARDENED is not set
|
||||
# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
|
||||
CONFIG_SLUB_CPU_PARTIAL=y
|
||||
CONFIG_SYSTEM_DATA_VERIFICATION=y
|
||||
# CONFIG_PROFILING is not set
|
||||
CONFIG_TRACEPOINTS=y
|
||||
@ -282,16 +271,9 @@ CONFIG_MMU=y
|
||||
CONFIG_ARCH_MMAP_RND_BITS_MIN=8
|
||||
CONFIG_ARCH_MMAP_RND_BITS_MAX=16
|
||||
CONFIG_ARCH_MULTIPLATFORM=y
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_IOP32X is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_DOVE is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C24XX is not set
|
||||
# CONFIG_ARCH_OMAP1 is not set
|
||||
|
||||
#
|
||||
# Multiple platform selection
|
||||
@ -315,6 +297,7 @@ CONFIG_ARCH_MULTI_V6_V7=y
|
||||
# CONFIG_ARCH_BCM is not set
|
||||
# CONFIG_ARCH_BERLIN is not set
|
||||
# CONFIG_ARCH_DIGICOLOR is not set
|
||||
# CONFIG_ARCH_DOVE is not set
|
||||
CONFIG_ARCH_EXYNOS=y
|
||||
CONFIG_S5P_DEV_MFC=y
|
||||
CONFIG_ARCH_EXYNOS3=y
|
||||
@ -336,6 +319,7 @@ CONFIG_EXYNOS_MCPM=y
|
||||
CONFIG_EXYNOS_CPU_SUSPEND=y
|
||||
# CONFIG_ARCH_HIGHBANK is not set
|
||||
# CONFIG_ARCH_HISI is not set
|
||||
# CONFIG_ARCH_HPE is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
# CONFIG_ARCH_KEYSTONE is not set
|
||||
# CONFIG_ARCH_MEDIATEK is not set
|
||||
@ -360,7 +344,6 @@ CONFIG_EXYNOS_CPU_SUSPEND=y
|
||||
# CONFIG_ARCH_QCOM is not set
|
||||
# CONFIG_ARCH_RDA is not set
|
||||
# CONFIG_ARCH_REALTEK is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_ROCKCHIP is not set
|
||||
# CONFIG_ARCH_S5PV210 is not set
|
||||
# CONFIG_ARCH_RENESAS is not set
|
||||
@ -372,6 +355,7 @@ CONFIG_EXYNOS_CPU_SUSPEND=y
|
||||
# CONFIG_ARCH_TEGRA is not set
|
||||
# CONFIG_ARCH_UNIPHIER is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VEXPRESS is not set
|
||||
# CONFIG_ARCH_WM8850 is not set
|
||||
# CONFIG_ARCH_ZYNQ is not set
|
||||
@ -401,6 +385,7 @@ CONFIG_ARM_THUMB=y
|
||||
# CONFIG_ARM_THUMBEE is not set
|
||||
CONFIG_ARM_VIRT_EXT=y
|
||||
CONFIG_SWP_EMULATE=y
|
||||
CONFIG_CPU_LITTLE_ENDIAN=y
|
||||
# CONFIG_CPU_BIG_ENDIAN is not set
|
||||
# CONFIG_CPU_ICACHE_DISABLE is not set
|
||||
CONFIG_CPU_ICACHE_MISMATCH_WORKAROUND=y
|
||||
@ -423,7 +408,6 @@ CONFIG_ARM_L1_CACHE_SHIFT_6=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=6
|
||||
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
|
||||
CONFIG_ARM_HEAVY_MB=y
|
||||
CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
|
||||
CONFIG_DEBUG_ALIGN_RODATA=y
|
||||
# CONFIG_ARM_ERRATA_430973 is not set
|
||||
CONFIG_ARM_ERRATA_643719=y
|
||||
@ -431,6 +415,7 @@ CONFIG_ARM_ERRATA_643719=y
|
||||
# CONFIG_ARM_ERRATA_754322 is not set
|
||||
# CONFIG_ARM_ERRATA_754327 is not set
|
||||
# CONFIG_ARM_ERRATA_764369 is not set
|
||||
# CONFIG_ARM_ERRATA_764319 is not set
|
||||
# CONFIG_ARM_ERRATA_775420 is not set
|
||||
# CONFIG_ARM_ERRATA_798181 is not set
|
||||
# CONFIG_ARM_ERRATA_773022 is not set
|
||||
@ -721,7 +706,6 @@ CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
|
||||
CONFIG_HAVE_GCC_PLUGINS=y
|
||||
CONFIG_GCC_PLUGINS=y
|
||||
# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set
|
||||
# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set
|
||||
# end of General architecture-dependent options
|
||||
|
||||
CONFIG_RT_MUTEXES=y
|
||||
@ -730,6 +714,7 @@ CONFIG_MODULES=y
|
||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
# CONFIG_MODULE_SIG is not set
|
||||
@ -830,6 +815,25 @@ CONFIG_COREDUMP=y
|
||||
#
|
||||
# Memory Management options
|
||||
#
|
||||
CONFIG_SWAP=y
|
||||
# CONFIG_ZSWAP is not set
|
||||
CONFIG_ZSMALLOC=m
|
||||
# CONFIG_ZSMALLOC_STAT is not set
|
||||
|
||||
#
|
||||
# SLAB allocator options
|
||||
#
|
||||
# CONFIG_SLAB is not set
|
||||
CONFIG_SLUB=y
|
||||
CONFIG_SLAB_MERGE_DEFAULT=y
|
||||
# CONFIG_SLAB_FREELIST_RANDOM is not set
|
||||
# CONFIG_SLAB_FREELIST_HARDENED is not set
|
||||
# CONFIG_SLUB_STATS is not set
|
||||
CONFIG_SLUB_CPU_PARTIAL=y
|
||||
# end of SLAB allocator options
|
||||
|
||||
# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
@ -851,18 +855,16 @@ CONFIG_CMA=y
|
||||
# CONFIG_CMA_DEBUGFS is not set
|
||||
# CONFIG_CMA_SYSFS is not set
|
||||
CONFIG_CMA_AREAS=7
|
||||
# CONFIG_ZSWAP is not set
|
||||
# CONFIG_ZPOOL is not set
|
||||
CONFIG_ZSMALLOC=y
|
||||
# CONFIG_ZSMALLOC_STAT is not set
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
# CONFIG_IDLE_PAGE_TRACKING is not set
|
||||
CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_PERCPU_STATS is not set
|
||||
# CONFIG_GUP_TEST is not set
|
||||
CONFIG_KMAP_LOCAL=y
|
||||
CONFIG_KMAP_LOCAL_NON_LINEAR_PTE_ARRAY=y
|
||||
# CONFIG_ANON_VMA_NAME is not set
|
||||
# CONFIG_USERFAULTFD is not set
|
||||
|
||||
#
|
||||
# Data Access Monitoring
|
||||
@ -1600,6 +1602,8 @@ CONFIG_CAN_CALC_BITTIMING=y
|
||||
# CONFIG_CAN_TI_HECC is not set
|
||||
# CONFIG_CAN_C_CAN is not set
|
||||
# CONFIG_CAN_CC770 is not set
|
||||
CONFIG_CAN_CTUCANFD=m
|
||||
CONFIG_CAN_CTUCANFD_PLATFORM=m
|
||||
# CONFIG_CAN_IFI_CANFD is not set
|
||||
# CONFIG_CAN_M_CAN is not set
|
||||
# CONFIG_CAN_SJA1000 is not set
|
||||
@ -1777,11 +1781,13 @@ CONFIG_STANDALONE=y
|
||||
#
|
||||
CONFIG_FW_LOADER=y
|
||||
CONFIG_FW_LOADER_PAGED_BUF=y
|
||||
CONFIG_FW_LOADER_SYSFS=y
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
CONFIG_FW_LOADER_USER_HELPER=y
|
||||
# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
|
||||
# CONFIG_FW_LOADER_COMPRESS is not set
|
||||
CONFIG_FW_CACHE=y
|
||||
# CONFIG_FW_UPLOAD is not set
|
||||
# end of Firmware loader
|
||||
|
||||
CONFIG_WANT_DEV_COREDUMP=y
|
||||
@ -1814,6 +1820,7 @@ CONFIG_ARM_CCI400_PORT_CTRL=y
|
||||
# CONFIG_VEXPRESS_CONFIG is not set
|
||||
CONFIG_MHI_BUS=m
|
||||
# CONFIG_MHI_BUS_DEBUG is not set
|
||||
CONFIG_MHI_BUS_EP=m
|
||||
# end of Bus devices
|
||||
|
||||
CONFIG_CONNECTOR=m
|
||||
@ -1833,7 +1840,6 @@ CONFIG_FW_CFG_SYSFS=m
|
||||
# CONFIG_TRUSTED_FOUNDATIONS is not set
|
||||
CONFIG_CS_DSP=m
|
||||
# CONFIG_GOOGLE_FIRMWARE is not set
|
||||
# CONFIG_EFI_DISABLE_RUNTIME is not set
|
||||
CONFIG_HAVE_ARM_SMCCC=y
|
||||
|
||||
#
|
||||
@ -1987,7 +1993,6 @@ CONFIG_SCSI_ISCSI_ATTRS=m
|
||||
CONFIG_SCSI_LOWLEVEL=y
|
||||
CONFIG_ISCSI_TCP=m
|
||||
CONFIG_ISCSI_BOOT_SYSFS=m
|
||||
# CONFIG_SCSI_UFSHCD is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
CONFIG_SCSI_VIRTIO=m
|
||||
# CONFIG_SCSI_DH is not set
|
||||
@ -2200,6 +2205,7 @@ CONFIG_FIXED_PHY=y
|
||||
#
|
||||
# CONFIG_AMD_PHY is not set
|
||||
CONFIG_ADIN_PHY=m
|
||||
CONFIG_ADIN1100_PHY=m
|
||||
# CONFIG_AQUANTIA_PHY is not set
|
||||
CONFIG_AX88796B_PHY=m
|
||||
# CONFIG_BROADCOM_PHY is not set
|
||||
@ -2241,6 +2247,7 @@ CONFIG_SMSC_PHY=m
|
||||
# CONFIG_DP83848_PHY is not set
|
||||
# CONFIG_DP83867_PHY is not set
|
||||
CONFIG_DP83869_PHY=m
|
||||
CONFIG_DP83TD510_PHY=m
|
||||
# CONFIG_VITESSE_PHY is not set
|
||||
# CONFIG_XILINX_GMII2RGMII is not set
|
||||
# CONFIG_MICREL_KS8995MA is not set
|
||||
@ -2425,6 +2432,8 @@ CONFIG_MT7921U=m
|
||||
CONFIG_WLAN_VENDOR_MICROCHIP=y
|
||||
# CONFIG_WILC1000_SDIO is not set
|
||||
# CONFIG_WILC1000_SPI is not set
|
||||
CONFIG_WLAN_VENDOR_PURELIFI=y
|
||||
CONFIG_PLFXLC=m
|
||||
CONFIG_WLAN_VENDOR_RALINK=y
|
||||
CONFIG_RT2X00=m
|
||||
CONFIG_RT2500USB=m
|
||||
@ -2457,6 +2466,8 @@ CONFIG_RTW88=m
|
||||
CONFIG_RTW89=m
|
||||
CONFIG_WLAN_VENDOR_RSI=y
|
||||
# CONFIG_RSI_91X is not set
|
||||
CONFIG_WLAN_VENDOR_SILABS=y
|
||||
CONFIG_WFX=m
|
||||
CONFIG_WLAN_VENDOR_ST=y
|
||||
# CONFIG_CW1200 is not set
|
||||
CONFIG_WLAN_VENDOR_TI=y
|
||||
@ -2624,6 +2635,7 @@ CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
|
||||
# CONFIG_JOYSTICK_PXRC is not set
|
||||
CONFIG_JOYSTICK_QWIIC=m
|
||||
CONFIG_JOYSTICK_FSIA6B=m
|
||||
CONFIG_JOYSTICK_SENSEHAT=m
|
||||
CONFIG_INPUT_TABLET=y
|
||||
CONFIG_TABLET_USB_ACECAD=m
|
||||
CONFIG_TABLET_USB_AIPTEK=m
|
||||
@ -2750,6 +2762,7 @@ CONFIG_INPUT_DA7280_HAPTICS=m
|
||||
# CONFIG_INPUT_IMS_PCU is not set
|
||||
CONFIG_INPUT_IQS269A=m
|
||||
CONFIG_INPUT_IQS626A=m
|
||||
CONFIG_INPUT_IQS7222=m
|
||||
# CONFIG_INPUT_CMA3000 is not set
|
||||
# CONFIG_INPUT_DRV260X_HAPTICS is not set
|
||||
# CONFIG_INPUT_DRV2665_HAPTICS is not set
|
||||
@ -3323,7 +3336,9 @@ CONFIG_SENSORS_LM90=y
|
||||
# CONFIG_SENSORS_PC87427 is not set
|
||||
CONFIG_SENSORS_NTC_THERMISTOR=y
|
||||
# CONFIG_SENSORS_NCT6683 is not set
|
||||
CONFIG_SENSORS_NCT6775_CORE=m
|
||||
# CONFIG_SENSORS_NCT6775 is not set
|
||||
CONFIG_SENSORS_NCT6775_I2C=m
|
||||
# CONFIG_SENSORS_NCT7802 is not set
|
||||
# CONFIG_SENSORS_NCT7904 is not set
|
||||
CONFIG_SENSORS_NPCM7XX=m
|
||||
@ -3631,6 +3646,7 @@ CONFIG_REGULATOR_ROHM=m
|
||||
CONFIG_REGULATOR_RT4801=m
|
||||
CONFIG_REGULATOR_RT4831=m
|
||||
CONFIG_REGULATOR_RT5190A=m
|
||||
CONFIG_REGULATOR_RT5759=m
|
||||
CONFIG_REGULATOR_RT6160=m
|
||||
CONFIG_REGULATOR_RT6245=m
|
||||
# CONFIG_REGULATOR_RTQ2134 is not set
|
||||
@ -4268,14 +4284,16 @@ CONFIG_DVB_SP2=m
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_MIPI_DBI=m
|
||||
CONFIG_DRM_MIPI_DSI=y
|
||||
CONFIG_DRM_DP_AUX_BUS=m
|
||||
# CONFIG_DRM_DP_AUX_CHARDEV is not set
|
||||
# CONFIG_DRM_DEBUG_MM is not set
|
||||
CONFIG_DRM_DP_HELPER=y
|
||||
CONFIG_DRM_KMS_HELPER=y
|
||||
CONFIG_DRM_FBDEV_EMULATION=y
|
||||
CONFIG_DRM_FBDEV_OVERALLOC=100
|
||||
# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
|
||||
CONFIG_DRM_DP_AUX_BUS=m
|
||||
CONFIG_DRM_DISPLAY_HELPER=y
|
||||
CONFIG_DRM_DISPLAY_DP_HELPER=y
|
||||
CONFIG_DRM_DISPLAY_HDCP_HELPER=y
|
||||
# CONFIG_DRM_DP_AUX_CHARDEV is not set
|
||||
# CONFIG_DRM_DP_CEC is not set
|
||||
CONFIG_DRM_GEM_CMA_HELPER=m
|
||||
CONFIG_DRM_GEM_SHMEM_HELPER=y
|
||||
@ -4370,6 +4388,7 @@ CONFIG_DRM_PANEL_SAMSUNG_LD9040=y
|
||||
# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
|
||||
# CONFIG_DRM_PANEL_LG_LG4573 is not set
|
||||
# CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set
|
||||
CONFIG_DRM_PANEL_NEWVISION_NV3052C=m
|
||||
CONFIG_DRM_PANEL_NOVATEK_NT35510=m
|
||||
CONFIG_DRM_PANEL_NOVATEK_NT35560=m
|
||||
CONFIG_DRM_PANEL_NOVATEK_NT35950=m
|
||||
@ -4425,8 +4444,10 @@ CONFIG_DRM_CHIPONE_ICN6211=m
|
||||
CONFIG_DRM_CHRONTEL_CH7033=m
|
||||
CONFIG_DRM_CROS_EC_ANX7688=m
|
||||
CONFIG_DRM_DISPLAY_CONNECTOR=m
|
||||
CONFIG_DRM_FSL_LDB=m
|
||||
CONFIG_DRM_ITE_IT6505=m
|
||||
CONFIG_DRM_LONTIUM_LT8912B=m
|
||||
CONFIG_DRM_LONTIUM_LT9211=m
|
||||
CONFIG_DRM_LONTIUM_LT9611=m
|
||||
CONFIG_DRM_LONTIUM_LT9611UXC=m
|
||||
CONFIG_DRM_ITE_IT66121=m
|
||||
@ -4484,6 +4505,7 @@ CONFIG_DRM_TIDSS=m
|
||||
CONFIG_DRM_GUD=m
|
||||
CONFIG_DRM_SSD130X=m
|
||||
CONFIG_DRM_SSD130X_I2C=m
|
||||
CONFIG_DRM_SSD130X_SPI=m
|
||||
# CONFIG_DRM_LEGACY is not set
|
||||
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
|
||||
CONFIG_DRM_NOMODESET=y
|
||||
@ -4564,10 +4586,10 @@ CONFIG_HDMI=y
|
||||
#
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
|
||||
CONFIG_BOOTSPLASH=y
|
||||
# end of Console display driver support
|
||||
|
||||
CONFIG_LOGO=y
|
||||
@ -4735,6 +4757,10 @@ CONFIG_SND_SOC_CS35L41_LIB=m
|
||||
CONFIG_SND_SOC_CS35L41=m
|
||||
CONFIG_SND_SOC_CS35L41_SPI=m
|
||||
CONFIG_SND_SOC_CS35L41_I2C=m
|
||||
CONFIG_SND_SOC_CS35L45_TABLES=m
|
||||
CONFIG_SND_SOC_CS35L45=m
|
||||
CONFIG_SND_SOC_CS35L45_SPI=m
|
||||
CONFIG_SND_SOC_CS35L45_I2C=m
|
||||
# CONFIG_SND_SOC_CS42L42 is not set
|
||||
# CONFIG_SND_SOC_CS42L51_I2C is not set
|
||||
# CONFIG_SND_SOC_CS42L52 is not set
|
||||
@ -4773,6 +4799,7 @@ CONFIG_SND_SOC_MAX98520=m
|
||||
CONFIG_SND_SOC_MAX98373=m
|
||||
CONFIG_SND_SOC_MAX98373_I2C=m
|
||||
CONFIG_SND_SOC_MAX98390=m
|
||||
CONFIG_SND_SOC_MAX98396=m
|
||||
# CONFIG_SND_SOC_MAX9860 is not set
|
||||
# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set
|
||||
# CONFIG_SND_SOC_PCM1681 is not set
|
||||
@ -4840,7 +4867,9 @@ CONFIG_SND_SOC_UDA1334=m
|
||||
# CONFIG_SND_SOC_WM8580 is not set
|
||||
# CONFIG_SND_SOC_WM8711 is not set
|
||||
# CONFIG_SND_SOC_WM8728 is not set
|
||||
# CONFIG_SND_SOC_WM8731 is not set
|
||||
CONFIG_SND_SOC_WM8731=m
|
||||
CONFIG_SND_SOC_WM8731_I2C=m
|
||||
CONFIG_SND_SOC_WM8731_SPI=m
|
||||
# CONFIG_SND_SOC_WM8737 is not set
|
||||
# CONFIG_SND_SOC_WM8741 is not set
|
||||
# CONFIG_SND_SOC_WM8750 is not set
|
||||
@ -4852,6 +4881,7 @@ CONFIG_SND_SOC_UDA1334=m
|
||||
# CONFIG_SND_SOC_WM8804_SPI is not set
|
||||
# CONFIG_SND_SOC_WM8903 is not set
|
||||
CONFIG_SND_SOC_WM8904=m
|
||||
CONFIG_SND_SOC_WM8940=m
|
||||
# CONFIG_SND_SOC_WM8960 is not set
|
||||
# CONFIG_SND_SOC_WM8962 is not set
|
||||
# CONFIG_SND_SOC_WM8974 is not set
|
||||
@ -4961,6 +4991,7 @@ CONFIG_LOGIWHEELS_FF=y
|
||||
CONFIG_HID_MAGICMOUSE=m
|
||||
CONFIG_HID_MALTRON=m
|
||||
CONFIG_HID_MAYFLASH=m
|
||||
CONFIG_HID_MEGAWORLD_FF=m
|
||||
CONFIG_HID_REDRAGON=y
|
||||
CONFIG_HID_MICROSOFT=m
|
||||
CONFIG_HID_MONTEREY=m
|
||||
@ -5370,6 +5401,7 @@ CONFIG_MMC_DW_EXYNOS=y
|
||||
CONFIG_MMC_HSQ=m
|
||||
# CONFIG_MMC_MTK is not set
|
||||
CONFIG_MMC_LITEX=m
|
||||
# CONFIG_SCSI_UFSHCD is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
@ -5438,6 +5470,11 @@ CONFIG_LEDS_RT4505=m
|
||||
CONFIG_LEDS_RT8515=m
|
||||
CONFIG_LEDS_SGM3140=m
|
||||
|
||||
#
|
||||
# RGB LED drivers
|
||||
#
|
||||
CONFIG_LEDS_PWM_MULTICOLOR=m
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
@ -5640,6 +5677,7 @@ CONFIG_IRQ_BYPASS_MANAGER=m
|
||||
# CONFIG_VIRT_DRIVERS is not set
|
||||
CONFIG_VIRTIO=m
|
||||
CONFIG_VIRTIO_MENU=y
|
||||
# CONFIG_VIRTIO_HARDEN_NOTIFICATION is not set
|
||||
CONFIG_VIRTIO_VDPA=m
|
||||
CONFIG_VIRTIO_BALLOON=m
|
||||
CONFIG_VIRTIO_INPUT=m
|
||||
@ -5752,7 +5790,6 @@ CONFIG_AD2S1210=m
|
||||
# CONFIG_STAGING_MEDIA is not set
|
||||
# CONFIG_STAGING_BOARD is not set
|
||||
CONFIG_LTE_GDM724X=m
|
||||
# CONFIG_UNISYSSPAR is not set
|
||||
CONFIG_COMMON_CLK_XLNX_CLKWZRD=m
|
||||
# CONFIG_FB_TFT is not set
|
||||
CONFIG_MOST_COMPONENTS=m
|
||||
@ -5767,7 +5804,10 @@ CONFIG_FIELDBUS_DEV=m
|
||||
CONFIG_HMS_ANYBUSS_BUS=m
|
||||
CONFIG_ARCX_ANYBUS_CONTROLLER=m
|
||||
CONFIG_HMS_PROFINET=m
|
||||
CONFIG_WFX=m
|
||||
|
||||
#
|
||||
# VME Device Drivers
|
||||
#
|
||||
# CONFIG_GOLDFISH is not set
|
||||
CONFIG_CHROME_PLATFORMS=y
|
||||
CONFIG_CROS_EC=y
|
||||
@ -6533,6 +6573,7 @@ CONFIG_PWM_IQS620A=m
|
||||
CONFIG_PWM_NTXEC=m
|
||||
# CONFIG_PWM_PCA9685 is not set
|
||||
CONFIG_PWM_SAMSUNG=y
|
||||
CONFIG_PWM_XILINX=m
|
||||
|
||||
#
|
||||
# IRQ chip support
|
||||
@ -6542,6 +6583,7 @@ CONFIG_ARM_GIC=y
|
||||
CONFIG_ARM_GIC_MAX_NR=1
|
||||
CONFIG_GIC_NON_BANKED=y
|
||||
# CONFIG_AL_FIC is not set
|
||||
# CONFIG_XILINX_INTC is not set
|
||||
CONFIG_EXYNOS_IRQ_COMBINER=y
|
||||
# end of IRQ chip support
|
||||
|
||||
@ -6639,6 +6681,7 @@ CONFIG_MOST_CDEV=m
|
||||
CONFIG_MOST_SND=m
|
||||
CONFIG_PECI=m
|
||||
CONFIG_PECI_CPU=m
|
||||
# CONFIG_HTE is not set
|
||||
# end of Device Drivers
|
||||
|
||||
#
|
||||
@ -7028,6 +7071,10 @@ CONFIG_INIT_STACK_NONE=y
|
||||
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
|
||||
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
|
||||
# end of Memory initialization
|
||||
|
||||
CONFIG_RANDSTRUCT_NONE=y
|
||||
# CONFIG_RANDSTRUCT_FULL is not set
|
||||
# CONFIG_RANDSTRUCT_PERFORMANCE is not set
|
||||
# end of Kernel hardening options
|
||||
# end of Security options
|
||||
|
||||
@ -7141,6 +7188,7 @@ CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
CONFIG_CRYPTO_SHA3=m
|
||||
CONFIG_CRYPTO_SM3=m
|
||||
CONFIG_CRYPTO_SM3_GENERIC=m
|
||||
CONFIG_CRYPTO_STREEBOG=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
|
||||
@ -7163,7 +7211,8 @@ CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_CHACHA20=m
|
||||
CONFIG_CRYPTO_SEED=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
# CONFIG_CRYPTO_SM4 is not set
|
||||
CONFIG_CRYPTO_SM4=m
|
||||
CONFIG_CRYPTO_SM4_GENERIC=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_TWOFISH_COMMON=m
|
||||
@ -7216,6 +7265,7 @@ CONFIG_X509_CERTIFICATE_PARSER=y
|
||||
CONFIG_PKCS7_MESSAGE_PARSER=y
|
||||
# CONFIG_PKCS7_TEST_KEY is not set
|
||||
# CONFIG_SIGNED_PE_FILE_VERIFICATION is not set
|
||||
# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
|
||||
|
||||
#
|
||||
# Certificates for signature checking
|
||||
@ -7267,7 +7317,6 @@ CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
|
||||
CONFIG_CRYPTO_LIB_POLY1305=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_LIB_SM3=m
|
||||
# end of Crypto library routines
|
||||
|
||||
CONFIG_LIB_MEMNEQ=y
|
||||
@ -7380,6 +7429,8 @@ CONFIG_FONT_7x14=y
|
||||
# CONFIG_FONT_TER16x32 is not set
|
||||
# CONFIG_FONT_6x8 is not set
|
||||
CONFIG_SG_POOL=y
|
||||
CONFIG_STACKDEPOT=y
|
||||
CONFIG_STACK_HASH_ORDER=20
|
||||
CONFIG_SBITMAP=y
|
||||
# end of Library routines
|
||||
|
||||
@ -7440,11 +7491,11 @@ CONFIG_HAVE_ARCH_KGDB=y
|
||||
# Memory Debugging
|
||||
#
|
||||
# CONFIG_PAGE_EXTENSION is not set
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
# CONFIG_SLUB_DEBUG_ON is not set
|
||||
# CONFIG_PAGE_POISONING is not set
|
||||
# CONFIG_DEBUG_RODATA_TEST is not set
|
||||
# CONFIG_DEBUG_WX is not set
|
||||
# CONFIG_SLUB_DEBUG_ON is not set
|
||||
# CONFIG_SLUB_STATS is not set
|
||||
CONFIG_HAVE_DEBUG_KMEMLEAK=y
|
||||
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
@ -7494,6 +7545,7 @@ CONFIG_STACKTRACE=y
|
||||
# RCU Debugging
|
||||
#
|
||||
CONFIG_RCU_CPU_STALL_TIMEOUT=21
|
||||
CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0
|
||||
# end of RCU Debugging
|
||||
|
||||
CONFIG_NOP_TRACER=y
|
||||
|
||||
@ -24,9 +24,9 @@ case $BRANCH in
|
||||
|
||||
edge)
|
||||
|
||||
KERNELSOURCE='https://github.com/tobetter/linux'
|
||||
KERNELBRANCH='branch:odroid-5.18.y'
|
||||
KERNELDIR='linux-odroidxu4'
|
||||
KERNELSOURCE='https://github.com/tobetter/linux'
|
||||
KERNELBRANCH='branch:odroid-5.19.y'
|
||||
KERNELDIR='linux-odroidxu4'
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
1020
patch/kernel/archive/odroidxu4-5.4/patch-5.4.208-209.patch
Normal file
1020
patch/kernel/archive/odroidxu4-5.4/patch-5.4.208-209.patch
Normal file
File diff suppressed because it is too large
Load Diff
950
patch/kernel/archive/odroidxu4-5.4/patch-5.4.209-210.patch
Normal file
950
patch/kernel/archive/odroidxu4-5.4/patch-5.4.209-210.patch
Normal file
@ -0,0 +1,950 @@
|
||||
diff --git a/Documentation/admin-guide/hw-vuln/spectre.rst b/Documentation/admin-guide/hw-vuln/spectre.rst
|
||||
index 6bd97cd50d625..7e061ed449aaa 100644
|
||||
--- a/Documentation/admin-guide/hw-vuln/spectre.rst
|
||||
+++ b/Documentation/admin-guide/hw-vuln/spectre.rst
|
||||
@@ -422,6 +422,14 @@ The possible values in this file are:
|
||||
'RSB filling' Protection of RSB on context switch enabled
|
||||
============= ===========================================
|
||||
|
||||
+ - EIBRS Post-barrier Return Stack Buffer (PBRSB) protection status:
|
||||
+
|
||||
+ =========================== =======================================================
|
||||
+ 'PBRSB-eIBRS: SW sequence' CPU is affected and protection of RSB on VMEXIT enabled
|
||||
+ 'PBRSB-eIBRS: Vulnerable' CPU is vulnerable
|
||||
+ 'PBRSB-eIBRS: Not affected' CPU is not affected by PBRSB
|
||||
+ =========================== =======================================================
|
||||
+
|
||||
Full mitigation might require a microcode update from the CPU
|
||||
vendor. When the necessary microcode is not available, the kernel will
|
||||
report vulnerability.
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 7093e3b03b9f7..74abb7e389f33 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
-SUBLEVEL = 209
|
||||
+SUBLEVEL = 210
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
|
||||
index 8c28a2365a92b..a3e32bc938562 100644
|
||||
--- a/arch/x86/include/asm/cpufeatures.h
|
||||
+++ b/arch/x86/include/asm/cpufeatures.h
|
||||
@@ -286,6 +286,7 @@
|
||||
#define X86_FEATURE_CQM_MBM_LOCAL (11*32+ 3) /* LLC Local MBM monitoring */
|
||||
#define X86_FEATURE_FENCE_SWAPGS_USER (11*32+ 4) /* "" LFENCE in user entry SWAPGS path */
|
||||
#define X86_FEATURE_FENCE_SWAPGS_KERNEL (11*32+ 5) /* "" LFENCE in kernel entry SWAPGS path */
|
||||
+#define X86_FEATURE_RSB_VMEXIT_LITE (11*32+ 6) /* "" Fill RSB on VM exit when EIBRS is enabled */
|
||||
|
||||
/* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */
|
||||
#define X86_FEATURE_AVX512_BF16 (12*32+ 5) /* AVX512 BFLOAT16 instructions */
|
||||
@@ -406,5 +407,6 @@
|
||||
#define X86_BUG_ITLB_MULTIHIT X86_BUG(23) /* CPU may incur MCE during certain page attribute changes */
|
||||
#define X86_BUG_SRBDS X86_BUG(24) /* CPU may leak RNG bits if not mitigated */
|
||||
#define X86_BUG_MMIO_STALE_DATA X86_BUG(25) /* CPU is affected by Processor MMIO Stale Data vulnerabilities */
|
||||
+#define X86_BUG_EIBRS_PBRSB X86_BUG(26) /* EIBRS is vulnerable to Post Barrier RSB Predictions */
|
||||
|
||||
#endif /* _ASM_X86_CPUFEATURES_H */
|
||||
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
|
||||
index c56042916a7c3..cef4eba03ff36 100644
|
||||
--- a/arch/x86/include/asm/msr-index.h
|
||||
+++ b/arch/x86/include/asm/msr-index.h
|
||||
@@ -129,6 +129,10 @@
|
||||
* bit available to control VERW
|
||||
* behavior.
|
||||
*/
|
||||
+#define ARCH_CAP_PBRSB_NO BIT(24) /*
|
||||
+ * Not susceptible to Post-Barrier
|
||||
+ * Return Stack Buffer Predictions.
|
||||
+ */
|
||||
|
||||
#define MSR_IA32_FLUSH_CMD 0x0000010b
|
||||
#define L1D_FLUSH BIT(0) /*
|
||||
diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
|
||||
index ece2b2c6d020d..1e5df3ccdd5cb 100644
|
||||
--- a/arch/x86/include/asm/nospec-branch.h
|
||||
+++ b/arch/x86/include/asm/nospec-branch.h
|
||||
@@ -61,7 +61,16 @@
|
||||
774: \
|
||||
dec reg; \
|
||||
jnz 771b; \
|
||||
- add $(BITS_PER_LONG/8) * nr, sp;
|
||||
+ add $(BITS_PER_LONG/8) * nr, sp; \
|
||||
+ /* barrier for jnz misprediction */ \
|
||||
+ lfence;
|
||||
+
|
||||
+#define __ISSUE_UNBALANCED_RET_GUARD(sp) \
|
||||
+ call 881f; \
|
||||
+ int3; \
|
||||
+881: \
|
||||
+ add $(BITS_PER_LONG/8), sp; \
|
||||
+ lfence;
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
|
||||
@@ -130,6 +139,14 @@
|
||||
#else
|
||||
call *\reg
|
||||
#endif
|
||||
+.endm
|
||||
+
|
||||
+.macro ISSUE_UNBALANCED_RET_GUARD ftr:req
|
||||
+ ANNOTATE_NOSPEC_ALTERNATIVE
|
||||
+ ALTERNATIVE "jmp .Lskip_pbrsb_\@", \
|
||||
+ __stringify(__ISSUE_UNBALANCED_RET_GUARD(%_ASM_SP)) \
|
||||
+ \ftr
|
||||
+.Lskip_pbrsb_\@:
|
||||
.endm
|
||||
|
||||
/*
|
||||
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
|
||||
index 09d02b1f6f71f..57efa90f3fbd0 100644
|
||||
--- a/arch/x86/kernel/cpu/bugs.c
|
||||
+++ b/arch/x86/kernel/cpu/bugs.c
|
||||
@@ -1043,6 +1043,49 @@ static enum spectre_v2_mitigation __init spectre_v2_select_retpoline(void)
|
||||
return SPECTRE_V2_RETPOLINE;
|
||||
}
|
||||
|
||||
+static void __init spectre_v2_determine_rsb_fill_type_at_vmexit(enum spectre_v2_mitigation mode)
|
||||
+{
|
||||
+ /*
|
||||
+ * Similar to context switches, there are two types of RSB attacks
|
||||
+ * after VM exit:
|
||||
+ *
|
||||
+ * 1) RSB underflow
|
||||
+ *
|
||||
+ * 2) Poisoned RSB entry
|
||||
+ *
|
||||
+ * When retpoline is enabled, both are mitigated by filling/clearing
|
||||
+ * the RSB.
|
||||
+ *
|
||||
+ * When IBRS is enabled, while #1 would be mitigated by the IBRS branch
|
||||
+ * prediction isolation protections, RSB still needs to be cleared
|
||||
+ * because of #2. Note that SMEP provides no protection here, unlike
|
||||
+ * user-space-poisoned RSB entries.
|
||||
+ *
|
||||
+ * eIBRS should protect against RSB poisoning, but if the EIBRS_PBRSB
|
||||
+ * bug is present then a LITE version of RSB protection is required,
|
||||
+ * just a single call needs to retire before a RET is executed.
|
||||
+ */
|
||||
+ switch (mode) {
|
||||
+ case SPECTRE_V2_NONE:
|
||||
+ /* These modes already fill RSB at vmexit */
|
||||
+ case SPECTRE_V2_LFENCE:
|
||||
+ case SPECTRE_V2_RETPOLINE:
|
||||
+ case SPECTRE_V2_EIBRS_RETPOLINE:
|
||||
+ return;
|
||||
+
|
||||
+ case SPECTRE_V2_EIBRS_LFENCE:
|
||||
+ case SPECTRE_V2_EIBRS:
|
||||
+ if (boot_cpu_has_bug(X86_BUG_EIBRS_PBRSB)) {
|
||||
+ setup_force_cpu_cap(X86_FEATURE_RSB_VMEXIT_LITE);
|
||||
+ pr_info("Spectre v2 / PBRSB-eIBRS: Retire a single CALL on VMEXIT\n");
|
||||
+ }
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ pr_warn_once("Unknown Spectre v2 mode, disabling RSB mitigation at VM exit");
|
||||
+ dump_stack();
|
||||
+}
|
||||
+
|
||||
static void __init spectre_v2_select_mitigation(void)
|
||||
{
|
||||
enum spectre_v2_mitigation_cmd cmd = spectre_v2_parse_cmdline();
|
||||
@@ -1135,6 +1178,8 @@ static void __init spectre_v2_select_mitigation(void)
|
||||
setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW);
|
||||
pr_info("Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\n");
|
||||
|
||||
+ spectre_v2_determine_rsb_fill_type_at_vmexit(mode);
|
||||
+
|
||||
/*
|
||||
* Retpoline means the kernel is safe because it has no indirect
|
||||
* branches. Enhanced IBRS protects firmware too, so, enable restricted
|
||||
@@ -1879,6 +1924,19 @@ static char *ibpb_state(void)
|
||||
return "";
|
||||
}
|
||||
|
||||
+static char *pbrsb_eibrs_state(void)
|
||||
+{
|
||||
+ if (boot_cpu_has_bug(X86_BUG_EIBRS_PBRSB)) {
|
||||
+ if (boot_cpu_has(X86_FEATURE_RSB_VMEXIT_LITE) ||
|
||||
+ boot_cpu_has(X86_FEATURE_RETPOLINE))
|
||||
+ return ", PBRSB-eIBRS: SW sequence";
|
||||
+ else
|
||||
+ return ", PBRSB-eIBRS: Vulnerable";
|
||||
+ } else {
|
||||
+ return ", PBRSB-eIBRS: Not affected";
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static ssize_t spectre_v2_show_state(char *buf)
|
||||
{
|
||||
if (spectre_v2_enabled == SPECTRE_V2_LFENCE)
|
||||
@@ -1891,12 +1949,13 @@ static ssize_t spectre_v2_show_state(char *buf)
|
||||
spectre_v2_enabled == SPECTRE_V2_EIBRS_LFENCE)
|
||||
return sprintf(buf, "Vulnerable: eIBRS+LFENCE with unprivileged eBPF and SMT\n");
|
||||
|
||||
- return sprintf(buf, "%s%s%s%s%s%s\n",
|
||||
+ return sprintf(buf, "%s%s%s%s%s%s%s\n",
|
||||
spectre_v2_strings[spectre_v2_enabled],
|
||||
ibpb_state(),
|
||||
boot_cpu_has(X86_FEATURE_USE_IBRS_FW) ? ", IBRS_FW" : "",
|
||||
stibp_state(),
|
||||
boot_cpu_has(X86_FEATURE_RSB_CTXSW) ? ", RSB filling" : "",
|
||||
+ pbrsb_eibrs_state(),
|
||||
spectre_v2_module_string());
|
||||
}
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
|
||||
index 305f30e45f3d3..b926b7244d42d 100644
|
||||
--- a/arch/x86/kernel/cpu/common.c
|
||||
+++ b/arch/x86/kernel/cpu/common.c
|
||||
@@ -1025,6 +1025,7 @@ static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c)
|
||||
#define NO_SWAPGS BIT(6)
|
||||
#define NO_ITLB_MULTIHIT BIT(7)
|
||||
#define NO_SPECTRE_V2 BIT(8)
|
||||
+#define NO_EIBRS_PBRSB BIT(9)
|
||||
|
||||
#define VULNWL(_vendor, _family, _model, _whitelist) \
|
||||
{ X86_VENDOR_##_vendor, _family, _model, X86_FEATURE_ANY, _whitelist }
|
||||
@@ -1065,7 +1066,7 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
|
||||
|
||||
VULNWL_INTEL(ATOM_GOLDMONT, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
VULNWL_INTEL(ATOM_GOLDMONT_D, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
- VULNWL_INTEL(ATOM_GOLDMONT_PLUS, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
+ VULNWL_INTEL(ATOM_GOLDMONT_PLUS, NO_MDS | NO_L1TF | NO_SWAPGS | NO_ITLB_MULTIHIT | NO_EIBRS_PBRSB),
|
||||
|
||||
/*
|
||||
* Technically, swapgs isn't serializing on AMD (despite it previously
|
||||
@@ -1075,7 +1076,9 @@ static const __initconst struct x86_cpu_id cpu_vuln_whitelist[] = {
|
||||
* good enough for our purposes.
|
||||
*/
|
||||
|
||||
- VULNWL_INTEL(ATOM_TREMONT_D, NO_ITLB_MULTIHIT),
|
||||
+ VULNWL_INTEL(ATOM_TREMONT, NO_EIBRS_PBRSB),
|
||||
+ VULNWL_INTEL(ATOM_TREMONT_L, NO_EIBRS_PBRSB),
|
||||
+ VULNWL_INTEL(ATOM_TREMONT_D, NO_ITLB_MULTIHIT | NO_EIBRS_PBRSB),
|
||||
|
||||
/* AMD Family 0xf - 0x12 */
|
||||
VULNWL_AMD(0x0f, NO_MELTDOWN | NO_SSB | NO_L1TF | NO_MDS | NO_SWAPGS | NO_ITLB_MULTIHIT),
|
||||
@@ -1236,6 +1239,11 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
|
||||
!arch_cap_mmio_immune(ia32_cap))
|
||||
setup_force_cpu_bug(X86_BUG_MMIO_STALE_DATA);
|
||||
|
||||
+ if (cpu_has(c, X86_FEATURE_IBRS_ENHANCED) &&
|
||||
+ !cpu_matches(cpu_vuln_whitelist, NO_EIBRS_PBRSB) &&
|
||||
+ !(ia32_cap & ARCH_CAP_PBRSB_NO))
|
||||
+ setup_force_cpu_bug(X86_BUG_EIBRS_PBRSB);
|
||||
+
|
||||
if (cpu_matches(cpu_vuln_whitelist, NO_MELTDOWN))
|
||||
return;
|
||||
|
||||
diff --git a/arch/x86/kvm/vmx/vmenter.S b/arch/x86/kvm/vmx/vmenter.S
|
||||
index ca4252f81bf81..946d9205c3b6d 100644
|
||||
--- a/arch/x86/kvm/vmx/vmenter.S
|
||||
+++ b/arch/x86/kvm/vmx/vmenter.S
|
||||
@@ -92,6 +92,7 @@ ENTRY(vmx_vmexit)
|
||||
pop %_ASM_AX
|
||||
.Lvmexit_skip_rsb:
|
||||
#endif
|
||||
+ ISSUE_UNBALANCED_RET_GUARD X86_FEATURE_RSB_VMEXIT_LITE
|
||||
ret
|
||||
ENDPROC(vmx_vmexit)
|
||||
|
||||
diff --git a/drivers/acpi/apei/bert.c b/drivers/acpi/apei/bert.c
|
||||
index 76b7539a37a93..a06f35528c9a7 100644
|
||||
--- a/drivers/acpi/apei/bert.c
|
||||
+++ b/drivers/acpi/apei/bert.c
|
||||
@@ -29,16 +29,26 @@
|
||||
|
||||
#undef pr_fmt
|
||||
#define pr_fmt(fmt) "BERT: " fmt
|
||||
+
|
||||
+#define ACPI_BERT_PRINT_MAX_RECORDS 5
|
||||
#define ACPI_BERT_PRINT_MAX_LEN 1024
|
||||
|
||||
static int bert_disable;
|
||||
|
||||
+/*
|
||||
+ * Print "all" the error records in the BERT table, but avoid huge spam to
|
||||
+ * the console if the BIOS included oversize records, or too many records.
|
||||
+ * Skipping some records here does not lose anything because the full
|
||||
+ * data is available to user tools in:
|
||||
+ * /sys/firmware/acpi/tables/data/BERT
|
||||
+ */
|
||||
static void __init bert_print_all(struct acpi_bert_region *region,
|
||||
unsigned int region_len)
|
||||
{
|
||||
struct acpi_hest_generic_status *estatus =
|
||||
(struct acpi_hest_generic_status *)region;
|
||||
int remain = region_len;
|
||||
+ int printed = 0, skipped = 0;
|
||||
u32 estatus_len;
|
||||
|
||||
while (remain >= sizeof(struct acpi_bert_region)) {
|
||||
@@ -46,24 +56,26 @@ static void __init bert_print_all(struct acpi_bert_region *region,
|
||||
if (remain < estatus_len) {
|
||||
pr_err(FW_BUG "Truncated status block (length: %u).\n",
|
||||
estatus_len);
|
||||
- return;
|
||||
+ break;
|
||||
}
|
||||
|
||||
/* No more error records. */
|
||||
if (!estatus->block_status)
|
||||
- return;
|
||||
+ break;
|
||||
|
||||
if (cper_estatus_check(estatus)) {
|
||||
pr_err(FW_BUG "Invalid error record.\n");
|
||||
- return;
|
||||
+ break;
|
||||
}
|
||||
|
||||
- pr_info_once("Error records from previous boot:\n");
|
||||
- if (region_len < ACPI_BERT_PRINT_MAX_LEN)
|
||||
+ if (estatus_len < ACPI_BERT_PRINT_MAX_LEN &&
|
||||
+ printed < ACPI_BERT_PRINT_MAX_RECORDS) {
|
||||
+ pr_info_once("Error records from previous boot:\n");
|
||||
cper_estatus_print(KERN_INFO HW_ERR, estatus);
|
||||
- else
|
||||
- pr_info_once("Max print length exceeded, table data is available at:\n"
|
||||
- "/sys/firmware/acpi/tables/data/BERT");
|
||||
+ printed++;
|
||||
+ } else {
|
||||
+ skipped++;
|
||||
+ }
|
||||
|
||||
/*
|
||||
* Because the boot error source is "one-time polled" type,
|
||||
@@ -75,6 +87,9 @@ static void __init bert_print_all(struct acpi_bert_region *region,
|
||||
estatus = (void *)estatus + estatus_len;
|
||||
remain -= estatus_len;
|
||||
}
|
||||
+
|
||||
+ if (skipped)
|
||||
+ pr_info(HW_ERR "Skipped %d error records\n", skipped);
|
||||
}
|
||||
|
||||
static int __init setup_bert_disable(char *str)
|
||||
diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
|
||||
index de4142723ff48..3b972ca536896 100644
|
||||
--- a/drivers/acpi/video_detect.c
|
||||
+++ b/drivers/acpi/video_detect.c
|
||||
@@ -387,7 +387,6 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
.callback = video_detect_force_native,
|
||||
.ident = "Clevo NL5xRU",
|
||||
.matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
|
||||
},
|
||||
},
|
||||
@@ -395,59 +394,75 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
.callback = video_detect_force_native,
|
||||
.ident = "Clevo NL5xRU",
|
||||
.matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"),
|
||||
- DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "AURA1501"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
.ident = "Clevo NL5xRU",
|
||||
.matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
|
||||
- DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"),
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "EDUBOOK1502"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
- .ident = "Clevo NL5xRU",
|
||||
+ .ident = "Clevo NL5xNU",
|
||||
.matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
|
||||
- DMI_MATCH(DMI_BOARD_NAME, "AURA1501"),
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
|
||||
},
|
||||
},
|
||||
+ /*
|
||||
+ * The TongFang PF5PU1G, PF4NU1F, PF5NU1G, and PF5LUXG/TUXEDO BA15 Gen10,
|
||||
+ * Pulse 14/15 Gen1, and Pulse 15 Gen2 have the same problem as the Clevo
|
||||
+ * NL5xRU and NL5xNU/TUXEDO Aura 15 Gen1 and Gen2. See the description
|
||||
+ * above.
|
||||
+ */
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
- .ident = "Clevo NL5xRU",
|
||||
+ .ident = "TongFang PF5PU1G",
|
||||
.matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
|
||||
- DMI_MATCH(DMI_BOARD_NAME, "EDUBOOK1502"),
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "PF5PU1G"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
- .ident = "Clevo NL5xNU",
|
||||
+ .ident = "TongFang PF4NU1F",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "PF4NU1F"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ .callback = video_detect_force_native,
|
||||
+ .ident = "TongFang PF4NU1F",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
|
||||
- DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "PULSE1401"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
- .ident = "Clevo NL5xNU",
|
||||
+ .ident = "TongFang PF5NU1G",
|
||||
.matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "SchenkerTechnologiesGmbH"),
|
||||
- DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "PF5NU1G"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
- .ident = "Clevo NL5xNU",
|
||||
+ .ident = "TongFang PF5NU1G",
|
||||
.matches = {
|
||||
- DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
|
||||
- DMI_MATCH(DMI_BOARD_NAME, "NL5xNU"),
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "TUXEDO"),
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "PULSE1501"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ .callback = video_detect_force_native,
|
||||
+ .ident = "TongFang PF5LUXG",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "PF5LUXG"),
|
||||
},
|
||||
},
|
||||
-
|
||||
/*
|
||||
* Desktops which falsely report a backlight and which our heuristics
|
||||
* for this do not catch.
|
||||
diff --git a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c
|
||||
index e49d1f287a175..c37d5fce86f79 100644
|
||||
--- a/drivers/macintosh/adb.c
|
||||
+++ b/drivers/macintosh/adb.c
|
||||
@@ -647,7 +647,7 @@ do_adb_query(struct adb_request *req)
|
||||
|
||||
switch(req->data[1]) {
|
||||
case ADB_QUERY_GETDEVINFO:
|
||||
- if (req->nbytes < 3)
|
||||
+ if (req->nbytes < 3 || req->data[2] >= 16)
|
||||
break;
|
||||
mutex_lock(&adb_handler_mutex);
|
||||
req->reply[0] = adb_handler[req->data[2]].original_address;
|
||||
diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c b/drivers/media/v4l2-core/v4l2-mem2mem.c
|
||||
index 639dc8d45e603..d56837c04a81a 100644
|
||||
--- a/drivers/media/v4l2-core/v4l2-mem2mem.c
|
||||
+++ b/drivers/media/v4l2-core/v4l2-mem2mem.c
|
||||
@@ -460,19 +460,14 @@ int v4l2_m2m_reqbufs(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(v4l2_m2m_reqbufs);
|
||||
|
||||
-int v4l2_m2m_querybuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
|
||||
- struct v4l2_buffer *buf)
|
||||
+static void v4l2_m2m_adjust_mem_offset(struct vb2_queue *vq,
|
||||
+ struct v4l2_buffer *buf)
|
||||
{
|
||||
- struct vb2_queue *vq;
|
||||
- int ret = 0;
|
||||
- unsigned int i;
|
||||
-
|
||||
- vq = v4l2_m2m_get_vq(m2m_ctx, buf->type);
|
||||
- ret = vb2_querybuf(vq, buf);
|
||||
-
|
||||
/* Adjust MMAP memory offsets for the CAPTURE queue */
|
||||
if (buf->memory == V4L2_MEMORY_MMAP && !V4L2_TYPE_IS_OUTPUT(vq->type)) {
|
||||
if (V4L2_TYPE_IS_MULTIPLANAR(vq->type)) {
|
||||
+ unsigned int i;
|
||||
+
|
||||
for (i = 0; i < buf->length; ++i)
|
||||
buf->m.planes[i].m.mem_offset
|
||||
+= DST_QUEUE_OFF_BASE;
|
||||
@@ -480,8 +475,23 @@ int v4l2_m2m_querybuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
|
||||
buf->m.offset += DST_QUEUE_OFF_BASE;
|
||||
}
|
||||
}
|
||||
+}
|
||||
|
||||
- return ret;
|
||||
+int v4l2_m2m_querybuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
|
||||
+ struct v4l2_buffer *buf)
|
||||
+{
|
||||
+ struct vb2_queue *vq;
|
||||
+ int ret;
|
||||
+
|
||||
+ vq = v4l2_m2m_get_vq(m2m_ctx, buf->type);
|
||||
+ ret = vb2_querybuf(vq, buf);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Adjust MMAP memory offsets for the CAPTURE queue */
|
||||
+ v4l2_m2m_adjust_mem_offset(vq, buf);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(v4l2_m2m_querybuf);
|
||||
|
||||
@@ -500,10 +510,16 @@ int v4l2_m2m_qbuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
|
||||
return -EPERM;
|
||||
}
|
||||
ret = vb2_qbuf(vq, vdev->v4l2_dev->mdev, buf);
|
||||
- if (!ret && !(buf->flags & V4L2_BUF_FLAG_IN_REQUEST))
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Adjust MMAP memory offsets for the CAPTURE queue */
|
||||
+ v4l2_m2m_adjust_mem_offset(vq, buf);
|
||||
+
|
||||
+ if (!(buf->flags & V4L2_BUF_FLAG_IN_REQUEST))
|
||||
v4l2_m2m_try_schedule(m2m_ctx);
|
||||
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(v4l2_m2m_qbuf);
|
||||
|
||||
@@ -511,9 +527,17 @@ int v4l2_m2m_dqbuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
|
||||
struct v4l2_buffer *buf)
|
||||
{
|
||||
struct vb2_queue *vq;
|
||||
+ int ret;
|
||||
|
||||
vq = v4l2_m2m_get_vq(m2m_ctx, buf->type);
|
||||
- return vb2_dqbuf(vq, buf, file->f_flags & O_NONBLOCK);
|
||||
+ ret = vb2_dqbuf(vq, buf, file->f_flags & O_NONBLOCK);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Adjust MMAP memory offsets for the CAPTURE queue */
|
||||
+ v4l2_m2m_adjust_mem_offset(vq, buf);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(v4l2_m2m_dqbuf);
|
||||
|
||||
@@ -522,9 +546,17 @@ int v4l2_m2m_prepare_buf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
|
||||
{
|
||||
struct video_device *vdev = video_devdata(file);
|
||||
struct vb2_queue *vq;
|
||||
+ int ret;
|
||||
|
||||
vq = v4l2_m2m_get_vq(m2m_ctx, buf->type);
|
||||
- return vb2_prepare_buf(vq, vdev->v4l2_dev->mdev, buf);
|
||||
+ ret = vb2_prepare_buf(vq, vdev->v4l2_dev->mdev, buf);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Adjust MMAP memory offsets for the CAPTURE queue */
|
||||
+ v4l2_m2m_adjust_mem_offset(vq, buf);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(v4l2_m2m_prepare_buf);
|
||||
|
||||
diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
|
||||
index 68d0c181ec7bb..1f38da5da6e45 100644
|
||||
--- a/drivers/thermal/of-thermal.c
|
||||
+++ b/drivers/thermal/of-thermal.c
|
||||
@@ -91,7 +91,7 @@ static int of_thermal_get_temp(struct thermal_zone_device *tz,
|
||||
{
|
||||
struct __thermal_zone *data = tz->devdata;
|
||||
|
||||
- if (!data->ops->get_temp)
|
||||
+ if (!data->ops || !data->ops->get_temp)
|
||||
return -EINVAL;
|
||||
|
||||
return data->ops->get_temp(data->sensor_data, temp);
|
||||
@@ -188,6 +188,9 @@ static int of_thermal_set_emul_temp(struct thermal_zone_device *tz,
|
||||
{
|
||||
struct __thermal_zone *data = tz->devdata;
|
||||
|
||||
+ if (!data->ops || !data->ops->set_emul_temp)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
return data->ops->set_emul_temp(data->sensor_data, temp);
|
||||
}
|
||||
|
||||
@@ -196,7 +199,7 @@ static int of_thermal_get_trend(struct thermal_zone_device *tz, int trip,
|
||||
{
|
||||
struct __thermal_zone *data = tz->devdata;
|
||||
|
||||
- if (!data->ops->get_trend)
|
||||
+ if (!data->ops || !data->ops->get_trend)
|
||||
return -EINVAL;
|
||||
|
||||
return data->ops->get_trend(data->sensor_data, trip, trend);
|
||||
@@ -336,7 +339,7 @@ static int of_thermal_set_trip_temp(struct thermal_zone_device *tz, int trip,
|
||||
if (trip >= data->ntrips || trip < 0)
|
||||
return -EDOM;
|
||||
|
||||
- if (data->ops->set_trip_temp) {
|
||||
+ if (data->ops && data->ops->set_trip_temp) {
|
||||
int ret;
|
||||
|
||||
ret = data->ops->set_trip_temp(data->sensor_data, trip, temp);
|
||||
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
|
||||
index 34262d83dce11..f705d3752fe0d 100644
|
||||
--- a/kernel/bpf/verifier.c
|
||||
+++ b/kernel/bpf/verifier.c
|
||||
@@ -5083,6 +5083,7 @@ static int adjust_scalar_min_max_vals(struct bpf_verifier_env *env,
|
||||
coerce_reg_to_size(dst_reg, 4);
|
||||
}
|
||||
|
||||
+ __update_reg_bounds(dst_reg);
|
||||
__reg_deduce_bounds(dst_reg);
|
||||
__reg_bound_offset(dst_reg);
|
||||
return 0;
|
||||
diff --git a/tools/arch/x86/include/asm/cpufeatures.h b/tools/arch/x86/include/asm/cpufeatures.h
|
||||
index 4133c721af6ed..59f924e92c284 100644
|
||||
--- a/tools/arch/x86/include/asm/cpufeatures.h
|
||||
+++ b/tools/arch/x86/include/asm/cpufeatures.h
|
||||
@@ -284,6 +284,7 @@
|
||||
#define X86_FEATURE_CQM_MBM_LOCAL (11*32+ 3) /* LLC Local MBM monitoring */
|
||||
#define X86_FEATURE_FENCE_SWAPGS_USER (11*32+ 4) /* "" LFENCE in user entry SWAPGS path */
|
||||
#define X86_FEATURE_FENCE_SWAPGS_KERNEL (11*32+ 5) /* "" LFENCE in kernel entry SWAPGS path */
|
||||
+#define X86_FEATURE_RSB_VMEXIT_LITE (11*32+ 6) /* "" Fill RSB on VM-Exit when EIBRS is enabled */
|
||||
|
||||
/* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */
|
||||
#define X86_FEATURE_AVX512_BF16 (12*32+ 5) /* AVX512 BFLOAT16 instructions */
|
||||
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
|
||||
index 0bfad86ec960a..cb0631098f918 100644
|
||||
--- a/tools/include/uapi/linux/bpf.h
|
||||
+++ b/tools/include/uapi/linux/bpf.h
|
||||
@@ -3068,7 +3068,8 @@ struct bpf_sock {
|
||||
__u32 src_ip4;
|
||||
__u32 src_ip6[4];
|
||||
__u32 src_port; /* host byte order */
|
||||
- __u32 dst_port; /* network byte order */
|
||||
+ __be16 dst_port; /* network byte order */
|
||||
+ __u16 :16; /* zero padding */
|
||||
__u32 dst_ip4;
|
||||
__u32 dst_ip6[4];
|
||||
__u32 state;
|
||||
diff --git a/tools/testing/selftests/bpf/test_align.c b/tools/testing/selftests/bpf/test_align.c
|
||||
index 0262f7b374f9c..4b9a26caa2c2e 100644
|
||||
--- a/tools/testing/selftests/bpf/test_align.c
|
||||
+++ b/tools/testing/selftests/bpf/test_align.c
|
||||
@@ -359,15 +359,15 @@ static struct bpf_align_test tests[] = {
|
||||
* is still (4n), fixed offset is not changed.
|
||||
* Also, we create a new reg->id.
|
||||
*/
|
||||
- {29, "R5_w=pkt(id=4,off=18,r=0,umax_value=2040,var_off=(0x0; 0x7fc))"},
|
||||
+ {29, "R5_w=pkt(id=4,off=18,r=0,umax_value=2040,var_off=(0x0; 0x7fc)"},
|
||||
/* At the time the word size load is performed from R5,
|
||||
* its total fixed offset is NET_IP_ALIGN + reg->off (18)
|
||||
* which is 20. Then the variable offset is (4n), so
|
||||
* the total offset is 4-byte aligned and meets the
|
||||
* load's requirements.
|
||||
*/
|
||||
- {33, "R4=pkt(id=4,off=22,r=22,umax_value=2040,var_off=(0x0; 0x7fc))"},
|
||||
- {33, "R5=pkt(id=4,off=18,r=22,umax_value=2040,var_off=(0x0; 0x7fc))"},
|
||||
+ {33, "R4=pkt(id=4,off=22,r=22,umax_value=2040,var_off=(0x0; 0x7fc)"},
|
||||
+ {33, "R5=pkt(id=4,off=18,r=22,umax_value=2040,var_off=(0x0; 0x7fc)"},
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -410,15 +410,15 @@ static struct bpf_align_test tests[] = {
|
||||
/* Adding 14 makes R6 be (4n+2) */
|
||||
{9, "R6_w=inv(id=0,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc))"},
|
||||
/* Packet pointer has (4n+2) offset */
|
||||
- {11, "R5_w=pkt(id=1,off=0,r=0,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc))"},
|
||||
- {13, "R4=pkt(id=1,off=4,r=0,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc))"},
|
||||
+ {11, "R5_w=pkt(id=1,off=0,r=0,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc)"},
|
||||
+ {13, "R4=pkt(id=1,off=4,r=0,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc)"},
|
||||
/* At the time the word size load is performed from R5,
|
||||
* its total fixed offset is NET_IP_ALIGN + reg->off (0)
|
||||
* which is 2. Then the variable offset is (4n+2), so
|
||||
* the total offset is 4-byte aligned and meets the
|
||||
* load's requirements.
|
||||
*/
|
||||
- {15, "R5=pkt(id=1,off=0,r=4,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc))"},
|
||||
+ {15, "R5=pkt(id=1,off=0,r=4,umin_value=14,umax_value=1034,var_off=(0x2; 0x7fc)"},
|
||||
/* Newly read value in R6 was shifted left by 2, so has
|
||||
* known alignment of 4.
|
||||
*/
|
||||
@@ -426,15 +426,15 @@ static struct bpf_align_test tests[] = {
|
||||
/* Added (4n) to packet pointer's (4n+2) var_off, giving
|
||||
* another (4n+2).
|
||||
*/
|
||||
- {19, "R5_w=pkt(id=2,off=0,r=0,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc))"},
|
||||
- {21, "R4=pkt(id=2,off=4,r=0,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc))"},
|
||||
+ {19, "R5_w=pkt(id=2,off=0,r=0,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc)"},
|
||||
+ {21, "R4=pkt(id=2,off=4,r=0,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc)"},
|
||||
/* At the time the word size load is performed from R5,
|
||||
* its total fixed offset is NET_IP_ALIGN + reg->off (0)
|
||||
* which is 2. Then the variable offset is (4n+2), so
|
||||
* the total offset is 4-byte aligned and meets the
|
||||
* load's requirements.
|
||||
*/
|
||||
- {23, "R5=pkt(id=2,off=0,r=4,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc))"},
|
||||
+ {23, "R5=pkt(id=2,off=0,r=4,umin_value=14,umax_value=2054,var_off=(0x2; 0xffc)"},
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -469,16 +469,16 @@ static struct bpf_align_test tests[] = {
|
||||
.matches = {
|
||||
{4, "R5_w=pkt_end(id=0,off=0,imm=0)"},
|
||||
/* (ptr - ptr) << 2 == unknown, (4n) */
|
||||
- {6, "R5_w=inv(id=0,smax_value=9223372036854775804,umax_value=18446744073709551612,var_off=(0x0; 0xfffffffffffffffc))"},
|
||||
+ {6, "R5_w=inv(id=0,smax_value=9223372036854775804,umax_value=18446744073709551612,var_off=(0x0; 0xfffffffffffffffc)"},
|
||||
/* (4n) + 14 == (4n+2). We blow our bounds, because
|
||||
* the add could overflow.
|
||||
*/
|
||||
- {7, "R5_w=inv(id=0,var_off=(0x2; 0xfffffffffffffffc))"},
|
||||
+ {7, "R5_w=inv(id=0,smin_value=-9223372036854775806,smax_value=9223372036854775806,umin_value=2,umax_value=18446744073709551614,var_off=(0x2; 0xfffffffffffffffc)"},
|
||||
/* Checked s>=0 */
|
||||
- {9, "R5=inv(id=0,umin_value=2,umax_value=9223372036854775806,var_off=(0x2; 0x7ffffffffffffffc))"},
|
||||
+ {9, "R5=inv(id=0,umin_value=2,umax_value=9223372036854775806,var_off=(0x2; 0x7ffffffffffffffc)"},
|
||||
/* packet pointer + nonnegative (4n+2) */
|
||||
- {11, "R6_w=pkt(id=1,off=0,r=0,umin_value=2,umax_value=9223372036854775806,var_off=(0x2; 0x7ffffffffffffffc))"},
|
||||
- {13, "R4_w=pkt(id=1,off=4,r=0,umin_value=2,umax_value=9223372036854775806,var_off=(0x2; 0x7ffffffffffffffc))"},
|
||||
+ {11, "R6_w=pkt(id=1,off=0,r=0,umin_value=2,umax_value=9223372036854775806,var_off=(0x2; 0x7ffffffffffffffc)"},
|
||||
+ {13, "R4_w=pkt(id=1,off=4,r=0,umin_value=2,umax_value=9223372036854775806,var_off=(0x2; 0x7ffffffffffffffc)"},
|
||||
/* NET_IP_ALIGN + (4n+2) == (4n), alignment is fine.
|
||||
* We checked the bounds, but it might have been able
|
||||
* to overflow if the packet pointer started in the
|
||||
@@ -486,7 +486,7 @@ static struct bpf_align_test tests[] = {
|
||||
* So we did not get a 'range' on R6, and the access
|
||||
* attempt will fail.
|
||||
*/
|
||||
- {15, "R6_w=pkt(id=1,off=0,r=0,umin_value=2,umax_value=9223372036854775806,var_off=(0x2; 0x7ffffffffffffffc))"},
|
||||
+ {15, "R6_w=pkt(id=1,off=0,r=0,umin_value=2,umax_value=9223372036854775806,var_off=(0x2; 0x7ffffffffffffffc)"},
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -528,7 +528,7 @@ static struct bpf_align_test tests[] = {
|
||||
/* New unknown value in R7 is (4n) */
|
||||
{11, "R7_w=inv(id=0,umax_value=1020,var_off=(0x0; 0x3fc))"},
|
||||
/* Subtracting it from R6 blows our unsigned bounds */
|
||||
- {12, "R6=inv(id=0,smin_value=-1006,smax_value=1034,var_off=(0x2; 0xfffffffffffffffc))"},
|
||||
+ {12, "R6=inv(id=0,smin_value=-1006,smax_value=1034,umin_value=2,umax_value=18446744073709551614,var_off=(0x2; 0xfffffffffffffffc)"},
|
||||
/* Checked s>= 0 */
|
||||
{14, "R6=inv(id=0,umin_value=2,umax_value=1034,var_off=(0x2; 0x7fc))"},
|
||||
/* At the time the word size load is performed from R5,
|
||||
@@ -537,7 +537,8 @@ static struct bpf_align_test tests[] = {
|
||||
* the total offset is 4-byte aligned and meets the
|
||||
* load's requirements.
|
||||
*/
|
||||
- {20, "R5=pkt(id=1,off=0,r=4,umin_value=2,umax_value=1034,var_off=(0x2; 0x7fc))"},
|
||||
+ {20, "R5=pkt(id=1,off=0,r=4,umin_value=2,umax_value=1034,var_off=(0x2; 0x7fc)"},
|
||||
+
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -579,18 +580,18 @@ static struct bpf_align_test tests[] = {
|
||||
/* Adding 14 makes R6 be (4n+2) */
|
||||
{11, "R6_w=inv(id=0,umin_value=14,umax_value=74,var_off=(0x2; 0x7c))"},
|
||||
/* Subtracting from packet pointer overflows ubounds */
|
||||
- {13, "R5_w=pkt(id=1,off=0,r=8,umin_value=18446744073709551542,umax_value=18446744073709551602,var_off=(0xffffffffffffff82; 0x7c))"},
|
||||
+ {13, "R5_w=pkt(id=1,off=0,r=8,umin_value=18446744073709551542,umax_value=18446744073709551602,var_off=(0xffffffffffffff82; 0x7c)"},
|
||||
/* New unknown value in R7 is (4n), >= 76 */
|
||||
{15, "R7_w=inv(id=0,umin_value=76,umax_value=1096,var_off=(0x0; 0x7fc))"},
|
||||
/* Adding it to packet pointer gives nice bounds again */
|
||||
- {16, "R5_w=pkt(id=2,off=0,r=0,umin_value=2,umax_value=1082,var_off=(0x2; 0x7fc))"},
|
||||
+ {16, "R5_w=pkt(id=2,off=0,r=0,umin_value=2,umax_value=1082,var_off=(0x2; 0xfffffffc)"},
|
||||
/* At the time the word size load is performed from R5,
|
||||
* its total fixed offset is NET_IP_ALIGN + reg->off (0)
|
||||
* which is 2. Then the variable offset is (4n+2), so
|
||||
* the total offset is 4-byte aligned and meets the
|
||||
* load's requirements.
|
||||
*/
|
||||
- {20, "R5=pkt(id=2,off=0,r=4,umin_value=2,umax_value=1082,var_off=(0x2; 0x7fc))"},
|
||||
+ {20, "R5=pkt(id=2,off=0,r=4,umin_value=2,umax_value=1082,var_off=(0x2; 0xfffffffc)"},
|
||||
},
|
||||
},
|
||||
};
|
||||
diff --git a/tools/testing/selftests/bpf/verifier/bounds.c b/tools/testing/selftests/bpf/verifier/bounds.c
|
||||
index 92c02e4a1b626..313b345eddcc3 100644
|
||||
--- a/tools/testing/selftests/bpf/verifier/bounds.c
|
||||
+++ b/tools/testing/selftests/bpf/verifier/bounds.c
|
||||
@@ -411,16 +411,14 @@
|
||||
BPF_ALU32_IMM(BPF_RSH, BPF_REG_1, 31),
|
||||
/* r1 = 0xffff'fffe (NOT 0!) */
|
||||
BPF_ALU32_IMM(BPF_SUB, BPF_REG_1, 2),
|
||||
- /* computes OOB pointer */
|
||||
+ /* error on computing OOB pointer */
|
||||
BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
|
||||
- /* OOB access */
|
||||
- BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_0, 0),
|
||||
/* exit */
|
||||
BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.fixup_map_hash_8b = { 3 },
|
||||
- .errstr = "R0 invalid mem access",
|
||||
+ .errstr = "math between map_value pointer and 4294967294 is not allowed",
|
||||
.result = REJECT,
|
||||
},
|
||||
{
|
||||
diff --git a/tools/testing/selftests/bpf/verifier/sock.c b/tools/testing/selftests/bpf/verifier/sock.c
|
||||
index 9ed192e14f5fe..b2ce50bb935b8 100644
|
||||
--- a/tools/testing/selftests/bpf/verifier/sock.c
|
||||
+++ b/tools/testing/selftests/bpf/verifier/sock.c
|
||||
@@ -121,7 +121,25 @@
|
||||
.result = ACCEPT,
|
||||
},
|
||||
{
|
||||
- "sk_fullsock(skb->sk): sk->dst_port [narrow load]",
|
||||
+ "sk_fullsock(skb->sk): sk->dst_port [word load] (backward compatibility)",
|
||||
+ .insns = {
|
||||
+ BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_1, offsetof(struct __sk_buff, sk)),
|
||||
+ BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 2),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ BPF_EMIT_CALL(BPF_FUNC_sk_fullsock),
|
||||
+ BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 2),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0, offsetof(struct bpf_sock, dst_port)),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ },
|
||||
+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
|
||||
+ .result = ACCEPT,
|
||||
+},
|
||||
+{
|
||||
+ "sk_fullsock(skb->sk): sk->dst_port [half load]",
|
||||
.insns = {
|
||||
BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_1, offsetof(struct __sk_buff, sk)),
|
||||
BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 2),
|
||||
@@ -139,7 +157,64 @@
|
||||
.result = ACCEPT,
|
||||
},
|
||||
{
|
||||
- "sk_fullsock(skb->sk): sk->dst_port [load 2nd byte]",
|
||||
+ "sk_fullsock(skb->sk): sk->dst_port [half load] (invalid)",
|
||||
+ .insns = {
|
||||
+ BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_1, offsetof(struct __sk_buff, sk)),
|
||||
+ BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 2),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ BPF_EMIT_CALL(BPF_FUNC_sk_fullsock),
|
||||
+ BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 2),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_0, offsetof(struct bpf_sock, dst_port) + 2),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ },
|
||||
+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
|
||||
+ .result = REJECT,
|
||||
+ .errstr = "invalid sock access",
|
||||
+},
|
||||
+{
|
||||
+ "sk_fullsock(skb->sk): sk->dst_port [byte load]",
|
||||
+ .insns = {
|
||||
+ BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_1, offsetof(struct __sk_buff, sk)),
|
||||
+ BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 2),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ BPF_EMIT_CALL(BPF_FUNC_sk_fullsock),
|
||||
+ BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 2),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ BPF_LDX_MEM(BPF_B, BPF_REG_2, BPF_REG_0, offsetof(struct bpf_sock, dst_port)),
|
||||
+ BPF_LDX_MEM(BPF_B, BPF_REG_2, BPF_REG_0, offsetof(struct bpf_sock, dst_port) + 1),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ },
|
||||
+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
|
||||
+ .result = ACCEPT,
|
||||
+},
|
||||
+{
|
||||
+ "sk_fullsock(skb->sk): sk->dst_port [byte load] (invalid)",
|
||||
+ .insns = {
|
||||
+ BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_1, offsetof(struct __sk_buff, sk)),
|
||||
+ BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 2),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ BPF_EMIT_CALL(BPF_FUNC_sk_fullsock),
|
||||
+ BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 2),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_0, offsetof(struct bpf_sock, dst_port) + 2),
|
||||
+ BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
+ BPF_EXIT_INSN(),
|
||||
+ },
|
||||
+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB,
|
||||
+ .result = REJECT,
|
||||
+ .errstr = "invalid sock access",
|
||||
+},
|
||||
+{
|
||||
+ "sk_fullsock(skb->sk): past sk->dst_port [half load] (invalid)",
|
||||
.insns = {
|
||||
BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_1, offsetof(struct __sk_buff, sk)),
|
||||
BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 2),
|
||||
@@ -149,7 +224,7 @@
|
||||
BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 2),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
- BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_0, offsetof(struct bpf_sock, dst_port) + 1),
|
||||
+ BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_0, offsetofend(struct bpf_sock, dst_port)),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
diff --git a/tools/testing/selftests/kvm/lib/aarch64/ucall.c b/tools/testing/selftests/kvm/lib/aarch64/ucall.c
|
||||
index 6cd91970fbad3..3b2a426070c44 100644
|
||||
--- a/tools/testing/selftests/kvm/lib/aarch64/ucall.c
|
||||
+++ b/tools/testing/selftests/kvm/lib/aarch64/ucall.c
|
||||
@@ -73,20 +73,19 @@ void ucall_uninit(struct kvm_vm *vm)
|
||||
|
||||
void ucall(uint64_t cmd, int nargs, ...)
|
||||
{
|
||||
- struct ucall uc = {
|
||||
- .cmd = cmd,
|
||||
- };
|
||||
+ struct ucall uc = {};
|
||||
va_list va;
|
||||
int i;
|
||||
|
||||
+ WRITE_ONCE(uc.cmd, cmd);
|
||||
nargs = nargs <= UCALL_MAX_ARGS ? nargs : UCALL_MAX_ARGS;
|
||||
|
||||
va_start(va, nargs);
|
||||
for (i = 0; i < nargs; ++i)
|
||||
- uc.args[i] = va_arg(va, uint64_t);
|
||||
+ WRITE_ONCE(uc.args[i], va_arg(va, uint64_t));
|
||||
va_end(va);
|
||||
|
||||
- *ucall_exit_mmio_addr = (vm_vaddr_t)&uc;
|
||||
+ WRITE_ONCE(*ucall_exit_mmio_addr, (vm_vaddr_t)&uc);
|
||||
}
|
||||
|
||||
uint64_t get_ucall(struct kvm_vm *vm, uint32_t vcpu_id, struct ucall *uc)
|
||||
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
|
||||
index 287444e52ccf8..4b445dddb7985 100644
|
||||
--- a/virt/kvm/kvm_main.c
|
||||
+++ b/virt/kvm/kvm_main.c
|
||||
@@ -3329,8 +3329,11 @@ static int kvm_ioctl_create_device(struct kvm *kvm,
|
||||
kvm_put_kvm(kvm);
|
||||
mutex_lock(&kvm->lock);
|
||||
list_del(&dev->vm_node);
|
||||
+ if (ops->release)
|
||||
+ ops->release(dev);
|
||||
mutex_unlock(&kvm->lock);
|
||||
- ops->destroy(dev);
|
||||
+ if (ops->destroy)
|
||||
+ ops->destroy(dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user