Linux 5.4.104
[email protected]
maintainerFrom: Greg Kroah-Hartman <[email protected]>
I'm announcing the release of the 5.4.104 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm64/kernel/ptrace.c | 2 drivers/base/power/runtime.c | 62 ++++++++++++++++------------ drivers/block/rsxx/core.c | 8 ++- drivers/char/tpm/tpm_tis_core.c | 30 +++++++++++-- drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 4 - drivers/infiniband/hw/mlx5/devx.c | 4 + drivers/infiniband/sw/rxe/Kconfig | 1 drivers/md/dm-bufio.c | 4 + drivers/md/dm-verity-fec.c | 23 +++++----- drivers/net/ethernet/realtek/r8169_main.c | 2 fs/btrfs/delayed-inode.c | 2 fs/btrfs/file.c | 5 +- fs/btrfs/ioctl.c | 19 ++++++++ fs/btrfs/raid56.c | 58 +++++++++++--------------- fs/btrfs/xattr.c | 31 ++++++++++++-- include/crypto/hash.h | 8 +-- include/linux/crypto.h | 9 ++-- include/sound/intel-nhlt.h | 5 ++ scripts/recordmcount.c | 2 sound/hda/intel-nhlt.c | 54 ++++++++++++++++++++---- sound/pci/ctxfi/cthw20k2.c | 2 tools/usb/usbip/libsrc/usbip_host_common.c | 2 23 files changed, 231 insertions(+), 108 deletions(-)
Antonio Borneo (1):
usbip: tools: fix build error for multiple definition
Ard Biesheuvel (1):
crypto - shash: reduce minimum alignment of shash_desc structure
Chen Jun (1):
ftrace: Have recordmcount use w8 to read relp->r_info in arm64_is_fake_mcount
Colin Ian King (1):
ALSA: ctxfi: cthw20k2: fix mask on conf to allow 4 bits
Dan Carpenter (2):
btrfs: validate qgroup inherit for SNAP_CREATE_V2 ioctl
rsxx: Return -EFAULT if copy_to_user() fails
David Sterba (1):
btrfs: raid56: simplify tracking of Q stripe presence
Filipe Manana (1):
btrfs: fix warning when creating a directory with smack enabled
Greg Kroah-Hartman (1):
Linux 5.4.104
Heiner Kallweit (1):
r8169: fix resuming from suspend on RTL8105e if machine runs on battery
Ira Weiny (1):
btrfs: fix raid6 qstripe kmap
Jarkko Sakkinen (1):
tpm, tpm_tis: Decorate tpm_get_timeouts() with request_locality()
Julian Braha (1):
RDMA/rxe: Fix missing kconfig dependency on CRYPTO
Kevin Wang (1):
drm/amdgpu: fix parameter error of RREG32_PCIE() in amdgpu_regs_pcie
Lukasz Majczak (1):
tpm, tpm_tis: Decorate tpm_tis_gen_interrupt() with request_locality()
Mikulas Patocka (1):
dm bufio: subtract the number of initial sectors in dm_bufio_get_device_size
Milan Broz (1):
dm verity: fix FEC for RS roots unaligned to block size
Nikolay Borisov (2):
btrfs: free correct amount of space in btrfs_delayed_inode_reserve_metadata
btrfs: unlock extents in btrfs_zero_range in case of quota reservation errors
Pierre-Louis Bossart (1):
ALSA: hda: intel-nhlt: verify config type
Rafael J. Wysocki (1):
PM: runtime: Update device status before letting suppliers suspend
Timothy E Baldwin (1):
arm64: ptrace: Fix seccomp of traced syscall -1 (NO_SYSCALL)
YueHaibing (1):
IB/mlx5: Add missing error code
[email protected]
maintainerFrom: Greg Kroah-Hartman <[email protected]>
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 103 +SUBLEVEL = 104 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm64/kernel/ptrace.c +1 -1
@@ -1844,7 +1844,7 @@ int syscall_trace_enter(struct pt_regs *regs)if (flags & (_TIF_SYSCALL_EMU | _TIF_SYSCALL_TRACE)) {tracehook_report_syscall (regs,PTRACE_SYSCALL_ENTER ); -if (!in_syscall (regs) || (flags & _TIF_SYSCALL_EMU)) +if (flags & _TIF_SYSCALL_EMU)return -1 ; }
drivers/base/power/runtime.c +37 -25
83 lines not on this page · raw message
drivers/block/rsxx/core.c +5 -3
@@ -165,15 +165,17 @@ static ssize_t rsxx_cram_read(struct file *fp, char __user *ubuf, {struct rsxx_cardinfo *card =file_inode (fp)->i_private;char *buf; -ssize_t st; +int st; buf =kzalloc (cnt,GFP_KERNEL );if (!buf)return -ENOMEM ; st =rsxx_creg_read (card,CREG_ADD_CRAM + (u32)*ppos, cnt, buf,1 ); -if (!st) - st =copy_to_user (ubuf, buf, cnt); +if (!st) { +if (copy_to_user (ubuf, buf, cnt)) + st = -EFAULT ; + }kfree (buf);if (st)return st;
drivers/char/tpm/tpm_tis_core.c +25 -5
@@ -618,12 +618,22 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip)const char *desc ="attempting to generate an interrupt" ;u32 cap2;cap_t cap; +int ret; +/* TPM 2.0 */ if (chip->flags &TPM_CHIP_FLAG_TPM2 )return tpm2_get_tpm_pt (chip,0x100 , &cap2, desc); -else -return tpm1_getcap (chip,TPM_CAP_PROP_TIS_TIMEOUT , &cap, desc, -0 ); + +/* TPM 1.2 */ + ret =request_locality (chip,0 ); +if (ret <0 ) +return ret; + + ret =tpm1_getcap (chip,TPM_CAP_PROP_TIS_TIMEOUT , &cap, desc,0 ); + +release_locality (chip,0 ); + +return ret; }/* Register the IRQ and issue a command that will cause an interrupt. If an
@@ -929,11 +939,21 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,init_waitqueue_head (&priv->read_queue);init_waitqueue_head (&priv->int_queue);if (irq !=-1 ) { -/* Before doing irq testing issue a command to the TPM in polling mode +/* +* Before doing irq testing issue a command to the TPM in polling mode * to make sure it works. May as well use that command to set the * proper timeouts for the driver. */ -if (tpm_get_timeouts (chip)) { + + rc =request_locality (chip,0 ); +if (rc <0 ) + goto out_err; + + rc =tpm_get_timeouts (chip); + +release_locality (chip,0 ); + +if (rc) {dev_err (dev,"Could not get TPM timeouts and durations\n" ); rc = -ENODEV ; goto out_err;
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +2 -2
@@ -240,7 +240,7 @@ static ssize_t amdgpu_debugfs_regs_pcie_read(struct file *f, char __user *buf,while (size) {uint32_t value; - value =RREG32_PCIE (*pos >>2 ); + value =RREG32_PCIE (*pos); r =put_user (value, (uint32_t *)buf);if (r)return r;
@@ -283,7 +283,7 @@ static ssize_t amdgpu_debugfs_regs_pcie_write(struct file *f, const char __userif (r)return r; -WREG32_PCIE (*pos >>2 , value); +WREG32_PCIE (*pos, value); result +=4 ; buf +=4 ;
drivers/infiniband/hw/mlx5/devx.c +3 -1
@@ -2022,8 +2022,10 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT)( num_alloc_xa_entries++; event_sub =kzalloc (sizeof (*event_sub),GFP_KERNEL ); -if (!event_sub) +if (!event_sub) { + err = -ENOMEM ; goto err; + }list_add_tail (&event_sub->event_list, &sub_list);if (use_eventfd) {
drivers/infiniband/sw/rxe/Kconfig +1 -0
@@ -4,6 +4,7 @@ config RDMA_RXE depends on INET && PCI && INFINIBAND depends on INFINIBAND_VIRT_DMA select NET_UDP_TUNNEL + select CRYPTO select CRYPTO_CRC32 select DMA_VIRT_OPS ---help---
drivers/md/dm-bufio.c +4 -0
@@ -1438,6 +1438,10 @@ EXPORT_SYMBOL_GPL(dm_bufio_get_block_size);sector_t dm_bufio_get_device_size (struct dm_bufio_client *c) {sector_t s =i_size_read (c->bdev->bd_inode) >>SECTOR_SHIFT ; +if (s >= c->start) + s -= c->start; +else + s =0 ;if (likely (c->sectors_per_block_bits >=0 )) s >>= c->sectors_per_block_bits;else
drivers/md/dm-verity-fec.c +12 -11
@@ -61,19 +61,18 @@ static int fec_decode_rs8(struct dm_verity *v, struct dm_verity_fec_io *fio,static u8 *fec_read_parity (struct dm_verity *v,u64 rsb,int index,unsigned *offset,struct dm_buffer **buf) { -u64 position, block; +u64 position, block, rem;u8 *res; position = (index + rsb) * v->fec->roots; - block = position >> v->data_dev_block_bits; - *offset = (unsigned )(position - (block << v->data_dev_block_bits)); + block =div64_u64_rem (position, v->fec->roots <<SECTOR_SHIFT , &rem); + *offset = (unsigned )rem; - res =dm_bufio_read (v->fec->bufio, v->fec->start + block, buf); + res =dm_bufio_read (v->fec->bufio, block, buf);if (IS_ERR (res)) {DMERR ("%s: FEC %llu: parity read failed (block %llu): %ld" , v->data_dev->name, (unsigned long long )rsb, - (unsigned long long )(v->fec->start + block), -PTR_ERR (res)); + (unsigned long long )block,PTR_ERR (res)); *buf =NULL ; }
@@ -155,7 +154,7 @@ static int fec_decode_bufs(struct dm_verity *v, struct dm_verity_fec_io *fio,/* read the next block when we run out of parity bytes */ offset += v->fec->roots; -if (offset >=1 << v->data_dev_block_bits) { +if (offset >= v->fec->roots <<SECTOR_SHIFT ) {dm_bufio_release (buf); par =fec_read_parity (v, rsb, block_offset, &offset, &buf);
@@ -674,7 +673,7 @@ int verity_fec_ctr(struct dm_verity *v) {struct dm_verity_fec *f = v->fec;struct dm_target *ti = v->ti; -u64 hash_blocks; +u64 hash_blocks, fec_blocks;int ret;if (!verity_fec_is_enabled (v)) {
@@ -744,15 +743,17 @@ int verity_fec_ctr(struct dm_verity *v) } f->bufio =dm_bufio_client_create (f->dev->bdev, -1 << v->data_dev_block_bits, + f->roots <<SECTOR_SHIFT ,1 ,0 ,NULL ,NULL );if (IS_ERR (f->bufio)) { ti->error ="Cannot initialize FEC bufio client" ;return PTR_ERR (f->bufio); } -if (dm_bufio_get_device_size (f->bufio) < - ((f->start + f->rounds * f->roots) >> v->data_dev_block_bits)) { +dm_bufio_set_sector_offset (f->bufio, f->start << (v->data_dev_block_bits -SECTOR_SHIFT )); + + fec_blocks =div64_u64 (f->rounds * f->roots, v->fec->roots <<SECTOR_SHIFT ); +if (dm_bufio_get_device_size (f->bufio) < fec_blocks) { ti->error ="FEC device is too small" ;return -E2BIG ; }
drivers/net/ethernet/realtek/r8169_main.c +2 -0
@@ -3959,6 +3959,7 @@ static void rtl_pll_power_down(struct rtl8169_private *tp)switch (tp->mac_version) { case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_26: + case RTL_GIGA_MAC_VER_29 ... RTL_GIGA_MAC_VER_30: case RTL_GIGA_MAC_VER_32 ... RTL_GIGA_MAC_VER_33:case RTL_GIGA_MAC_VER_37 :case RTL_GIGA_MAC_VER_39 :
@@ -3989,6 +3990,7 @@ static void rtl_pll_power_up(struct rtl8169_private *tp) {switch (tp->mac_version) { case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_26: + case RTL_GIGA_MAC_VER_29 ... RTL_GIGA_MAC_VER_30: case RTL_GIGA_MAC_VER_32 ... RTL_GIGA_MAC_VER_33:case RTL_GIGA_MAC_VER_37 :case RTL_GIGA_MAC_VER_39 :
fs/btrfs/delayed-inode.c +1 -1
@@ -649,7 +649,7 @@ static int btrfs_delayed_inode_reserve_metadata(btrfs_ino (inode), num_bytes, 1); }else { -btrfs_qgroup_free_meta_prealloc (root, fs_info->nodesize); +btrfs_qgroup_free_meta_prealloc (root, num_bytes); }return ret; }
fs/btrfs/file.c +4 -1
@@ -3151,8 +3151,11 @@ static int btrfs_zero_range(struct inode *inode, goto out; ret =btrfs_qgroup_reserve_data (inode, &data_reserved, alloc_start, bytes_to_reserve); -if (ret) +if (ret) { +unlock_extent_cached (&BTRFS_I (inode)->io_tree, lockstart, + lockend, &cached_state); goto out; + } ret = btrfs_prealloc_file_range(inode, mode, alloc_start, alloc_end - alloc_start, i_blocksize(inode),
fs/btrfs/ioctl.c +18 -1
@@ -1907,7 +1907,10 @@ static noinline int btrfs_ioctl_snap_create_v2(struct file *file,if (vol_args->flags &BTRFS_SUBVOL_RDONLY ) readonly = true;if (vol_args->flags &BTRFS_SUBVOL_QGROUP_INHERIT ) { -if (vol_args->size >PAGE_SIZE ) { +u64 nums; + +if (vol_args->size <sizeof (*inherit) || + vol_args->size >PAGE_SIZE ) { ret = -EINVAL ; goto free_args; }
@@ -1916,6 +1919,20 @@ static noinline int btrfs_ioctl_snap_create_v2(struct file *file, ret =PTR_ERR (inherit); goto free_args; } + +if (inherit->num_qgroups >PAGE_SIZE || + inherit->num_ref_copies >PAGE_SIZE || + inherit->num_excl_copies >PAGE_SIZE ) { + ret = -EINVAL ; + goto free_inherit; + } + + nums = inherit->num_qgroups +2 * inherit->num_ref_copies + +2 * inherit->num_excl_copies; +if (vol_args->size !=struct_size (inherit, qgroups, nums)) { + ret = -EINVAL ; + goto free_inherit; + } } ret = btrfs_ioctl_snap_create_transid(file, vol_args->name,
fs/btrfs/raid56.c +25 -33
122 lines not on this page · raw message
fs/btrfs/xattr.c +27 -4
@@ -227,11 +227,33 @@ int btrfs_setxattr_trans(struct inode *inode, const char *name, {struct btrfs_root *root =BTRFS_I (inode)->root;struct btrfs_trans_handle *trans; +const bool start_trans = (current->journal_info ==NULL );int ret; - trans =btrfs_start_transaction (root,2 ); -if (IS_ERR (trans)) -return PTR_ERR (trans); +if (start_trans) { +/* +* 1 unit for inserting/updating/deleting the xattr +* 1 unit for the inode item update +*/ + trans =btrfs_start_transaction (root,2 ); +if (IS_ERR (trans)) +return PTR_ERR (trans); + }else { +/* +* This can happen when smack is enabled and a directory is being +* created. It happens through d_instantiate_new(), which calls +* smack_d_instantiate(), which in turn calls __vfs_setxattr() to +* set the transmute xattr (XATTR_NAME_SMACKTRANSMUTE) on the +* inode. We have already reserved space for the xattr and inode +* update at btrfs_mkdir(), so just use the transaction handle. +* We don't join or start a transaction, as that will reset the +* block_rsv of the handle and trigger a warning for the start +* case. +*/ +ASSERT (strncmp (name,XATTR_SECURITY_PREFIX , +XATTR_SECURITY_PREFIX_LEN ) ==0 ); + trans = current->journal_info; + } ret =btrfs_setxattr (trans, inode, name, value, size, flags);if (ret)
@@ -242,7 +264,8 @@ int btrfs_setxattr_trans(struct inode *inode, const char *name, ret =btrfs_update_inode (trans, root, inode);BUG_ON (ret); out: -btrfs_end_transaction (trans); +if (start_trans) +btrfs_end_transaction (trans);return ret; }
include/crypto/hash.h +4 -4
@@ -141,7 +141,7 @@ struct ahash_alg {struct shash_desc {struct crypto_shash *tfm; - void *__ctx[] CRYPTO_MINALIGN_ATTR; +void *__ctx[]__aligned(ARCH_SLAB_MINALIGN) ; };#define HASH_MAX_DIGESTSIZE 64
@@ -154,9 +154,9 @@ struct shash_desc {#define HASH_MAX_STATESIZE 512 -#define SHASH_DESC_ON_STACK (shash, ctx) \ - char __##shash##_desc[sizeof(struct shash_desc) + \ - HASH_MAX_DESCSIZE] CRYPTO_MINALIGN_ATTR; \ +#define SHASH_DESC_ON_STACK (shash, ctx) \ + char __##shash##_desc[sizeof(struct shash_desc) + HASH_MAX_DESCSIZE] \ + __aligned(__alignof__(struct shash_desc)); \ struct shash_desc *shash = (struct shash_desc *)__##shash##_desc/**
include/linux/crypto.h +6 -3
@@ -130,9 +130,12 @@* The macro CRYPTO_MINALIGN_ATTR (along with the void * type in the actual * declaration) is used to ensure that the crypto_tfm context structure is * aligned correctly for the given architecture so that there are no alignment -* faults for C data types. In particular, this is required on platforms such -* as arm where pointers are 32-bit aligned but there are data types such as -* u64 which require 64-bit alignment. +* faults for C data types. On architectures that support non-cache coherent +* DMA, such as ARM or arm64, it also takes into account the minimal alignment +* that is required to ensure that the context struct member does not share any +* cachelines with the rest of the struct. This is needed to ensure that cache +* maintenance for non-coherent DMA (cache invalidation in particular) does not +* affect data that may be accessed by the CPU concurrently. */ #define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN
include/sound/intel-nhlt.h +5 -0
@@ -112,6 +112,11 @@ struct nhlt_vendor_dmic_array_config {/* TODO add vendor mic config */ } __packed; +enum { +NHLT_CONFIG_TYPE_GENERIC =0 , +NHLT_CONFIG_TYPE_MIC_ARRAY =1 +}; +enum {NHLT_MIC_ARRAY_2CH_SMALL =0xa ,NHLT_MIC_ARRAY_2CH_BIG =0xb ,
scripts/recordmcount.c +1 -1
@@ -438,7 +438,7 @@ static int arm_is_fake_mcount(Elf32_Rel const *rp)static int arm64_is_fake_mcount (Elf64_Rel const *rp) { -return ELF64_R_TYPE (w (rp->r_info)) !=R_AARCH64_CALL26 ; +return ELF64_R_TYPE (w8 (rp->r_info)) !=R_AARCH64_CALL26 ; }/* 64-bit EM_MIPS has weird ELF64_Rela.r_info.
sound/hda/intel-nhlt.c +45 -9
76 lines not on this page · raw message
sound/pci/ctxfi/cthw20k2.c +1 -1
@@ -991,7 +991,7 @@ static int daio_mgr_dao_init(void *blk, unsigned int idx, unsigned int conf)if (idx <4 ) {/* S/PDIF output */ -switch ((conf &0x7 )) { +switch ((conf &0xf )) {case 1 :set_field (&ctl->txctl[idx],ATXCTL_NUC ,0 );break ;
tools/usb/usbip/libsrc/usbip_host_common.c +1 -1
@@ -23,7 +23,7 @@#include "list.h" #include "sysfs_utils.h" -struct udev *udev_context; +extern struct udev *udev_context;static int32_t read_attr_usbip_status (struct usbip_usb_device *udev) {