Commit Graph

71 Commits

Author SHA1 Message Date
Greg Kroah-Hartman
47c7e57022 Merge 5.15.61 into android14-5.15
Changes in 5.15.61
        Makefile: link with -z noexecstack --no-warn-rwx-segments
        x86: link vdso and boot with -z noexecstack --no-warn-rwx-segments
        Revert "pNFS: nfs3_set_ds_client should set NFS_CS_NOPING"
        scsi: Revert "scsi: qla2xxx: Fix disk failure to rediscover"
        pNFS/flexfiles: Report RDMA connection errors to the server
        NFSD: Clean up the show_nf_flags() macro
        nfsd: eliminate the NFSD_FILE_BREAK_* flags
        ALSA: usb-audio: Add quirk for Behringer UMC202HD
        ALSA: bcd2000: Fix a UAF bug on the error path of probing
        ALSA: hda/realtek: Add quirk for Clevo NV45PZ
        ALSA: hda/realtek: Add quirk for HP Spectre x360 15-eb0xxx
        wifi: mac80211_hwsim: fix race condition in pending packet
        wifi: mac80211_hwsim: add back erroneously removed cast
        wifi: mac80211_hwsim: use 32-bit skb cookie
        add barriers to buffer_uptodate and set_buffer_uptodate
        lockd: detect and reject lock arguments that overflow
        HID: hid-input: add Surface Go battery quirk
        HID: wacom: Only report rotation for art pen
        HID: wacom: Don't register pad_input for touch switch
        KVM: nVMX: Snapshot pre-VM-Enter BNDCFGS for !nested_run_pending case
        KVM: nVMX: Snapshot pre-VM-Enter DEBUGCTL for !nested_run_pending case
        KVM: SVM: Don't BUG if userspace injects an interrupt with GIF=0
        KVM: s390: pv: don't present the ecall interrupt twice
        KVM: x86: Split kvm_is_valid_cr4() and export only the non-vendor bits
        KVM: nVMX: Let userspace set nVMX MSR to any _host_ supported value
        KVM: nVMX: Account for KVM reserved CR4 bits in consistency checks
        KVM: nVMX: Inject #UD if VMXON is attempted with incompatible CR0/CR4
        KVM: x86: Mark TSS busy during LTR emulation _after_ all fault checks
        KVM: x86: Set error code to segment selector on LLDT/LTR non-canonical #GP
        KVM: nVMX: Always enable TSC scaling for L2 when it was enabled for L1
        KVM: x86: Tag kvm_mmu_x86_module_init() with __init
        KVM: x86: do not report preemption if the steal time cache is stale
        KVM: x86: revalidate steal time cache if MSR value changes
        riscv: set default pm_power_off to NULL
        ALSA: hda/conexant: Add quirk for LENOVO 20149 Notebook model
        ALSA: hda/cirrus - support for iMac 12,1 model
        ALSA: hda/realtek: Add quirk for another Asus K42JZ model
        ALSA: hda/realtek: Add a quirk for HP OMEN 15 (8786) mute LED
        tty: vt: initialize unicode screen buffer
        vfs: Check the truncate maximum size in inode_newsize_ok()
        fs: Add missing umask strip in vfs_tmpfile
        thermal: sysfs: Fix cooling_device_stats_setup() error code path
        fbcon: Fix boundary checks for fbcon=vc:n1-n2 parameters
        fbcon: Fix accelerated fbdev scrolling while logo is still shown
        usbnet: Fix linkwatch use-after-free on disconnect
        fix short copy handling in copy_mc_pipe_to_iter()
        crypto: ccp - Use kzalloc for sev ioctl interfaces to prevent kernel memory leak
        ovl: drop WARN_ON() dentry is NULL in ovl_encode_fh()
        parisc: Fix device names in /proc/iomem
        parisc: Drop pa_swapper_pg_lock spinlock
        parisc: Check the return value of ioremap() in lba_driver_probe()
        parisc: io_pgetevents_time64() needs compat syscall in 32-bit compat mode
        riscv:uprobe fix SR_SPIE set/clear handling
        dt-bindings: riscv: fix SiFive l2-cache's cache-sets
        RISC-V: kexec: Fixup use of smp_processor_id() in preemptible context
        RISC-V: Fixup get incorrect user mode PC for kernel mode regs
        RISC-V: Fixup schedule out issue in machine_crash_shutdown()
        RISC-V: Add modules to virtual kernel memory layout dump
        rtc: rx8025: fix 12/24 hour mode detection on RX-8035
        drm/gem: Properly annotate WW context on drm_gem_lock_reservations() error
        drm/shmem-helper: Add missing vunmap on error
        drm/vc4: hdmi: Disable audio if dmas property is present but empty
        drm/hyperv-drm: Include framebuffer and EDID headers
        drm/nouveau: fix another off-by-one in nvbios_addr
        drm/nouveau: Don't pm_runtime_put_sync(), only pm_runtime_put_autosuspend()
        drm/nouveau/acpi: Don't print error when we get -EINPROGRESS from pm_runtime
        drm/nouveau/kms: Fix failure path for creating DP connectors
        drm/amdgpu: Check BO's requested pinning domains against its preferred_domains
        drm/amdgpu: fix check in fbdev init
        bpf: Fix KASAN use-after-free Read in compute_effective_progs
        btrfs: reject log replay if there is unsupported RO compat flag
        mtd: rawnand: arasan: Fix clock rate in NV-DDR
        mtd: rawnand: arasan: Update NAND bus clock instead of system clock
        um: Remove straying parenthesis
        um: seed rng using host OS rng
        iio: fix iio_format_avail_range() printing for none IIO_VAL_INT
        iio: light: isl29028: Fix the warning in isl29028_remove()
        scsi: sg: Allow waiting for commands to complete on removed device
        scsi: qla2xxx: Fix incorrect display of max frame size
        scsi: qla2xxx: Zero undefined mailbox IN registers
        soundwire: qcom: Check device status before reading devid
        ksmbd: fix memory leak in smb2_handle_negotiate
        ksmbd: prevent out of bound read for SMB2_TREE_CONNNECT
        ksmbd: fix use-after-free bug in smb2_tree_disconect
        fuse: limit nsec
        fuse: ioctl: translate ENOSYS
        serial: mvebu-uart: uart2 error bits clearing
        md-raid: destroy the bitmap after destroying the thread
        md-raid10: fix KASAN warning
        mbcache: don't reclaim used entries
        mbcache: add functions to delete entry if unused
        media: [PATCH] pci: atomisp_cmd: fix three missing checks on list iterator
        ia64, processor: fix -Wincompatible-pointer-types in ia64_get_irr()
        PCI: Add defines for normal and subtractive PCI bridges
        powerpc/fsl-pci: Fix Class Code of PCIe Root Port
        powerpc/ptdump: Fix display of RW pages on FSL_BOOK3E
        powerpc/powernv: Avoid crashing if rng is NULL
        MIPS: cpuinfo: Fix a warning for CONFIG_CPUMASK_OFFSTACK
        coresight: Clear the connection field properly
        usb: typec: ucsi: Acknowledge the GET_ERROR_STATUS command completion
        USB: HCD: Fix URB giveback issue in tasklet function
        ARM: dts: uniphier: Fix USB interrupts for PXs2 SoC
        arm64: dts: uniphier: Fix USB interrupts for PXs3 SoC
        usb: dwc3: gadget: refactor dwc3_repare_one_trb
        usb: dwc3: gadget: fix high speed multiplier setting
        netfilter: nf_tables: do not allow SET_ID to refer to another table
        netfilter: nf_tables: do not allow CHAIN_ID to refer to another table
        netfilter: nf_tables: do not allow RULE_ID to refer to another chain
        netfilter: nf_tables: fix null deref due to zeroed list head
        epoll: autoremove wakers even more aggressively
        x86: Handle idle=nomwait cmdline properly for x86_idle
        arch: make TRACE_IRQFLAGS_NMI_SUPPORT generic
        arm64: Do not forget syscall when starting a new thread.
        arm64: fix oops in concurrently setting insn_emulation sysctls
        arm64: kasan: Revert "arm64: mte: reset the page tag in page->flags"
        ext2: Add more validity checks for inode counts
        sched/fair: Introduce SIS_UTIL to search idle CPU based on sum of util_avg
        genirq: Don't return error on missing optional irq_request_resources()
        irqchip/mips-gic: Only register IPI domain when SMP is enabled
        genirq: GENERIC_IRQ_IPI depends on SMP
        sched/core: Always flush pending blk_plug
        irqchip/mips-gic: Check the return value of ioremap() in gic_of_init()
        wait: Fix __wait_event_hrtimeout for RT/DL tasks
        ARM: dts: imx6ul: add missing properties for sram
        ARM: dts: imx6ul: change operating-points to uint32-matrix
        ARM: dts: imx6ul: fix keypad compatible
        ARM: dts: imx6ul: fix csi node compatible
        ARM: dts: imx6ul: fix lcdif node compatible
        ARM: dts: imx6ul: fix qspi node compatible
        ARM: dts: BCM5301X: Add DT for Meraki MR26
        ARM: dts: ux500: Fix Codina accelerometer mounting matrix
        ARM: dts: ux500: Fix Gavini accelerometer mounting matrix
        spi: synquacer: Add missing clk_disable_unprepare()
        ARM: OMAP2+: display: Fix refcount leak bug
        ARM: OMAP2+: pdata-quirks: Fix refcount leak bug
        ACPI: EC: Remove duplicate ThinkPad X1 Carbon 6th entry from DMI quirks
        ACPI: EC: Drop the EC_FLAGS_IGNORE_DSDT_GPE quirk
        ACPI: PM: save NVS memory for Lenovo G40-45
        ACPI: LPSS: Fix missing check in register_device_clock()
        ARM: dts: qcom: sdx55: Fix the IRQ trigger type for UART
        arm64: dts: qcom: ipq8074: fix NAND node name
        arm64: dts: allwinner: a64: orangepi-win: Fix LED node name
        ARM: shmobile: rcar-gen2: Increase refcount for new reference
        firmware: tegra: Fix error check return value of debugfs_create_file()
        hwmon: (dell-smm) Add Dell XPS 13 7390 to fan control whitelist
        hwmon: (sht15) Fix wrong assumptions in device remove callback
        PM: hibernate: defer device probing when resuming from hibernation
        selinux: fix memleak in security_read_state_kernel()
        selinux: Add boundary check in put_entry()
        kasan: test: Silence GCC 12 warnings
        drm/amdgpu: Remove one duplicated ef removal
        powerpc/64s: Disable stack variable initialisation for prom_init
        spi: spi-rspi: Fix PIO fallback on RZ platforms
        ARM: findbit: fix overflowing offset
        meson-mx-socinfo: Fix refcount leak in meson_mx_socinfo_init
        arm64: dts: renesas: beacon: Fix regulator node names
        spi: spi-altera-dfl: Fix an error handling path
        ARM: bcm: Fix refcount leak in bcm_kona_smc_init
        ACPI: processor/idle: Annotate more functions to live in cpuidle section
        ARM: dts: imx7d-colibri-emmc: add cpu1 supply
        soc: renesas: r8a779a0-sysc: Fix A2DP1 and A2CV[2357] PDR values
        scsi: hisi_sas: Use managed PCI functions
        dt-bindings: iio: accel: Add DT binding doc for ADXL355
        soc: amlogic: Fix refcount leak in meson-secure-pwrc.c
        arm64: dts: renesas: Fix thermal-sensors on single-zone sensors
        x86/pmem: Fix platform-device leak in error path
        ARM: dts: ast2500-evb: fix board compatible
        ARM: dts: ast2600-evb: fix board compatible
        ARM: dts: ast2600-evb-a1: fix board compatible
        arm64: dts: mt8192: Fix idle-states nodes naming scheme
        arm64: dts: mt8192: Fix idle-states entry-method
        arm64: select TRACE_IRQFLAGS_NMI_SUPPORT
        arm64: cpufeature: Allow different PMU versions in ID_DFR0_EL1
        locking/lockdep: Fix lockdep_init_map_*() confusion
        arm64: dts: qcom: sc7180: Remove ipa_fw_mem node on trogdor
        soc: fsl: guts: machine variable might be unset
        block: fix infinite loop for invalid zone append
        ARM: dts: qcom: mdm9615: add missing PMIC GPIO reg
        ARM: OMAP2+: Fix refcount leak in omapdss_init_of
        ARM: OMAP2+: Fix refcount leak in omap3xxx_prm_late_init
        arm64: dts: qcom: sdm630: disable GPU by default
        arm64: dts: qcom: sdm630: fix the qusb2phy ref clock
        arm64: dts: qcom: sdm630: fix gpu's interconnect path
        arm64: dts: qcom: sdm636-sony-xperia-ganges-mermaid: correct sdc2 pinconf
        cpufreq: zynq: Fix refcount leak in zynq_get_revision
        regulator: qcom_smd: Fix pm8916_pldo range
        ACPI: APEI: Fix _EINJ vs EFI_MEMORY_SP
        ARM: dts: qcom-msm8974: fix irq type on blsp2_uart1
        soc: qcom: ocmem: Fix refcount leak in of_get_ocmem
        soc: qcom: aoss: Fix refcount leak in qmp_cooling_devices_register
        ARM: dts: qcom: pm8841: add required thermal-sensor-cells
        bus: hisi_lpc: fix missing platform_device_put() in hisi_lpc_acpi_probe()
        stack: Declare {randomize_,}kstack_offset to fix Sparse warnings
        arm64: dts: qcom: msm8916: Fix typo in pronto remoteproc node
        ACPI: APEI: explicit init of HEST and GHES in apci_init()
        drivers/iio: Remove all strcpy() uses
        ACPI: VIOT: Fix ACS setup
        arm64: dts: qcom: sm6125: Move sdc2 pinctrl from seine-pdx201 to sm6125
        arm64: dts: qcom: sm6125: Append -state suffix to pinctrl nodes
        arm64: dts: qcom: sm8250: add missing PCIe PHY clock-cells
        arm64: dts: mt7622: fix BPI-R64 WPS button
        arm64: tegra: Fixup SYSRAM references
        arm64: tegra: Update Tegra234 BPMP channel addresses
        arm64: tegra: Mark BPMP channels as no-memory-wc
        arm64: tegra: Fix SDMMC1 CD on P2888
        erofs: avoid consecutive detection for Highmem memory
        blk-mq: don't create hctx debugfs dir until q->debugfs_dir is created
        spi: Fix simplification of devm_spi_register_controller
        spi: tegra20-slink: fix UAF in tegra_slink_remove()
        hwmon: (drivetemp) Add module alias
        blktrace: Trace remapped requests correctly
        PM: domains: Ensure genpd_debugfs_dir exists before remove
        dm writecache: return void from functions
        dm writecache: count number of blocks read, not number of read bios
        dm writecache: count number of blocks written, not number of write bios
        dm writecache: count number of blocks discarded, not number of discard bios
        regulator: of: Fix refcount leak bug in of_get_regulation_constraints()
        soc: qcom: Make QCOM_RPMPD depend on PM
        arm64: dts: qcom: qcs404: Fix incorrect USB2 PHYs assignment
        irqdomain: Report irq number for NOMAP domains
        drivers/perf: arm_spe: Fix consistency of SYS_PMSCR_EL1.CX
        nohz/full, sched/rt: Fix missed tick-reenabling bug in dequeue_task_rt()
        x86/extable: Fix ex_handler_msr() print condition
        selftests/seccomp: Fix compile warning when CC=clang
        thermal/tools/tmon: Include pthread and time headers in tmon.h
        dm: return early from dm_pr_call() if DM device is suspended
        pwm: sifive: Simplify offset calculation for PWMCMP registers
        pwm: sifive: Ensure the clk is enabled exactly once per running PWM
        pwm: sifive: Shut down hardware only after pwmchip_remove() completed
        pwm: lpc18xx-sct: Reduce number of devm memory allocations
        pwm: lpc18xx-sct: Simplify driver by not using pwm_[gs]et_chip_data()
        pwm: lpc18xx: Fix period handling
        drm/dp: Export symbol / kerneldoc fixes for DP AUX bus
        drm/bridge: tc358767: Move (e)DP bridge endpoint parsing into dedicated function
        ath10k: do not enforce interrupt trigger type
        drm/st7735r: Fix module autoloading for Okaya RH128128T
        drm/panel: Fix build error when CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=y && CONFIG_DRM_DISPLAY_HELPER=m
        wifi: rtlwifi: fix error codes in rtl_debugfs_set_write_h2c()
        ath11k: fix netdev open race
        drm/mipi-dbi: align max_chunk to 2 in spi_transfer
        ath11k: Fix incorrect debug_mask mappings
        drm/radeon: fix potential buffer overflow in ni_set_mc_special_registers()
        drm/mediatek: Modify dsi funcs to atomic operations
        drm/mediatek: Separate poweron/poweroff from enable/disable and define new funcs
        drm/mediatek: Add pull-down MIPI operation in mtk_dsi_poweroff function
        drm/meson: encoder_hdmi: switch to bridge DRM_BRIDGE_ATTACH_NO_CONNECTOR
        drm/meson: encoder_hdmi: Fix refcount leak in meson_encoder_hdmi_init
        drm/bridge: lt9611uxc: Cancel only driver's work
        i2c: npcm: Remove own slave addresses 2:10
        i2c: npcm: Correct slave role behavior
        i2c: mxs: Silence a clang warning
        virtio-gpu: fix a missing check to avoid NULL dereference
        drm/shmem-helper: Unexport drm_gem_shmem_create_with_handle()
        drm/shmem-helper: Export dedicated wrappers for GEM object functions
        drm/shmem-helper: Pass GEM shmem object in public interfaces
        drm/virtio: Fix NULL vs IS_ERR checking in virtio_gpu_object_shmem_init
        drm: adv7511: override i2c address of cec before accessing it
        crypto: sun8i-ss - do not allocate memory when handling hash requests
        crypto: sun8i-ss - fix error codes in allocate_flows()
        net: fix sk_wmem_schedule() and sk_rmem_schedule() errors
        can: netlink: allow configuring of fixed bit rates without need for do_set_bittiming callback
        can: netlink: allow configuring of fixed data bit rates without need for do_set_data_bittiming callback
        i2c: Fix a potential use after free
        crypto: sun8i-ss - fix infinite loop in sun8i_ss_setup_ivs()
        media: atmel: atmel-sama7g5-isc: fix warning in configs without OF
        media: tw686x: Register the irq at the end of probe
        media: imx-jpeg: Correct some definition according specification
        media: imx-jpeg: Leave a blank space before the configuration data
        media: imx-jpeg: Add pm-runtime support for imx-jpeg
        media: imx-jpeg: use NV12M to represent non contiguous NV12
        media: imx-jpeg: Set V4L2_BUF_FLAG_LAST at eos
        media: imx-jpeg: Refactor function mxc_jpeg_parse
        media: imx-jpeg: Identify and handle precision correctly
        media: imx-jpeg: Handle source change in a function
        media: imx-jpeg: Support dynamic resolution change
        media: imx-jpeg: Align upwards buffer size
        media: imx-jpeg: Implement drain using v4l2-mem2mem helpers
        ath9k: fix use-after-free in ath9k_hif_usb_rx_cb
        wifi: iwlegacy: 4965: fix potential off-by-one overflow in il4965_rs_fill_link_cmd()
        drm/radeon: fix incorrrect SPDX-License-Identifiers
        rcutorture: Warn on individual rcu_torture_init() error conditions
        rcutorture: Don't cpuhp_remove_state() if cpuhp_setup_state() failed
        rcutorture: Fix ksoftirqd boosting timing and iteration
        test_bpf: fix incorrect netdev features
        crypto: ccp - During shutdown, check SEV data pointer before using
        drm: bridge: adv7511: Add check for mipi_dsi_driver_register
        media: imx-jpeg: Disable slot interrupt when frame done
        drm/mcde: Fix refcount leak in mcde_dsi_bind
        media: hdpvr: fix error value returns in hdpvr_read
        media: v4l2-mem2mem: prevent pollerr when last_buffer_dequeued is set
        media: driver/nxp/imx-jpeg: fix a unexpected return value problem
        media: tw686x: Fix memory leak in tw686x_video_init
        drm/vc4: plane: Remove subpixel positioning check
        drm/vc4: plane: Fix margin calculations for the right/bottom edges
        drm/bridge: Add a function to abstract away panels
        drm/vc4: dsi: Switch to devm_drm_of_get_bridge
        drm/vc4: Use of_device_get_match_data()
        drm/vc4: dsi: Release workaround buffer and DMA
        drm/vc4: dsi: Correct DSI divider calculations
        drm/vc4: dsi: Correct pixel order for DSI0
        drm/vc4: dsi: Register dsi0 as the correct vc4 encoder type
        drm/vc4: dsi: Fix dsi0 interrupt support
        drm/vc4: dsi: Add correct stop condition to vc4_dsi_encoder_disable iteration
        drm/vc4: hdmi: Fix HPD GPIO detection
        drm/vc4: hdmi: Avoid full hdmi audio fifo writes
        drm/vc4: hdmi: Reset HDMI MISC_CONTROL register
        drm/vc4: hdmi: Fix timings for interlaced modes
        drm/vc4: hdmi: Correct HDMI timing registers for interlaced modes
        crypto: arm64/gcm - Select AEAD for GHASH_ARM64_CE
        selftests/xsk: Destroy BPF resources only when ctx refcount drops to 0
        drm/rockchip: vop: Don't crash for invalid duplicate_state()
        drm/rockchip: Fix an error handling path rockchip_dp_probe()
        drm/mediatek: dpi: Remove output format of YUV
        drm/mediatek: dpi: Only enable dpi after the bridge is enabled
        drm: bridge: sii8620: fix possible off-by-one
        hinic: Use the bitmap API when applicable
        net: hinic: fix bug that ethtool get wrong stats
        net: hinic: avoid kernel hung in hinic_get_stats64()
        drm/msm/mdp5: Fix global state lock backoff
        crypto: hisilicon/sec - don't sleep when in softirq
        crypto: hisilicon - Kunpeng916 crypto driver don't sleep when in softirq
        media: platform: mtk-mdp: Fix mdp_ipi_comm structure alignment
        drm/msm: Avoid dirtyfb stalls on video mode displays (v2)
        drm/msm/dpu: Fix for non-visible planes
        mt76: mt76x02u: fix possible memory leak in __mt76x02u_mcu_send_msg
        mt76: mt7615: do not update pm stats in case of error
        ieee80211: add EHT 1K aggregation definitions
        mt76: mt7921: fix aggregation subframes setting to HE max
        mt76: mt7921: enlarge maximum VHT MPDU length to 11454
        mediatek: mt76: mac80211: Fix missing of_node_put() in mt76_led_init()
        mediatek: mt76: eeprom: fix missing of_node_put() in mt76_find_power_limits_node()
        skmsg: Fix invalid last sg check in sk_msg_recvmsg()
        drm/exynos/exynos7_drm_decon: free resources when clk_set_parent() failed.
        tcp: make retransmitted SKB fit into the send window
        libbpf: Fix the name of a reused map
        selftests: timers: valid-adjtimex: build fix for newer toolchains
        selftests: timers: clocksource-switch: fix passing errors from child
        bpf: Fix subprog names in stack traces.
        fs: check FMODE_LSEEK to control internal pipe splicing
        media: cedrus: h265: Fix flag name
        media: hantro: postproc: Fix motion vector space size
        media: hantro: Simplify postprocessor
        media: hevc: Embedded indexes in RPS
        media: staging: media: hantro: Fix typos
        wifi: wil6210: debugfs: fix info leak in wil_write_file_wmi()
        wifi: p54: Fix an error handling path in p54spi_probe()
        wifi: p54: add missing parentheses in p54_flush()
        selftests/bpf: fix a test for snprintf() overflow
        libbpf: fix an snprintf() overflow check
        can: pch_can: do not report txerr and rxerr during bus-off
        can: rcar_can: do not report txerr and rxerr during bus-off
        can: sja1000: do not report txerr and rxerr during bus-off
        can: hi311x: do not report txerr and rxerr during bus-off
        can: sun4i_can: do not report txerr and rxerr during bus-off
        can: kvaser_usb_hydra: do not report txerr and rxerr during bus-off
        can: kvaser_usb_leaf: do not report txerr and rxerr during bus-off
        can: usb_8dev: do not report txerr and rxerr during bus-off
        can: error: specify the values of data[5..7] of CAN error frames
        can: pch_can: pch_can_error(): initialize errc before using it
        Bluetooth: hci_intel: Add check for platform_driver_register
        i2c: cadence: Support PEC for SMBus block read
        i2c: mux-gpmux: Add of_node_put() when breaking out of loop
        wifi: wil6210: debugfs: fix uninitialized variable use in `wil_write_file_wmi()`
        wifi: iwlwifi: mvm: fix double list_add at iwl_mvm_mac_wake_tx_queue
        wifi: libertas: Fix possible refcount leak in if_usb_probe()
        media: cedrus: hevc: Add check for invalid timestamp
        net/mlx5e: Remove WARN_ON when trying to offload an unsupported TLS cipher/version
        net/mlx5e: Fix the value of MLX5E_MAX_RQ_NUM_MTTS
        net/mlx5: Adjust log_max_qp to be 18 at most
        crypto: hisilicon/hpre - don't use GFP_KERNEL to alloc mem during softirq
        crypto: inside-secure - Add missing MODULE_DEVICE_TABLE for of
        crypto: hisilicon/sec - fix auth key size error
        inet: add READ_ONCE(sk->sk_bound_dev_if) in INET_MATCH()
        ipv6: add READ_ONCE(sk->sk_bound_dev_if) in INET6_MATCH()
        net: allow unbound socket for packets in VRF when tcp_l3mdev_accept set
        netdevsim: fib: Fix reference count leak on route deletion failure
        wifi: rtw88: check the return value of alloc_workqueue()
        iavf: Fix max_rate limiting
        iavf: Fix 'tc qdisc show' listing too many queues
        netdevsim: Avoid allocation warnings triggered from user space
        net: rose: fix netdev reference changes
        net: ionic: fix error check for vlan flags in ionic_set_nic_features()
        dccp: put dccp_qpolicy_full() and dccp_qpolicy_push() in the same lock
        net: usb: make USB_RTL8153_ECM non user configurable
        wireguard: ratelimiter: use hrtimer in selftest
        wireguard: allowedips: don't corrupt stack when detecting overflow
        HID: amd_sfh: Don't show client init failed as error when discovery fails
        clk: renesas: r9a06g032: Fix UART clkgrp bitsel
        mtd: maps: Fix refcount leak in of_flash_probe_versatile
        mtd: maps: Fix refcount leak in ap_flash_init
        mtd: rawnand: meson: Fix a potential double free issue
        of: check previous kernel's ima-kexec-buffer against memory bounds
        scsi: qla2xxx: edif: Reduce Initiator-Initiator thrashing
        scsi: qla2xxx: edif: Fix potential stuck session in sa update
        scsi: qla2xxx: edif: Reduce connection thrash
        scsi: qla2xxx: edif: Fix inconsistent check of db_flags
        scsi: qla2xxx: edif: Synchronize NPIV deletion with authentication application
        scsi: qla2xxx: edif: Add retry for ELS passthrough
        scsi: qla2xxx: edif: Fix n2n discovery issue with secure target
        scsi: qla2xxx: edif: Fix n2n login retry for secure device
        KVM: SVM: Unwind "speculative" RIP advancement if INTn injection "fails"
        KVM: SVM: Stuff next_rip on emulated INT3 injection if NRIPS is supported
        phy: samsung: exynosautov9-ufs: correct TSRV register configurations
        PCI: microchip: Fix refcount leak in mc_pcie_init_irq_domains()
        PCI: tegra194: Fix PM error handling in tegra_pcie_config_ep()
        HID: cp2112: prevent a buffer overflow in cp2112_xfer()
        mtd: sm_ftl: Fix deadlock caused by cancel_work_sync in sm_release
        mtd: partitions: Fix refcount leak in parse_redboot_of
        mtd: parsers: ofpart: Fix refcount leak in bcm4908_partitions_fw_offset
        mtd: st_spi_fsm: Add a clk_disable_unprepare() in .probe()'s error path
        PCI: mediatek-gen3: Fix refcount leak in mtk_pcie_init_irq_domains()
        fpga: altera-pr-ip: fix unsigned comparison with less than zero
        usb: host: Fix refcount leak in ehci_hcd_ppc_of_probe
        usb: ohci-nxp: Fix refcount leak in ohci_hcd_nxp_probe
        usb: gadget: tegra-xudc: Fix error check in tegra_xudc_powerdomain_init()
        usb: xhci: tegra: Fix error check
        netfilter: xtables: Bring SPDX identifier back
        scsi: qla2xxx: edif: Send LOGO for unexpected IKE message
        scsi: qla2xxx: edif: Reduce disruption due to multiple app start
        scsi: qla2xxx: edif: Fix no login after app start
        scsi: qla2xxx: edif: Tear down session if keys have been removed
        scsi: qla2xxx: edif: Fix session thrash
        scsi: qla2xxx: edif: Fix no logout on delete for N2N
        iio: accel: bma400: Fix the scale min and max macro values
        platform/chrome: cros_ec: Always expose last resume result
        iio: accel: bma400: Reordering of header files
        clk: mediatek: reset: Fix written reset bit offset
        lib/test_hmm: avoid accessing uninitialized pages
        memremap: remove support for external pgmap refcounts
        mm/memremap: fix memunmap_pages() race with get_dev_pagemap()
        KVM: Don't set Accessed/Dirty bits for ZERO_PAGE
        mwifiex: Ignore BTCOEX events from the 88W8897 firmware
        mwifiex: fix sleep in atomic context bugs caused by dev_coredumpv
        scsi: iscsi: Allow iscsi_if_stop_conn() to be called from kernel
        scsi: iscsi: Add helper to remove a session from the kernel
        scsi: iscsi: Fix session removal on shutdown
        dmaengine: dw-edma: Fix eDMA Rd/Wr-channels and DMA-direction semantics
        mtd: dataflash: Add SPI ID table
        clk: qcom: camcc-sm8250: Fix halt on boot by reducing driver's init level
        misc: rtsx: Fix an error handling path in rtsx_pci_probe()
        driver core: fix potential deadlock in __driver_attach
        clk: qcom: clk-krait: unlock spin after mux completion
        clk: qcom: gcc-msm8939: Add missing SYSTEM_MM_NOC_BFDCD_CLK_SRC
        clk: qcom: gcc-msm8939: Fix bimc_ddr_clk_src rcgr base address
        clk: qcom: gcc-msm8939: Add missing system_mm_noc_bfdcd_clk_src
        clk: qcom: gcc-msm8939: Point MM peripherals to system_mm_noc clock
        usb: host: xhci: use snprintf() in xhci_decode_trb()
        RDMA/rxe: Fix deadlock in rxe_do_local_ops()
        clk: qcom: ipq8074: fix NSS core PLL-s
        clk: qcom: ipq8074: SW workaround for UBI32 PLL lock
        clk: qcom: ipq8074: fix NSS port frequency tables
        clk: qcom: ipq8074: set BRANCH_HALT_DELAY flag for UBI clocks
        clk: qcom: camcc-sdm845: Fix topology around titan_top power domain
        clk: qcom: camcc-sm8250: Fix topology around titan_top power domain
        clk: qcom: clk-rcg2: Fail Duty-Cycle configuration if MND divider is not enabled.
        clk: qcom: clk-rcg2: Make sure to not write d=0 to the NMD register
        mm/mempolicy: fix get_nodes out of bound access
        PCI: dwc: Stop link on host_init errors and de-initialization
        PCI: dwc: Add unroll iATU space support to dw_pcie_disable_atu()
        PCI: dwc: Disable outbound windows only for controllers using iATU
        PCI: dwc: Set INCREASE_REGION_SIZE flag based on limit address
        PCI: dwc: Deallocate EPC memory on dw_pcie_ep_init() errors
        PCI: dwc: Always enable CDM check if "snps,enable-cdm-check" exists
        soundwire: bus_type: fix remove and shutdown support
        soundwire: revisit driver bind/unbind and callbacks
        KVM: arm64: Don't return from void function
        dmaengine: sf-pdma: Add multithread support for a DMA channel
        PCI: endpoint: Don't stop controller when unbinding endpoint function
        scsi: qla2xxx: Check correct variable in qla24xx_async_gffid()
        intel_th: Fix a resource leak in an error handling path
        intel_th: msu-sink: Potential dereference of null pointer
        intel_th: msu: Fix vmalloced buffers
        binder: fix redefinition of seq_file attributes
        staging: rtl8192u: Fix sleep in atomic context bug in dm_fsync_timer_callback
        mmc: sdhci-of-esdhc: Fix refcount leak in esdhc_signal_voltage_switch
        mmc: mxcmmc: Silence a clang warning
        mmc: renesas_sdhi: Get the reset handle early in the probe
        memstick/ms_block: Fix some incorrect memory allocation
        memstick/ms_block: Fix a memory leak
        mmc: sdhci-of-at91: fix set_uhs_signaling rewriting of MC1R
        of: device: Fix missing of_node_put() in of_dma_set_restricted_buffer
        mmc: block: Add single read for 4k sector cards
        KVM: s390: pv: leak the topmost page table when destroy fails
        PCI/portdrv: Don't disable AER reporting in get_port_device_capability()
        PCI: qcom: Set up rev 2.1.0 PARF_PHY before enabling clocks
        scsi: smartpqi: Fix DMA direction for RAID requests
        xtensa: iss/network: provide release() callback
        xtensa: iss: fix handling error cases in iss_net_configure()
        usb: gadget: udc: amd5536 depends on HAS_DMA
        usb: aspeed-vhub: Fix refcount leak bug in ast_vhub_init_desc()
        usb: dwc3: core: Deprecate GCTL.CORESOFTRESET
        usb: dwc3: core: Do not perform GCTL_CORE_SOFTRESET during bootup
        usb: dwc3: qcom: fix missing optional irq warnings
        eeprom: idt_89hpesx: uninitialized data in idt_dbgfs_csr_write()
        phy: stm32: fix error return in stm32_usbphyc_phy_init
        interconnect: imx: fix max_node_id
        um: random: Don't initialise hwrng struct with zero
        RDMA/irdma: Fix a window for use-after-free
        RDMA/irdma: Fix VLAN connection with wildcard address
        RDMA/irdma: Fix setting of QP context err_rq_idx_valid field
        RDMA/rtrs-srv: Fix modinfo output for stringify
        RDMA/rtrs: Fix warning when use poll mode on client side.
        RDMA/rtrs: Replace duplicate check with is_pollqueue helper
        RDMA/rtrs: Introduce destroy_cq helper
        RDMA/rtrs: Do not allow sessname to contain special symbols / and .
        RDMA/rtrs: Rename rtrs_sess to rtrs_path
        RDMA/rtrs-srv: Rename rtrs_srv_sess to rtrs_srv_path
        RDMA/rtrs-clt: Rename rtrs_clt_sess to rtrs_clt_path
        RDMA/rtrs-clt: Replace list_next_or_null_rr_rcu with an inline function
        RDMA/qedr: Fix potential memory leak in __qedr_alloc_mr()
        RDMA/hns: Fix incorrect clearing of interrupt status register
        RDMA/siw: Fix duplicated reported IW_CM_EVENT_CONNECT_REPLY event
        iio: cros: Register FIFO callback after sensor is registered
        clk: qcom: gcc-msm8939: Fix weird field spacing in ftbl_gcc_camss_cci_clk
        RDMA/hfi1: fix potential memory leak in setup_base_ctxt()
        gpio: gpiolib-of: Fix refcount bugs in of_mm_gpiochip_add_data()
        HID: mcp2221: prevent a buffer overflow in mcp_smbus_write()
        HID: amd_sfh: Add NULL check for hid device
        dmaengine: imx-dma: Cast of_device_get_match_data() with (uintptr_t)
        scripts/gdb: lx-dmesg: read records individually
        scripts/gdb: fix 'lx-dmesg' on 32 bits arch
        RDMA/rxe: Fix mw bind to allow any consumer key portion
        mmc: cavium-octeon: Add of_node_put() when breaking out of loop
        mmc: cavium-thunderx: Add of_node_put() when breaking out of loop
        HID: alps: Declare U1_UNICORN_LEGACY support
        RDMA/rxe: For invalidate compare according to set keys in mr
        PCI: tegra194: Fix Root Port interrupt handling
        PCI: tegra194: Fix link up retry sequence
        HID: amd_sfh: Handle condition of "no sensors"
        USB: serial: fix tty-port initialized comments
        usb: cdns3: change place of 'priv_ep' assignment in cdns3_gadget_ep_dequeue(), cdns3_gadget_ep_enable()
        mtd: spi-nor: fix spi_nor_spimem_setup_op() call in spi_nor_erase_{sector,chip}()
        KVM: nVMX: Set UMIP bit CR4_FIXED1 MSR when emulating UMIP
        platform/olpc: Fix uninitialized data in debugfs write
        RDMA/srpt: Duplicate port name members
        RDMA/srpt: Introduce a reference count in struct srpt_device
        RDMA/srpt: Fix a use-after-free
        android: binder: stop saving a pointer to the VMA
        mm/mmap.c: fix missing call to vm_unacct_memory in mmap_region
        selftests: kvm: set rax before vmcall
        of/fdt: declared return type does not match actual return type
        RDMA/mlx5: Add missing check for return value in get namespace flow
        RDMA/rxe: Add memory barriers to kernel queues
        RDMA/rxe: Remove the is_user members of struct rxe_sq/rxe_rq/rxe_srq
        RDMA/rxe: Fix error unwind in rxe_create_qp()
        block/rnbd-srv: Set keep_id to true after mutex_trylock
        null_blk: fix ida error handling in null_add_dev()
        nvme: use command_id instead of req->tag in trace_nvme_complete_rq()
        nvme: define compat_ioctl again to unbreak 32-bit userspace.
        nvme: disable namespace access for unsupported metadata
        nvme: don't return an error from nvme_configure_metadata
        nvme: catch -ENODEV from nvme_revalidate_zones again
        block/bio: remove duplicate append pages code
        block: ensure iov_iter advances for added pages
        jbd2: fix outstanding credits assert in jbd2_journal_commit_transaction()
        ext4: recover csum seed of tmp_inode after migrating to extents
        jbd2: fix assertion 'jh->b_frozen_data == NULL' failure when journal aborted
        usb: cdns3: Don't use priv_dev uninitialized in cdns3_gadget_ep_enable()
        opp: Fix error check in dev_pm_opp_attach_genpd()
        ASoC: cros_ec_codec: Fix refcount leak in cros_ec_codec_platform_probe
        ASoC: samsung: Fix error handling in aries_audio_probe
        ASoC: imx-audmux: Silence a clang warning
        ASoC: mediatek: mt8173: Fix refcount leak in mt8173_rt5650_rt5676_dev_probe
        ASoC: mt6797-mt6351: Fix refcount leak in mt6797_mt6351_dev_probe
        ASoC: codecs: da7210: add check for i2c_add_driver
        ASoC: mediatek: mt8173-rt5650: Fix refcount leak in mt8173_rt5650_dev_probe
        serial: 8250: Export ICR access helpers for internal use
        serial: 8250: dma: Allow driver operations before starting DMA transfers
        serial: 8250_dw: Store LSR into lsr_saved_flags in dw8250_tx_wait_empty()
        ASoC: codecs: msm8916-wcd-digital: move gains from SX_TLV to S8_TLV
        ASoC: codecs: wcd9335: move gains from SX_TLV to S8_TLV
        rpmsg: char: Add mutex protection for rpmsg_eptdev_open()
        rpmsg: mtk_rpmsg: Fix circular locking dependency
        remoteproc: k3-r5: Fix refcount leak in k3_r5_cluster_of_init
        selftests/livepatch: better synchronize test_klp_callbacks_busy
        profiling: fix shift too large makes kernel panic
        remoteproc: imx_rproc: Fix refcount leak in imx_rproc_addr_init
        ASoC: samsung: h1940_uda1380: include proepr GPIO consumer header
        powerpc/perf: Optimize clearing the pending PMI and remove WARN_ON for PMI check in power_pmu_disable
        ASoC: samsung: change gpiod_speaker_power and rx1950_audio from global to static variables
        tty: n_gsm: Delete gsmtty open SABM frame when config requester
        tty: n_gsm: fix user open not possible at responder until initiator open
        tty: n_gsm: fix tty registration before control channel open
        tty: n_gsm: fix wrong queuing behavior in gsm_dlci_data_output()
        tty: n_gsm: fix missing timer to handle stalled links
        tty: n_gsm: fix non flow control frames during mux flow off
        tty: n_gsm: fix packet re-transmission without open control channel
        tty: n_gsm: fix race condition in gsmld_write()
        tty: n_gsm: fix resource allocation order in gsm_activate_mux()
        ASoC: qcom: Fix missing of_node_put() in asoc_qcom_lpass_cpu_platform_probe()
        ASoC: imx-card: Fix DSD/PDM mclk frequency
        remoteproc: qcom: wcnss: Fix handling of IRQs
        vfio/ccw: Do not change FSM state in subchannel event
        serial: 8250_fsl: Don't report FE, PE and OE twice
        tty: n_gsm: fix wrong T1 retry count handling
        tty: n_gsm: fix DM command
        tty: n_gsm: fix missing corner cases in gsmld_poll()
        MIPS: vdso: Utilize __pa() for gic_pfn
        swiotlb: fail map correctly with failed io_tlb_default_mem
        ASoC: mt6359: Fix refcount leak bug
        serial: 8250_bcm7271: Save/restore RTS in suspend/resume
        iommu/exynos: Handle failed IOMMU device registration properly
        9p: fix a bunch of checkpatch warnings
        9p: Drop kref usage
        9p: Add client parameter to p9_req_put()
        net: 9p: fix refcount leak in p9_read_work() error handling
        MIPS: Fixed __debug_virt_addr_valid()
        rpmsg: qcom_smd: Fix refcount leak in qcom_smd_parse_edge
        kfifo: fix kfifo_to_user() return type
        lib/smp_processor_id: fix imbalanced instrumentation_end() call
        proc: fix a dentry lock race between release_task and lookup
        remoteproc: qcom: pas: Check if coredump is enabled
        remoteproc: sysmon: Wait for SSCTL service to come up
        mfd: t7l66xb: Drop platform disable callback
        mfd: max77620: Fix refcount leak in max77620_initialise_fps
        iommu/arm-smmu: qcom_iommu: Add of_node_put() when breaking out of loop
        perf tools: Fix dso_id inode generation comparison
        s390/dump: fix old lowcore virtual vs physical address confusion
        s390/maccess: fix semantics of memcpy_real() and its callers
        s390/crash: fix incorrect number of bytes to copy to user space
        s390/zcore: fix race when reading from hardware system area
        ASoC: fsl_asrc: force cast the asrc_format type
        ASoC: fsl-asoc-card: force cast the asrc_format type
        ASoC: fsl_easrc: use snd_pcm_format_t type for sample_format
        ASoC: imx-card: use snd_pcm_format_t type for asrc_format
        ASoC: qcom: q6dsp: Fix an off-by-one in q6adm_alloc_copp()
        fuse: Remove the control interface for virtio-fs
        ASoC: audio-graph-card: Add of_node_put() in fail path
        watchdog: sp5100_tco: Fix a memory leak of EFCH MMIO resource
        watchdog: armada_37xx_wdt: check the return value of devm_ioremap() in armada_37xx_wdt_probe()
        video: fbdev: amba-clcd: Fix refcount leak bugs
        video: fbdev: sis: fix typos in SiS_GetModeID()
        ASoC: mchp-spdifrx: disable end of block interrupt on failures
        powerpc/32: Call mmu_mark_initmem_nx() regardless of data block mapping.
        powerpc/32: Do not allow selection of e5500 or e6500 CPUs on PPC32
        powerpc/iommu: Fix iommu_table_in_use for a small default DMA window case
        powerpc/pci: Prefer PCI domain assignment via DT 'linux,pci-domain' and alias
        tty: serial: fsl_lpuart: correct the count of break characters
        s390/dump: fix os_info virtual vs physical address confusion
        s390/smp: cleanup target CPU callback starting
        s390/smp: cleanup control register update routines
        s390/maccess: rework absolute lowcore accessors
        s390/smp: enforce lowcore protection on CPU restart
        f2fs: fix to remove F2FS_COMPR_FL and tag F2FS_NOCOMP_FL at the same time
        powerpc/spufs: Fix refcount leak in spufs_init_isolated_loader
        powerpc/xive: Fix refcount leak in xive_get_max_prio
        powerpc/cell/axon_msi: Fix refcount leak in setup_msi_msg_address
        perf symbol: Fail to read phdr workaround
        kprobes: Forbid probing on trampoline and BPF code areas
        x86/bus_lock: Don't assume the init value of DEBUGCTLMSR.BUS_LOCK_DETECT to be zero
        powerpc/pci: Fix PHB numbering when using opal-phbid
        genelf: Use HAVE_LIBCRYPTO_SUPPORT, not the never defined HAVE_LIBCRYPTO
        scripts/faddr2line: Fix vmlinux detection on arm64
        sched/deadline: Merge dl_task_can_attach() and dl_cpu_busy()
        sched, cpuset: Fix dl_cpu_busy() panic due to empty cs->cpus_allowed
        x86/numa: Use cpumask_available instead of hardcoded NULL check
        video: fbdev: arkfb: Fix a divide-by-zero bug in ark_set_pixclock()
        tools/thermal: Fix possible path truncations
        sched: Fix the check of nr_running at queue wakelist
        sched: Remove the limitation of WF_ON_CPU on wakelist if wakee cpu is idle
        sched/core: Do not requeue task on CPU excluded from cpus_mask
        x86/entry: Build thunk_$(BITS) only if CONFIG_PREEMPTION=y
        f2fs: allow compression for mmap files in compress_mode=user
        f2fs: do not allow to decompress files have FI_COMPRESS_RELEASED
        video: fbdev: vt8623fb: Check the size of screen before memset_io()
        video: fbdev: arkfb: Check the size of screen before memset_io()
        video: fbdev: s3fb: Check the size of screen before memset_io()
        scsi: ufs: core: Correct ufshcd_shutdown() flow
        scsi: zfcp: Fix missing auto port scan and thus missing target ports
        scsi: qla2xxx: Fix imbalance vha->vref_count
        scsi: qla2xxx: Fix discovery issues in FC-AL topology
        scsi: qla2xxx: Turn off multi-queue for 8G adapters
        scsi: qla2xxx: Fix crash due to stale SRB access around I/O timeouts
        scsi: qla2xxx: Fix excessive I/O error messages by default
        scsi: qla2xxx: Fix erroneous mailbox timeout after PCI error injection
        scsi: qla2xxx: Wind down adapter after PCIe error
        scsi: qla2xxx: Fix losing FCP-2 targets on long port disable with I/Os
        scsi: qla2xxx: Fix losing target when it reappears during delete
        scsi: qla2xxx: Fix losing FCP-2 targets during port perturbation tests
        x86/bugs: Enable STIBP for IBPB mitigated RETBleed
        ftrace/x86: Add back ftrace_expected assignment
        x86/kprobes: Update kcb status flag after singlestepping
        x86/olpc: fix 'logical not is only applied to the left hand side'
        SMB3: fix lease break timeout when multiple deferred close handles for the same file.
        posix-cpu-timers: Cleanup CPU timers before freeing them during exec
        Input: gscps2 - check return value of ioremap() in gscps2_probe()
        __follow_mount_rcu(): verify that mount_lock remains unchanged
        spmi: trace: fix stack-out-of-bound access in SPMI tracing functions
        drm/mediatek: Allow commands to be sent during video mode
        drm/mediatek: Keep dsi as LP00 before dcs cmds transfer
        crypto: blake2s - remove shash module
        drm/dp/mst: Read the extended DPCD capabilities during system resume
        drm/vc4: drv: Adopt the dma configuration from the HVS or V3D component
        usbnet: smsc95xx: Don't clear read-only PHY interrupt
        usbnet: smsc95xx: Avoid link settings race on interrupt reception
        usbnet: smsc95xx: Forward PHY interrupts to PHY driver to avoid polling
        usbnet: smsc95xx: Fix deadlock on runtime resume
        firmware: arm_scpi: Ensure scpi_info is not assigned if the probe fails
        scsi: lpfc: Fix EEH support for NVMe I/O
        scsi: lpfc: SLI path split: Refactor lpfc_iocbq
        scsi: lpfc: SLI path split: Refactor fast and slow paths to native SLI4
        scsi: lpfc: SLI path split: Refactor SCSI paths
        scsi: lpfc: Remove extra atomic_inc on cmd_pending in queuecommand after VMID
        intel_th: pci: Add Meteor Lake-P support
        intel_th: pci: Add Raptor Lake-S PCH support
        intel_th: pci: Add Raptor Lake-S CPU support
        KVM: set_msr_mce: Permit guests to ignore single-bit ECC errors
        KVM: x86: Signal #GP, not -EPERM, on bad WRMSR(MCi_CTL/STATUS)
        iommu/vt-d: avoid invalid memory access via node_online(NUMA_NO_NODE)
        PCI/AER: Iterate over error counters instead of error strings
        PCI: qcom: Power on PHY before IPQ8074 DBI register accesses
        serial: 8250_pci: Refactor the loop in pci_ite887x_init()
        serial: 8250_pci: Replace dev_*() by pci_*() macros
        serial: 8250: Fold EndRun device support into OxSemi Tornado code
        serial: 8250: Add proper clock handling for OxSemi PCIe devices
        tty: 8250: Add support for Brainboxes PX cards.
        dm writecache: set a default MAX_WRITEBACK_JOBS
        kexec, KEYS, s390: Make use of built-in and secondary keyring for signature verification
        dm thin: fix use-after-free crash in dm_sm_register_threshold_callback
        net/9p: Initialize the iounit field during fid creation
        ARM: remove some dead code
        timekeeping: contribute wall clock to rng on time change
        locking/csd_lock: Change csdlock_debug from early_param to __setup
        block: remove the struct blk_queue_ctx forward declaration
        block: don't allow the same type rq_qos add more than once
        btrfs: ensure pages are unlocked on cow_file_range() failure
        btrfs: reset block group chunk force if we have to wait
        btrfs: properly flag filesystem with BTRFS_FEATURE_INCOMPAT_BIG_METADATA
        ACPI: CPPC: Do not prevent CPPC from working in the future
        powerpc/powernv/kvm: Use darn for H_RANDOM on Power9
        KVM: x86/pmu: Introduce the ctrl_mask value for fixed counter
        KVM: VMX: Mark all PERF_GLOBAL_(OVF)_CTRL bits reserved if there's no vPMU
        KVM: x86/pmu: Ignore pmu->global_ctrl check if vPMU doesn't support global_ctrl
        KVM: VMX: Add helper to check if the guest PMU has PERF_GLOBAL_CTRL
        KVM: nVMX: Attempt to load PERF_GLOBAL_CTRL on nVMX xfer iff it exists
        dm raid: fix address sanitizer warning in raid_status
        dm raid: fix address sanitizer warning in raid_resume
        tracing: Add '__rel_loc' using trace event macros
        tracing: Avoid -Warray-bounds warning for __rel_loc macro
        ext4: update s_overhead_clusters in the superblock during an on-line resize
        ext4: fix extent status tree race in writeback error recovery path
        ext4: add EXT4_INODE_HAS_XATTR_SPACE macro in xattr.h
        ext4: fix use-after-free in ext4_xattr_set_entry
        ext4: correct max_inline_xattr_value_size computing
        ext4: correct the misjudgment in ext4_iget_extra_inode
        ext4: fix warning in ext4_iomap_begin as race between bmap and write
        ext4: check if directory block is within i_size
        ext4: make sure ext4_append() always allocates new block
        ext4: remove EA inode entry from mbcache on inode eviction
        ext4: use kmemdup() to replace kmalloc + memcpy
        ext4: unindent codeblock in ext4_xattr_block_set()
        ext4: fix race when reusing xattr blocks
        KEYS: asymmetric: enforce SM2 signature use pkey algo
        tpm: eventlog: Fix section mismatch for DEBUG_SECTION_MISMATCH
        xen-blkback: fix persistent grants negotiation
        xen-blkback: Apply 'feature_persistent' parameter when connect
        xen-blkfront: Apply 'feature_persistent' parameter when connect
        powerpc: Fix eh field when calling lwarx on PPC32
        tracing: Use a struct alignof to determine trace event field alignment
        net_sched: cls_route: remove from list when handle is 0
        mac80211: fix a memory leak where sta_info is not freed
        tcp: fix over estimation in sk_forced_mem_schedule()
        crypto: lib/blake2s - reduce stack frame usage in self test
        Revert "mwifiex: fix sleep in atomic context bugs caused by dev_coredumpv"
        Revert "s390/smp: enforce lowcore protection on CPU restart"
        drm/bridge: tc358767: Fix (e)DP bridge endpoint parsing in dedicated function
        net: phy: smsc: Disable Energy Detect Power-Down in interrupt mode
        drm/vc4: change vc4_dma_range_matches from a global to static
        tracing/perf: Avoid -Warray-bounds warning for __rel_loc macro
        drm/msm: Fix dirtyfb refcounting
        drm/meson: Fix refcount leak in meson_encoder_hdmi_init
        io_uring: mem-account pbuf buckets
        Revert "net: usb: ax88179_178a needs FLAG_SEND_ZLP"
        Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm regression
        drm/bridge: Move devm_drm_of_get_bridge to bridge/panel.c
        scsi: lpfc: Fix locking for lpfc_sli_iocbq_lookup()
        scsi: lpfc: Fix element offset in __lpfc_sli_release_iocbq_s4()
        scsi: lpfc: Resolve some cleanup issues following SLI path refactoring
        Linux 5.15.61

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Iec359ed301bcbcd6e19b67ee8534418fab26850b
2022-09-21 17:30:12 +02:00
David Howells
5efc5b3baf vfs: Check the truncate maximum size in inode_newsize_ok()
commit e2ebff9c57fe4eb104ce4768f6ebcccf76bef849 upstream.

If something manages to set the maximum file size to MAX_OFFSET+1, this
can cause the xfs and ext4 filesystems at least to become corrupt.

Ordinarily, the kernel protects against userspace trying this by
checking the value early in the truncate() and ftruncate() system calls
calls - but there are at least two places that this check is bypassed:

 (1) Cachefiles will round up the EOF of the backing file to DIO block
     size so as to allow DIO on the final block - but this might push
     the offset negative. It then calls notify_change(), but this
     inadvertently bypasses the checking. This can be triggered if
     someone puts an 8EiB-1 file on a server for someone else to try and
     access by, say, nfs.

 (2) ksmbd doesn't check the value it is given in set_end_of_file_info()
     and then calls vfs_truncate() directly - which also bypasses the
     check.

In both cases, it is potentially possible for a network filesystem to
cause a disk filesystem to be corrupted: cachefiles in the client's
cache filesystem; ksmbd in the server's filesystem.

nfsd is okay as it checks the value, but we can then remove this check
too.

Fix this by adding a check to inode_newsize_ok(), as called from
setattr_prepare(), thereby catching the issue as filesystems set up to
perform the truncate with minimal opportunity for bypassing the new
check.

Fixes: 1f08c925e7a3 ("cachefiles: Implement backing file wrangling")
Fixes: f441584858 ("cifsd: add file operations")
Signed-off-by: David Howells <dhowells@redhat.com>
Reported-by: Jeff Layton <jlayton@kernel.org>
Tested-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Namjae Jeon <linkinjeon@kernel.org>
Cc: stable@kernel.org
Acked-by: Alexander Viro <viro@zeniv.linux.org.uk>
cc: Steve French <sfrench@samba.org>
cc: Hyunchul Lee <hyc.lee@gmail.com>
cc: Chuck Lever <chuck.lever@oracle.com>
cc: Dave Wysochanski <dwysocha@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-08-17 14:22:50 +02:00
Greg Kroah-Hartman
fae17cd97d Merge 5.15.52 into android14-5.15
Changes in 5.15.52
	tick/nohz: unexport __init-annotated tick_nohz_full_setup()
	x86, kvm: use proper ASM macros for kvm_vcpu_is_preempted
	bcache: memset on stack variables in bch_btree_check() and bch_sectors_dirty_init()
	xfs: use kmem_cache_free() for kmem_cache objects
	xfs: punch out data fork delalloc blocks on COW writeback failure
	xfs: Fix the free logic of state in xfs_attr_node_hasname
	xfs: remove all COW fork extents when remounting readonly
	xfs: check sb_meta_uuid for dabuf buffer recovery
	xfs: prevent UAF in xfs_log_item_in_current_chkpt
	xfs: only bother with sync_filesystem during readonly remount
	powerpc/ftrace: Remove ftrace init tramp once kernel init is complete
	fs: add is_idmapped_mnt() helper
	fs: move mapping helpers
	fs: tweak fsuidgid_has_mapping()
	fs: account for filesystem mappings
	docs: update mapping documentation
	fs: use low-level mapping helpers
	fs: remove unused low-level mapping helpers
	fs: port higher-level mapping helpers
	fs: add i_user_ns() helper
	fs: support mapped mounts of mapped filesystems
	fs: fix acl translation
	fs: account for group membership
	rtw88: 8821c: support RFE type4 wifi NIC
	rtw88: rtw8821c: enable rfe 6 devices
	net: mscc: ocelot: allow unregistered IP multicast flooding to CPU
	io_uring: fix not locked access to fixed buf table
	Linux 5.15.52

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Icfb690703efd8cab1dffa7ca6cce28bbca635c3d
2022-07-13 18:34:48 +02:00
Christian Brauner
e8d4878dcd fs: account for group membership
commit 168f912893407a5acb798a4a58613b5f1f98c717 upstream.

When calling setattr_prepare() to determine the validity of the
attributes the ia_{g,u}id fields contain the value that will be written
to inode->i_{g,u}id. This is exactly the same for idmapped and
non-idmapped mounts and allows callers to pass in the values they want
to see written to inode->i_{g,u}id.

When group ownership is changed a caller whose fsuid owns the inode can
change the group of the inode to any group they are a member of. When
searching through the caller's groups we need to use the gid mapped
according to the idmapped mount otherwise we will fail to change
ownership for unprivileged users.

Consider a caller running with fsuid and fsgid 1000 using an idmapped
mount that maps id 65534 to 1000 and 65535 to 1001. Consequently, a file
owned by 65534:65535 in the filesystem will be owned by 1000:1001 in the
idmapped mount.

The caller now requests the gid of the file to be changed to 1000 going
through the idmapped mount. In the vfs we will immediately map the
requested gid to the value that will need to be written to inode->i_gid
and place it in attr->ia_gid. Since this idmapped mount maps 65534 to
1000 we place 65534 in attr->ia_gid.

When we check whether the caller is allowed to change group ownership we
first validate that their fsuid matches the inode's uid. The
inode->i_uid is 65534 which is mapped to uid 1000 in the idmapped mount.
Since the caller's fsuid is 1000 we pass the check.

We now check whether the caller is allowed to change inode->i_gid to the
requested gid by calling in_group_p(). This will compare the passed in
gid to the caller's fsgid and search the caller's additional groups.

Since we're dealing with an idmapped mount we need to pass in the gid
mapped according to the idmapped mount. This is akin to checking whether
a caller is privileged over the future group the inode is owned by. And
that needs to take the idmapped mount into account. Note, all helpers
are nops without idmapped mounts.

New regression test sent to xfstests.

Link: https://github.com/lxc/lxd/issues/10537
Link: https://lore.kernel.org/r/20220613111517.2186646-1-brauner@kernel.org
Fixes: 2f221d6f7b ("attr: handle idmapped mounts")
Cc: Seth Forshee <sforshee@digitalocean.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Aleksa Sarai <cyphar@cyphar.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: stable@vger.kernel.org # 5.15+
CC: linux-fsdevel@vger.kernel.org
Reviewed-by: Seth Forshee <sforshee@digitalocean.com>
Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-07-02 16:41:17 +02:00
Greg Kroah-Hartman
0a77fca3aa ANDROID: GKI: set vfs-only exports into their own namespace
We have namespaces, so use them for all vfs-exported namespaces so that
filesystems can use them, but not anything else.

Some in-kernel drivers that do direct filesystem accesses (because they
serve up files) are also allowed access to these symbols to keep 'make
allmodconfig' builds working properly, but it is not needed for Android
kernel images.

Bug: 157965270
Bug: 210074446
Cc: Matthias Maennich <maennich@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Iaf6140baf3a18a516ab2d5c3966235c42f3f70de
2022-04-07 15:14:24 +02:00
Christian Brauner
7c48010ba3 fs: handle circular mappings correctly
commit 968219708108440b23bc292e0486e3cc1d9a1bed upstream.

When calling setattr_prepare() to determine the validity of the attributes the
ia_{g,u}id fields contain the value that will be written to inode->i_{g,u}id.
When the {g,u}id attribute of the file isn't altered and the caller's fs{g,u}id
matches the current {g,u}id attribute the attribute change is allowed.

The value in ia_{g,u}id does already account for idmapped mounts and will have
taken the relevant idmapping into account. So in order to verify that the
{g,u}id attribute isn't changed we simple need to compare the ia_{g,u}id value
against the inode's i_{g,u}id value.

This only has any meaning for idmapped mounts as idmapping helpers are
idempotent without them. And for idmapped mounts this really only has a meaning
when circular idmappings are used, i.e. mappings where e.g. id 1000 is mapped
to id 1001 and id 1001 is mapped to id 1000. Such ciruclar mappings can e.g. be
useful when sharing the same home directory between multiple users at the same
time.

As an example consider a directory with two files: /source/file1 owned by
{g,u}id 1000 and /source/file2 owned by {g,u}id 1001. Assume we create an
idmapped mount at /target with an idmapping that maps files owned by {g,u}id
1000 to being owned by {g,u}id 1001 and files owned by {g,u}id 1001 to being
owned by {g,u}id 1000. In effect, the idmapped mount at /target switches the
ownership of /source/file1 and source/file2, i.e. /target/file1 will be owned
by {g,u}id 1001 and /target/file2 will be owned by {g,u}id 1000.

This means that a user with fs{g,u}id 1000 must be allowed to setattr
/target/file2 from {g,u}id 1000 to {g,u}id 1000. Similar, a user with fs{g,u}id
1001 must be allowed to setattr /target/file1 from {g,u}id 1001 to {g,u}id
1001. Conversely, a user with fs{g,u}id 1000 must fail to setattr /target/file1
from {g,u}id 1001 to {g,u}id 1000. And a user with fs{g,u}id 1001 must fail to
setattr /target/file2 from {g,u}id 1000 to {g,u}id 1000. Both cases must fail
with EPERM for non-capable callers.

Before this patch we could end up denying legitimate attribute changes and
allowing invalid attribute changes when circular mappings are used. To even get
into this situation the caller must've been privileged both to create that
mapping and to create that idmapped mount.

This hasn't been seen in the wild anywhere but came up when expanding the
testsuite during work on a series of hardening patches. All idmapped fstests
pass without any regressions and we add new tests to verify the behavior of
circular mappings.

Link: https://lore.kernel.org/r/20211109145713.1868404-1-brauner@kernel.org
Fixes: 2f221d6f7b ("attr: handle idmapped mounts")
Cc: Seth Forshee <seth.forshee@digitalocean.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: stable@vger.kernel.org
CC: linux-fsdevel@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: Seth Forshee <sforshee@digitalocean.com>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-11-25 09:48:46 +01:00
Andreas Gruenbacher
7bb698f09b fs: Move notify_change permission checks into may_setattr
Move the permission checks in notify_change into a separate function to
make them available to filesystems.

When notify_change is called, the vfs performs those checks before
calling into iop->setattr.  However, a filesystem like gfs2 can only
lock and revalidate the inode inside ->setattr, and it must then repeat
those checks to err on the safe side.

It would be nice to get rid of the double checking, but moving the
permission check into iop->setattr altogether isn't really an option.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2021-08-13 00:41:05 -04:00
Christian Brauner
a2d2329e30 ima: handle idmapped mounts
IMA does sometimes access the inode's i_uid and compares it against the
rules' fowner. Enable IMA to handle idmapped mounts by passing down the
mount's user namespace. We simply make use of the helpers we introduced
before. If the initial user namespace is passed nothing changes so
non-idmapped mounts will see identical behavior as before.

Link: https://lore.kernel.org/r/20210121131959.646623-27-christian.brauner@ubuntu.com
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2021-01-24 14:27:20 +01:00
Christian Brauner
549c729771 fs: make helpers idmap mount aware
Extend some inode methods with an additional user namespace argument. A
filesystem that is aware of idmapped mounts will receive the user
namespace the mount has been marked with. This can be used for
additional permission checking and also to enable filesystems to
translate between uids and gids if they need to. We have implemented all
relevant helpers in earlier patches.

As requested we simply extend the exisiting inode method instead of
introducing new ones. This is a little more code churn but it's mostly
mechanical and doesnt't leave us with additional inode methods.

Link: https://lore.kernel.org/r/20210121131959.646623-25-christian.brauner@ubuntu.com
Cc: Christoph Hellwig <hch@lst.de>
Cc: David Howells <dhowells@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2021-01-24 14:27:20 +01:00
Christian Brauner
71bc356f93 commoncap: handle idmapped mounts
When interacting with user namespace and non-user namespace aware
filesystem capabilities the vfs will perform various security checks to
determine whether or not the filesystem capabilities can be used by the
caller, whether they need to be removed and so on. The main
infrastructure for this resides in the capability codepaths but they are
called through the LSM security infrastructure even though they are not
technically an LSM or optional. This extends the existing security hooks
security_inode_removexattr(), security_inode_killpriv(),
security_inode_getsecurity() to pass down the mount's user namespace and
makes them aware of idmapped mounts.

In order to actually get filesystem capabilities from disk the
capability infrastructure exposes the get_vfs_caps_from_disk() helper.
For user namespace aware filesystem capabilities a root uid is stored
alongside the capabilities.

In order to determine whether the caller can make use of the filesystem
capability or whether it needs to be ignored it is translated according
to the superblock's user namespace. If it can be translated to uid 0
according to that id mapping the caller can use the filesystem
capabilities stored on disk. If we are accessing the inode that holds
the filesystem capabilities through an idmapped mount we map the root
uid according to the mount's user namespace. Afterwards the checks are
identical to non-idmapped mounts: reading filesystem caps from disk
enforces that the root uid associated with the filesystem capability
must have a mapping in the superblock's user namespace and that the
caller is either in the same user namespace or is a descendant of the
superblock's user namespace. For filesystems that are mountable inside
user namespace the caller can just mount the filesystem and won't
usually need to idmap it. If they do want to idmap it they can create an
idmapped mount and mark it with a user namespace they created and which
is thus a descendant of s_user_ns. For filesystems that are not
mountable inside user namespaces the descendant rule is trivially true
because the s_user_ns will be the initial user namespace.

If the initial user namespace is passed nothing changes so non-idmapped
mounts will see identical behavior as before.

Link: https://lore.kernel.org/r/20210121131959.646623-11-christian.brauner@ubuntu.com
Cc: Christoph Hellwig <hch@lst.de>
Cc: David Howells <dhowells@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: James Morris <jamorris@linux.microsoft.com>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2021-01-24 14:27:17 +01:00
Christian Brauner
2f221d6f7b attr: handle idmapped mounts
When file attributes are changed most filesystems rely on the
setattr_prepare(), setattr_copy(), and notify_change() helpers for
initialization and permission checking. Let them handle idmapped mounts.
If the inode is accessed through an idmapped mount map it into the
mount's user namespace. Afterwards the checks are identical to
non-idmapped mounts. If the initial user namespace is passed nothing
changes so non-idmapped mounts will see identical behavior as before.

Helpers that perform checks on the ia_uid and ia_gid fields in struct
iattr assume that ia_uid and ia_gid are intended values and have already
been mapped correctly at the userspace-kernelspace boundary as we
already do today. If the initial user namespace is passed nothing
changes so non-idmapped mounts will see identical behavior as before.

Link: https://lore.kernel.org/r/20210121131959.646623-8-christian.brauner@ubuntu.com
Cc: Christoph Hellwig <hch@lst.de>
Cc: David Howells <dhowells@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2021-01-24 14:27:16 +01:00
Christian Brauner
21cb47be6f inode: make init and permission helpers idmapped mount aware
The inode_owner_or_capable() helper determines whether the caller is the
owner of the inode or is capable with respect to that inode. Allow it to
handle idmapped mounts. If the inode is accessed through an idmapped
mount it according to the mount's user namespace. Afterwards the checks
are identical to non-idmapped mounts. If the initial user namespace is
passed nothing changes so non-idmapped mounts will see identical
behavior as before.

Similarly, allow the inode_init_owner() helper to handle idmapped
mounts. It initializes a new inode on idmapped mounts by mapping the
fsuid and fsgid of the caller from the mount's user namespace. If the
initial user namespace is passed nothing changes so non-idmapped mounts
will see identical behavior as before.

Link: https://lore.kernel.org/r/20210121131959.646623-7-christian.brauner@ubuntu.com
Cc: Christoph Hellwig <hch@lst.de>
Cc: David Howells <dhowells@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: James Morris <jamorris@linux.microsoft.com>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2021-01-24 14:27:16 +01:00
Christian Brauner
47291baa8d namei: make permission helpers idmapped mount aware
The two helpers inode_permission() and generic_permission() are used by
the vfs to perform basic permission checking by verifying that the
caller is privileged over an inode. In order to handle idmapped mounts
we extend the two helpers with an additional user namespace argument.
On idmapped mounts the two helpers will make sure to map the inode
according to the mount's user namespace and then peform identical
permission checks to inode_permission() and generic_permission(). If the
initial user namespace is passed nothing changes so non-idmapped mounts
will see identical behavior as before.

Link: https://lore.kernel.org/r/20210121131959.646623-6-christian.brauner@ubuntu.com
Cc: Christoph Hellwig <hch@lst.de>
Cc: David Howells <dhowells@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: James Morris <jamorris@linux.microsoft.com>
Acked-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2021-01-24 14:27:16 +01:00
Christian Brauner
0558c1bf5a capability: handle idmapped mounts
In order to determine whether a caller holds privilege over a given
inode the capability framework exposes the two helpers
privileged_wrt_inode_uidgid() and capable_wrt_inode_uidgid(). The former
verifies that the inode has a mapping in the caller's user namespace and
the latter additionally verifies that the caller has the requested
capability in their current user namespace.
If the inode is accessed through an idmapped mount map it into the
mount's user namespace. Afterwards the checks are identical to
non-idmapped inodes. If the initial user namespace is passed all
operations are a nop so non-idmapped mounts will not see a change in
behavior.

Link: https://lore.kernel.org/r/20210121131959.646623-5-christian.brauner@ubuntu.com
Cc: Christoph Hellwig <hch@lst.de>
Cc: David Howells <dhowells@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: James Morris <jamorris@linux.microsoft.com>
Acked-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2021-01-24 14:27:16 +01:00
Amir Goldstein
eb31e2f63d utimes: Clamp the timestamps in notify_change()
Push clamping timestamps into notify_change(), so in-kernel
callers like nfsd and overlayfs will get similar timestamp
set behavior as utimes.

AV: get rid of clamping in ->setattr() instances; we don't need
to bother with that there, with notify_change() doing normalization
in all cases now (it already did for implicit case, since current_time()
clamps).

Suggested-by: Miklos Szeredi <mszeredi@redhat.com>
Fixes: 42e729b9dd ("utimes: Clamp the timestamps before update")
Cc: stable@vger.kernel.org # v5.4
Cc: Deepa Dinamani <deepa.kernel@gmail.com>
Cc: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2019-12-08 19:10:50 -05:00
Deepa Dinamani
3818c1907a timestamp_truncate: Replace users of timespec64_trunc
Update the inode timestamp updates to use timestamp_truncate()
instead of timespec64_trunc().

The change was mostly generated by the following coccinelle
script.

virtual context
virtual patch

@r1 depends on patch forall@
struct inode *inode;
identifier i_xtime =~ "^i_[acm]time$";
expression e;
@@

inode->i_xtime =
- timespec64_trunc(
+ timestamp_truncate(
...,
- e);
+ inode);

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Jeff Layton <jlayton@kernel.org>
Cc: adrian.hunter@intel.com
Cc: dedekind1@gmail.com
Cc: gregkh@linuxfoundation.org
Cc: hch@lst.de
Cc: jaegeuk@kernel.org
Cc: jlbec@evilplan.org
Cc: richard@nod.at
Cc: tj@kernel.org
Cc: yuchao0@huawei.com
Cc: linux-f2fs-devel@lists.sourceforge.net
Cc: linux-ntfs-dev@lists.sourceforge.net
Cc: linux-mtd@lists.infradead.org
2019-08-30 07:27:17 -07:00
Matthew Wilcox
3fae17468a fs: Fix attr.c kernel-doc
A couple of minor warnings.

Signed-off-by: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2018-07-03 16:44:45 -04:00
Linus Torvalds
7a932516f5 Merge tag 'vfs-timespec64' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground
Pull inode timestamps conversion to timespec64 from Arnd Bergmann:
 "This is a late set of changes from Deepa Dinamani doing an automated
  treewide conversion of the inode and iattr structures from 'timespec'
  to 'timespec64', to push the conversion from the VFS layer into the
  individual file systems.

  As Deepa writes:

   'The series aims to switch vfs timestamps to use struct timespec64.
    Currently vfs uses struct timespec, which is not y2038 safe.

    The series involves the following:
    1. Add vfs helper functions for supporting struct timepec64
       timestamps.
    2. Cast prints of vfs timestamps to avoid warnings after the switch.
    3. Simplify code using vfs timestamps so that the actual replacement
       becomes easy.
    4. Convert vfs timestamps to use struct timespec64 using a script.
       This is a flag day patch.

    Next steps:
    1. Convert APIs that can handle timespec64, instead of converting
       timestamps at the boundaries.
    2. Update internal data structures to avoid timestamp conversions'

  Thomas Gleixner adds:

   'I think there is no point to drag that out for the next merge
    window. The whole thing needs to be done in one go for the core
    changes which means that you're going to play that catchup game
    forever. Let's get over with it towards the end of the merge window'"

* tag 'vfs-timespec64' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground:
  pstore: Remove bogus format string definition
  vfs: change inode times to use struct timespec64
  pstore: Convert internal records to timespec64
  udf: Simplify calls to udf_disk_stamp_to_time
  fs: nfs: get rid of memcpys for inode times
  ceph: make inode time prints to be long long
  lustre: Use long long type to print inode time
  fs: add timespec64_truncate()
2018-06-15 07:31:07 +09:00
Deepa Dinamani
95582b0083 vfs: change inode times to use struct timespec64
struct timespec is not y2038 safe. Transition vfs to use
y2038 safe struct timespec64 instead.

The change was made with the help of the following cocinelle
script. This catches about 80% of the changes.
All the header file and logic changes are included in the
first 5 rules. The rest are trivial substitutions.
I avoid changing any of the function signatures or any other
filesystem specific data structures to keep the patch simple
for review.

The script can be a little shorter by combining different cases.
But, this version was sufficient for my usecase.

virtual patch

@ depends on patch @
identifier now;
@@
- struct timespec
+ struct timespec64
  current_time ( ... )
  {
- struct timespec now = current_kernel_time();
+ struct timespec64 now = current_kernel_time64();
  ...
- return timespec_trunc(
+ return timespec64_trunc(
  ... );
  }

@ depends on patch @
identifier xtime;
@@
 struct \( iattr \| inode \| kstat \) {
 ...
-       struct timespec xtime;
+       struct timespec64 xtime;
 ...
 }

@ depends on patch @
identifier t;
@@
 struct inode_operations {
 ...
int (*update_time) (...,
-       struct timespec t,
+       struct timespec64 t,
...);
 ...
 }

@ depends on patch @
identifier t;
identifier fn_update_time =~ "update_time$";
@@
 fn_update_time (...,
- struct timespec *t,
+ struct timespec64 *t,
 ...) { ... }

@ depends on patch @
identifier t;
@@
lease_get_mtime( ... ,
- struct timespec *t
+ struct timespec64 *t
  ) { ... }

@te depends on patch forall@
identifier ts;
local idexpression struct inode *inode_node;
identifier i_xtime =~ "^i_[acm]time$";
identifier ia_xtime =~ "^ia_[acm]time$";
identifier fn_update_time =~ "update_time$";
identifier fn;
expression e, E3;
local idexpression struct inode *node1;
local idexpression struct inode *node2;
local idexpression struct iattr *attr1;
local idexpression struct iattr *attr2;
local idexpression struct iattr attr;
identifier i_xtime1 =~ "^i_[acm]time$";
identifier i_xtime2 =~ "^i_[acm]time$";
identifier ia_xtime1 =~ "^ia_[acm]time$";
identifier ia_xtime2 =~ "^ia_[acm]time$";
@@
(
(
- struct timespec ts;
+ struct timespec64 ts;
|
- struct timespec ts = current_time(inode_node);
+ struct timespec64 ts = current_time(inode_node);
)

<+... when != ts
(
- timespec_equal(&inode_node->i_xtime, &ts)
+ timespec64_equal(&inode_node->i_xtime, &ts)
|
- timespec_equal(&ts, &inode_node->i_xtime)
+ timespec64_equal(&ts, &inode_node->i_xtime)
|
- timespec_compare(&inode_node->i_xtime, &ts)
+ timespec64_compare(&inode_node->i_xtime, &ts)
|
- timespec_compare(&ts, &inode_node->i_xtime)
+ timespec64_compare(&ts, &inode_node->i_xtime)
|
ts = current_time(e)
|
fn_update_time(..., &ts,...)
|
inode_node->i_xtime = ts
|
node1->i_xtime = ts
|
ts = inode_node->i_xtime
|
<+... attr1->ia_xtime ...+> = ts
|
ts = attr1->ia_xtime
|
ts.tv_sec
|
ts.tv_nsec
|
btrfs_set_stack_timespec_sec(..., ts.tv_sec)
|
btrfs_set_stack_timespec_nsec(..., ts.tv_nsec)
|
- ts = timespec64_to_timespec(
+ ts =
...
-)
|
- ts = ktime_to_timespec(
+ ts = ktime_to_timespec64(
...)
|
- ts = E3
+ ts = timespec_to_timespec64(E3)
|
- ktime_get_real_ts(&ts)
+ ktime_get_real_ts64(&ts)
|
fn(...,
- ts
+ timespec64_to_timespec(ts)
,...)
)
...+>
(
<... when != ts
- return ts;
+ return timespec64_to_timespec(ts);
...>
)
|
- timespec_equal(&node1->i_xtime1, &node2->i_xtime2)
+ timespec64_equal(&node1->i_xtime2, &node2->i_xtime2)
|
- timespec_equal(&node1->i_xtime1, &attr2->ia_xtime2)
+ timespec64_equal(&node1->i_xtime2, &attr2->ia_xtime2)
|
- timespec_compare(&node1->i_xtime1, &node2->i_xtime2)
+ timespec64_compare(&node1->i_xtime1, &node2->i_xtime2)
|
node1->i_xtime1 =
- timespec_trunc(attr1->ia_xtime1,
+ timespec64_trunc(attr1->ia_xtime1,
...)
|
- attr1->ia_xtime1 = timespec_trunc(attr2->ia_xtime2,
+ attr1->ia_xtime1 =  timespec64_trunc(attr2->ia_xtime2,
...)
|
- ktime_get_real_ts(&attr1->ia_xtime1)
+ ktime_get_real_ts64(&attr1->ia_xtime1)
|
- ktime_get_real_ts(&attr.ia_xtime1)
+ ktime_get_real_ts64(&attr.ia_xtime1)
)

@ depends on patch @
struct inode *node;
struct iattr *attr;
identifier fn;
identifier i_xtime =~ "^i_[acm]time$";
identifier ia_xtime =~ "^ia_[acm]time$";
expression e;
@@
(
- fn(node->i_xtime);
+ fn(timespec64_to_timespec(node->i_xtime));
|
 fn(...,
- node->i_xtime);
+ timespec64_to_timespec(node->i_xtime));
|
- e = fn(attr->ia_xtime);
+ e = fn(timespec64_to_timespec(attr->ia_xtime));
)

@ depends on patch forall @
struct inode *node;
struct iattr *attr;
identifier i_xtime =~ "^i_[acm]time$";
identifier ia_xtime =~ "^ia_[acm]time$";
identifier fn;
@@
{
+ struct timespec ts;
<+...
(
+ ts = timespec64_to_timespec(node->i_xtime);
fn (...,
- &node->i_xtime,
+ &ts,
...);
|
+ ts = timespec64_to_timespec(attr->ia_xtime);
fn (...,
- &attr->ia_xtime,
+ &ts,
...);
)
...+>
}

@ depends on patch forall @
struct inode *node;
struct iattr *attr;
struct kstat *stat;
identifier ia_xtime =~ "^ia_[acm]time$";
identifier i_xtime =~ "^i_[acm]time$";
identifier xtime =~ "^[acm]time$";
identifier fn, ret;
@@
{
+ struct timespec ts;
<+...
(
+ ts = timespec64_to_timespec(node->i_xtime);
ret = fn (...,
- &node->i_xtime,
+ &ts,
...);
|
+ ts = timespec64_to_timespec(node->i_xtime);
ret = fn (...,
- &node->i_xtime);
+ &ts);
|
+ ts = timespec64_to_timespec(attr->ia_xtime);
ret = fn (...,
- &attr->ia_xtime,
+ &ts,
...);
|
+ ts = timespec64_to_timespec(attr->ia_xtime);
ret = fn (...,
- &attr->ia_xtime);
+ &ts);
|
+ ts = timespec64_to_timespec(stat->xtime);
ret = fn (...,
- &stat->xtime);
+ &ts);
)
...+>
}

@ depends on patch @
struct inode *node;
struct inode *node2;
identifier i_xtime1 =~ "^i_[acm]time$";
identifier i_xtime2 =~ "^i_[acm]time$";
identifier i_xtime3 =~ "^i_[acm]time$";
struct iattr *attrp;
struct iattr *attrp2;
struct iattr attr ;
identifier ia_xtime1 =~ "^ia_[acm]time$";
identifier ia_xtime2 =~ "^ia_[acm]time$";
struct kstat *stat;
struct kstat stat1;
struct timespec64 ts;
identifier xtime =~ "^[acmb]time$";
expression e;
@@
(
( node->i_xtime2 \| attrp->ia_xtime2 \| attr.ia_xtime2 \) = node->i_xtime1  ;
|
 node->i_xtime2 = \( node2->i_xtime1 \| timespec64_trunc(...) \);
|
 node->i_xtime2 = node->i_xtime1 = node->i_xtime3 = \(ts \| current_time(...) \);
|
 node->i_xtime1 = node->i_xtime3 = \(ts \| current_time(...) \);
|
 stat->xtime = node2->i_xtime1;
|
 stat1.xtime = node2->i_xtime1;
|
( node->i_xtime2 \| attrp->ia_xtime2 \) = attrp->ia_xtime1  ;
|
( attrp->ia_xtime1 \| attr.ia_xtime1 \) = attrp2->ia_xtime2;
|
- e = node->i_xtime1;
+ e = timespec64_to_timespec( node->i_xtime1 );
|
- e = attrp->ia_xtime1;
+ e = timespec64_to_timespec( attrp->ia_xtime1 );
|
node->i_xtime1 = current_time(...);
|
 node->i_xtime2 = node->i_xtime1 = node->i_xtime3 =
- e;
+ timespec_to_timespec64(e);
|
 node->i_xtime1 = node->i_xtime3 =
- e;
+ timespec_to_timespec64(e);
|
- node->i_xtime1 = e;
+ node->i_xtime1 = timespec_to_timespec64(e);
)

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Cc: <anton@tuxera.com>
Cc: <balbi@kernel.org>
Cc: <bfields@fieldses.org>
Cc: <darrick.wong@oracle.com>
Cc: <dhowells@redhat.com>
Cc: <dsterba@suse.com>
Cc: <dwmw2@infradead.org>
Cc: <hch@lst.de>
Cc: <hirofumi@mail.parknet.co.jp>
Cc: <hubcap@omnibond.com>
Cc: <jack@suse.com>
Cc: <jaegeuk@kernel.org>
Cc: <jaharkes@cs.cmu.edu>
Cc: <jslaby@suse.com>
Cc: <keescook@chromium.org>
Cc: <mark@fasheh.com>
Cc: <miklos@szeredi.hu>
Cc: <nico@linaro.org>
Cc: <reiserfs-devel@vger.kernel.org>
Cc: <richard@nod.at>
Cc: <sage@redhat.com>
Cc: <sfrench@samba.org>
Cc: <swhiteho@redhat.com>
Cc: <tj@kernel.org>
Cc: <trond.myklebust@primarydata.com>
Cc: <tytso@mit.edu>
Cc: <viro@zeniv.linux.org.uk>
2018-06-05 16:57:31 -07:00
Eric W. Biederman
0031181c49 fs: Allow superblock owner to replace invalid owners of inodes
Allow users with CAP_SYS_CHOWN over the superblock of a filesystem to
chown files when inode owner is invalid.  Ordinarily the
capable_wrt_inode_uidgid check is sufficient to allow access to files
but when the underlying filesystem has uids or gids that don't map to
the current user namespace it is not enough, so the chown permission
checks need to be extended to allow this case.

Calling chown on filesystem nodes whose uid or gid don't map is
necessary if those nodes are going to be modified as writing back
inodes which contain uids or gids that don't map is likely to cause
filesystem corruption of the uid or gid fields.

Once chown has been called the existing capable_wrt_inode_uidgid
checks are sufficient to allow the owner of a superblock to do anything
the global root user can do with an appropriate set of capabilities.

An ordinary filesystem mountable by a userns root will limit all uids
and gids in s_user_ns or the INVALID_UID and INVALID_GID to flag all
others.  So having this added permission limited to just INVALID_UID
and INVALID_GID is sufficient to handle every case on an ordinary filesystem.

Of the virtual filesystems at least proc is known to set s_user_ns to
something other than &init_user_ns, while at the same time presenting
some files owned by GLOBAL_ROOT_UID.  Those files the mounter of proc
in a user namespace should not be able to chown to get access to.
Limiting the relaxation in permission to just the minimum of allowing
changing INVALID_UID and INVALID_GID prevents problems with cases like
that.

The original version of this patch was written by: Seth Forshee.  I
have rewritten and rethought this patch enough so it's really not the
same thing (certainly it needs a different description), but he
deserves credit for getting out there and getting the conversation
started, and finding the potential gotcha's and putting up with my
semi-paranoid feedback.

Inspired-by: Seth Forshee <seth.forshee@canonical.com>
Acked-by: Seth Forshee <seth.forshee@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
2018-05-24 11:57:18 -05:00
Greg Kroah-Hartman
b24413180f License cleanup: add SPDX GPL-2.0 license identifier to files with no license
Many source files in the tree are missing licensing information, which
makes it harder for compliance tools to determine the correct license.

By default all files without license information are under the default
license of the kernel, which is GPL version 2.

Update the files which contain no license information with the 'GPL-2.0'
SPDX license identifier.  The SPDX identifier is a legally binding
shorthand, which can be used instead of the full boiler plate text.

This patch is based on work done by Thomas Gleixner and Kate Stewart and
Philippe Ombredanne.

How this work was done:

Patches were generated and checked against linux-4.14-rc6 for a subset of
the use cases:
 - file had no licensing information it it.
 - file was a */uapi/* one with no licensing information in it,
 - file was a */uapi/* one with existing licensing information,

Further patches will be generated in subsequent months to fix up cases
where non-standard license headers were used, and references to license
had to be inferred by heuristics based on keywords.

The analysis to determine which SPDX License Identifier to be applied to
a file was done in a spreadsheet of side by side results from of the
output of two independent scanners (ScanCode & Windriver) producing SPDX
tag:value files created by Philippe Ombredanne.  Philippe prepared the
base worksheet, and did an initial spot review of a few 1000 files.

The 4.13 kernel was the starting point of the analysis with 60,537 files
assessed.  Kate Stewart did a file by file comparison of the scanner
results in the spreadsheet to determine which SPDX license identifier(s)
to be applied to the file. She confirmed any determination that was not
immediately clear with lawyers working with the Linux Foundation.

Criteria used to select files for SPDX license identifier tagging was:
 - Files considered eligible had to be source code files.
 - Make and config files were included as candidates if they contained >5
   lines of source
 - File already had some variant of a license header in it (even if <5
   lines).

All documentation files were explicitly excluded.

The following heuristics were used to determine which SPDX license
identifiers to apply.

 - when both scanners couldn't find any license traces, file was
   considered to have no license information in it, and the top level
   COPYING file license applied.

   For non */uapi/* files that summary was:

   SPDX license identifier                            # files
   ---------------------------------------------------|-------
   GPL-2.0                                              11139

   and resulted in the first patch in this series.

   If that file was a */uapi/* path one, it was "GPL-2.0 WITH
   Linux-syscall-note" otherwise it was "GPL-2.0".  Results of that was:

   SPDX license identifier                            # files
   ---------------------------------------------------|-------
   GPL-2.0 WITH Linux-syscall-note                        930

   and resulted in the second patch in this series.

 - if a file had some form of licensing information in it, and was one
   of the */uapi/* ones, it was denoted with the Linux-syscall-note if
   any GPL family license was found in the file or had no licensing in
   it (per prior point).  Results summary:

   SPDX license identifier                            # files
   ---------------------------------------------------|------
   GPL-2.0 WITH Linux-syscall-note                       270
   GPL-2.0+ WITH Linux-syscall-note                      169
   ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause)    21
   ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)    17
   LGPL-2.1+ WITH Linux-syscall-note                      15
   GPL-1.0+ WITH Linux-syscall-note                       14
   ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause)    5
   LGPL-2.0+ WITH Linux-syscall-note                       4
   LGPL-2.1 WITH Linux-syscall-note                        3
   ((GPL-2.0 WITH Linux-syscall-note) OR MIT)              3
   ((GPL-2.0 WITH Linux-syscall-note) AND MIT)             1

   and that resulted in the third patch in this series.

 - when the two scanners agreed on the detected license(s), that became
   the concluded license(s).

 - when there was disagreement between the two scanners (one detected a
   license but the other didn't, or they both detected different
   licenses) a manual inspection of the file occurred.

 - In most cases a manual inspection of the information in the file
   resulted in a clear resolution of the license that should apply (and
   which scanner probably needed to revisit its heuristics).

 - When it was not immediately clear, the license identifier was
   confirmed with lawyers working with the Linux Foundation.

 - If there was any question as to the appropriate license identifier,
   the file was flagged for further research and to be revisited later
   in time.

In total, over 70 hours of logged manual review was done on the
spreadsheet to determine the SPDX license identifiers to apply to the
source files by Kate, Philippe, Thomas and, in some cases, confirmation
by lawyers working with the Linux Foundation.

Kate also obtained a third independent scan of the 4.13 code base from
FOSSology, and compared selected files where the other two scanners
disagreed against that SPDX file, to see if there was new insights.  The
Windriver scanner is based on an older version of FOSSology in part, so
they are related.

Thomas did random spot checks in about 500 files from the spreadsheets
for the uapi headers and agreed with SPDX license identifier in the
files he inspected. For the non-uapi files Thomas did random spot checks
in about 15000 files.

In initial set of patches against 4.14-rc6, 3 files were found to have
copy/paste license identifier errors, and have been fixed to reflect the
correct identifier.

Additionally Philippe spent 10 hours this week doing a detailed manual
inspection and review of the 12,461 patched files from the initial patch
version early this week with:
 - a full scancode scan run, collecting the matched texts, detected
   license ids and scores
 - reviewing anything where there was a license detected (about 500+
   files) to ensure that the applied SPDX license was correct
 - reviewing anything where there was no detection but the patch license
   was not GPL-2.0 WITH Linux-syscall-note to ensure that the applied
   SPDX license was correct

This produced a worksheet with 20 files needing minor correction.  This
worksheet was then exported into 3 different .csv files for the
different types of files to be modified.

These .csv files were then reviewed by Greg.  Thomas wrote a script to
parse the csv files and add the proper SPDX tag to the file, in the
format that the file expected.  This script was further refined by Greg
based on the output to detect more types of files automatically and to
distinguish between header and source .c files (which need different
comment types.)  Finally Greg ran the script using the .csv files to
generate the patches.

Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org>
Reviewed-by: Philippe Ombredanne <pombredanne@nexb.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-11-02 11:10:55 +01:00
Ingo Molnar
3f07c01441 sched/headers: Prepare for new header dependencies before moving code to <linux/sched/signal.h>
We are going to split <linux/sched/signal.h> out of <linux/sched.h>, which
will have to be picked up from other headers and a couple of .c files.

Create a trivial placeholder <linux/sched/signal.h> file that just
maps to <linux/sched.h> to make this patch obviously correct and
bisectable.

Include the new header in the files that are going to need it.

Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2017-03-02 08:42:29 +01:00
Linus Torvalds
101105b171 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull more vfs updates from Al Viro:
 ">rename2() work from Miklos + current_time() from Deepa"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
  fs: Replace current_fs_time() with current_time()
  fs: Replace CURRENT_TIME_SEC with current_time() for inode timestamps
  fs: Replace CURRENT_TIME with current_time() for inode timestamps
  fs: proc: Delete inode time initializations in proc_alloc_inode()
  vfs: Add current_time() api
  vfs: add note about i_op->rename changes to porting
  fs: rename "rename2" i_op to "rename"
  vfs: remove unused i_op->rename
  fs: make remaining filesystems use .rename2
  libfs: support RENAME_NOREPLACE in simple_rename()
  fs: support RENAME_NOREPLACE for local filesystems
  ncpfs: fix unused variable warning
2016-10-10 20:16:43 -07:00
Al Viro
e55f1d1d13 Merge remote-tracking branch 'jk/vfs' into work.misc 2016-10-08 11:06:08 -04:00
Deepa Dinamani
c2050a454c fs: Replace current_fs_time() with current_time()
current_fs_time() uses struct super_block* as an argument.
As per Linus's suggestion, this is changed to take struct
inode* as a parameter instead. This is because the function
is primarily meant for vfs inode timestamps.
Also the function was renamed as per Arnd's suggestion.

Change all calls to current_fs_time() to use the new
current_time() function instead. current_fs_time() will be
deleted.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2016-09-27 21:06:22 -04:00
Jan Kara
030b533c4f fs: Avoid premature clearing of capabilities
Currently, notify_change() clears capabilities or IMA attributes by
calling security_inode_killpriv() before calling into ->setattr. Thus it
happens before any other permission checks in inode_change_ok() and user
is thus allowed to trigger clearing of capabilities or IMA attributes
for any file he can look up e.g. by calling chown for that file. This is
unexpected and can lead to user DoSing a system.

Fix the problem by calling security_inode_killpriv() at the end of
inode_change_ok() instead of from notify_change(). At that moment we are
sure user has permissions to do the requested change.

References: CVE-2015-1350
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
2016-09-22 10:56:19 +02:00
Jan Kara
31051c85b5 fs: Give dentry to inode_change_ok() instead of inode
inode_change_ok() will be resposible for clearing capabilities and IMA
extended attributes and as such will need dentry. Give it as an argument
to inode_change_ok() instead of an inode. Also rename inode_change_ok()
to setattr_prepare() to better relect that it does also some
modifications in addition to checks.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
2016-09-22 10:56:19 +02:00
Miklos Szeredi
f2b20f6ee8 vfs: move permission checking into notify_change() for utimes(NULL)
This fixes a bug where the permission was not properly checked in
overlayfs.  The testcase is ltp/utimensat01.

It is also cleaner and safer to do the permission checking in the vfs
helper instead of the caller.

This patch introduces an additional ia_valid flag ATTR_TOUCH (since
touch(1) is the most obvious user of utimes(NULL)) that is passed into
notify_change whenever the conditions for this special permission checking
mode are met.

Reported-by: Aihua Zhang <zhangaihua1@huawei.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Tested-by: Aihua Zhang <zhangaihua1@huawei.com>
Cc: <stable@vger.kernel.org> # v3.18+
2016-09-16 12:44:20 +02:00
Eric W. Biederman
0bd23d09b8 vfs: Don't modify inodes with a uid or gid unknown to the vfs
When a filesystem outside of init_user_ns is mounted it could have
uids and gids stored in it that do not map to init_user_ns.

The plan is to allow those filesystems to set i_uid to INVALID_UID and
i_gid to INVALID_GID for unmapped uids and gids and then to handle
that strange case in the vfs to ensure there is consistent robust
handling of the weirdness.

Upon a careful review of the vfs and filesystems about the only case
where there is any possibility of confusion or trouble is when the
inode is written back to disk.  In that case filesystems typically
read the inode->i_uid and inode->i_gid and write them to disk even
when just an inode timestamp is being updated.

Which leads to a rule that is very simple to implement and understand
inodes whose i_uid or i_gid is not valid may not be written.

In dealing with access times this means treat those inodes as if the
inode flag S_NOATIME was set.  Reads of the inodes appear safe and
useful, but any write or modification is disallowed.  The only inode
write that is allowed is a chown that sets the uid and gid on the
inode to valid values.  After such a chown the inode is normal and may
be treated as such.

Denying all writes to inodes with uids or gids unknown to the vfs also
prevents several oddball cases where corruption would have occurred
because the vfs does not have complete information.

One problem case that is prevented is attempting to use the gid of a
directory for new inodes where the directories sgid bit is set but the
directories gid is not mapped.

Another problem case avoided is attempting to update the evm hash
after setxattr, removexattr, and setattr.  As the evm hash includeds
the inode->i_uid or inode->i_gid not knowning the uid or gid prevents
a correct evm hash from being computed.  evm hash verification also
fails when i_uid or i_gid is unknown but that is essentially harmless
as it does not cause filesystem corruption.

Acked-by: Seth Forshee <seth.forshee@canonical.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
2016-07-05 15:06:46 -05:00
Seth Forshee
a475acf01f fs: Refuse uid/gid changes which don't map into s_user_ns
Add checks to notify_change to verify that uid and gid changes
will map into the superblock's user namespace. If they do not
fail with -EOVERFLOW.

This is mandatory so that fileystems don't have to even think
of dealing with ia_uid and ia_gid that

--EWB Moved the test from inode_change_ok to notify_change

Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
2016-06-27 21:58:25 -05:00
Al Viro
5955102c99 wrappers for ->i_mutex access
parallel to mutex_{lock,unlock,trylock,is_locked,lock_nested},
inode_foo(inode) being mutex_foo(&inode->i_mutex).

Please, use those for access to ->i_mutex; over the coming cycle
->i_mutex will become rwsem, with ->lookup() done with it held
only shared.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2016-01-22 18:04:28 -05:00
Andy Lutomirski
23adbe12ef fs,userns: Change inode_capable to capable_wrt_inode_uidgid
The kernel has no concept of capabilities with respect to inodes; inodes
exist independently of namespaces.  For example, inode_capable(inode,
CAP_LINUX_IMMUTABLE) would be nonsense.

This patch changes inode_capable to check for uid and gid mappings and
renames it to capable_wrt_inode_uidgid, which should make it more
obvious what it does.

Fixes CVE-2014-4014.

Cc: Theodore Ts'o <tytso@mit.edu>
Cc: Serge Hallyn <serge.hallyn@ubuntu.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Dave Chinner <david@fromorbit.com>
Cc: stable@vger.kernel.org
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2014-06-10 13:57:22 -07:00
Christoph Hellwig
dff6efc326 fs: fix iversion handling
Currently notify_change directly updates i_version for size updates,
which not only is counter to how all other fields are updated through
struct iattr, but also breaks XFS, which need inode updates to happen
under its own lock, and synchronized to the structure that gets written
to the log.

Remove the update in the common code, and it to btrfs and ext4,
XFS already does a proper updaste internally and currently gets a
double update with the existing code.

IMHO this is 3.13 and -stable material and should go in through the XFS
tree.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
Acked-by: Jan Kara <jack@suse.cz>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Chris Mason <clm@fb.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
2013-12-05 16:36:21 -06:00
J. Bruce Fields
27ac0ffeac locks: break delegations on any attribute modification
NFSv4 uses leases to guarantee that clients can cache metadata as well
as data.

Cc: Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
Cc: David Howells <dhowells@redhat.com>
Cc: Tyler Hicks <tyhicks@canonical.com>
Cc: Dustin Kirkland <dustin.kirkland@gazzang.com>
Acked-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2013-11-09 00:16:44 -05:00
Eric W. Biederman
7fa294c899 userns: Allow chown and setgid preservation
- Allow chown if CAP_CHOWN is present in the current user namespace
  and the uid of the inode maps into the current user namespace, and
  the destination uid or gid maps into the current user namespace.

- Allow perserving setgid when changing an inode if CAP_FSETID is
  present in the current user namespace and the owner of the file has
  a mapping into the current user namespace.

Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
2012-11-20 04:17:24 -08:00
Mimi Zohar
9957a5043e ima: add inode_post_setattr call
Changing an inode's metadata may result in our not needing to appraise
the file.  In such cases, we must remove 'security.ima'.

Changelog v1:
- use ima_inode_post_setattr() stub function, if IMA_APPRAISE not configured

Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
Acked-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Dmitry Kasatkin <dmitry.kasatkin@intel.com>
2012-09-07 14:57:46 -04:00
Andrew Morton
c4107b3097 notify_change(): check that i_mutex is held
Cc: Djalal Harouni <tixxdz@opendz.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2012-07-14 16:35:42 +04:00
Dmitry Kasatkin
799243a389 vfs: increment iversion when a file is truncated
When a file is truncated with truncate()/ftruncate() and then closed,
iversion is not updated.  This patch uses ATTR_SIZE flag as an indication
to increment iversion.

Mimi said:

On fput(), i_version is used to detect and flag files that have changed
and need to be re-measured in the IMA measurement policy.  When a file
is truncated with truncate()/ftruncate() and then closed, i_version is
not updated.  As a result, although the file has changed, it will not be
re-measured and added to the IMA measurement list on subsequent access.

Signed-off-by: Dmitry Kasatkin <dmitry.kasatkin@intel.com>
Acked-by: Mimi Zohar <zohar@us.ibm.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2012-05-30 21:04:53 -04:00
Eric W. Biederman
8e96e3b7b8 userns: Use uid_eq gid_eq helpers when comparing kuids and kgids in the vfs
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
2012-05-03 03:29:34 -07:00
Paul Gortmaker
630d9c4727 fs: reduce the use of module.h wherever possible
For files only using THIS_MODULE and/or EXPORT_SYMBOL, map
them onto including export.h -- or if the file isn't even
using those, then just delete the include.  Fix up any implicit
include dependencies that were being masked by module.h along
the way.

Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
2012-02-28 19:31:58 -05:00
Al Viro
8d334acdd2 switch is_sxid() to umode_t
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2012-01-03 22:55:11 -05:00
James Morris
5a2f3a02ae Merge branch 'next-evm' of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/ima-2.6 into next
Conflicts:
	fs/attr.c

Resolve conflict manually.

Signed-off-by: James Morris <jmorris@namei.org>
2011-08-09 10:31:03 +10:00
Christoph Hellwig
562c72aa57 fs: move inode_dio_wait calls into ->setattr
Let filesystems handle waiting for direct I/O requests themselves instead
of doing it beforehand.  This means filesystem-specific locks to prevent
new dio referenes from appearing can be held.  This is important to allow
generalizing i_dio_count to non-DIO_LOCKING filesystems.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2011-07-20 20:47:47 -04:00
Christoph Hellwig
bd5fe6c5eb fs: kill i_alloc_sem
i_alloc_sem is a rather special rw_semaphore.  It's the last one that may
be released by a non-owner, and it's write side is always mirrored by
real exclusion.  It's intended use it to wait for all pending direct I/O
requests to finish before starting a truncate.

Replace it with a hand-grown construct:

 - exclusion for truncates is already guaranteed by i_mutex, so it can
   simply fall way
 - the reader side is replaced by an i_dio_count member in struct inode
   that counts the number of pending direct I/O requests.  Truncate can't
   proceed as long as it's non-zero
 - when i_dio_count reaches non-zero we wake up a pending truncate using
   wake_up_bit on a new bit in i_flags
 - new references to i_dio_count can't appear while we are waiting for
   it to read zero because the direct I/O count always needs i_mutex
   (or an equivalent like XFS's i_iolock) for starting a new operation.

This scheme is much simpler, and saves the space of a spinlock_t and a
struct list_head in struct inode (typically 160 bits on a non-debug 64-bit
system).

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2011-07-20 20:47:46 -04:00
Mimi Zohar
975d294373 evm: imbed evm_inode_post_setattr
Changing the inode's metadata may require the 'security.evm' extended
attribute to be re-calculated and updated.

Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
Acked-by: Serge Hallyn <serge.hallyn@ubuntu.com>
2011-07-18 12:29:44 -04:00
Andi Kleen
69b4573296 Cache xattr security drop check for write v2
Some recent benchmarking on btrfs showed that a major scaling bottleneck
on large systems on btrfs is currently the xattr lookup on every write.

Why xattr lookup on every write I hear you ask?

write wants to drop suid and security related xattrs that could set o
capabilities for executables.  To do that it currently looks up
security.capability on EVERY write (even for non executables) to decide
whether to drop it or not.

In btrfs this causes an additional tree walk, hitting some per file system
locks and quite bad scalability. In a simple read workload on a 8S
system I saw over 90% CPU time in spinlocks related to that.

Chris Mason tells me this is also a problem in ext4, where it hits
the global mbcache lock.

This patch adds a simple per inode to avoid this problem.  We only
do the lookup once per file and then if there is no xattr cache
the decision. All xattr changes clear the flag.

I also used the same flag to avoid the suid check, although
that one is pretty cheap.

A file system can also set this flag when it creates the inode,
if it has a cheap way to do so.  This is done for some common file systems
in followon patches.

With this patch a major part of the lock contention disappears
for btrfs. Some testing on smaller systems didn't show significant
performance changes, but at least it helps the larger systems
and is generally more efficient.

v2: Rename is_sgid. add file system helper.
Cc: chris.mason@oracle.com
Cc: josef@redhat.com
Cc: viro@zeniv.linux.org.uk
Cc: agruen@linbit.com
Cc: Serge E. Hallyn <serue@us.ibm.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2011-05-28 12:02:09 -04:00
Lucas De Marchi
25985edced Fix common misspellings
Fixes generated by 'codespell' and manually reviewed.

Signed-off-by: Lucas De Marchi <lucas.demarchi@profusion.mobi>
2011-03-31 11:26:23 -03:00
Serge E. Hallyn
2e14967075 userns: rename is_owner_or_cap to inode_owner_or_capable
And give it a kernel-doc comment.

[akpm@linux-foundation.org: btrfs changed in linux-next]
Signed-off-by: Serge E. Hallyn <serge.hallyn@canonical.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Daniel Lezcano <daniel.lezcano@free.fr>
Acked-by: David Howells <dhowells@redhat.com>
Cc: James Morris <jmorris@namei.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-03-23 19:47:13 -07:00
Christoph Hellwig
2c27c65ed0 check ATTR_SIZE contraints in inode_change_ok
Make sure we check the truncate constraints early on in ->setattr by adding
those checks to inode_change_ok.  Also clean up and document inode_change_ok
to make this obvious.

As a fallout we don't have to call inode_newsize_ok from simple_setsize and
simplify it down to a truncate_setsize which doesn't return an error.  This
simplifies a lot of setattr implementations and means we use truncate_setsize
almost everywhere.  Get rid of fat_setsize now that it's trivial and mark
ext2_setsize static to make the calling convention obvious.

Keep the inode_newsize_ok in vmtruncate for now as all callers need an
audit for its removal anyway.

Note: setattr code in ecryptfs doesn't call inode_change_ok at all and
needs a deeper audit, but that is left for later.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2010-08-09 16:47:39 -04:00
Christoph Hellwig
1025774ce4 remove inode_setattr
Replace inode_setattr with opencoded variants of it in all callers.  This
moves the remaining call to vmtruncate into the filesystem methods where it
can be replaced with the proper truncate sequence.

In a few cases it was obvious that we would never end up calling vmtruncate
so it was left out in the opencoded variant:

 spufs: explicitly checks for ATTR_SIZE earlier
 btrfs,hugetlbfs,logfs,dlmfs: explicitly clears ATTR_SIZE earlier
 ufs: contains an opencoded simple_seattr + truncate that sets the filesize just above

In addition to that ncpfs called inode_setattr with handcrafted iattrs,
which allowed to trim down the opencoded variant.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2010-08-09 16:47:37 -04:00