5.15.14-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 5.15.14-rc1 review
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.15.14-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-5.15.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 5.15.14-rc1
Evan Quan <[email protected]>
drm/amd/pm: keep the BACO feature enabled for suspend
Len Brown <[email protected]>
Revert "drm/amdgpu: stop scheduler when calling hw_fini (v2)"
Nikita Travkin <[email protected]>
Input: zinitix - make sure the IRQ is allocated before it gets enabled
Phil Elwell <[email protected]>
ARM: dts: gpio-ranges property is now required
Mike Kravetz <[email protected]>
userfaultfd/selftests: fix hugetlb area allocations
Tamir Duberstein <[email protected]>
ipv6: raw: check passed optlen before reading
Lai, Derek <[email protected]>
drm/amd/display: Added power down for DCN10
Charlene Liu <[email protected]>
drm/amd/display: fix B0 TMDS deepcolor no dislay issue
wolfgang huang <[email protected]>
mISDN: change function names to avoid conflicts
Evan Quan <[email protected]>
drm/amdgpu: put SMU into proper state on runpm suspending for BOCO capable platform
Alex Deucher <[email protected]>
drm/amdgpu: always reset the asic in suspend (v2)
Prike Liang <[email protected]>
drm/amd/pm: skip setting gfx cgpg in the s0ix suspend-resume
Zekun Shen <[email protected]>
atlantic: Fix buff_ring OOB in aq_ring_rx_clean
yangxingwu <[email protected]>
net: udp: fix alignment problem in udp4_seq_show()
William Zhao <[email protected]>
ip6_vti: initialize __ip6_tnl_parm struct in vti6_siocdevprivate
Lixiaokeng <[email protected]>
scsi: libiscsi: Fix UAF in iscsi_conn_get_param()/iscsi_conn_teardown()
Chunfeng Yun <[email protected]>
usb: mtu3: fix interval value for intr and isoc
Lijo Lazar <[email protected]>
drm/amd/pm: Fix xgmi link control on aldebaran
Christian König <[email protected]>
drm/amdgpu: fix dropped backing store handling in amdgpu_dma_buf_move_notify
Luiz Sampaio <[email protected]>
auxdisplay: charlcd: checking for pointer reference before dereferencing
David Ahern <[email protected]>
ipv6: Do cleanup if attribute validation fails in multipath route
David Ahern <[email protected]>
ipv6: Continue processing multipath route even if gateway attribute is invalid
Yauhen Kharuzhy <[email protected]>
power: bq25890: Enable continuous conversion for ADC at charging
Alex Deucher <[email protected]>
drm/amdgpu: disable runpm if we are the primary adapter
Alex Deucher <[email protected]>
fbdev: fbmem: add a helper to determine if an aperture is used by a fw fb
Hangyu Hua <[email protected]>
phonet: refcount leak in pep_sock_accep
Haimin Zhang <[email protected]>
net ticp:fix a kernel-infoleak in __tipc_sendmsg()
Steven Lee <[email protected]>
gpio: gpio-aspeed-sgpio: Fix wrong hwirq base in irq handler
Thomas Toye <[email protected]>
rndis_host: support Hytera digital radios
Heiner Kallweit <[email protected]>
reset: renesas: Fix Runtime PM usage
Nathan Chancellor <[email protected]>
power: reset: ltc2952: Fix use of floating point literals
Linus Walleij <[email protected]>
power: supply: core: Break capacity loop
Darrick J. Wong <[email protected]>
xfs: map unwritten blocks in XFS_IOC_{ALLOC,FREE}SP just like fallocate
Chris Packham <[email protected]>
i2c: mpc: Avoid out of bounds memory access
Wolfram Sang <[email protected]>
Revert "i2c: core: support bus regulator controlling in adapter"
Tejun Heo <[email protected]>
cgroup: Use open-time cgroup namespace for process migration perm checks
Tejun Heo <[email protected]>
cgroup: Allocate cgroup_file_ctx for kernfs_open_file->priv
Tejun Heo <[email protected]>
cgroup: Use open-time credentials for process migraton perm checks
Nikunj A Dadhania <[email protected]>
KVM: x86: Check for rmaps allocation
Qiuxu Zhuo <[email protected]>
EDAC/i10nm: Release mdev/mbase when failing to detect HBM
Song Liu <[email protected]>
md/raid1: fix missing bitmap update w/o WriteMostly devices
Arthur Kiyanovski <[email protected]>
net: ena: Fix error handling when calculating max IO queues number
Arthur Kiyanovski <[email protected]>
net: ena: Fix wrong rx request id by resetting device
Arthur Kiyanovski <[email protected]>
net: ena: Fix undefined state when tx request id is out of bounds
Eric Dumazet <[email protected]>
sch_qfq: prevent shift-out-of-bounds in qfq_init_qdisc
Linus Lüssing <[email protected]>
batman-adv: mcast: don't send link-local multicast to mcast routers
Xin Long <[email protected]>
sctp: hold endpoint before calling cb in sctp_transport_lookup_process
Jianguo Wu <[email protected]>
selftests: net: udpgro_fwd.sh: explicitly checking the available ping feature
David Ahern <[email protected]>
lwtunnel: Validate RTA_ENCAP_TYPE attribute length
David Ahern <[email protected]>
ipv6: Check attribute length for RTA_GATEWAY when deleting multipath route
David Ahern <[email protected]>
ipv6: Check attribute length for RTA_GATEWAY in multipath route
David Ahern <[email protected]>
ipv4: Check attribute length for RTA_FLOW in multipath route
David Ahern <[email protected]>
ipv4: Check attribute length for RTA_GATEWAY in multipath route
Jiri Olsa <[email protected]>
ftrace/samples: Add missing prototypes direct functions
Jedrzej Jagielski <[email protected]>
i40e: Fix incorrect netdev's real number of RX/TX queues
Mateusz Palczewski <[email protected]>
i40e: Fix for displaying message regarding NVM version
Di Zhu <[email protected]>
i40e: fix use-after-free in i40e_sync_filters_subtask()
Martin Habets <[email protected]>
sfc: The RX page_ring is optional
Pavel Skripkin <[email protected]>
mac80211: mesh: embedd mesh_paths and mpp_paths into ieee80211_if_mesh
Tom Rix <[email protected]>
mac80211: initialize variable have_higher_than_11mbit
Jiasheng Jiang <[email protected]>
RDMA/uverbs: Check for null return of kmalloc_array
Christoph Hellwig <[email protected]>
netrom: fix copying in user data in nr_setsockopt
Aaron Ma <[email protected]>
Revert "net: usb: r8152: Add MAC passthrough support for more Lenovo Docks"
Leon Romanovsky <[email protected]>
RDMA/core: Don't infoleak GRH fields
Karen Sornek <[email protected]>
iavf: Fix limit of total number of queues to active queues of VF
Mateusz Palczewski <[email protected]>
i40e: Fix to not show opcode msg on unsuccessful VF MAC change
Pavel Skripkin <[email protected]>
ieee802154: atusb: fix uninit value in atusb_set_extended_addr
Maor Gottlieb <[email protected]>
Revert "RDMA/mlx5: Fix releasing unallocated memory in dereg MR flow"
Naveen N. Rao <[email protected]>
tracing: Tag trace_percpu_buffer as a percpu pointer
Naveen N. Rao <[email protected]>
tracing: Fix check for trace_percpu_buffer validity in get_trace_buf()
Shuah Khan <[email protected]>
selftests: x86: fix [-Wstringop-overread] warn in test_process_vm_readv()
Dominique Martinet <[email protected]>
fscache_cookie_enabled: check cookie is valid before accessing it
-------------
Diffstat:
Makefile | 4 +- arch/arm/boot/dts/bcm2711.dtsi | 2 + arch/arm/boot/dts/bcm283x.dtsi | 2 + arch/x86/kvm/debugfs.c | 3 + drivers/auxdisplay/charlcd.c | 3 + drivers/edac/i10nm_base.c | 9 ++ drivers/gpio/gpio-aspeed-sgpio.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 48 ++++++++++- drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 8 -- drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 6 ++ drivers/gpu/drm/amd/display/dc/dcn10/dcn10_init.c | 1 + .../gpu/drm/amd/display/dc/dcn31/dcn31_resource.c | 25 +++++- .../gpu/drm/amd/display/dc/dcn31/dcn31_resource.h | 31 +++++++ drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 15 ++-- drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c | 3 +- drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c | 2 +- drivers/i2c/busses/i2c-mpc.c | 15 ++-- drivers/i2c/i2c-core-base.c | 95 ---------------------- drivers/infiniband/core/uverbs_marshall.c | 2 +- drivers/infiniband/core/uverbs_uapi.c | 3 + drivers/infiniband/hw/mlx5/mlx5_ib.h | 6 +- drivers/infiniband/hw/mlx5/mr.c | 26 +++--- drivers/input/touchscreen/zinitix.c | 18 ++-- drivers/isdn/mISDN/core.c | 6 +- drivers/isdn/mISDN/core.h | 4 +- drivers/isdn/mISDN/layer1.c | 4 +- drivers/md/raid1.c | 3 +- drivers/net/ethernet/amazon/ena/ena_netdev.c | 49 ++++++----- drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 8 ++ drivers/net/ethernet/intel/i40e/i40e_main.c | 60 ++++++++++++-- drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 40 +++++++-- drivers/net/ethernet/intel/iavf/iavf_main.c | 5 +- drivers/net/ethernet/sfc/falcon/rx.c | 5 ++ drivers/net/ethernet/sfc/rx_common.c | 5 ++ drivers/net/ieee802154/atusb.c | 10 ++- drivers/net/usb/r8152.c | 9 +- drivers/net/usb/rndis_host.c | 5 ++ drivers/power/reset/ltc2952-poweroff.c | 4 +- drivers/power/supply/bq25890_charger.c | 4 +- drivers/power/supply/power_supply_core.c | 4 + drivers/reset/reset-rzg2l-usbphy-ctrl.c | 7 +- drivers/scsi/libiscsi.c | 6 +- drivers/usb/mtu3/mtu3_gadget.c | 4 +- drivers/video/fbdev/core/fbmem.c | 47 +++++++++++ fs/xfs/xfs_ioctl.c | 3 +- include/linux/fb.h | 1 + include/linux/fscache.h | 2 +- include/net/sctp/sctp.h | 3 +- kernel/cgroup/cgroup-internal.h | 19 +++++ kernel/cgroup/cgroup-v1.c | 33 ++++---- kernel/cgroup/cgroup.c | 88 +++++++++++++------- kernel/trace/trace.c | 6 +- net/batman-adv/multicast.c | 15 ++-- net/batman-adv/multicast.h | 10 ++- net/batman-adv/soft-interface.c | 7 +- net/core/lwtunnel.c | 4 + net/ipv4/fib_semantics.c | 49 +++++++++-- net/ipv4/udp.c | 2 +- net/ipv6/ip6_vti.c | 2 + net/ipv6/raw.c | 3 + net/ipv6/route.c | 32 +++++++- net/mac80211/ieee80211_i.h | 24 +++++- net/mac80211/mesh.h | 22 +---- net/mac80211/mesh_pathtbl.c | 89 +++++++------------- net/mac80211/mlme.c | 2 +- net/netrom/af_netrom.c | 2 +- net/phonet/pep.c | 1 + net/sched/sch_qfq.c | 6 +- net/sctp/diag.c | 46 +++++------ net/sctp/socket.c | 22 +++-- net/tipc/socket.c | 2 + samples/ftrace/ftrace-direct-modify.c | 3 + samples/ftrace/ftrace-direct-too.c | 3 + samples/ftrace/ftrace-direct.c | 2 + tools/testing/selftests/net/udpgro_fwd.sh | 3 +- tools/testing/selftests/vm/userfaultfd.c | 16 ++-- tools/testing/selftests/x86/test_vsyscall.c | 2 +- 79 files changed, 737 insertions(+), 408 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/72 fscache_cookie_enabled: check cookie is valid before accessing it
From: Dominique Martinet <[email protected]>
commit 0dc54bd4d6e03be1f0b678c4297170b79f1a44ab upstream.
fscache_cookie_enabled() could be called on NULL cookies and cause a null pointer dereference when accessing cookie flags: just make sure the cookie is valid first
--- include/linux/fscache.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/fscache.h +1 -1
@@ -167,7 +167,7 @@ struct fscache_cookie {static inline bool fscache_cookie_enabled (struct fscache_cookie *cookie) { -return test_bit (FSCACHE_COOKIE_ENABLED , &cookie->flags); +return fscache_cookie_valid (cookie) &&test_bit (FSCACHE_COOKIE_ENABLED , &cookie->flags); }/*
Greg Kroah-Hartman
maintainerPATCH 2/72 selftests: x86: fix [-Wstringop-overread] warn in test_process_vm_readv()
In reply to Greg Kroah-HartmanFrom: Shuah Khan <[email protected]>
commit dd40f44eabe1e122c6852fabb298aac05b083fce upstream.
Fix the following [-Wstringop-overread] by passing in the variable instead of the value.
test_vsyscall.c: In function ‘test_process_vm_readv’:
test_vsyscall.c:500:22: warning: ‘__builtin_memcmp_eq’ specified bound 4096 exceeds source size 0 [-Wstringop-overread]
500 | if (!memcmp(buf, (const void *)0xffffffffff600000, 4096)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--- tools/testing/selftests/x86/test_vsyscall.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/testing/selftests/x86/test_vsyscall.c +1 -1
@@ -497,7 +497,7 @@ static int test_process_vm_readv(void) }if (vsyscall_map_r) { -if (!memcmp (buf, (const void *)0xffffffffff600000 ,4096 )) { +if (!memcmp (buf, remote.iov_base,sizeof (buf))) {printf ("[OK]\tIt worked and read correct data\n" ); }else {printf ("[FAIL]\tIt worked but returned incorrect data\n" );
Greg Kroah-Hartman
maintainerPATCH 3/72 tracing: Fix check for trace_percpu_buffer validity in get_trace_buf()
In reply to Greg Kroah-HartmanFrom: Naveen N. Rao <[email protected]>
commit 823e670f7ed616d0ce993075c8afe0217885f79d upstream.
With the new osnoise tracer, we are seeing the below splat:
Kernel attempted to read user page (c7d880000) - exploit attempt? (uid: 0)
BUG: Unable to handle kernel data access on read at 0xc7d880000
Faulting instruction address: 0xc0000000002ffa10
Oops: Kernel access of bad area, sig: 11 [#1]
LE PAGE_SIZE=64K MMU=Radix SMP NR_CPUS=2048 NUMA pSeries
...
NIP [c0000000002ffa10] __trace_array_vprintk.part.0+0x70/0x2f0
LR [c0000000002ff9fc] __trace_array_vprintk.part.0+0x5c/0x2f0
Call Trace:
[c0000008bdd73b80] [c0000000001c49cc] put_prev_task_fair+0x3c/0x60 (unreliable)
[c0000008bdd73be0] [c000000000301430] trace_array_printk_buf+0x70/0x90
[c0000008bdd73c00] [c0000000003178b0] trace_sched_switch_callback+0x250/0x290
[c0000008bdd73c90] [c000000000e70d60] __schedule+0x410/0x710
[c0000008bdd73d40] [c000000000e710c0] schedule+0x60/0x130
[c0000008bdd73d70] [c000000000030614] interrupt_exit_user_prepare_main+0x264/0x270
[c0000008bdd73de0] [c000000000030a70] syscall_exit_prepare+0x150/0x180
[c0000008bdd73e10] [c00000000000c174] system_call_vectored_common+0xf4/0x278osnoise tracer on ppc64le is triggering osnoise_taint() for negative duration in get_int_safe_duration() called from trace_sched_switch_callback()->thread_exit().
The problem though is that the check for a valid trace_percpu_buffer is incorrect in get_trace_buf(). The check is being done after calculating the pointer for the current cpu, rather than on the main percpu pointer. Fix the check to be against trace_percpu_buffer.
--- kernel/trace/trace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/trace/trace.c +1 -1
@@ -3241,7 +3241,7 @@ static char *get_trace_buf(void) {struct trace_buffer_struct *buffer =this_cpu_ptr (trace_percpu_buffer); -if (!buffer || buffer->nesting >=4 ) +if (!trace_percpu_buffer || buffer->nesting >=4 )return NULL ; buffer->nesting++;
Greg Kroah-Hartman
maintainerPATCH 4/72 tracing: Tag trace_percpu_buffer as a percpu pointer
In reply to Greg Kroah-HartmanFrom: Naveen N. Rao <[email protected]>
commit f28439db470cca8b6b082239314e9fd10bd39034 upstream.
Tag trace_percpu_buffer as a percpu pointer to resolve warnings
reported by sparse:
/linux/kernel/trace/trace.c:3218:46: warning: incorrect type in initializer (different address spaces)
/linux/kernel/trace/trace.c:3218:46: expected void const [noderef] __percpu *__vpp_verify
/linux/kernel/trace/trace.c:3218:46: got struct trace_buffer_struct *
/linux/kernel/trace/trace.c:3234:9: warning: incorrect type in initializer (different address spaces)
/linux/kernel/trace/trace.c:3234:9: expected void const [noderef] __percpu *__vpp_verify
/linux/kernel/trace/trace.c:3234:9: got int *
--- kernel/trace/trace.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
kernel/trace/trace.c +2 -2
@@ -3231,7 +3231,7 @@ struct trace_buffer_struct {char buffer[4 ][TRACE_BUF_SIZE ]; }; -static struct trace_buffer_struct *trace_percpu_buffer; +static struct trace_buffer_struct __percpu *trace_percpu_buffer;/* * This allows for lockless recording. If we're nested too deeply, then
@@ -3260,7 +3260,7 @@ static void put_trace_buf(void)static int alloc_percpu_trace_buffer (void ) { -struct trace_buffer_struct *buffers; +struct trace_buffer_struct __percpu *buffers;if (trace_percpu_buffer)return 0 ;
Greg Kroah-Hartman
maintainerPATCH 5/72 Revert "RDMA/mlx5: Fix releasing unallocated memory in dereg MR flow"
In reply to Greg Kroah-HartmanFrom: Maor Gottlieb <[email protected]>
commit 4163cb3d1980383220ad7043002b930995dcba33 upstream.
This patch is not the full fix and still causes to call traces during mlx5_ib_dereg_mr().
This reverts commit f0ae4afe3d35e67db042c58a52909e06262b740f.
--- drivers/infiniband/hw/mlx5/mlx5_ib.h | 6 +++--- drivers/infiniband/hw/mlx5/mr.c | 28 +++++++++++++++------------- 2 files changed, 18 insertions(+), 16 deletions(-)
drivers/infiniband/hw/mlx5/mlx5_ib.h +3 -3
@@ -641,6 +641,7 @@ struct mlx5_ib_mr {/* User MR data */ struct mlx5_cache_ent *cache_ent; +struct ib_umem *umem;/* This is zero'd when the MR is allocated */ union {
@@ -652,7 +653,7 @@ struct mlx5_ib_mr {struct list_head list; }; -/* Used only by kernel MRs */ +/* Used only by kernel MRs (umem == NULL) */ struct {void *descs;void *descs_alloc;
@@ -674,9 +675,8 @@ struct mlx5_ib_mr {int data_length; }; -/* Used only by User MRs */ +/* Used only by User MRs (umem != NULL) */ struct { -struct ib_umem *umem;unsigned int page_shift;/* Current access_flags */ int access_flags;
drivers/infiniband/hw/mlx5/mr.c +15 -13
@@ -1911,18 +1911,19 @@ err:return ret; } -static void mlx5_free_priv_descs (struct mlx5_ib_mr *mr) +static void +mlx5_free_priv_descs (struct mlx5_ib_mr *mr) { -struct mlx5_ib_dev *dev =to_mdev (mr->ibmr.device); -int size = mr->max_descs * mr->desc_size; - -if (!mr->descs) -return ; - -dma_unmap_single (&dev->mdev->pdev->dev, mr->desc_map, size, -DMA_TO_DEVICE ); -kfree (mr->descs_alloc); - mr->descs =NULL ; +if (!mr->umem && mr->descs) { +struct ib_device *device = mr->ibmr.device; +int size = mr->max_descs * mr->desc_size; +struct mlx5_ib_dev *dev =to_mdev (device); + +dma_unmap_single (&dev->mdev->pdev->dev, mr->desc_map, size, +DMA_TO_DEVICE ); +kfree (mr->descs_alloc); + mr->descs =NULL ; + } }int mlx5_ib_dereg_mr (struct ib_mr *ibmr,struct ib_udata *udata)
@@ -1998,8 +1999,7 @@ int mlx5_ib_dereg_mr(struct ib_mr *ibmr,if (mr->cache_ent) {mlx5_mr_cache_free (dev, mr); }else { -if (!udata) -mlx5_free_priv_descs (mr); +mlx5_free_priv_descs (mr);kfree (mr); }return 0 ;
@@ -2086,6 +2086,7 @@ static struct mlx5_ib_mr *mlx5_ib_alloc_if (err) goto err_free_in; + mr->umem =NULL ;kfree (in);return mr;
@@ -2212,6 +2213,7 @@ static struct ib_mr *__mlx5_ib_alloc_mr( } mr->ibmr.device = pd->device; + mr->umem =NULL ;switch (mr_type) {case IB_MR_TYPE_MEM_REG :
Greg Kroah-Hartman
maintainerPATCH 6/72 ieee802154: atusb: fix uninit value in atusb_set_extended_addr
In reply to Greg Kroah-HartmanFrom: Pavel Skripkin <[email protected]>
commit 754e4382354f7908923a1949d8dc8d05f82f09cb upstream.
Alexander reported a use of uninitialized value in atusb_set_extended_addr(), that is caused by reading 0 bytes via usb_control_msg().
Fix it by validating if the number of bytes transferred is actually correct, since usb_control_msg() may read less bytes, than was requested by caller.
Fail log:
BUG: KASAN: uninit-cmp in ieee802154_is_valid_extended_unicast_addr include/linux/ieee802154.h:310 [inline] BUG: KASAN: uninit-cmp in atusb_set_extended_addr drivers/net/ieee802154/atusb.c:1000 [inline] BUG: KASAN: uninit-cmp in atusb_probe.cold+0x29f/0x14db drivers/net/ieee802154/atusb.c:1056 Uninit value used in comparison: 311daa649a2003bd stack handle: 000000009a2003bd ieee802154_is_valid_extended_unicast_addr include/linux/ieee802154.h:310 [inline] atusb_set_extended_addr drivers/net/ieee802154/atusb.c:1000 [inline] atusb_probe.cold+0x29f/0x14db drivers/net/ieee802154/atusb.c:1056 usb_probe_interface+0x314/0x7f0 drivers/usb/core/driver.c:396
--- drivers/net/ieee802154/atusb.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/net/ieee802154/atusb.c +6 -4
@@ -93,7 +93,9 @@ static int atusb_control_msg(struct atus ret =usb_control_msg (usb_dev, pipe, request, requesttype, value, index, data, size, timeout); -if (ret <0 ) { +if (ret < size) { + ret = ret <0 ? ret : -ENODATA ; + atusb->err = ret; dev_err(&usb_dev->dev, "%s: req 0x%02x val 0x%x idx 0x%x, error %d\n",
@@ -861,9 +863,9 @@ static int atusb_get_and_show_build(struif (!build)return -ENOMEM ; - ret =atusb_control_msg (atusb,usb_rcvctrlpipe (usb_dev,0 ), -ATUSB_BUILD ,ATUSB_REQ_FROM_DEV ,0 ,0 , - build,ATUSB_BUILD_SIZE ,1000 ); +/* We cannot call atusb_control_msg() here, since this request may read various length data */ + ret =usb_control_msg (atusb->usb_dev,usb_rcvctrlpipe (usb_dev,0 ),ATUSB_BUILD , +ATUSB_REQ_FROM_DEV ,0 ,0 , build,ATUSB_BUILD_SIZE ,1000 );if (ret >=0 ) { build[ret] =0 ;dev_info (&usb_dev->dev,"Firmware: build %s\n" , build);
Greg Kroah-Hartman
maintainerPATCH 7/72 i40e: Fix to not show opcode msg on unsuccessful VF MAC change
In reply to Greg Kroah-HartmanFrom: Mateusz Palczewski <[email protected]>
commit 01cbf50877e602e2376af89e4a51c30bc574c618 upstream.
Hide i40e opcode information sent during response to VF in case when untrusted VF tried to change MAC on the VF interface.
This is implemented by adding an additional parameter 'hide' to the response sent to VF function that hides the display of error information, but forwards the error code to VF.
Previously it was not possible to send response with some error code to VF without displaying opcode information.
--- drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 40 ++++++++++++++++----- 1 file changed, 32 insertions(+), 8 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +32 -8
@@ -1877,17 +1877,19 @@ sriov_configure_out:/***********************virtual channel routines******************/ /** -* i40e_vc_send_msg_to_vf +* i40e_vc_send_msg_to_vf_ex * @vf: pointer to the VF info * @v_opcode: virtual channel opcode * @v_retval: virtual channel return value * @msg: pointer to the msg buffer * @msglen: msg length +* @is_quiet: true for not printing unsuccessful return values, false otherwise * * send msg to VF **/ -static int i40e_vc_send_msg_to_vf (struct i40e_vf *vf,u32 v_opcode, -u32 v_retval,u8 *msg,u16 msglen) +static int i40e_vc_send_msg_to_vf_ex (struct i40e_vf *vf,u32 v_opcode, +u32 v_retval,u8 *msg,u16 msglen, +bool is_quiet) {struct i40e_pf *pf;struct i40e_hw *hw;
@@ -1903,7 +1905,7 @@ static int i40e_vc_send_msg_to_vf(struct abs_vf_id = vf->vf_id + hw->func_caps.vf_base_id;/* single place to detect unsuccessful return values */ -if (v_retval) { +if (v_retval && !is_quiet) { vf->num_invalid_msgs++;dev_info (&pf->pdev->dev,"VF %d failed opcode %d, retval: %d\n" , vf->vf_id, v_opcode, v_retval);
@@ -1934,6 +1936,23 @@ static int i40e_vc_send_msg_to_vf(struct }/** +* i40e_vc_send_msg_to_vf +* @vf: pointer to the VF info +* @v_opcode: virtual channel opcode +* @v_retval: virtual channel return value +* @msg: pointer to the msg buffer +* @msglen: msg length +* +* send msg to VF +**/ +static int i40e_vc_send_msg_to_vf (struct i40e_vf *vf,u32 v_opcode, +u32 v_retval,u8 *msg,u16 msglen) +{ +return i40e_vc_send_msg_to_vf_ex (vf, v_opcode, v_retval, + msg, msglen, false); +} + +/** * i40e_vc_send_resp_to_vf * @vf: pointer to the VF info * @opcode: operation code
@@ -2695,6 +2714,7 @@ error_param:* i40e_check_vf_permission * @vf: pointer to the VF info * @al: MAC address list from virtchnl +* @is_quiet: set true for printing msg without opcode info, false otherwise * * Check that the given list of MAC addresses is allowed. Will return -EPERM * if any address in the list is not valid. Checks the following conditions:
@@ -2709,13 +2729,15 @@ error_param:* addresses might not be accurate. **/ static inline int i40e_check_vf_permission (struct i40e_vf *vf, -struct virtchnl_ether_addr_list *al) +struct virtchnl_ether_addr_list *al, +bool *is_quiet) {struct i40e_pf *pf = vf->pf;struct i40e_vsi *vsi = pf->vsi[vf->lan_vsi_idx];int mac2add_cnt =0 ;int i; + *is_quiet = false;for (i =0 ; i < al->num_elements; i++) {struct i40e_mac_filter *f;u8 *addr = al->list[i].addr;
@@ -2739,6 +2761,7 @@ static inline int i40e_check_vf_permissi !ether_addr_equal(addr, vf->default_lan_addr.addr)) {dev_err (&pf->pdev->dev,"VF attempting to override administratively set MAC address, bring down and up the VF interface to resume normal operation\n" ); + *is_quiet = true;return -EPERM ; }
@@ -2775,6 +2798,7 @@ static int i40e_vc_add_mac_addr_msg(stru (struct virtchnl_ether_addr_list *)msg;struct i40e_pf *pf = vf->pf;struct i40e_vsi *vsi =NULL ; +bool is_quiet = false;i40e_status ret =0 ;int i;
@@ -2791,7 +2815,7 @@ static int i40e_vc_add_mac_addr_msg(stru*/ spin_lock_bh (&vsi->mac_filter_hash_lock); - ret =i40e_check_vf_permission (vf, al); + ret =i40e_check_vf_permission (vf, al, &is_quiet);if (ret) {spin_unlock_bh (&vsi->mac_filter_hash_lock); goto error_param;
@@ -2829,8 +2853,8 @@ static int i40e_vc_add_mac_addr_msg(stru error_param:/* send the response to the VF */ -return i40e_vc_send_resp_to_vf (vf,VIRTCHNL_OP_ADD_ETH_ADDR , - ret); +return i40e_vc_send_msg_to_vf_ex (vf,VIRTCHNL_OP_ADD_ETH_ADDR , + ret,NULL ,0 , is_quiet); }/**
Greg Kroah-Hartman
maintainerPATCH 8/72 iavf: Fix limit of total number of queues to active queues of VF
In reply to Greg Kroah-HartmanFrom: Karen Sornek <[email protected]>
commit b712941c8085e638bb92456e866ed3de4404e3d5 upstream.
In the absence of this validation, if the user requests to configure queues more than the enabled queues, it results in sending the requested number of queues to the kernel stack (due to the asynchronous nature of VF response), in which case the stack might pick a queue to transmit that is not enabled and result in Tx hang. Fix this bug by limiting the total number of queues allocated for VF to active queues of VF.
--- drivers/net/ethernet/intel/iavf/iavf_main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/ethernet/intel/iavf/iavf_main.c +4 -1
@@ -2652,8 +2652,11 @@ static int iavf_validate_ch_config(struc total_max_rate += tx_rate; num_qps += mqprio_qopt->qopt.count[i]; } -if (num_qps >IAVF_MAX_REQ_QUEUES ) +if (num_qps > adapter->num_active_queues) { +dev_err (&adapter->pdev->dev, +"Cannot support requested number of queues\n" );return -EINVAL ; + } ret =iavf_validate_tx_bandwidth (adapter, total_max_rate);return ret;
Greg Kroah-Hartman
maintainerPATCH 9/72 RDMA/core: Dont infoleak GRH fields
In reply to Greg Kroah-HartmanFrom: Leon Romanovsky <[email protected]>
commit b35a0f4dd544eaa6162b6d2f13a2557a121ae5fd upstream.
If dst->is_global field is not set, the GRH fields are not cleared and the following infoleak is reported.
=====================================================
BUG: KMSAN: kernel-infoleak in instrument_copy_to_user include/linux/instrumented.h:121 [inline] BUG: KMSAN: kernel-infoleak in _copy_to_user+0x1c9/0x270 lib/usercopy.c:33 instrument_copy_to_user include/linux/instrumented.h:121 [inline] _copy_to_user+0x1c9/0x270 lib/usercopy.c:33 copy_to_user include/linux/uaccess.h:209 [inline] ucma_init_qp_attr+0x8c7/0xb10 drivers/infiniband/core/ucma.c:1242 ucma_write+0x637/0x6c0 drivers/infiniband/core/ucma.c:1732 vfs_write+0x8ce/0x2030 fs/read_write.c:588 ksys_write+0x28b/0x510 fs/read_write.c:643 __do_sys_write fs/read_write.c:655 [inline] __se_sys_write fs/read_write.c:652 [inline] __ia32_sys_write+0xdb/0x120 fs/read_write.c:652 do_syscall_32_irqs_on arch/x86/entry/common.c:114 [inline] __do_fast_syscall_32+0x96/0xf0 arch/x86/entry/common.c:180 do_fast_syscall_32+0x34/0x70 arch/x86/entry/common.c:205 do_SYSENTER_32+0x1b/0x20 arch/x86/entry/common.c:248 entry_SYSENTER_compat_after_hwframe+0x4d/0x5c
Local variable resp created at:
ucma_init_qp_attr+0xa4/0xb10 drivers/infiniband/core/ucma.c:1214 ucma_write+0x637/0x6c0 drivers/infiniband/core/ucma.c:1732
Bytes 40-59 of 144 are uninitialized
Memory access of size 144 starts at ffff888167523b00 Data copied to user address 0000000020000100
CPU: 1 PID: 25910 Comm: syz-executor.1 Not tainted 5.16.0-rc5-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 =====================================================
--- drivers/infiniband/core/uverbs_marshall.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/infiniband/core/uverbs_marshall.c +1 -1
@@ -66,7 +66,7 @@ void ib_copy_ah_attr_to_user(struct ib_dstruct rdma_ah_attr *src = ah_attr;struct rdma_ah_attr conv_ah; -memset (&dst->grh.reserved,0 ,sizeof (dst->grh.reserved)); +memset (&dst->grh,0 ,sizeof (dst->grh)); if ((ah_attr->type == RDMA_AH_ATTR_TYPE_OPA) && (rdma_ah_get_dlid(ah_attr) > be16_to_cpu(IB_LID_PERMISSIVE)) &&
Greg Kroah-Hartman
maintainerPATCH 10/72 Revert "net: usb: r8152: Add MAC passthrough support for more Lenovo Docks"
In reply to Greg Kroah-HartmanFrom: Aaron Ma <[email protected]>
commit 00fcf8c7dd564c44448ff6a39728d2ca0c8efbd8 upstream.
This reverts commit f77b83b5bbab53d2be339184838b19ed2c62c0a5.
This change breaks multiple usb to ethernet dongles attached on Lenovo USB hub.
--- drivers/net/usb/r8152.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/net/usb/r8152.c +6 -3
@@ -9638,9 +9638,12 @@ static int rtl8152_probe(struct usb_inte netdev->hw_features &= ~NETIF_F_RXCSUM ; } -if (udev->parent && -le16_to_cpu (udev->parent->descriptor.idVendor) ==VENDOR_ID_LENOVO ) { - tp->lenovo_macpassthru =1 ; +if (le16_to_cpu (udev->descriptor.idVendor) ==VENDOR_ID_LENOVO ) { +switch (le16_to_cpu (udev->descriptor.idProduct)) { +case DEVICE_ID_THINKPAD_THUNDERBOLT3_DOCK_GEN2 : +case DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2 : + tp->lenovo_macpassthru =1 ; + } } if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x3011 && udev->serial &&
Greg Kroah-Hartman
maintainerPATCH 11/72 netrom: fix copying in user data in nr_setsockopt
In reply to Greg Kroah-HartmanFrom: Christoph Hellwig <[email protected]>
commit 3087a6f36ee028ec095c04a8531d7d33899b7fed upstream.
This code used to copy in an unsigned long worth of data before the sockptr_t conversion, so restore that.
--- net/netrom/af_netrom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/netrom/af_netrom.c +1 -1
@@ -306,7 +306,7 @@ static int nr_setsockopt(struct socket *if (optlen <sizeof (unsigned int ))return -EINVAL ; -if (copy_from_sockptr (&opt, optval,sizeof (unsigned int ))) +if (copy_from_sockptr (&opt, optval,sizeof (unsigned long )))return -EFAULT ;switch (optname) {
Greg Kroah-Hartman
maintainerPATCH 12/72 RDMA/uverbs: Check for null return of kmalloc_array
In reply to Greg Kroah-HartmanFrom: Jiasheng Jiang <[email protected]>
commit 7694a7de22c53a312ea98960fcafc6ec62046531 upstream.
Because of the possible failure of the allocation, data might be NULL pointer and will cause the dereference of the NULL pointer later. Therefore, it might be better to check it and return -ENOMEM.
--- drivers/infiniband/core/uverbs_uapi.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/infiniband/core/uverbs_uapi.c +3 -0
@@ -447,6 +447,9 @@ static int uapi_finalize(struct uverbs_a uapi->num_write_ex = max_write_ex +1 ; data =kmalloc_array (uapi->num_write + uapi->num_write_ex,sizeof (*uapi->write_methods),GFP_KERNEL ); +if (!data) +return -ENOMEM ; +for (i =0 ; i != uapi->num_write + uapi->num_write_ex; i++) data[i] = &uapi->notsupp_method; uapi->write_methods = data;
Greg Kroah-Hartman
maintainerPATCH 13/72 mac80211: initialize variable have_higher_than_11mbit
In reply to Greg Kroah-HartmanFrom: Tom Rix <[email protected]>
commit 68a18ad71378a56858141c4449e02a30c829763e upstream.
Clang static analysis reports this warnings
mlme.c:5332:7: warning: Branch condition evaluates to a
garbage value
have_higher_than_11mbit)
^~~~~~~~~~~~~~~~~~~~~~~have_higher_than_11mbit is only set to true some of the time in ieee80211_get_rates() but is checked all of the time. So have_higher_than_11mbit needs to be initialized to false.
--- net/mac80211/mlme.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/mac80211/mlme.c +1 -1
@@ -5216,7 +5216,7 @@ static int ieee80211_prep_connection(str*/ if (new_sta) {u32 rates =0 , basic_rates =0 ; -bool have_higher_than_11mbit; +bool have_higher_than_11mbit = false;int min_rate =INT_MAX , min_rate_index =-1 ;const struct cfg80211_bss_ies *ies;int shift =ieee80211_vif_get_shift (&sdata->vif);
Greg Kroah-Hartman
maintainerPATCH 14/72 mac80211: mesh: embedd mesh_paths and mpp_paths into ieee80211_if_mesh
In reply to Greg Kroah-HartmanFrom: Pavel Skripkin <[email protected]>
commit 8b5cb7e41d9d77ffca036b0239177de123394a55 upstream.
Syzbot hit NULL deref in rhashtable_free_and_destroy(). The problem was in mesh_paths and mpp_paths being NULL.
mesh_pathtbl_init() could fail in case of memory allocation failure, but nobody cared, since ieee80211_mesh_init_sdata() returns void. It led to leaving 2 pointers as NULL. Syzbot has found null deref on exit path, but it could happen anywhere else, because code assumes these pointers are valid.
Since all ieee80211_*_setup_sdata functions are void and do not fail, let's embedd mesh_paths and mpp_paths into parent struct to avoid adding error handling on higher levels and follow the pattern of others setup_sdata functions
--- net/mac80211/ieee80211_i.h | 24 ++++++++++- net/mac80211/mesh.h | 22 ---------- net/mac80211/mesh_pathtbl.c | 91 +++++++++++++++----------------------------- 3 files changed, 55 insertions(+), 82 deletions(-)
net/mac80211/ieee80211_i.h +22 -2
@@ -648,6 +648,26 @@ struct mesh_csa_settings {struct cfg80211_csa_settings settings; }; +/** +* struct mesh_table +* +* @known_gates: list of known mesh gates and their mpaths by the station. The +* gate's mpath may or may not be resolved and active. +* @gates_lock: protects updates to known_gates +* @rhead: the rhashtable containing struct mesh_paths, keyed by dest addr +* @walk_head: linked list containing all mesh_path objects +* @walk_lock: lock protecting walk_head +* @entries: number of entries in the table +*/ +struct mesh_table { +struct hlist_head known_gates; +spinlock_t gates_lock; +struct rhashtable rhead; +struct hlist_head walk_head; +spinlock_t walk_lock; +atomic_t entries;/* Up to MAX_MESH_NEIGHBOURS */ +}; +struct ieee80211_if_mesh {struct timer_list housekeeping_timer;struct timer_list mesh_path_timer;
@@ -722,8 +742,8 @@ struct ieee80211_if_mesh {/* offset from skb->data while building IE */ int meshconf_offset; -struct mesh_table *mesh_paths; -struct mesh_table *mpp_paths;/* Store paths for MPP&MAP */ +struct mesh_table mesh_paths; +struct mesh_table mpp_paths;/* Store paths for MPP&MAP */ int mesh_paths_generation;int mpp_paths_generation; };
net/mac80211/mesh.h +1 -21
@@ -127,26 +127,6 @@ struct mesh_path {u32 path_change_count; }; -/** -* struct mesh_table -* -* @known_gates: list of known mesh gates and their mpaths by the station. The -* gate's mpath may or may not be resolved and active. -* @gates_lock: protects updates to known_gates -* @rhead: the rhashtable containing struct mesh_paths, keyed by dest addr -* @walk_head: linked list containing all mesh_path objects -* @walk_lock: lock protecting walk_head -* @entries: number of entries in the table -*/ -struct mesh_table { -struct hlist_head known_gates; -spinlock_t gates_lock; -struct rhashtable rhead; -struct hlist_head walk_head; -spinlock_t walk_lock; -atomic_t entries;/* Up to MAX_MESH_NEIGHBOURS */ -}; -/* Recent multicast cache */ /* RMC_BUCKETS must be a power of 2, maximum 256 */ #define RMC_BUCKETS 256
@@ -308,7 +288,7 @@ int mesh_path_error_tx(struct ieee80211_void mesh_path_assign_nexthop (struct mesh_path *mpath,struct sta_info *sta);void mesh_path_flush_pending (struct mesh_path *mpath);void mesh_path_tx_pending (struct mesh_path *mpath); -int mesh_pathtbl_init (struct ieee80211_sub_if_data *sdata); +void mesh_pathtbl_init (struct ieee80211_sub_if_data *sdata);void mesh_pathtbl_unregister (struct ieee80211_sub_if_data *sdata);int mesh_path_del (struct ieee80211_sub_if_data *sdata,const u8 *addr);void mesh_path_timer (struct timer_list *t);
net/mac80211/mesh_pathtbl.c +32 -59
196 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 15/72 sfc: The RX page_ring is optional
In reply to Greg Kroah-HartmanFrom: Martin Habets <[email protected]>
commit 1d5a474240407c38ca8c7484a656ee39f585399c upstream.
The RX page_ring is an optional feature that improves performance. When allocation fails the driver can still function, but possibly with a lower bandwidth. Guard against dereferencing a NULL page_ring.
--- drivers/net/ethernet/sfc/falcon/rx.c | 5 +++++ drivers/net/ethernet/sfc/rx_common.c | 5 +++++ 2 files changed, 10 insertions(+)
drivers/net/ethernet/sfc/falcon/rx.c +5 -0
@@ -110,6 +110,8 @@ static struct page *ef4_reuse_page(strucstruct ef4_rx_page_state *state;unsigned index; +if (unlikely (!rx_queue->page_ring)) +return NULL ; index = rx_queue->page_remove & rx_queue->page_ptr_mask; page = rx_queue->page_ring[index];if (page ==NULL )
@@ -293,6 +295,9 @@ static void ef4_recycle_rx_pages(struct {struct ef4_rx_queue *rx_queue =ef4_channel_get_rx_queue (channel); +if (unlikely (!rx_queue->page_ring)) +return ; + do { ef4_recycle_rx_page(channel, rx_buf); rx_buf = ef4_rx_buf_next(rx_queue, rx_buf);
drivers/net/ethernet/sfc/rx_common.c +5 -0
@@ -45,6 +45,8 @@ static struct page *efx_reuse_page(strucunsigned int index;struct page *page; +if (unlikely (!rx_queue->page_ring)) +return NULL ; index = rx_queue->page_remove & rx_queue->page_ptr_mask; page = rx_queue->page_ring[index];if (page ==NULL )
@@ -114,6 +116,9 @@ void efx_recycle_rx_pages(struct efx_cha {struct efx_rx_queue *rx_queue =efx_channel_get_rx_queue (channel); +if (unlikely (!rx_queue->page_ring)) +return ; + do { efx_recycle_rx_page(channel, rx_buf); rx_buf = efx_rx_buf_next(rx_queue, rx_buf);
Greg Kroah-Hartman
maintainerPATCH 16/72 i40e: fix use-after-free in i40e_sync_filters_subtask()
In reply to Greg Kroah-HartmanFrom: Di Zhu <[email protected]>
commit 3116f59c12bd24c513194cd3acb3ec1f7d468954 upstream.
Using ifconfig command to delete the ipv6 address will cause the i40e network card driver to delete its internal mac_filter and i40e_service_task kernel thread will concurrently access the mac_filter. These two processes are not protected by lock
so causing the following use-after-free problems.
print_address_description+0x70/0x360 ? vprintk_func+0x5e/0xf0 kasan_report+0x1b2/0x330 i40e_sync_vsi_filters+0x4f0/0x1850 [i40e] i40e_sync_filters_subtask+0xe3/0x130 [i40e] i40e_service_task+0x195/0x24c0 [i40e] process_one_work+0x3f5/0x7d0 worker_thread+0x61/0x6c0 ? process_one_work+0x7d0/0x7d0 kthread+0x1c3/0x1f0 ? kthread_park+0xc0/0xc0 ret_from_fork+0x35/0x40 Allocated by task 2279810: kasan_kmalloc+0xa0/0xd0 kmem_cache_alloc_trace+0xf3/0x1e0 i40e_add_filter+0x127/0x2b0 [i40e] i40e_add_mac_filter+0x156/0x190 [i40e] i40e_addr_sync+0x2d/0x40 [i40e] __hw_addr_sync_dev+0x154/0x210 i40e_set_rx_mode+0x6d/0xf0 [i40e] __dev_set_rx_mode+0xfb/0x1f0 __dev_mc_add+0x6c/0x90 igmp6_group_added+0x214/0x230 __ipv6_dev_mc_inc+0x338/0x4f0 addrconf_join_solict.part.7+0xa2/0xd0 addrconf_dad_work+0x500/0x980 process_one_work+0x3f5/0x7d0 worker_thread+0x61/0x6c0 kthread+0x1c3/0x1f0 ret_from_fork+0x35/0x40 Freed by task 2547073: __kasan_slab_free+0x130/0x180 kfree+0x90/0x1b0 __i40e_del_filter+0xa3/0xf0 [i40e] i40e_del_mac_filter+0xf3/0x130 [i40e] i40e_addr_unsync+0x85/0xa0 [i40e] __hw_addr_sync_dev+0x9d/0x210 i40e_set_rx_mode+0x6d/0xf0 [i40e] __dev_set_rx_mode+0xfb/0x1f0 __dev_mc_del+0x69/0x80 igmp6_group_dropped+0x279/0x510 __ipv6_dev_mc_dec+0x174/0x220 addrconf_leave_solict.part.8+0xa2/0xd0 __ipv6_ifa_notify+0x4cd/0x570 ipv6_ifa_notify+0x58/0x80 ipv6_del_addr+0x259/0x4a0 inet6_addr_del+0x188/0x260 addrconf_del_ifaddr+0xcc/0x130 inet6_ioctl+0x152/0x190 sock_do_ioctl+0xd8/0x2b0 sock_ioctl+0x2e5/0x4c0 do_vfs_ioctl+0x14e/0xa80 ksys_ioctl+0x7c/0xa0 __x64_sys_ioctl+0x42/0x50 do_syscall_64+0x98/0x2c0 entry_SYSCALL_64_after_hwframe+0x65/0xca
--- drivers/net/ethernet/intel/i40e/i40e_main.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
drivers/net/ethernet/intel/i40e/i40e_main.c +24 -0
@@ -99,6 +99,24 @@ MODULE_LICENSE("GPL v2");static struct workqueue_struct *i40e_wq; +static void netdev_hw_addr_refcnt (struct i40e_mac_filter *f, +struct net_device *netdev,int delta) +{ +struct netdev_hw_addr *ha; + +if (!f || !netdev) +return ; + +netdev_for_each_mc_addr (ha, netdev) { +if (ether_addr_equal (ha->addr, f->macaddr)) { + ha->refcount += delta; +if (ha->refcount <=0 ) + ha->refcount =1 ; +break ; + } + } +} +/** * i40e_allocate_dma_mem_d - OS specific memory alloc for shared code * @hw: pointer to the HW structure
@@ -2036,6 +2054,7 @@ static void i40e_undo_add_filter_entrieshlist_for_each_entry_safe (new, h, from, hlist) {/* We can simply free the wrapper structure */ hlist_del (&new->hlist); +netdev_hw_addr_refcnt (new->f, vsi->netdev,-1 );kfree (new); } }
@@ -2383,6 +2402,10 @@ int i40e_sync_vsi_filters(struct i40e_vs &tmp_add_list, &tmp_del_list, vlan_filters); + +hlist_for_each_entry (new, &tmp_add_list, hlist) +netdev_hw_addr_refcnt (new->f, vsi->netdev,1 ); +if (retval) goto err_no_memory_locked;
@@ -2515,6 +2538,7 @@ int i40e_sync_vsi_filters(struct i40e_vsif (new->f->state ==I40E_FILTER_NEW ) new->f->state = new->state;hlist_del (&new->hlist); +netdev_hw_addr_refcnt (new->f, vsi->netdev,-1 );kfree (new); }spin_unlock_bh (&vsi->mac_filter_hash_lock);
Greg Kroah-Hartman
maintainerPATCH 17/72 i40e: Fix for displaying message regarding NVM version
In reply to Greg Kroah-HartmanFrom: Mateusz Palczewski <[email protected]>
commit 40feded8a247f95957a0de9abd100085fb320a2f upstream.
When loading the i40e driver, it prints a message like: 'The driver for the device detected a newer version of the NVM image v1.x than expected v1.y. Please install the most recent version of the network driver.' This is misleading as the driver is working as expected.
Fix that by removing the second part of message and changing it from dev_info to dev_dbg.
--- drivers/net/ethernet/intel/i40e/i40e_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_main.c +2 -2
@@ -15475,8 +15475,8 @@ static int i40e_probe(struct pci_dev *pdif (hw->aq.api_maj_ver ==I40E_FW_API_VERSION_MAJOR && hw->aq.api_min_ver >I40E_FW_MINOR_VERSION (hw)) - dev_info(&pdev->dev, - "The driver for the device detected a newer version of the NVM image v%u.%u than expected v%u.%u. Please install the most recent version of the network driver.\n", + dev_dbg(&pdev->dev, + "The driver for the device detected a newer version of the NVM image v%u.%u than v%u.%u.\n", hw->aq.api_maj_ver, hw->aq.api_min_ver, I40E_FW_API_VERSION_MAJOR,
Greg Kroah-Hartman
maintainerPATCH 18/72 i40e: Fix incorrect netdevs real number of RX/TX queues
In reply to Greg Kroah-HartmanFrom: Jedrzej Jagielski <[email protected]>
commit e738451d78b2f8a9635d66c6a87f304b4d965f7a upstream.
There was a wrong queues representation in sysfs during driver's reinitialization in case of online cpus number is less than combined queues. It was caused by stopped NetworkManager, which is responsible for calling vsi_open function during driver's initialization.
In specific situation (ex. 12 cpus online) there were 16 queues in /sys/class/net/<iface>/queues. In case of modifying queues with value higher, than number of online cpus, then it caused write errors and other errors.
Add updating of sysfs's queues representation during driver initialization.
--- drivers/net/ethernet/intel/i40e/i40e_main.c | 32 +++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_main.c +25 -7
@@ -8741,6 +8741,27 @@ int i40e_open(struct net_device *netdev) }/** +* i40e_netif_set_realnum_tx_rx_queues - Update number of tx/rx queues +* @vsi: vsi structure +* +* This updates netdev's number of tx/rx queues +* +* Returns status of setting tx/rx queues +**/ +static int i40e_netif_set_realnum_tx_rx_queues (struct i40e_vsi *vsi) +{ +int ret; + + ret =netif_set_real_num_rx_queues (vsi->netdev, + vsi->num_queue_pairs); +if (ret) +return ret; + +return netif_set_real_num_tx_queues (vsi->netdev, + vsi->num_queue_pairs); +} + +/** * i40e_vsi_open - * @vsi: the VSI to open *
@@ -8776,13 +8797,7 @@ int i40e_vsi_open(struct i40e_vsi *vsi) goto err_setup_rx;/* Notify the stack of the actual queue counts. */ - err =netif_set_real_num_tx_queues (vsi->netdev, - vsi->num_queue_pairs); -if (err) - goto err_set_queues; - - err =netif_set_real_num_rx_queues (vsi->netdev, - vsi->num_queue_pairs); + err =i40e_netif_set_realnum_tx_rx_queues (vsi);if (err) goto err_set_queues;
@@ -14175,6 +14190,9 @@ struct i40e_vsi *i40e_vsi_setup(struct i ret =i40e_config_netdev (vsi);if (ret) goto err_netdev; + ret =i40e_netif_set_realnum_tx_rx_queues (vsi); +if (ret) + goto err_netdev; ret =register_netdev (vsi->netdev);if (ret) goto err_netdev;
Greg Kroah-Hartman
maintainerPATCH 19/72 ftrace/samples: Add missing prototypes direct functions
In reply to Greg Kroah-HartmanFrom: Jiri Olsa <[email protected]>
commit 0daf5cb217a9ca8ae91b8f966ddae322699fb71d upstream.
There's another compilation fail (first here [1]) reported by kernel test robot for W=1 clang build:
Quoted 1 line
Quoted 1 line
samples/ftrace/ftrace-direct-multi-modify.c:7:6: warning: no previous
prototype for function 'my_direct_func1' [-Wmissing-prototypes]
void my_direct_func1(unsigned long ip)
Direct functions in ftrace direct sample modules need to have prototypes defined. They are already global in order to be visible for the inline assembly, so there's no problem.
The kernel test robot reported just error for ftrace-direct-multi-modify, but I got same errors also for the rest of the modules touched by this patch.
[1] 67d4f6e3bf5d ftrace/samples: Add missing prototype for my_direct_func
--- samples/ftrace/ftrace-direct-modify.c | 3 +++ samples/ftrace/ftrace-direct-too.c | 3 +++ samples/ftrace/ftrace-direct.c | 2 ++ 3 files changed, 8 insertions(+)
samples/ftrace/ftrace-direct-modify.c +3 -0
@@ -3,6 +3,9 @@#include <linux/kthread.h> #include <linux/ftrace.h> +extern void my_direct_func1 (void ); +extern void my_direct_func2 (void ); +void my_direct_func1 (void ) {trace_printk ("my direct func1\n" );
samples/ftrace/ftrace-direct-too.c +3 -0
@@ -4,6 +4,9 @@#include <linux/mm.h> /* for handle_mm_fault() */ #include <linux/ftrace.h> +extern void my_direct_func (struct vm_area_struct *vma, +unsigned long address,unsigned int flags); +void my_direct_func (struct vm_area_struct *vma,unsigned long address,unsigned int flags) {
samples/ftrace/ftrace-direct.c +2 -0
@@ -4,6 +4,8 @@#include <linux/sched.h> /* for wake_up_process() */ #include <linux/ftrace.h> +extern void my_direct_func (struct task_struct *p); +void my_direct_func (struct task_struct *p) {trace_printk ("waking up %s-%d\n" , p->comm, p->pid);
Greg Kroah-Hartman
maintainerPATCH 20/72 ipv4: Check attribute length for RTA_GATEWAY in multipath route
In reply to Greg Kroah-HartmanFrom: David Ahern <[email protected]>
commit 7a3429bace0e08d94c39245631ea6bc109dafa49 upstream.
syzbot reported uninit-value:
============================================================
BUG: KMSAN: uninit-value in fib_get_nhs+0xac4/0x1f80 net/ipv4/fib_semantics.c:708 fib_get_nhs+0xac4/0x1f80 net/ipv4/fib_semantics.c:708 fib_create_info+0x2411/0x4870 net/ipv4/fib_semantics.c:1453 fib_table_insert+0x45c/0x3a10 net/ipv4/fib_trie.c:1224 inet_rtm_newroute+0x289/0x420 net/ipv4/fib_frontend.c:886
Add helper to validate RTA_GATEWAY length before using the attribute.
--- net/ipv4/fib_semantics.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-)
net/ipv4/fib_semantics.c +26 -3
@@ -662,6 +662,19 @@ static int fib_count_nexthops(struct rtnreturn nhs; } +static int fib_gw_from_attr (__be32 *gw,struct nlattr *nla, +struct netlink_ext_ack *extack) +{ +if (nla_len (nla) <sizeof (*gw)) { +NL_SET_ERR_MSG (extack,"Invalid IPv4 address in RTA_GATEWAY" ); +return -EINVAL ; + } + + *gw =nla_get_in_addr (nla); + +return 0 ; +} +/* only called when fib_nh is integrated into fib_info */ static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh, int remaining, struct fib_config *cfg,
@@ -704,7 +717,11 @@ static int fib_get_nhs(struct fib_info *return -EINVAL ; }if (nla) { - fib_cfg.fc_gw4 =nla_get_in_addr (nla); + ret =fib_gw_from_attr (&fib_cfg.fc_gw4, nla, + extack); +if (ret) + goto errout; +if (fib_cfg.fc_gw4) fib_cfg.fc_gw_family =AF_INET ; }else if (nlav) {
@@ -902,6 +919,7 @@ int fib_nh_match(struct net *net, struct attrlen =rtnh_attrlen (rtnh);if (attrlen >0 ) {struct nlattr *nla, *nlav, *attrs =rtnh_attrs (rtnh); +int err; nla =nla_find (attrs, attrlen,RTA_GATEWAY ); nlav =nla_find (attrs, attrlen,RTA_VIA );
@@ -912,12 +930,17 @@ int fib_nh_match(struct net *net, struct }if (nla) { +__be32 gw; + + err =fib_gw_from_attr (&gw, nla, extack); +if (err) +return err; +if (nh->fib_nh_gw_family !=AF_INET || -nla_get_in_addr (nla) != nh->fib_nh_gw4) + gw != nh->fib_nh_gw4)return 1 ; }else if (nlav) {struct fib_config cfg2; -int err; err =fib_gw_from_via (&cfg2, nlav, extack);if (err)
Greg Kroah-Hartman
maintainerPATCH 21/72 ipv4: Check attribute length for RTA_FLOW in multipath route
In reply to Greg Kroah-HartmanFrom: David Ahern <[email protected]>
commit 664b9c4b7392ce723b013201843264bf95481ce5 upstream.
Make sure RTA_FLOW is at least 4B before using.
--- net/ipv4/fib_semantics.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-)
net/ipv4/fib_semantics.c +14 -3
@@ -731,8 +731,13 @@ static int fib_get_nhs(struct fib_info * } nla =nla_find (attrs, attrlen,RTA_FLOW ); -if (nla) +if (nla) { +if (nla_len (nla) <sizeof (u32)) { +NL_SET_ERR_MSG (extack,"Invalid RTA_FLOW" ); +return -EINVAL ; + } fib_cfg.fc_flow =nla_get_u32 (nla); + } fib_cfg.fc_encap =nla_find (attrs, attrlen,RTA_ENCAP ); nla =nla_find (attrs, attrlen,RTA_ENCAP_TYPE );
@@ -963,8 +968,14 @@ int fib_nh_match(struct net *net, struct#ifdef CONFIG_IP_ROUTE_CLASSID nla =nla_find (attrs, attrlen,RTA_FLOW ); -if (nla &&nla_get_u32 (nla) != nh->nh_tclassid) -return 1 ; +if (nla) { +if (nla_len (nla) <sizeof (u32)) { +NL_SET_ERR_MSG (extack,"Invalid RTA_FLOW" ); +return -EINVAL ; + } +if (nla_get_u32 (nla) != nh->nh_tclassid) +return 1 ; + }#endif }
Greg Kroah-Hartman
maintainerPATCH 22/72 ipv6: Check attribute length for RTA_GATEWAY in multipath route
In reply to Greg Kroah-HartmanFrom: David Ahern <[email protected]>
commit 4619bcf91399f00a40885100fb61d594d8454033 upstream.
Commit referenced in the Fixes tag used nla_memcpy for RTA_GATEWAY as does the current nla_get_in6_addr. nla_memcpy protects against accessing memory greater than what is in the attribute, but there is no check requiring the attribute to have an IPv6 address. Add it.
--- net/ipv6/route.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-)
net/ipv6/route.c +20 -1
@@ -5224,6 +5224,19 @@ out:return should_notify; } +static int fib6_gw_from_attr (struct in6_addr *gw,struct nlattr *nla, +struct netlink_ext_ack *extack) +{ +if (nla_len (nla) <sizeof (*gw)) { +NL_SET_ERR_MSG (extack,"Invalid IPv6 address in RTA_GATEWAY" ); +return -EINVAL ; + } + + *gw =nla_get_in6_addr (nla); + +return 0 ; +} +static int ip6_route_multipath_add (struct fib6_config *cfg,struct netlink_ext_ack *extack) {
@@ -5264,7 +5277,13 @@ static int ip6_route_multipath_add(struc nla =nla_find (attrs, attrlen,RTA_GATEWAY );if (nla) { - r_cfg.fc_gateway =nla_get_in6_addr (nla); +int ret; + + ret =fib6_gw_from_attr (&r_cfg.fc_gateway, nla, + extack); +if (ret) +return ret; + r_cfg.fc_flags |=RTF_GATEWAY ; } r_cfg.fc_encap =nla_find (attrs, attrlen,RTA_ENCAP );
Greg Kroah-Hartman
maintainerPATCH 23/72 ipv6: Check attribute length for RTA_GATEWAY when deleting multipath route
In reply to Greg Kroah-HartmanFrom: David Ahern <[email protected]>
commit 1ff15a710a862db1101b97810af14aedc835a86a upstream.
Make sure RTA_GATEWAY for IPv6 multipath route has enough bytes to hold an IPv6 address.
--- net/ipv6/route.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
net/ipv6/route.c +5 -1
@@ -5453,7 +5453,11 @@ static int ip6_route_multipath_del(struc nla =nla_find (attrs, attrlen,RTA_GATEWAY );if (nla) { -nla_memcpy (&r_cfg.fc_gateway, nla,16 ); + err =fib6_gw_from_attr (&r_cfg.fc_gateway, nla, + extack); +if (err) +return err; + r_cfg.fc_flags |=RTF_GATEWAY ; } }
Greg Kroah-Hartman
maintainerPATCH 24/72 lwtunnel: Validate RTA_ENCAP_TYPE attribute length
In reply to Greg Kroah-HartmanFrom: David Ahern <[email protected]>
commit 8bda81a4d400cf8a72e554012f0d8c45e07a3904 upstream.
lwtunnel_valid_encap_type_attr is used to validate encap attributes within a multipath route. Add length validation checking to the type.
lwtunnel_valid_encap_type_attr is called converting attributes to fib{6,}_config struct which means it is used before fib_get_nhs, ip6_route_multipath_add, and ip6_route_multipath_del - other locations that use rtnh_ok and then nla_get_u16 on RTA_ENCAP_TYPE attribute.
--- net/core/lwtunnel.c | 4 ++++ net/ipv4/fib_semantics.c | 3 +++ net/ipv6/route.c | 4 ++++ 3 files changed, 11 insertions(+)
net/core/lwtunnel.c +4 -0
@@ -197,6 +197,10 @@ int lwtunnel_valid_encap_type_attr(struc nla_entype =nla_find (attrs, attrlen,RTA_ENCAP_TYPE );if (nla_entype) { +if (nla_len (nla_entype) <sizeof (u16)) { +NL_SET_ERR_MSG (extack,"Invalid RTA_ENCAP_TYPE" ); +return -EINVAL ; + } encap_type =nla_get_u16 (nla_entype); if (lwtunnel_valid_encap_type(encap_type,
net/ipv4/fib_semantics.c +3 -0
@@ -740,6 +740,9 @@ static int fib_get_nhs(struct fib_info * } fib_cfg.fc_encap =nla_find (attrs, attrlen,RTA_ENCAP ); +/* RTA_ENCAP_TYPE length checked in +* lwtunnel_valid_encap_type_attr +*/ nla =nla_find (attrs, attrlen,RTA_ENCAP_TYPE );if (nla) fib_cfg.fc_encap_type =nla_get_u16 (nla);
net/ipv6/route.c +4 -0
@@ -5287,6 +5287,10 @@ static int ip6_route_multipath_add(struc r_cfg.fc_flags |=RTF_GATEWAY ; } r_cfg.fc_encap =nla_find (attrs, attrlen,RTA_ENCAP ); + +/* RTA_ENCAP_TYPE length checked in +* lwtunnel_valid_encap_type_attr +*/ nla =nla_find (attrs, attrlen,RTA_ENCAP_TYPE );if (nla) r_cfg.fc_encap_type =nla_get_u16 (nla);
Greg Kroah-Hartman
maintainerPATCH 25/72 selftests: net: udpgro_fwd.sh: explicitly checking the available ping feature
In reply to Greg Kroah-HartmanFrom: Jianguo Wu <[email protected]>
commit 5e75d0b215b868337e7a193f28a543ec00e858b1 upstream.
As Paolo pointed out, the result of ping IPv6 address depends on the running distro. So explicitly checking the available ping feature, as e.g. do the bareudp.sh self-tests.
--- tools/testing/selftests/net/udpgro_fwd.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
tools/testing/selftests/net/udpgro_fwd.sh +2 -1
@@ -193,7 +193,8 @@ for family in 4 6; do SUFFIX="64 nodad" VXDEV=vxlan6 IPT=ip6tables - PING="ping6" + # Use ping6 on systems where ping doesn't handle IPv6 + ping -w 1 -c 1 ::1 > /dev/null 2>&1 || PING="ping6" fi echo "IPv$family"
Greg Kroah-Hartman
maintainerPATCH 26/72 sctp: hold endpoint before calling cb in sctp_transport_lookup_process
In reply to Greg Kroah-HartmanFrom: Xin Long <[email protected]>
commit f9d31c4cf4c11ff10317f038b9c6f7c3bda6cdd4 upstream.
The same fix in commit 5ec7d18d1813 ("sctp: use call_rcu to free endpoint") is also needed for dumping one asoc and sock after the lookup.
--- include/net/sctp/sctp.h | 3 +-- net/sctp/diag.c | 48 ++++++++++++++++++++++-------------------------- net/sctp/socket.c | 22 +++++++++++++++------- 3 files changed, 38 insertions(+), 35 deletions(-)
include/net/sctp/sctp.h +1 -2
@@ -112,8 +112,7 @@ struct sctp_transport *sctp_transport_ge struct rhashtable_iter *iter);struct sctp_transport *sctp_transport_get_idx (struct net *net,struct rhashtable_iter *iter,int pos); -int sctp_transport_lookup_process (int (*cb)(struct sctp_transport *,void *), -struct net *net, +int sctp_transport_lookup_process (sctp_callback_t cb,struct net *net,const union sctp_addr *laddr,const union sctp_addr *paddr,void *p); int sctp_transport_traverse_process(sctp_callback_t cb, sctp_callback_t cb_done,
net/sctp/diag.c +22 -26
92 lines not on this page · raw message
net/sctp/socket.c +15 -7
@@ -5317,23 +5317,31 @@ int sctp_for_each_endpoint(int (*cb)(str }EXPORT_SYMBOL_GPL (sctp_for_each_endpoint); -int sctp_transport_lookup_process (int (*cb)(struct sctp_transport *,void *), -struct net *net, +int sctp_transport_lookup_process (sctp_callback_t cb,struct net *net,const union sctp_addr *laddr,const union sctp_addr *paddr,void *p) {struct sctp_transport *transport; -int err; +struct sctp_endpoint *ep; +int err = -ENOENT ;rcu_read_lock (); transport =sctp_addrs_lookup_transport (net, laddr, paddr); +if (!transport) { +rcu_read_unlock (); +return err; + } + ep = transport->asoc->ep; +if (!sctp_endpoint_hold (ep)) {/* asoc can be peeled off */ +sctp_transport_put (transport); +rcu_read_unlock (); +return err; + }rcu_read_unlock (); -if (!transport) -return -ENOENT ; - err =cb (transport, p); + err =cb (ep, transport, p); +sctp_endpoint_put (ep);sctp_transport_put (transport); -return err; }EXPORT_SYMBOL_GPL (sctp_transport_lookup_process);
Greg Kroah-Hartman
maintainerPATCH 27/72 batman-adv: mcast: dont send link-local multicast to mcast routers
In reply to Greg Kroah-HartmanFrom: Linus Lüssing <[email protected]>
commit 938f2e0b57ffe8a6df71e1e177b2978b1b33fe5e upstream.
The addition of routable multicast TX handling introduced a bug/regression for packets with a link-local multicast destination:
These packets would be sent to all batman-adv nodes with a multicast router and to all batman-adv nodes with an old version without multicast router detection.
This even disregards the batman-adv multicast fanout setting, which can potentially lead to an unwanted, high number of unicast transmissions or even congestion.
Fixing this by avoiding to send link-local multicast packets to nodes in the multicast router list.
--- net/batman-adv/multicast.c | 15 ++++++++++----- net/batman-adv/multicast.h | 10 ++++++---- net/batman-adv/soft-interface.c | 7 +++++-- 3 files changed, 21 insertions(+), 11 deletions(-)
net/batman-adv/multicast.c +10 -5
@@ -1339,6 +1339,7 @@ batadv_mcast_forw_rtr_node_get(struct ba* @bat_priv: the bat priv with all the soft interface information * @skb: The multicast packet to check * @orig: an originator to be set to forward the skb to +* @is_routable: stores whether the destination is routable * * Return: the forwarding mode as enum batadv_forw_mode and in case of * BATADV_FORW_SINGLE set the orig to the single originator the skb
@@ -1346,17 +1347,16 @@ batadv_mcast_forw_rtr_node_get(struct ba*/ enum batadv_forw_mode batadv_mcast_forw_mode (struct batadv_priv *bat_priv,struct sk_buff *skb, -struct batadv_orig_node **orig) +struct batadv_orig_node **orig,int *is_routable) {int ret, tt_count, ip_count, unsnoop_count, total_count;bool is_unsnoopable = false;unsigned int mcast_fanout;struct ethhdr *ethhdr; -int is_routable =0 ;int rtr_count =0 ; ret =batadv_mcast_forw_mode_check (bat_priv, skb, &is_unsnoopable, - &is_routable); + is_routable);if (ret == -ENOMEM )return BATADV_FORW_NONE ;else if (ret <0 )
@@ -1369,7 +1369,7 @@ batadv_mcast_forw_mode(struct batadv_pri ip_count =batadv_mcast_forw_want_all_ip_count (bat_priv, ethhdr); unsnoop_count = !is_unsnoopable ?0 :atomic_read (&bat_priv->mcast.num_want_all_unsnoopables); - rtr_count =batadv_mcast_forw_rtr_count (bat_priv, is_routable); + rtr_count =batadv_mcast_forw_rtr_count (bat_priv, *is_routable); total_count = tt_count + ip_count + unsnoop_count + rtr_count;
@@ -1689,6 +1689,7 @@ batadv_mcast_forw_want_rtr(struct batadv* @bat_priv: the bat priv with all the soft interface information * @skb: the multicast packet to transmit * @vid: the vlan identifier +* @is_routable: stores whether the destination is routable * * Sends copies of a frame with multicast destination to any node that signaled * interest in it, that is either via the translation table or the according
@@ -1701,7 +1702,7 @@ batadv_mcast_forw_want_rtr(struct batadv* is neither IPv4 nor IPv6. NET_XMIT_SUCCESS otherwise. */ int batadv_mcast_forw_send (struct batadv_priv *bat_priv,struct sk_buff *skb, -unsigned short vid) +unsigned short vid,int is_routable) {int ret;
@@ -1717,12 +1718,16 @@ int batadv_mcast_forw_send(struct batadvreturn ret; } +if (!is_routable) + goto skip_mc_router; + ret =batadv_mcast_forw_want_rtr (bat_priv, skb, vid);if (ret !=NET_XMIT_SUCCESS ) {kfree_skb (skb);return ret; } +skip_mc_router:consume_skb (skb);return ret; }
net/batman-adv/multicast.h +6 -4
@@ -43,7 +43,8 @@ enum batadv_forw_mode {enum batadv_forw_mode batadv_mcast_forw_mode (struct batadv_priv *bat_priv,struct sk_buff *skb, -struct batadv_orig_node **mcast_single_orig); +struct batadv_orig_node **mcast_single_orig, +int *is_routable); int batadv_mcast_forw_send_orig(struct batadv_priv *bat_priv, struct sk_buff *skb,
@@ -51,7 +52,7 @@ int batadv_mcast_forw_send_orig(struct b struct batadv_orig_node *orig_node);int batadv_mcast_forw_send (struct batadv_priv *bat_priv,struct sk_buff *skb, -unsigned short vid); +unsigned short vid,int is_routable);void batadv_mcast_init (struct batadv_priv *bat_priv);
@@ -68,7 +69,8 @@ void batadv_mcast_purge_orig(struct batastatic inline enum batadv_forw_mode batadv_mcast_forw_mode (struct batadv_priv *bat_priv,struct sk_buff *skb, -struct batadv_orig_node **mcast_single_orig) +struct batadv_orig_node **mcast_single_orig, +int *is_routable) {return BATADV_FORW_ALL ; }
@@ -85,7 +87,7 @@ batadv_mcast_forw_send_orig(struct batadstatic inline int batadv_mcast_forw_send (struct batadv_priv *bat_priv,struct sk_buff *skb, -unsigned short vid) +unsigned short vid,int is_routable) {kfree_skb (skb);return NET_XMIT_DROP ;
net/batman-adv/soft-interface.c +5 -2
@@ -198,6 +198,7 @@ static netdev_tx_t batadv_interface_tx(sint gw_mode;enum batadv_forw_mode forw_mode =BATADV_FORW_SINGLE ;struct batadv_orig_node *mcast_single_orig =NULL ; +int mcast_is_routable =0 ;int network_offset =ETH_HLEN ;__be16 proto;
@@ -300,7 +301,8 @@ static netdev_tx_t batadv_interface_tx(s send:if (do_bcast && !is_broadcast_ether_addr (ethhdr->h_dest)) { forw_mode =batadv_mcast_forw_mode (bat_priv, skb, - &mcast_single_orig); + &mcast_single_orig, + &mcast_is_routable);if (forw_mode ==BATADV_FORW_NONE ) goto dropped;
@@ -359,7 +361,8 @@ send: ret =batadv_mcast_forw_send_orig (bat_priv, skb, vid, mcast_single_orig); }else if (forw_mode ==BATADV_FORW_SOME ) { - ret =batadv_mcast_forw_send (bat_priv, skb, vid); + ret =batadv_mcast_forw_send (bat_priv, skb, vid, + mcast_is_routable); }else {if (batadv_dat_snoop_outgoing_arp_request (bat_priv, skb))
Greg Kroah-Hartman
maintainerPATCH 28/72 sch_qfq: prevent shift-out-of-bounds in qfq_init_qdisc
In reply to Greg Kroah-HartmanFrom: Eric Dumazet <[email protected]>
commit 7d18a07897d07495ee140dd319b0e9265c0f68ba upstream.
tx_queue_len can be set to ~0U, we need to be more careful about overflows.
__fls(0) is undefined, as this report shows:
UBSAN: shift-out-of-bounds in net/sched/sch_qfq.c:1430:24 shift exponent 51770272 is too large for 32-bit type 'int' CPU: 0 PID: 25574 Comm: syz-executor.0 Not tainted 5.16.0-rc7-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x201/0x2d8 lib/dump_stack.c:106 ubsan_epilogue lib/ubsan.c:151 [inline] __ubsan_handle_shift_out_of_bounds+0x494/0x530 lib/ubsan.c:330 qfq_init_qdisc+0x43f/0x450 net/sched/sch_qfq.c:1430 qdisc_create+0x895/0x1430 net/sched/sch_api.c:1253 tc_modify_qdisc+0x9d9/0x1e20 net/sched/sch_api.c:1660 rtnetlink_rcv_msg+0x934/0xe60 net/core/rtnetlink.c:5571 netlink_rcv_skb+0x200/0x470 net/netlink/af_netlink.c:2496 netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline] netlink_unicast+0x814/0x9f0 net/netlink/af_netlink.c:1345 netlink_sendmsg+0xaea/0xe60 net/netlink/af_netlink.c:1921 sock_sendmsg_nosec net/socket.c:704 [inline] sock_sendmsg net/socket.c:724 [inline] ____sys_sendmsg+0x5b9/0x910 net/socket.c:2409 ___sys_sendmsg net/socket.c:2463 [inline] __sys_sendmsg+0x280/0x370 net/socket.c:2492 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x44/0xd0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x44/0xae
--- net/sched/sch_qfq.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
net/sched/sch_qfq.c +2 -4
@@ -1422,10 +1422,8 @@ static int qfq_init_qdisc(struct Qdisc *if (err <0 )return err; -if (qdisc_dev (sch)->tx_queue_len +1 >QFQ_MAX_AGG_CLASSES ) - max_classes =QFQ_MAX_AGG_CLASSES ; -else - max_classes =qdisc_dev (sch)->tx_queue_len +1 ; + max_classes =min_t (u64, (u64 )qdisc_dev (sch)->tx_queue_len +1 , +QFQ_MAX_AGG_CLASSES );/* max_cl_shift = floor(log_2(max_classes)) */ max_cl_shift =__fls (max_classes); q->max_agg_classes =1 <<max_cl_shift;
Greg Kroah-Hartman
maintainerPATCH 29/72 net: ena: Fix undefined state when tx request id is out of bounds
In reply to Greg Kroah-HartmanFrom: Arthur Kiyanovski <[email protected]>
commit c255a34e02efb1393d23ffb205ba1a11320aeffb upstream.
ena_com_tx_comp_req_id_get() checks the req_id of a received completion, and if it is out of bounds returns -EINVAL. This is a sign that something is wrong with the device and it needs to be reset.
The current code does not reset the device in this case, which leaves the driver in an undefined state, where this completion is not properly handled.
This commit adds a call to handle_invalid_req_id() in ena_clean_tx_irq() and ena_clean_xdp_irq() which resets the device to fix the issue.
This commit also removes unnecessary request id checks from validate_tx_req_id() and validate_xdp_req_id(). This check is unneeded because it was already performed in ena_com_tx_comp_req_id_get(), which is called right before these functions.
--- drivers/net/ethernet/amazon/ena/ena_netdev.c | 34 +++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-)
drivers/net/ethernet/amazon/ena/ena_netdev.c +20 -14
@@ -1288,26 +1288,22 @@ static int handle_invalid_req_id(structstatic int validate_tx_req_id (struct ena_ring *tx_ring,u16 req_id) { -struct ena_tx_buffer *tx_info =NULL ; +struct ena_tx_buffer *tx_info; -if (likely (req_id < tx_ring->ring_size)) { - tx_info = &tx_ring->tx_buffer_info[req_id]; -if (likely (tx_info->skb)) -return 0 ; - } + tx_info = &tx_ring->tx_buffer_info[req_id]; +if (likely (tx_info->skb)) +return 0 ;return handle_invalid_req_id (tx_ring, req_id, tx_info, false); }static int validate_xdp_req_id (struct ena_ring *xdp_ring,u16 req_id) { -struct ena_tx_buffer *tx_info =NULL ; +struct ena_tx_buffer *tx_info; -if (likely (req_id < xdp_ring->ring_size)) { - tx_info = &xdp_ring->tx_buffer_info[req_id]; -if (likely (tx_info->xdpf)) -return 0 ; - } + tx_info = &xdp_ring->tx_buffer_info[req_id]; +if (likely (tx_info->xdpf)) +return 0 ;return handle_invalid_req_id (xdp_ring, req_id, tx_info, true); }
@@ -1332,9 +1328,14 @@ static int ena_clean_tx_irq(struct ena_r rc =ena_com_tx_comp_req_id_get (tx_ring->ena_com_io_cq, &req_id); -if (rc) +if (rc) { +if (unlikely (rc == -EINVAL )) +handle_invalid_req_id (tx_ring, req_id,NULL , + false);break ; + } +/* validate that the request id points to a valid skb */ rc =validate_tx_req_id (tx_ring, req_id);if (rc)break ;
@@ -1896,9 +1897,14 @@ static int ena_clean_xdp_irq(struct ena_ rc =ena_com_tx_comp_req_id_get (xdp_ring->ena_com_io_cq, &req_id); -if (rc) +if (rc) { +if (unlikely (rc == -EINVAL )) +handle_invalid_req_id (xdp_ring, req_id,NULL , + true);break ; + } +/* validate that the request id points to a valid xdp_frame */ rc =validate_xdp_req_id (xdp_ring, req_id);if (rc)break ;
Greg Kroah-Hartman
maintainerPATCH 30/72 net: ena: Fix wrong rx request id by resetting device
In reply to Greg Kroah-HartmanFrom: Arthur Kiyanovski <[email protected]>
commit cb3d4f98f0b26eafa0b913ac3716e4714254a747 upstream.
A wrong request id received from the device is a sign that something is wrong with it, therefore trigger a device reset.
Also add some debug info to the "Page is NULL" print to make it easier to debug.
--- drivers/net/ethernet/amazon/ena/ena_netdev.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
drivers/net/ethernet/amazon/ena/ena_netdev.c +9 -2
@@ -1428,6 +1428,7 @@ static struct sk_buff *ena_rx_skb(struct u16 *next_to_clean) {struct ena_rx_buffer *rx_info; +struct ena_adapter *adapter;u16 len, req_id, buf =0 ;struct sk_buff *skb;void *page_addr;
@@ -1440,8 +1441,14 @@ static struct sk_buff *ena_rx_skb(struct rx_info = &rx_ring->rx_buffer_info[req_id];if (unlikely (!rx_info->page)) { -netif_err (rx_ring->adapter, rx_err, rx_ring->netdev, -"Page is NULL\n" ); + adapter = rx_ring->adapter; +netif_err (adapter, rx_err, rx_ring->netdev, +"Page is NULL. qid %u req_id %u\n" , rx_ring->qid, req_id); +ena_increase_stat (&rx_ring->rx_stats.bad_req_id,1 , &rx_ring->syncp); + adapter->reset_reason =ENA_REGS_RESET_INV_RX_REQ_ID ; +/* Make sure reset reason is set before triggering the reset */ +smp_mb__before_atomic (); +set_bit (ENA_FLAG_TRIGGER_RESET , &adapter->flags);return NULL ; }
Greg Kroah-Hartman
maintainerPATCH 31/72 net: ena: Fix error handling when calculating max IO queues number
In reply to Greg Kroah-HartmanFrom: Arthur Kiyanovski <[email protected]>
commit 5055dc0348b8b7c168e3296044bccd724e1ae6cd upstream.
The role of ena_calc_max_io_queue_num() is to return the number of queues supported by the device, which means the return value should be >=0.
The function that calls ena_calc_max_io_queue_num(), checks the return value. If it is 0, it means the device reported it supports 0 IO queues. This case is considered an error and is handled by the calling function accordingly.
However the current implementation of ena_calc_max_io_queue_num() is wrong, since when it detects the device supports 0 IO queues, it returns -EFAULT.
In such a case the calling function doesn't detect the error, and therefore doesn't handle it.
This commit changes ena_calc_max_io_queue_num() to return 0 in case the device reported it supports 0 queues, allowing the calling function to properly handle the error case.
--- drivers/net/ethernet/amazon/ena/ena_netdev.c | 4 ---- 1 file changed, 4 deletions(-)
drivers/net/ethernet/amazon/ena/ena_netdev.c +0 -4
@@ -4026,10 +4026,6 @@ static u32 ena_calc_max_io_queue_num(str max_num_io_queues =min_t (u32, max_num_io_queues, io_tx_cq_num);/* 1 IRQ for mgmnt and 1 IRQs for each IO direction */ max_num_io_queues =min_t (u32, max_num_io_queues,pci_msix_vec_count (pdev) -1 ); -if (unlikely (!max_num_io_queues)) { -dev_err (&pdev->dev,"The device doesn't have io queues\n" ); -return -EFAULT ; - }return max_num_io_queues; }
Greg Kroah-Hartman
maintainerPATCH 32/72 md/raid1: fix missing bitmap update w/o WriteMostly devices
In reply to Greg Kroah-HartmanFrom: Song Liu <[email protected]>
commit 46669e8616c649c71c4cfcd712fd3d107e771380 upstream.
commit [1] causes missing bitmap updates when there isn't any WriteMostly devices.
Detailed steps to reproduce by Norbert (which somehow didn't make to lore):
# setup md10 (raid1) with two drives (1 GByte sparse files) dd if=/dev/zero of=disk1 bs=1024k seek=1024 count=0 dd if=/dev/zero of=disk2 bs=1024k seek=1024 count=0
losetup /dev/loop11 disk1
losetup /dev/loop12 disk2
mdadm --create /dev/md10 --level=1 --raid-devices=2 /dev/loop11 /dev/loop12 # add bitmap (aka write-intent log) mdadm /dev/md10 --grow --bitmap=internal
echo check > /sys/block/md10/md/sync_action
root:# cat /sys/block/md10/md/mismatch_cnt
0
root:#
# remove member drive disk2 (loop12) mdadm /dev/md10 -f loop12 ; mdadm /dev/md10 -r loop12
# modify degraded md device dd if=/dev/urandom of=/dev/md10 bs=512 count=1
# no blocks recorded as out of sync on the remaining member disk1/loop11
root:# mdadm -X /dev/loop11 | grep Bitmap
Bitmap : 16 bits (chunks), 0 dirty (0.0%)
root:## re-add disk2, nothing synced because of empty bitmap mdadm /dev/md10 --re-add /dev/loop12
# check integrity again echo check > /sys/block/md10/md/sync_action
# disk1 and disk2 are no longer in sync, reads return differend data root:# cat /sys/block/md10/md/mismatch_cnt 128 root:#
# clean up mdadm -S /dev/md10 losetup -d /dev/loop11 losetup -d /dev/loop12 rm disk1 disk2
Fix this by moving the WriteMostly check to the if condition for alloc_behind_master_bio().
[1] commit fd3b6975e9c1 ("md/raid1: only allocate write behind bio for WriteMostly device")
--- drivers/md/raid1.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/md/raid1.c +2 -1
@@ -1496,12 +1496,13 @@ static void raid1_write_request(struct mif (!r1_bio->bios[i])continue ; -if (first_clone &&test_bit (WriteMostly, &rdev->flags)) { +if (first_clone) {/* do behind I/O ? * Not if there are too many, or cannot * allocate memory, or a reader on WriteMostly * is waiting for behind writes to flush */ if (bitmap && +test_bit (WriteMostly, &rdev->flags) && (atomic_read (&bitmap->behind_writes) < mddev->bitmap_info.max_write_behind) && !waitqueue_active (&bitmap->behind_wait)) {
Greg Kroah-Hartman
maintainerPATCH 33/72 EDAC/i10nm: Release mdev/mbase when failing to detect HBM
In reply to Greg Kroah-HartmanFrom: Qiuxu Zhuo <[email protected]>
commit c370baa328022cbd46c59c821d1b467a97f047be upstream.
On systems without HBM (High Bandwidth Memory) mdev/mbase are not released/unmapped.
Add the code to release mdev/mbase when failing to detect HBM.
[Tony: re-word commit message]
--- drivers/edac/i10nm_base.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/edac/i10nm_base.c +9 -0
@@ -358,6 +358,9 @@ static int i10nm_get_hbm_munits(void) mbase =ioremap (base + off,I10NM_HBM_IMC_MMIO_SIZE );if (!mbase) { +pci_dev_put (d->imc[lmc].mdev); + d->imc[lmc].mdev =NULL ; +i10nm_printk (KERN_ERR ,"Failed to ioremap for hbm mc 0x%llx\n" , base + off);return -ENOMEM ;
@@ -368,6 +371,12 @@ static int i10nm_get_hbm_munits(void) mcmtr =I10NM_GET_MCMTR (&d->imc[lmc],0 );if (!I10NM_IS_HBM_IMC (mcmtr)) { +iounmap (d->imc[lmc].mbase); + d->imc[lmc].mbase =NULL ; + d->imc[lmc].hbm_mc = false; +pci_dev_put (d->imc[lmc].mdev); + d->imc[lmc].mdev =NULL ; +i10nm_printk (KERN_ERR ,"This isn't an hbm mc!\n" );return -ENODEV ; }
Greg Kroah-Hartman
maintainerPATCH 34/72 KVM: x86: Check for rmaps allocation
In reply to Greg Kroah-HartmanFrom: Nikunj A Dadhania <[email protected]>
commit fffb5323780786c81ba005f8b8603d4a558aad28 upstream.
With TDP MMU being the default now, access to mmu_rmaps_stat debugfs file causes following oops:
BUG: kernel NULL pointer dereference, address: 0000000000000000 PGD 0 P4D 0 Oops: 0000 [#1] PREEMPT SMP NOPTI CPU: 7 PID: 3185 Comm: cat Not tainted 5.16.0-rc4+ #204 RIP: 0010:pte_list_count+0x6/0x40 Call Trace: <TASK> ? kvm_mmu_rmaps_stat_show+0x15e/0x320 seq_read_iter+0x126/0x4b0 ? aa_file_perm+0x124/0x490 seq_read+0xf5/0x140 full_proxy_read+0x5c/0x80 vfs_read+0x9f/0x1a0 ksys_read+0x67/0xe0 __x64_sys_read+0x19/0x20 do_syscall_64+0x3b/0xc0 entry_SYSCALL_64_after_hwframe+0x44/0xae RIP: 0033:0x7fca6fc13912
Return early when rmaps are not present.
Message-Id: <[email protected]>
--- arch/x86/kvm/debugfs.c | 3 +++ 1 file changed, 3 insertions(+)
arch/x86/kvm/debugfs.c +3 -0
@@ -95,6 +95,9 @@ static int kvm_mmu_rmaps_stat_show(strucunsigned int *log[KVM_NR_PAGE_SIZES ], *cur;int i, j, k, l, ret; +if (!kvm_memslots_have_rmaps (kvm)) +return 0 ; + ret = -ENOMEM ;memset (log,0 ,sizeof (log));for (i =0 ; i <KVM_NR_PAGE_SIZES ; i++) {
Greg Kroah-Hartman
maintainerPATCH 35/72 cgroup: Use open-time credentials for process migraton perm checks
In reply to Greg Kroah-HartmanFrom: Tejun Heo <[email protected]>
commit 1756d7994ad85c2479af6ae5a9750b92324685af upstream.
cgroup process migration permission checks are performed at write time as whether a given operation is allowed or not is dependent on the content of the write - the PID. This currently uses current's credentials which is a potential security weakness as it may allow scenarios where a less privileged process tricks a more privileged one into writing into a fd that it created.
This patch makes both cgroup2 and cgroup1 process migration interfaces to use the credentials saved at the time of open (file->f_cred) instead of current's.
--- kernel/cgroup/cgroup-v1.c | 7 ++++--- kernel/cgroup/cgroup.c | 9 ++++++++- 2 files changed, 12 insertions(+), 4 deletions(-)
kernel/cgroup/cgroup-v1.c +4 -3
@@ -507,10 +507,11 @@ static ssize_t __cgroup1_procs_write(str goto out_unlock;/* -* Even if we're attaching all tasks in the thread group, we only -* need to check permissions on one of them. +* Even if we're attaching all tasks in the thread group, we only need +* to check permissions on one of them. Check permissions using the +* credentials from file open to protect against inherited fd attacks. */ - cred =current_cred (); + cred = of->file->f_cred; tcred =get_task_cred (task); if (!uid_eq(cred->euid, GLOBAL_ROOT_UID) && !uid_eq(cred->euid, tcred->uid) &&
kernel/cgroup/cgroup.c +8 -1
@@ -4892,6 +4892,7 @@ static ssize_t __cgroup_procs_write(stru {struct cgroup *src_cgrp, *dst_cgrp;struct task_struct *task; +const struct cred *saved_cred;ssize_t ret;bool locked;
@@ -4909,9 +4910,15 @@ static ssize_t __cgroup_procs_write(stru src_cgrp =task_cgroup_from_root (task, &cgrp_dfl_root);spin_unlock_irq (&css_set_lock); -/* process and thread migrations follow same delegation rule */ +/* +* Process and thread migrations follow same delegation rule. Check +* permissions using the credentials from file open to protect against +* inherited fd attacks. +*/ + saved_cred =override_creds (of->file->f_cred); ret =cgroup_attach_permissions (src_cgrp, dst_cgrp, of->file->f_path.dentry->d_sb, threadgroup); +revert_creds (saved_cred);if (ret) goto out_finish;
Greg Kroah-Hartman
maintainerPATCH 36/72 cgroup: Allocate cgroup_file_ctx for kernfs_open_file->priv
In reply to Greg Kroah-HartmanFrom: Tejun Heo <[email protected]>
commit 0d2b5955b36250a9428c832664f2079cbf723bec upstream.
of->priv is currently used by each interface file implementation to store private information. This patch collects the current two private data usages into struct cgroup_file_ctx which is allocated and freed by the common path. This allows generic private data which applies to multiple files, which will be used to in the following patch.
Note that cgroup_procs iterator is now embedded as procs.iter in the new cgroup_file_ctx so that it doesn't need to be allocated and freed separately.
v2: union dropped from cgroup_file_ctx and the procs iterator is embedded in
cgroup_file_ctx as suggested by Linus.
v3: Michal pointed out that cgroup1's procs pidlist uses of->priv too.
Converted. Didn't change to embedded allocation as cgroup1 pidlists get stored for caching.
--- kernel/cgroup/cgroup-internal.h | 17 ++++++++++++ kernel/cgroup/cgroup-v1.c | 26 ++++++++++--------- kernel/cgroup/cgroup.c | 53 +++++++++++++++++++++++++--------------- 3 files changed, 65 insertions(+), 31 deletions(-)
kernel/cgroup/cgroup-internal.h +17 -0
@@ -65,6 +65,23 @@ static inline struct cgroup_fs_context * return container_of(kfc, struct cgroup_fs_context, kfc); } +struct cgroup_pidlist ; + +struct cgroup_file_ctx { +struct { +void *trigger; + } psi; + +struct { +bool started; +struct css_task_iter iter; + } procs; + +struct { +struct cgroup_pidlist *pidlist; + } procs1; +}; +/* * A cgroup can be associated with multiple css_sets as different tasks may * belong to different cgroups on different hierarchies. In the other
kernel/cgroup/cgroup-v1.c +14 -12
@@ -397,6 +397,7 @@ static void *cgroup_pidlist_start(struct* next pid to display, if any */ struct kernfs_open_file *of = s->private; +struct cgroup_file_ctx *ctx = of->priv;struct cgroup *cgrp =seq_css (s)->cgroup;struct cgroup_pidlist *l;enum cgroup_filetype type =seq_cft (s)->private;
@@ -406,25 +407,24 @@ static void *cgroup_pidlist_start(structmutex_lock (&cgrp->pidlist_mutex);/* -* !NULL @of->priv indicates that this isn't the first start() -* after open. If the matching pidlist is around, we can use that. -* Look for it. Note that @of->priv can't be used directly. It -* could already have been destroyed. +* !NULL @ctx->procs1.pidlist indicates that this isn't the first +* start() after open. If the matching pidlist is around, we can use +* that. Look for it. Note that @ctx->procs1.pidlist can't be used +* directly. It could already have been destroyed. */ -if (of->priv) - of->priv =cgroup_pidlist_find (cgrp, type); +if (ctx->procs1.pidlist) + ctx->procs1.pidlist =cgroup_pidlist_find (cgrp, type);/* * Either this is the first start() after open or the matching * pidlist has been destroyed inbetween. Create a new one. */ -if (!of->priv) { - ret =pidlist_array_load (cgrp, type, - (struct cgroup_pidlist **)&of->priv); +if (!ctx->procs1.pidlist) { + ret =pidlist_array_load (cgrp, type, &ctx->procs1.pidlist);if (ret)return ERR_PTR (ret); } - l = of->priv; + l = ctx->procs1.pidlist;if (pid) {int end = l->length;
@@ -452,7 +452,8 @@ static void *cgroup_pidlist_start(structstatic void cgroup_pidlist_stop (struct seq_file *s,void *v) {struct kernfs_open_file *of = s->private; -struct cgroup_pidlist *l = of->priv; +struct cgroup_file_ctx *ctx = of->priv; +struct cgroup_pidlist *l = ctx->procs1.pidlist;if (l) mod_delayed_work(cgroup_pidlist_destroy_wq, &l->destroy_dwork,
@@ -463,7 +464,8 @@ static void cgroup_pidlist_stop(struct sstatic void *cgroup_pidlist_next (struct seq_file *s,void *v,loff_t *pos) {struct kernfs_open_file *of = s->private; -struct cgroup_pidlist *l = of->priv; +struct cgroup_file_ctx *ctx = of->priv; +struct cgroup_pidlist *l = ctx->procs1.pidlist;pid_t *p = v;pid_t *end = l->list + l->length;/*
kernel/cgroup/cgroup.c +34 -19
119 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 37/72 cgroup: Use open-time cgroup namespace for process migration perm checks
In reply to Greg Kroah-HartmanFrom: Tejun Heo <[email protected]>
commit e57457641613fef0d147ede8bd6a3047df588b95 upstream.
cgroup process migration permission checks are performed at write time as whether a given operation is allowed or not is dependent on the content of the write - the PID. This currently uses current's cgroup namespace which is a potential security weakness as it may allow scenarios where a less privileged process tricks a more privileged one into writing into a fd that it created.
This patch makes cgroup remember the cgroup namespace at the time of open and uses it for migration permission checks instad of current's. Note that this only applies to cgroup2 as cgroup1 doesn't have namespace support.
This also fixes a use-after-free bug on cgroupns reported in
https://lore.kernel.org/r/[email protected]
Note that backporting this fix also requires the preceding patch.
--- kernel/cgroup/cgroup-internal.h | 2 ++ kernel/cgroup/cgroup.c | 28 +++++++++++++++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-)
kernel/cgroup/cgroup-internal.h +2 -0
@@ -68,6 +68,8 @@ static inline struct cgroup_fs_context *struct cgroup_pidlist ;struct cgroup_file_ctx { +struct cgroup_namespace *ns; +struct {void *trigger; } psi;
kernel/cgroup/cgroup.c +19 -9
@@ -3822,14 +3822,19 @@ static int cgroup_file_open(struct kernf ctx =kzalloc (sizeof (*ctx),GFP_KERNEL );if (!ctx)return -ENOMEM ; + + ctx->ns = current->nsproxy->cgroup_ns; +get_cgroup_ns (ctx->ns); of->priv = ctx;if (!cft->open)return 0 ; ret = cft->open (of); -if (ret) +if (ret) { +put_cgroup_ns (ctx->ns);kfree (ctx); + }return ret; }
@@ -3840,13 +3845,14 @@ static void cgroup_file_release(struct kif (cft->release) cft->release (of); +put_cgroup_ns (ctx->ns);kfree (ctx); }static ssize_t cgroup_file_write (struct kernfs_open_file *of,char *buf,size_t nbytes,loff_t off) { -struct cgroup_namespace *ns = current->nsproxy->cgroup_ns; +struct cgroup_file_ctx *ctx = of->priv;struct cgroup *cgrp = of->kn->parent->priv;struct cftype *cft =of_cft (of);struct cgroup_subsys_state *css;
@@ -3863,7 +3869,7 @@ static ssize_t cgroup_file_write(struct*/ if ((cgrp->root->flags &CGRP_ROOT_NS_DELEGATE ) && !(cft->flags &CFTYPE_NS_DELEGATABLE ) && - ns != &init_cgroup_ns && ns->root_cset->dfl_cgrp == cgrp) + ctx->ns != &init_cgroup_ns && ctx->ns->root_cset->dfl_cgrp == cgrp)return -EPERM ;if (cft->write)
@@ -4853,9 +4859,9 @@ static int cgroup_may_write(const structstatic int cgroup_procs_write_permission (struct cgroup *src_cgrp,struct cgroup *dst_cgrp, -struct super_block *sb) +struct super_block *sb, +struct cgroup_namespace *ns) { -struct cgroup_namespace *ns = current->nsproxy->cgroup_ns;struct cgroup *com_cgrp = src_cgrp;int ret;
@@ -4884,11 +4890,12 @@ static int cgroup_procs_write_permissionstatic int cgroup_attach_permissions (struct cgroup *src_cgrp,struct cgroup *dst_cgrp, -struct super_block *sb,bool threadgroup) +struct super_block *sb,bool threadgroup, +struct cgroup_namespace *ns) {int ret =0 ; - ret =cgroup_procs_write_permission (src_cgrp, dst_cgrp, sb); + ret =cgroup_procs_write_permission (src_cgrp, dst_cgrp, sb, ns);if (ret)return ret;
@@ -4905,6 +4912,7 @@ static int cgroup_attach_permissions(strstatic ssize_t __cgroup_procs_write (struct kernfs_open_file *of,char *buf,bool threadgroup) { +struct cgroup_file_ctx *ctx = of->priv;struct cgroup *src_cgrp, *dst_cgrp;struct task_struct *task;const struct cred *saved_cred;
@@ -4932,7 +4940,8 @@ static ssize_t __cgroup_procs_write(stru*/ saved_cred =override_creds (of->file->f_cred); ret =cgroup_attach_permissions (src_cgrp, dst_cgrp, - of->file->f_path.dentry->d_sb, threadgroup); + of->file->f_path.dentry->d_sb, + threadgroup, ctx->ns);revert_creds (saved_cred);if (ret) goto out_finish;
@@ -6149,7 +6158,8 @@ static int cgroup_css_set_fork(struct ke goto err; ret =cgroup_attach_permissions (cset->dfl_cgrp, dst_cgrp, sb, - !(kargs->flags &CLONE_THREAD )); + !(kargs->flags &CLONE_THREAD ), + current->nsproxy->cgroup_ns);if (ret) goto err;
Greg Kroah-Hartman
maintainerPATCH 38/72 Revert "i2c: core: support bus regulator controlling in adapter"
In reply to Greg Kroah-HartmanFrom: Wolfram Sang <[email protected]>
commit a19f75de73c220b4496d2aefb7a605dd032f7c01 upstream.
This largely reverts commit 5a7b95fb993ec399c8a685552aa6a8fc995c40bd. It breaks suspend with AMD GPUs, and we couldn't incrementally fix it. So, let's remove the code and go back to the drawing board. We keep the header extension to not break drivers already populating the regulator. We expect to re-add the code handling it soon.
--- drivers/i2c/i2c-core-base.c | 95 -------------------------------------------- 1 file changed, 95 deletions(-)
drivers/i2c/i2c-core-base.c +0 -95
@@ -466,14 +466,12 @@ static int i2c_smbus_host_notify_to_irq(static int i2c_device_probe (struct device *dev) {struct i2c_client *client =i2c_verify_client (dev); -struct i2c_adapter *adap;struct i2c_driver *driver;int status;if (!client)return 0 ; - adap = client->adapter; client->irq = client->init_irq;if (!client->irq) {
@@ -539,14 +537,6 @@ static int i2c_device_probe(struct devicdev_dbg (dev,"probe\n" ); -if (adap->bus_regulator) { - status =regulator_enable (adap->bus_regulator); -if (status <0 ) { -dev_err (&adap->dev,"Failed to enable bus regulator\n" ); - goto err_clear_wakeup_irq; - } - } - status =of_clk_set_defaults (dev->of_node, false);if (status <0 ) goto err_clear_wakeup_irq;
@@ -604,10 +594,8 @@ put_sync_adapter:static void i2c_device_remove (struct device *dev) {struct i2c_client *client =to_i2c_client (dev); -struct i2c_adapter *adap;struct i2c_driver *driver; - adap = client->adapter; driver =to_i2c_driver (dev->driver);if (driver->remove) {int status;
@@ -622,8 +610,6 @@ static void i2c_device_remove(struct devdevres_release_group (&client->dev, client->devres_group_id);dev_pm_domain_detach (&client->dev, true); -if (!pm_runtime_status_suspended (&client->dev) && adap->bus_regulator) -regulator_disable (adap->bus_regulator);dev_pm_clear_wake_irq (&client->dev);device_init_wakeup (&client->dev, false);
@@ -633,86 +619,6 @@ static void i2c_device_remove(struct devpm_runtime_put (&client->adapter->dev); } -#ifdef CONFIG_PM_SLEEP -static int i2c_resume_early (struct device *dev) -{ -struct i2c_client *client =i2c_verify_client (dev); -int err; - -if (!client) -return 0 ; - -if (pm_runtime_status_suspended (&client->dev) && - client->adapter->bus_regulator) { - err =regulator_enable (client->adapter->bus_regulator); -if (err) -return err; - } - -return pm_generic_resume_early (&client->dev); -} - -static int i2c_suspend_late (struct device *dev) -{ -struct i2c_client *client =i2c_verify_client (dev); -int err; - -if (!client) -return 0 ; - - err =pm_generic_suspend_late (&client->dev); -if (err) -return err; - -if (!pm_runtime_status_suspended (&client->dev) && - client->adapter->bus_regulator) -return regulator_disable (client->adapter->bus_regulator); - -return 0 ; -} -#endif - -#ifdef CONFIG_PM -static int i2c_runtime_resume (struct device *dev) -{ -struct i2c_client *client =i2c_verify_client (dev); -int err; - -if (!client) -return 0 ; - -if (client->adapter->bus_regulator) { - err =regulator_enable (client->adapter->bus_regulator); -if (err) -return err; - } - -return pm_generic_runtime_resume (&client->dev); -} - -static int i2c_runtime_suspend (struct device *dev) -{ -struct i2c_client *client =i2c_verify_client (dev); -int err; - -if (!client) -return 0 ; - - err =pm_generic_runtime_suspend (&client->dev); -if (err) -return err; - -if (client->adapter->bus_regulator) -return regulator_disable (client->adapter->bus_regulator); -return 0 ; -} -#endif - -static const struct dev_pm_ops i2c_device_pm = { - SET_LATE_SYSTEM_SLEEP_PM_OPS(i2c_suspend_late, i2c_resume_early) -SET_RUNTIME_PM_OPS (i2c_runtime_suspend, i2c_runtime_resume,NULL ) -}; -static void i2c_device_shutdown (struct device *dev) {struct i2c_client *client =i2c_verify_client (dev);
@@ -772,7 +678,6 @@ struct bus_type i2c_bus_type = { .probe = i2c_device_probe, .remove = i2c_device_remove, .shutdown = i2c_device_shutdown, - .pm = &i2c_device_pm, };EXPORT_SYMBOL_GPL (i2c_bus_type);
Greg Kroah-Hartman
maintainerPATCH 39/72 i2c: mpc: Avoid out of bounds memory access
In reply to Greg Kroah-HartmanFrom: Chris Packham <[email protected]>
commit 72a4a87da8f7bcf868b338615a814b6542f277f3 upstream.
When performing an I2C transfer where the last message was a write KASAN would complain:
BUG: KASAN: slab-out-of-bounds in mpc_i2c_do_action+0x154/0x630 Read of size 2 at addr c814e310 by task swapper/2/0 CPU: 2 PID: 0 Comm: swapper/2 Tainted: G B 5.16.0-rc8 #1 Call Trace: [e5ee9d50] [c08418e8] dump_stack_lvl+0x4c/0x6c (unreliable) [e5ee9d70] [c02f8a14] print_address_description.constprop.13+0x64/0x3b0 [e5ee9da0] [c02f9030] kasan_report+0x1f0/0x204 [e5ee9de0] [c0c76ee4] mpc_i2c_do_action+0x154/0x630 [e5ee9e30] [c0c782c4] mpc_i2c_isr+0x164/0x240 [e5ee9e60] [c00f3a04] __handle_irq_event_percpu+0xf4/0x3b0 [e5ee9ec0] [c00f3d40] handle_irq_event_percpu+0x80/0x110 [e5ee9f40] [c00f3e48] handle_irq_event+0x78/0xd0 [e5ee9f60] [c00fcfec] handle_fasteoi_irq+0x19c/0x370 [e5ee9fa0] [c00f1d84] generic_handle_irq+0x54/0x80 [e5ee9fc0] [c0006b54] __do_irq+0x64/0x200 [e5ee9ff0] [c0007958] __do_IRQ+0xe8/0x1c0 [c812dd50] [e3eaab20] 0xe3eaab20 [c812dd90] [c0007a4c] do_IRQ+0x1c/0x30 [c812dda0] [c0000c04] ExternalInput+0x144/0x160 --- interrupt: 500 at arch_cpu_idle+0x34/0x60 NIP: c000b684 LR: c000b684 CTR: c0019688 REGS: c812ddb0 TRAP: 0500 Tainted: G B (5.16.0-rc8) MSR: 00029002 <CE,EE,ME> CR: 22000488 XER: 20000000
GPR00: c10ef7fc c812de90 c80ff200 c2394718 00000001 00000001 c10e3f90 00000003
GPR08: 00000000 c0019688 c2394718 fc7d625b 22000484 00000000 21e17000 c208228c
GPR16: e3e99284 00000000 ffffffff c2390000 c001bac0 c2082288 c812df60 c001ba60
GPR24: c23949c0 00000018 00080000 00000004 c80ff200 00000002 c2348ee4 c2394718 NIP [c000b684] arch_cpu_idle+0x34/0x60
LR [c000b684] arch_cpu_idle+0x34/0x60
--- interrupt: 500
[c812de90] [c10e3f90] rcu_eqs_enter.isra.60+0xc0/0x110 (unreliable) [c812deb0] [c10ef7fc] default_idle_call+0xbc/0x230
[c812dee0] [c00af0e8] do_idle+0x1c8/0x200
[c812df10] [c00af3c0] cpu_startup_entry+0x20/0x30
[c812df20] [c001e010] start_secondary+0x5d0/0xba0
[c812dff0] [c00028a0] __secondary_start+0x90/0xdc
This happened because we would overrun the i2c->msgs array on the final interrupt for the I2C STOP. This didn't happen if the last message was a read because there is no interrupt in that case. Ensure that we only access the current message if we are not processing a I2C STOP condition.
--- drivers/i2c/busses/i2c-mpc.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
drivers/i2c/busses/i2c-mpc.c +9 -6
@@ -492,7 +492,7 @@ static void mpc_i2c_finish(struct mpc_i2static void mpc_i2c_do_action (struct mpc_i2c *i2c) { -struct i2c_msg *msg = &i2c->msgs[i2c->curr_msg]; +struct i2c_msg *msg =NULL ;int dir =0 ;int recv_len =0 ;u8 byte;
@@ -501,10 +501,13 @@ static void mpc_i2c_do_action(struct mpc i2c->cntl_bits &= ~(CCR_RSTA |CCR_MTX |CCR_TXAK ); -if (msg->flags &I2C_M_RD ) - dir =1 ; -if (msg->flags &I2C_M_RECV_LEN ) - recv_len =1 ; +if (i2c->action !=MPC_I2C_ACTION_STOP ) { + msg = &i2c->msgs[i2c->curr_msg]; +if (msg->flags &I2C_M_RD ) + dir =1 ; +if (msg->flags &I2C_M_RECV_LEN ) + recv_len =1 ; + }switch (i2c->action) {case MPC_I2C_ACTION_RESTART :
@@ -581,7 +584,7 @@ static void mpc_i2c_do_action(struct mpcbreak ; } -if (msg->len == i2c->byte_posn) { +if (msg && msg->len == i2c->byte_posn) { i2c->curr_msg++; i2c->byte_posn =0 ;
Greg Kroah-Hartman
maintainerPATCH 40/72 xfs: map unwritten blocks in XFS_IOC_{ALLOC,FREE}SP just like fallocate
In reply to Greg Kroah-HartmanFrom: Darrick J. Wong <[email protected]>
commit 983d8e60f50806f90534cc5373d0ce867e5aaf79 upstream.
The old ALLOCSP/FREESP ioctls in XFS can be used to preallocate space at the end of files, just like fallocate and RESVSP. Make the behavior consistent with the other ioctls.
--- fs/xfs/xfs_ioctl.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/xfs/xfs_ioctl.c +2 -1
@@ -687,7 +687,8 @@ xfs_ioc_space(if (bf->l_start >XFS_ISIZE (ip)) { error =xfs_alloc_file_space (ip,XFS_ISIZE (ip), - bf->l_start -XFS_ISIZE (ip),0 ); + bf->l_start -XFS_ISIZE (ip), +XFS_BMAPI_PREALLOC );if (error) goto out_unlock; }
Greg Kroah-Hartman
maintainerPATCH 41/72 power: supply: core: Break capacity loop
In reply to Greg Kroah-HartmanFrom: Linus Walleij <[email protected]>
commit 51c7b6a0398f54b9120795796a4cff4fc9634f7d upstream.
We should not go on looking for more capacity tables after we realize we have looked at the last one in power_supply_find_ocv2cap_table().
--- drivers/power/supply/power_supply_core.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/power/supply/power_supply_core.c +4 -0
@@ -853,6 +853,10 @@ power_supply_find_ocv2cap_table(struct preturn NULL ;for (i =0 ; i <POWER_SUPPLY_OCV_TEMP_MAX ; i++) { +/* Out of capacity tables */ +if (!info->ocv_table[i]) +break ; + temp_diff =abs (info->ocv_temp[i] - temp);if (temp_diff < best_temp_diff) {
Greg Kroah-Hartman
maintainerPATCH 42/72 power: reset: ltc2952: Fix use of floating point literals
In reply to Greg Kroah-HartmanFrom: Nathan Chancellor <[email protected]>
commit 644106cdb89844be2496b21175b7c0c2e0fab381 upstream.
A new commit in LLVM causes an error on the use of 'long double' when '-mno-x87' is used, which the kernel does through an alias, '-mno-80387' (see the LLVM commit below for more details around why it does this).
drivers/power/reset/ltc2952-poweroff.c:162:28: error: expression requires 'long double' type support, but target 'x86_64-unknown-linux-gnu' does not support it
data->wde_interval = 300L * 1E6L;
^
drivers/power/reset/ltc2952-poweroff.c:162:21: error: expression requires 'long double' type support, but target 'x86_64-unknown-linux-gnu' does not support it
data->wde_interval = 300L * 1E6L;
^
drivers/power/reset/ltc2952-poweroff.c:163:41: error: expression requires 'long double' type support, but target 'x86_64-unknown-linux-gnu' does not support it
data->trigger_delay = ktime_set(2, 500L*1E6L);
^3 errors generated.
This happens due to the use of a 'long double' literal. The 'E6' part of '1E6L' causes the literal to be a 'double' then the 'L' suffix promotes it to 'long double'.
There is no visible reason for floating point values in this driver, as the values are only assigned to integer types. Use NSEC_PER_MSEC, which is the same integer value as '1E6L', to avoid changing functionality but fix the error.
--- drivers/power/reset/ltc2952-poweroff.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/power/reset/ltc2952-poweroff.c +2 -2
@@ -161,8 +161,8 @@ static void ltc2952_poweroff_kill(void)static void ltc2952_poweroff_default (struct ltc2952_poweroff *data) { - data->wde_interval =300L *1E6L ; - data->trigger_delay =ktime_set (2 ,500L *1E6L ); + data->wde_interval =300L *NSEC_PER_MSEC ; + data->trigger_delay =ktime_set (2 ,500L *NSEC_PER_MSEC );hrtimer_init (&data->timer_trigger,CLOCK_MONOTONIC ,HRTIMER_MODE_REL ); data->timer_trigger.function = ltc2952_poweroff_timer_trigger;
Greg Kroah-Hartman
maintainerPATCH 43/72 reset: renesas: Fix Runtime PM usage
In reply to Greg Kroah-HartmanFrom: Heiner Kallweit <[email protected]>
commit 92c959bae2e54ba1e2540ba5f813f7752bd76be1 upstream.
If pm_runtime_resume_and_get() fails then it returns w/o the RPM usage counter being incremented. In this case call pm_runtime_put() in remove() will result in a usage counter imbalance. Therefore check the return code of pm_runtime_resume_and_get() and bail out in case of error.
--- drivers/reset/reset-rzg2l-usbphy-ctrl.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/reset/reset-rzg2l-usbphy-ctrl.c +6 -1
@@ -137,7 +137,12 @@ static int rzg2l_usbphy_ctrl_probe(strucdev_set_drvdata (dev, priv);pm_runtime_enable (&pdev->dev); -pm_runtime_resume_and_get (&pdev->dev); + error =pm_runtime_resume_and_get (&pdev->dev); +if (error <0 ) { +pm_runtime_disable (&pdev->dev); +reset_control_assert (priv->rstc); +return dev_err_probe (&pdev->dev, error,"pm_runtime_resume_and_get failed" ); + }/* put pll and phy into reset state */ spin_lock_irqsave (&priv->lock, flags);
Greg Kroah-Hartman
maintainerPATCH 44/72 rndis_host: support Hytera digital radios
In reply to Greg Kroah-HartmanFrom: Thomas Toye <[email protected]>
commit 29262e1f773b4b6a43711120be564c57fca07cfb upstream.
Hytera makes a range of digital (DMR) radios. These radios can be programmed to a allow a computer to control them over Ethernet over USB, either using NCM or RNDIS.
This commit adds support for RNDIS for Hytera radios. I tested with a Hytera PD785 and a Hytera MD785G. When these radios are programmed to set up a Radio to PC Network using RNDIS, an USB interface will be added with class 2 (Communications), subclass 2 (Abstract Modem Control) and an interface protocol of 255 ("vendor specific" - lsusb even hints "MSFT RNDIS?").
This patch is similar to the solution of this StackOverflow user, but that only works for the Hytera MD785:
https://stackoverflow.com/a/53550858
To use the "Radio to PC Network" functionality of Hytera DMR radios, the radios need to be programmed correctly in CPS (Hytera's Customer Programming Software). "Forward to PC" should be checked in "Network" (under "General Setting" in "Conventional") and the "USB Network Communication Protocol" should be set to RNDIS.
--- drivers/net/usb/rndis_host.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/net/usb/rndis_host.c +5 -0
@@ -609,6 +609,11 @@ static const struct usb_device_id produc USB_CLASS_COMM, 2 /* ACM */, 0x0ff), .driver_info = (unsigned long) &rndis_poll_status_info, }, { +/* Hytera Communications DMR radios' "Radio to PC Network" */ +USB_VENDOR_AND_INTERFACE_INFO (0x238b , + USB_CLASS_COMM, 2 /* ACM */, 0x0ff), + .driver_info = (unsigned long )&rndis_info, +}, {/* RNDIS is MSFT's un-official variant of CDC ACM */ USB_INTERFACE_INFO (USB_CLASS_COMM ,2 /* ACM */ ,0x0ff ), .driver_info = (unsigned long) &rndis_info,
Greg Kroah-Hartman
maintainerPATCH 45/72 gpio: gpio-aspeed-sgpio: Fix wrong hwirq base in irq handler
In reply to Greg Kroah-HartmanFrom: Steven Lee <[email protected]>
commit e5a7431f5a2d6dcff7d516ee9d178a3254b17b87 upstream.
Each aspeed sgpio bank has 64 gpio pins(32 input pins and 32 output pins). The hwirq base for each sgpio bank should be multiples of 64 rather than multiples of 32.
--- drivers/gpio/gpio-aspeed-sgpio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpio/gpio-aspeed-sgpio.c +1 -1
@@ -395,7 +395,7 @@ static void aspeed_sgpio_irq_handler(str reg =ioread32 (bank_reg (data, bank, reg_irq_status));for_each_set_bit (p, ®,32 ) -generic_handle_domain_irq (gc->irq.domain, i *32 + p *2 ); +generic_handle_domain_irq (gc->irq.domain, (i *32 + p) *2 ); }chained_irq_exit (ic, desc);
Greg Kroah-Hartman
maintainerPATCH 46/72 net ticp:fix a kernel-infoleak in __tipc_sendmsg()
In reply to Greg Kroah-HartmanFrom: Haimin Zhang <[email protected]>
commit d6d86830705f173fca6087a3e67ceaf68db80523 upstream.
struct tipc_socket_addr.ref has a 4-byte hole,and __tipc_getname() currently copying it to user space,causing kernel-infoleak.
BUG: KMSAN: kernel-infoleak in instrument_copy_to_user include/linux/instrumented.h:121 [inline] BUG: KMSAN: kernel-infoleak in instrument_copy_to_user include/linux/instrumented.h:121 [inline] lib/usercopy.c:33 BUG: KMSAN: kernel-infoleak in _copy_to_user+0x1c9/0x270 lib/usercopy.c:33 lib/usercopy.c:33 instrument_copy_to_user include/linux/instrumented.h:121 [inline] instrument_copy_to_user include/linux/instrumented.h:121 [inline] lib/usercopy.c:33 _copy_to_user+0x1c9/0x270 lib/usercopy.c:33 lib/usercopy.c:33 copy_to_user include/linux/uaccess.h:209 [inline] copy_to_user include/linux/uaccess.h:209 [inline] net/socket.c:287 move_addr_to_user+0x3f6/0x600 net/socket.c:287 net/socket.c:287 __sys_getpeername+0x470/0x6b0 net/socket.c:1987 net/socket.c:1987 __do_sys_getpeername net/socket.c:1997 [inline] __se_sys_getpeername net/socket.c:1994 [inline] __do_sys_getpeername net/socket.c:1997 [inline] net/socket.c:1994 __se_sys_getpeername net/socket.c:1994 [inline] net/socket.c:1994 __x64_sys_getpeername+0xda/0x120 net/socket.c:1994 net/socket.c:1994 do_syscall_x64 arch/x86/entry/common.c:51 [inline] do_syscall_x64 arch/x86/entry/common.c:51 [inline] arch/x86/entry/common.c:82 do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:82 arch/x86/entry/common.c:82 entry_SYSCALL_64_after_hwframe+0x44/0xae
Uninit was stored to memory at:
tipc_getname+0x575/0x5e0 net/tipc/socket.c:757 net/tipc/socket.c:757 __sys_getpeername+0x3b3/0x6b0 net/socket.c:1984 net/socket.c:1984 __do_sys_getpeername net/socket.c:1997 [inline] __se_sys_getpeername net/socket.c:1994 [inline] __do_sys_getpeername net/socket.c:1997 [inline] net/socket.c:1994 __se_sys_getpeername net/socket.c:1994 [inline] net/socket.c:1994 __x64_sys_getpeername+0xda/0x120 net/socket.c:1994 net/socket.c:1994 do_syscall_x64 arch/x86/entry/common.c:51 [inline] do_syscall_x64 arch/x86/entry/common.c:51 [inline] arch/x86/entry/common.c:82 do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:82 arch/x86/entry/common.c:82 entry_SYSCALL_64_after_hwframe+0x44/0xae
Uninit was stored to memory at:
msg_set_word net/tipc/msg.h:212 [inline] msg_set_destport net/tipc/msg.h:619 [inline] msg_set_word net/tipc/msg.h:212 [inline] net/tipc/socket.c:1486 msg_set_destport net/tipc/msg.h:619 [inline] net/tipc/socket.c:1486 __tipc_sendmsg+0x44fa/0x5890 net/tipc/socket.c:1486 net/tipc/socket.c:1486 tipc_sendmsg+0xeb/0x140 net/tipc/socket.c:1402 net/tipc/socket.c:1402 sock_sendmsg_nosec net/socket.c:704 [inline] sock_sendmsg net/socket.c:724 [inline] sock_sendmsg_nosec net/socket.c:704 [inline] net/socket.c:2409 sock_sendmsg net/socket.c:724 [inline] net/socket.c:2409 ____sys_sendmsg+0xe11/0x12c0 net/socket.c:2409 net/socket.c:2409 ___sys_sendmsg net/socket.c:2463 [inline] ___sys_sendmsg net/socket.c:2463 [inline] net/socket.c:2492 __sys_sendmsg+0x704/0x840 net/socket.c:2492 net/socket.c:2492 __do_sys_sendmsg net/socket.c:2501 [inline] __se_sys_sendmsg net/socket.c:2499 [inline] __do_sys_sendmsg net/socket.c:2501 [inline] net/socket.c:2499 __se_sys_sendmsg net/socket.c:2499 [inline] net/socket.c:2499 __x64_sys_sendmsg+0xe2/0x120 net/socket.c:2499 net/socket.c:2499 do_syscall_x64 arch/x86/entry/common.c:51 [inline] do_syscall_x64 arch/x86/entry/common.c:51 [inline] arch/x86/entry/common.c:82 do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:82 arch/x86/entry/common.c:82 entry_SYSCALL_64_after_hwframe+0x44/0xae
Local variable skaddr created at:
__tipc_sendmsg+0x2d0/0x5890 net/tipc/socket.c:1419 net/tipc/socket.c:1419 tipc_sendmsg+0xeb/0x140 net/tipc/socket.c:1402 net/tipc/socket.c:1402
Bytes 4-7 of 16 are uninitialized
Memory access of size 16 starts at ffff888113753e00 Data copied to user address 0000000020000280
--- net/tipc/socket.c | 2 ++ 1 file changed, 2 insertions(+)
net/tipc/socket.c +2 -0
@@ -1461,6 +1461,8 @@ static int __tipc_sendmsg(struct socketmsg_set_syn (hdr,1 ); } +memset (&skaddr,0 ,sizeof (skaddr)); +/* Determine destination */ if (atype ==TIPC_SERVICE_RANGE ) {return tipc_sendmcast (sock, ua, m, dlen, timeout);
Greg Kroah-Hartman
maintainerPATCH 47/72 phonet: refcount leak in pep_sock_accep
In reply to Greg Kroah-HartmanFrom: Hangyu Hua <[email protected]>
commit bcd0f93353326954817a4f9fa55ec57fb38acbb0 upstream.
sock_hold(sk) is invoked in pep_sock_accept(), but __sock_put(sk) is not invoked in subsequent failure branches(pep_accept_conn() != 0).
--- net/phonet/pep.c | 1 + 1 file changed, 1 insertion(+)
net/phonet/pep.c +1 -0
@@ -868,6 +868,7 @@ static struct sock *pep_sock_accept(stru err =pep_accept_conn (newsk, skb);if (err) { +__sock_put (sk);sock_put (newsk); newsk =NULL ; goto drop;
Greg Kroah-Hartman
maintainerPATCH 48/72 fbdev: fbmem: add a helper to determine if an aperture is used by a fw fb
In reply to Greg Kroah-HartmanFrom: Alex Deucher <[email protected]>
commit 9a45ac2320d0a6ae01880a30d4b86025fce4061b upstream.
Add a function for drivers to check if the a firmware initialized fb is corresponds to their aperture. This allows drivers to check if the device corresponds to what the firmware set up as the display device.
--- drivers/video/fbdev/core/fbmem.c | 47 +++++++++++++++++++++++++++++++++++++++ include/linux/fb.h | 1 2 files changed, 48 insertions(+)
drivers/video/fbdev/core/fbmem.c +47 -0
@@ -1760,6 +1760,53 @@ int remove_conflicting_framebuffers(struEXPORT_SYMBOL (remove_conflicting_framebuffers);/** +* is_firmware_framebuffer - detect if firmware-configured framebuffer matches +* @a: memory range, users of which are to be checked +* +* This function checks framebuffer devices (initialized by firmware/bootloader) +* which use memory range described by @a. If @a matchesm the function returns +* true, otherwise false. +*/ +bool is_firmware_framebuffer (struct apertures_struct *a) +{ +bool do_free = false; +bool found = false; +int i; + +if (!a) { + a =alloc_apertures (1 ); +if (!a) +return false; + + a->ranges[0 ].base =0 ; + a->ranges[0 ].size = ~0 ; + do_free = true; + } + +mutex_lock (®istration_lock); +/* check all firmware fbs and kick off if the base addr overlaps */ +for_each_registered_fb (i) { +struct apertures_struct *gen_aper; + +if (!(registered_fb[i]->flags &FBINFO_MISC_FIRMWARE )) +continue ; + + gen_aper = registered_fb[i]->apertures; +if (fb_do_apertures_overlap (gen_aper, a)) { + found = true; +break ; + } + } +mutex_unlock (®istration_lock); + +if (do_free) +kfree (a); + +return found; +} +EXPORT_SYMBOL (is_firmware_framebuffer); + +/** * remove_conflicting_pci_framebuffers - remove firmware-configured framebuffers for PCI devices * @pdev: PCI device * @name: requesting driver name
include/linux/fb.h +1 -0
@@ -610,6 +610,7 @@ extern int remove_conflicting_pci_frameb const char *name);extern int remove_conflicting_framebuffers (struct apertures_struct *a,const char *name,bool primary); +extern bool is_firmware_framebuffer (struct apertures_struct *a);extern int fb_prepare_logo (struct fb_info *fb_info,int rotate);extern int fb_show_logo (struct fb_info *fb_info,int rotate);extern char *fb_get_buffer_offset (struct fb_info *info,struct fb_pixmap *buf,u32 size);
Greg Kroah-Hartman
maintainerPATCH 49/72 drm/amdgpu: disable runpm if we are the primary adapter
In reply to Greg Kroah-HartmanFrom: Alex Deucher <[email protected]>
commit b95dc06af3e683d6b7ddbbae178b2b2a21ee8b2b upstream.
If we are the primary adapter (i.e., the one used by the firwmare framebuffer), disable runtime pm. This fixes a regression caused by commit 55285e21f045 which results in the displays waking up shortly after they go to sleep due to the device coming out of runtime suspend and sending a hotplug uevent.
v2: squash in reworked fix from Evan
--- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 28 ++++++++++++++++++++++++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 6 ++++++ 3 files changed, 35 insertions(+)
drivers/gpu/drm/amd/amdgpu/amdgpu.h +1 -0
@@ -1069,6 +1069,7 @@ struct amdgpu_device {bool runpm;bool in_runpm;bool has_pr3; +bool is_fw_fb;bool pm_sysfs_en;bool ucode_sysfs_en;
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +28 -0
@@ -38,6 +38,7 @@#include <drm/drm_probe_helper.h> #include <linux/mmu_notifier.h> #include <linux/suspend.h> +#include <linux/fb.h> #include "amdgpu.h" #include "amdgpu_irq.h"
@@ -1246,6 +1247,26 @@ MODULE_DEVICE_TABLE(pci, pciidlist);static const struct drm_driver amdgpu_kms_driver; +static bool amdgpu_is_fw_framebuffer (resource_size_t base, +resource_size_t size) +{ +bool found = false; +#if IS_REACHABLE (CONFIG_FB ) +struct apertures_struct *a; + + a =alloc_apertures (1 ); +if (!a) +return false; + + a->ranges[0 ].base = base; + a->ranges[0 ].size = size; + + found =is_firmware_framebuffer (a); +kfree (a); +#endif +return found; +} +static int amdgpu_pci_probe (struct pci_dev *pdev,const struct pci_device_id *ent) {
@@ -1254,6 +1275,8 @@ static int amdgpu_pci_probe(struct pci_dunsigned long flags = ent->driver_data;int ret, retry =0 ;bool supports_atomic = false; +bool is_fw_fb; +resource_size_t base, size;if (amdgpu_virtual_display ||amdgpu_device_asic_has_dc_support (flags &AMD_ASIC_MASK ))
@@ -1310,6 +1333,10 @@ static int amdgpu_pci_probe(struct pci_d }#endif + base =pci_resource_start (pdev,0 ); + size =pci_resource_len (pdev,0 ); + is_fw_fb =amdgpu_is_fw_framebuffer (base, size); +/* Get rid of things like offb */ ret =drm_aperture_remove_conflicting_pci_framebuffers (pdev, &amdgpu_kms_driver);if (ret)
@@ -1322,6 +1349,7 @@ static int amdgpu_pci_probe(struct pci_d adev->dev = &pdev->dev; adev->pdev = pdev; ddev =adev_to_drm (adev); + adev->is_fw_fb = is_fw_fb;if (!supports_atomic) ddev->driver_features &= ~DRIVER_ATOMIC ;
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +6 -0
@@ -206,6 +206,12 @@ int amdgpu_driver_load_kms(struct amdgpu adev->runpm = true;break ; } +/* XXX: disable runtime pm if we are the primary adapter +* to avoid displays being re-enabled after DPMS. +* This needs to be sorted out and fixed properly. +*/ +if (adev->is_fw_fb) + adev->runpm = false;if (adev->runpm)dev_info (adev->dev,"Using BACO for runtime pm\n" ); }
Greg Kroah-Hartman
maintainerPATCH 50/72 power: bq25890: Enable continuous conversion for ADC at charging
In reply to Greg Kroah-HartmanFrom: Yauhen Kharuzhy <[email protected]>
commit 80211be1b9dec04cc2805d3d81e2091ecac289a1 upstream.
Instead of one shot run of ADC at beginning of charging, run continuous conversion to ensure that all charging-related values are monitored properly (input voltage, input current, themperature etc.).
--- drivers/power/supply/bq25890_charger.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/power/supply/bq25890_charger.c +2 -2
@@ -581,12 +581,12 @@ static irqreturn_t __bq25890_handle_irq(if (!new_state.online && bq->state.online) {/* power removed */ /* disable ADC */ - ret =bq25890_field_write (bq,F_CONV_START ,0 ); + ret =bq25890_field_write (bq,F_CONV_RATE ,0 );if (ret <0 ) goto error; }else if (new_state.online && !bq->state.online) {/* power inserted */ /* enable ADC, to have control of charge current/voltage */ - ret =bq25890_field_write (bq,F_CONV_START ,1 ); + ret =bq25890_field_write (bq,F_CONV_RATE ,1 );if (ret <0 ) goto error; }
Greg Kroah-Hartman
maintainerPATCH 51/72 ipv6: Continue processing multipath route even if gateway attribute is invalid
In reply to Greg Kroah-HartmanFrom: David Ahern <[email protected]>
[ Upstream commit e30a845b0376eb51c9c94f56bbd53b2e08ba822f ]
ip6_route_multipath_del loop continues processing the multipath attribute even if delete of a nexthop path fails. For consistency, do the same if the gateway attribute is invalid.
--- net/ipv6/route.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
net/ipv6/route.c +5 -2
@@ -5459,8 +5459,10 @@ static int ip6_route_multipath_del(struct fib6_config *cfg,if (nla) { err =fib6_gw_from_attr (&r_cfg.fc_gateway, nla, extack); -if (err) -return err; +if (err) { + last_err = err; + goto next_rtnh; + } r_cfg.fc_flags |=RTF_GATEWAY ; }
@@ -5469,6 +5471,7 @@ static int ip6_route_multipath_del(struct fib6_config *cfg,if (err) last_err = err; +next_rtnh: rtnh =rtnh_next (rtnh, &remaining); }
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 52/72 ipv6: Do cleanup if attribute validation fails in multipath route
In reply to Greg Kroah-HartmanFrom: David Ahern <[email protected]>
[ Upstream commit 95bdba23b5b4aa75fe3e6c84335e638641c707bb ]
As Nicolas noted, if gateway validation fails walking the multipath attribute the code should jump to the cleanup to free previously allocated memory.
--- net/ipv6/route.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
net/ipv6/route.c +3 -5
@@ -5277,12 +5277,10 @@ static int ip6_route_multipath_add(struct fib6_config *cfg, nla =nla_find (attrs, attrlen,RTA_GATEWAY );if (nla) { -int ret; - - ret =fib6_gw_from_attr (&r_cfg.fc_gateway, nla, + err =fib6_gw_from_attr (&r_cfg.fc_gateway, nla, extack); -if (ret) -return ret; +if (err) + goto cleanup; r_cfg.fc_flags |=RTF_GATEWAY ; }
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 53/72 auxdisplay: charlcd: checking for pointer reference before dereferencing
In reply to Greg Kroah-HartmanFrom: Luiz Sampaio <[email protected]>
[ Upstream commit 4daa9ff89ef27be43c15995412d6aee393a78200 ]
Check if the pointer lcd->ops->init_display exists before dereferencing it. If a driver called charlcd_init() without defining the ops, this would return segmentation fault, as happened to me when implementing a charlcd driver. Checking the pointer before dereferencing protects from segmentation fault.
--- drivers/auxdisplay/charlcd.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/auxdisplay/charlcd.c +3 -0
@@ -578,6 +578,9 @@ static int charlcd_init(struct charlcd *lcd)* Since charlcd_init_display() needs to write data, we have to * enable mark the LCD initialized just before. */ +if (WARN_ON (!lcd->ops->init_display)) +return -EINVAL ; + ret = lcd->ops->init_display (lcd);if (ret)return ret;
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 54/72 drm/amdgpu: fix dropped backing store handling in amdgpu_dma_buf_move_notify
In reply to Greg Kroah-HartmanFrom: Christian König <[email protected]>
[ Upstream commit fc74881c28d314b10efac016ef49df4ff40b8b97 ]
bo->tbo.resource can now be NULL.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c +1 -1
@@ -384,7 +384,7 @@ amdgpu_dma_buf_move_notify(struct dma_buf_attachment *attach)struct amdgpu_vm_bo_base *bo_base;int r; -if (bo->tbo.resource->mem_type ==TTM_PL_SYSTEM ) +if (!bo->tbo.resource || bo->tbo.resource->mem_type ==TTM_PL_SYSTEM )return ; r =ttm_bo_validate (&bo->tbo, &placement, &ctx);
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 55/72 drm/amd/pm: Fix xgmi link control on aldebaran
In reply to Greg Kroah-HartmanFrom: Lijo Lazar <[email protected]>
[ Upstream commit 19e66d512e4182a0461530fa3159638e0f55d97e ]
Fix the message argument.
0: Allow power down
1: Disallow power down
--- drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c +1 -1
@@ -1619,7 +1619,7 @@ static int aldebaran_allow_xgmi_power_down(struct smu_context *smu, bool en) {return smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_GmiPwrDnControl, - en ?1 :0 , + en ?0 :1 ,NULL ); }
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 56/72 usb: mtu3: fix interval value for intr and isoc
In reply to Greg Kroah-HartmanFrom: Chunfeng Yun <[email protected]>
[ Upstream commit e3d4621c22f90c33321ae6a6baab60cdb8e5a77c ]
Use the Interval value from isoc/intr endpoint descriptor, no need minus one. The original code doesn't cause transfer error for normal cases, but it may have side effect with respond time of ERDY or tPingTimeout.
--- drivers/usb/mtu3/mtu3_gadget.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/usb/mtu3/mtu3_gadget.c +2 -2
@@ -77,7 +77,7 @@ static int mtu3_ep_enable(struct mtu3_ep *mep)if (usb_endpoint_xfer_int (desc) ||usb_endpoint_xfer_isoc (desc)) { interval = desc->bInterval; - interval =clamp_val (interval,1 ,16 ) -1 ; + interval =clamp_val (interval,1 ,16 );if (usb_endpoint_xfer_isoc (desc) && comp_desc) mult = comp_desc->bmAttributes; }
@@ -89,7 +89,7 @@ static int mtu3_ep_enable(struct mtu3_ep *mep)if (usb_endpoint_xfer_isoc (desc) ||usb_endpoint_xfer_int (desc)) { interval = desc->bInterval; - interval =clamp_val (interval,1 ,16 ) -1 ; + interval =clamp_val (interval,1 ,16 ); mult =usb_endpoint_maxp_mult (desc) -1 ; }break ;
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 57/72 scsi: libiscsi: Fix UAF in iscsi_conn_get_param()/iscsi_conn_teardown()
In reply to Greg Kroah-HartmanFrom: Lixiaokeng <[email protected]>
[ Upstream commit 1b8d0300a3e9f216ae4901bab886db7299899ec6 ]
|- iscsi_if_destroy_conn |-dev_attr_show |-iscsi_conn_teardown |-spin_lock_bh |-iscsi_sw_tcp_conn_get_param
|-kfree(conn->persistent_address) |-iscsi_conn_get_param
|-kfree(conn->local_ipaddr)
==>|-read persistent_address
==>|-read local_ipaddr
|-spin_unlock_bhWhen iscsi_conn_teardown() and iscsi_conn_get_param() happen in parallel, a UAF may be triggered.
--- drivers/scsi/libiscsi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/scsi/libiscsi.c +4 -2
@@ -3101,6 +3101,8 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn) {struct iscsi_conn *conn = cls_conn->dd_data;struct iscsi_session *session = conn->session; +char *tmp_persistent_address = conn->persistent_address; +char *tmp_local_ipaddr = conn->local_ipaddr;del_timer_sync (&conn->transport_timer);
@@ -3122,8 +3124,6 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)spin_lock_bh (&session->frwd_lock);free_pages ((unsigned long ) conn->data,get_order (ISCSI_DEF_MAX_RECV_SEG_LEN )); -kfree (conn->persistent_address); -kfree (conn->local_ipaddr);/* regular RX path uses back_lock */ spin_lock_bh (&session->back_lock); kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task,
@@ -3135,6 +3135,8 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)mutex_unlock (&session->eh_mutex);iscsi_destroy_conn (cls_conn); +kfree (tmp_persistent_address); +kfree (tmp_local_ipaddr); }EXPORT_SYMBOL_GPL (iscsi_conn_teardown);
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 58/72 ip6_vti: initialize __ip6_tnl_parm struct in vti6_siocdevprivate
In reply to Greg Kroah-HartmanFrom: William Zhao <[email protected]>
[ Upstream commit c1833c3964d5bd8c163bd4e01736a38bc473cb8a ]
The "__ip6_tnl_parm" struct was left uninitialized causing an invalid load of random data when the "__ip6_tnl_parm" struct was used elsewhere. As an example, in the function "ip6_tnl_xmit_ctl()", it tries to access the "collect_md" member. With "__ip6_tnl_parm" being uninitialized and containing random data, the UBSAN detected that "collect_md" held a non-boolean value.
The UBSAN issue is as follows:
===============================================================
UBSAN: invalid-load in net/ipv6/ip6_tunnel.c:1025:14 load of value 30 is not a valid value for type '_Bool' CPU: 1 PID: 228 Comm: kworker/1:3 Not tainted 5.16.0-rc4+ #8 Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011 Workqueue: ipv6_addrconf addrconf_dad_work Call Trace: <TASK> dump_stack_lvl+0x44/0x57 ubsan_epilogue+0x5/0x40 __ubsan_handle_load_invalid_value+0x66/0x70 ? __cpuhp_setup_state+0x1d3/0x210 ip6_tnl_xmit_ctl.cold.52+0x2c/0x6f [ip6_tunnel] vti6_tnl_xmit+0x79c/0x1e96 [ip6_vti] ? lock_is_held_type+0xd9/0x130 ? vti6_rcv+0x100/0x100 [ip6_vti] ? lock_is_held_type+0xd9/0x130 ? rcu_read_lock_bh_held+0xc0/0xc0 ? lock_acquired+0x262/0xb10 dev_hard_start_xmit+0x1e6/0x820 __dev_queue_xmit+0x2079/0x3340 ? mark_lock.part.52+0xf7/0x1050 ? netdev_core_pick_tx+0x290/0x290 ? kvm_clock_read+0x14/0x30 ? kvm_sched_clock_read+0x5/0x10 ? sched_clock_cpu+0x15/0x200 ? find_held_lock+0x3a/0x1c0 ? lock_release+0x42f/0xc90 ? lock_downgrade+0x6b0/0x6b0 ? mark_held_locks+0xb7/0x120 ? neigh_connected_output+0x31f/0x470 ? lockdep_hardirqs_on+0x79/0x100 ? neigh_connected_output+0x31f/0x470 ? ip6_finish_output2+0x9b0/0x1d90 ? rcu_read_lock_bh_held+0x62/0xc0 ? ip6_finish_output2+0x9b0/0x1d90 ip6_finish_output2+0x9b0/0x1d90 ? ip6_append_data+0x330/0x330 ? ip6_mtu+0x166/0x370 ? __ip6_finish_output+0x1ad/0xfb0 ? nf_hook_slow+0xa6/0x170 ip6_output+0x1fb/0x710 ? nf_hook.constprop.32+0x317/0x430 ? ip6_finish_output+0x180/0x180 ? __ip6_finish_output+0xfb0/0xfb0 ? lock_is_held_type+0xd9/0x130 ndisc_send_skb+0xb33/0x1590 ? __sk_mem_raise_allocated+0x11cf/0x1560 ? dst_output+0x4a0/0x4a0 ? ndisc_send_rs+0x432/0x610 addrconf_dad_completed+0x30c/0xbb0 ? addrconf_rs_timer+0x650/0x650 ? addrconf_dad_work+0x73c/0x10e0 addrconf_dad_work+0x73c/0x10e0 ? addrconf_dad_completed+0xbb0/0xbb0 ? rcu_read_lock_sched_held+0xaf/0xe0 ? rcu_read_lock_bh_held+0xc0/0xc0 process_one_work+0x97b/0x1740 ? pwq_dec_nr_in_flight+0x270/0x270 worker_thread+0x87/0xbf0 ? process_one_work+0x1740/0x1740 kthread+0x3ac/0x490 ? set_kthread_struct+0x100/0x100 ret_from_fork+0x22/0x30 </TASK> ===============================================================
The solution is to initialize "__ip6_tnl_parm" struct to zeros in the "vti6_siocdevprivate()" function.
--- net/ipv6/ip6_vti.c | 2 ++ 1 file changed, 2 insertions(+)
net/ipv6/ip6_vti.c +2 -0
@@ -808,6 +808,8 @@ vti6_siocdevprivate(struct net_device *dev, struct ifreq *ifr, void __user *datastruct net *net =dev_net (dev);struct vti6_net *ip6n =net_generic (net, vti6_net_id); +memset (&p1,0 ,sizeof (p1)); +switch (cmd) {case SIOCGETTUNNEL :if (dev == ip6n->fb_tnl_dev) {
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 59/72 net: udp: fix alignment problem in udp4_seq_show()
In reply to Greg Kroah-HartmanFrom: yangxingwu <[email protected]>
[ Upstream commit 6c25449e1a32c594d743df8e8258e8ef870b6a77 ]
$ cat /pro/net/udp
before:
sl local_address rem_address st tx_queue rx_queue tr tm->when
26050: 0100007F:0035 00000000:0000 07 00000000:00000000 00:00000000 26320: 0100007F:0143 00000000:0000 07 00000000:00000000 00:00000000 27135: 00000000:8472 00000000:0000 07 00000000:00000000 00:00000000
after:
sl local_address rem_address st tx_queue rx_queue tr tm->when
26050: 0100007F:0035 00000000:0000 07 00000000:00000000 00:00000000 26320: 0100007F:0143 00000000:0000 07 00000000:00000000 00:00000000 27135: 00000000:8472 00000000:0000 07 00000000:00000000 00:00000000
--- net/ipv4/udp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/ipv4/udp.c +1 -1
@@ -3076,7 +3076,7 @@ int udp4_seq_show(struct seq_file *seq, void *v) {seq_setwidth (seq,127 );if (v ==SEQ_START_TOKEN ) -seq_puts (seq," sl local_address rem_address st tx_queue " +seq_puts (seq," sl local_address rem_address st tx_queue " "rx_queue tr tm->when retrnsmt uid timeout " "inode ref pointer drops" );else {
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 60/72 atlantic: Fix buff_ring OOB in aq_ring_rx_clean
In reply to Greg Kroah-HartmanFrom: Zekun Shen <[email protected]>
[ Upstream commit 5f50153288452e10b6edd69ec9112c49442b054a ]
The function obtain the next buffer without boundary check. We should return with I/O error code.
The bug is found by fuzzing and the crash report is attached. It is an OOB bug although reported as use-after-free.
[ 4.804724] BUG: KASAN: use-after-free in aq_ring_rx_clean+0x1e88/0x2730 [atlantic] [ 4.805661] Read of size 4 at addr ffff888034fe93a8 by task ksoftirqd/0/9 [ 4.806505] [ 4.806703] CPU: 0 PID: 9 Comm: ksoftirqd/0 Tainted: G W 5.6.0 #34 [ 4.809030] Call Trace: [ 4.809343] dump_stack+0x76/0xa0 [ 4.809755] print_address_description.constprop.0+0x16/0x200 [ 4.810455] ? aq_ring_rx_clean+0x1e88/0x2730 [atlantic] [ 4.811234] ? aq_ring_rx_clean+0x1e88/0x2730 [atlantic] [ 4.813183] __kasan_report.cold+0x37/0x7c [ 4.813715] ? aq_ring_rx_clean+0x1e88/0x2730 [atlantic] [ 4.814393] kasan_report+0xe/0x20 [ 4.814837] aq_ring_rx_clean+0x1e88/0x2730 [atlantic] [ 4.815499] ? hw_atl_b0_hw_ring_rx_receive+0x9a5/0xb90 [atlantic] [ 4.816290] aq_vec_poll+0x179/0x5d0 [atlantic] [ 4.816870] ? _GLOBAL__sub_I_65535_1_aq_pci_func_init+0x20/0x20 [atlantic] [ 4.817746] ? __next_timer_interrupt+0xba/0xf0 [ 4.818322] net_rx_action+0x363/0xbd0 [ 4.818803] ? call_timer_fn+0x240/0x240 [ 4.819302] ? __switch_to_asm+0x40/0x70 [ 4.819809] ? napi_busy_loop+0x520/0x520 [ 4.820324] __do_softirq+0x18c/0x634 [ 4.820797] ? takeover_tasklets+0x5f0/0x5f0 [ 4.821343] run_ksoftirqd+0x15/0x20 [ 4.821804] smpboot_thread_fn+0x2f1/0x6b0 [ 4.822331] ? smpboot_unregister_percpu_thread+0x160/0x160 [ 4.823041] ? __kthread_parkme+0x80/0x100 [ 4.823571] ? smpboot_unregister_percpu_thread+0x160/0x160 [ 4.824301] kthread+0x2b5/0x3b0 [ 4.824723] ? kthread_create_on_node+0xd0/0xd0 [ 4.825304] ret_from_fork+0x35/0x40
--- drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/net/ethernet/aquantia/atlantic/aq_ring.c +8 -0
@@ -365,6 +365,10 @@ int aq_ring_rx_clean(struct aq_ring_s *self,if (!buff->is_eop) { buff_ = buff; do { + if (buff_->next >= self->size) { + err = -EIO; + goto err_exit; + } next_ = buff_->next, buff_ = &self->buff_ring[next_]; is_rsc_completed =
@@ -388,6 +392,10 @@ int aq_ring_rx_clean(struct aq_ring_s *self, (buff->is_lro && buff->is_cso_err)) { buff_ = buff; do { + if (buff_->next >= self->size) { + err = -EIO; + goto err_exit; + } next_ = buff_->next, buff_ = &self->buff_ring[next_];
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 61/72 drm/amd/pm: skip setting gfx cgpg in the s0ix suspend-resume
In reply to Greg Kroah-HartmanFrom: Prike Liang <[email protected]>
[ Upstream commit 8c45096c60d6ce6341c374636100ed1b2c1c33a1 ]
In the s0ix entry need retain gfx in the gfxoff state,so here need't set gfx cgpg in the S0ix suspend-resume process. Moreover move the S0ix check into SMU12 can simplify the code condition check.
--- drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 7 ++----- drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c | 3 ++- 2 files changed, 4 insertions(+), 6 deletions(-)
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +2 -5
@@ -1536,9 +1536,7 @@ static int smu_suspend(void *handle) smu->watermarks_bitmap &= ~(WATERMARKS_LOADED ); -/* skip CGPG when in S0ix */ -if (smu->is_apu && !adev->in_s0ix) -smu_set_gfx_cgpg (&adev->smu, false); +smu_set_gfx_cgpg (&adev->smu, false);return 0 ; }
@@ -1569,8 +1567,7 @@ static int smu_resume(void *handle)return ret; } -if (smu->is_apu) -smu_set_gfx_cgpg (&adev->smu, true); +smu_set_gfx_cgpg (&adev->smu, true); smu->disable_uclk_switch =0 ;
drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c +2 -1
@@ -120,7 +120,8 @@ int smu_v12_0_powergate_sdma(struct smu_context *smu, bool gate)int smu_v12_0_set_gfx_cgpg (struct smu_context *smu,bool enable) { -if (!(smu->adev->pg_flags &AMD_PG_SUPPORT_GFX_PG )) +/* Until now the SMU12 only implemented for Renoir series so here neen't do APU check. */ +if (!(smu->adev->pg_flags &AMD_PG_SUPPORT_GFX_PG ) || smu->adev->in_s0ix)return 0 ; return smu_cmn_send_smc_msg_with_param(smu,
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 62/72 drm/amdgpu: always reset the asic in suspend (v2)
In reply to Greg Kroah-HartmanFrom: Alex Deucher <[email protected]>
[ Upstream commit daf8de0874ab5b74b38a38726fdd3d07ef98a7ee ]
If the platform suspend happens to fail and the power rail is not turned off, the GPU will be in an unknown state on resume, so reset the asic so that it will be in a known good state on resume even if the platform suspend failed.
v2: handle s0ix
--- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +4 -1
@@ -1526,7 +1526,10 @@ static int amdgpu_pmops_suspend(struct device *dev) adev->in_s3 = true; r =amdgpu_device_suspend (drm_dev, true); adev->in_s3 = false; - +if (r) +return r; +if (!adev->in_s0ix) + r =amdgpu_asic_reset (adev);return r; }
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 63/72 drm/amdgpu: put SMU into proper state on runpm suspending for BOCO capable platform
In reply to Greg Kroah-HartmanFrom: Evan Quan <[email protected]>
[ Upstream commit 7be3be2b027c12e84833b3dc9597d3bb7e4c5464 ]
By setting mp1_state as PP_MP1_STATE_UNLOAD, MP1 will do some proper cleanups and put itself into a state ready for PNP. That can workaround some random resuming failure observed on BOCO capable platforms.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +15 -0
@@ -1606,12 +1606,27 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev)if (amdgpu_device_supports_px (drm_dev)) drm_dev->switch_power_state =DRM_SWITCH_POWER_CHANGING ; +/* +* By setting mp1_state as PP_MP1_STATE_UNLOAD, MP1 will do some +* proper cleanups and put itself into a state ready for PNP. That +* can address some random resuming failure observed on BOCO capable +* platforms. +* TODO: this may be also needed for PX capable platform. +*/ +if (amdgpu_device_supports_boco (drm_dev)) + adev->mp1_state =PP_MP1_STATE_UNLOAD ; + ret =amdgpu_device_suspend (drm_dev, false);if (ret) { adev->in_runpm = false; +if (amdgpu_device_supports_boco (drm_dev)) + adev->mp1_state =PP_MP1_STATE_NONE ;return ret; } +if (amdgpu_device_supports_boco (drm_dev)) + adev->mp1_state =PP_MP1_STATE_NONE ; +if (amdgpu_device_supports_px (drm_dev)) {/* Only need to handle PCI state in the driver for ATPX * PCI core handles it for _PR3.
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 64/72 mISDN: change function names to avoid conflicts
In reply to Greg Kroah-HartmanFrom: wolfgang huang <[email protected]>
[ Upstream commit 8b5fdfc57cc2471179d1c51081424ded833c16c8 ]
As we build for mips, we meet following error. l1_init error with multiple definition. Some architecture devices usually marked with l1, l2, lxx as the start-up phase. so we change the mISDN function names, align with Isdnl2_xxx.
mips-linux-gnu-ld: drivers/isdn/mISDN/layer1.o: in function `l1_init':
(.text+0x890): multiple definition of `l1_init'; \
arch/mips/kernel/bmips_5xxx_init.o:(.text+0xf0): first defined here make[1]: *** [home/mips/kernel-build/linux/Makefile:1161: vmlinux] Error 1
--- drivers/isdn/mISDN/core.c | 6 +++--- drivers/isdn/mISDN/core.h | 4 ++-- drivers/isdn/mISDN/layer1.c | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-)
drivers/isdn/mISDN/core.c +3 -3
@@ -381,7 +381,7 @@ mISDNInit(void) err =mISDN_inittimer (&debug);if (err) goto error2; - err =l1_init (&debug); + err =Isdnl1_Init (&debug);if (err) goto error3; err =Isdnl2_Init (&debug);
@@ -395,7 +395,7 @@ mISDNInit(void) error5:Isdnl2_cleanup (); error4: -l1_cleanup (); +Isdnl1_cleanup (); error3:mISDN_timer_cleanup (); error2:
@@ -408,7 +408,7 @@ static void mISDN_cleanup(void) {misdn_sock_cleanup ();Isdnl2_cleanup (); -l1_cleanup (); +Isdnl1_cleanup ();mISDN_timer_cleanup ();class_unregister (&mISDN_class);
drivers/isdn/mISDN/core.h +2 -2
@@ -60,8 +60,8 @@ struct Bprotocol *get_Bprotocol4id(u_int);extern int mISDN_inittimer (u_int *);extern void mISDN_timer_cleanup (void ); -extern int l1_init (u_int *); -extern void l1_cleanup (void ); +extern int Isdnl1_Init (u_int *); +extern void Isdnl1_cleanup (void );extern int Isdnl2_Init (u_int *);extern void Isdnl2_cleanup (void );
drivers/isdn/mISDN/layer1.c +2 -2
@@ -398,7 +398,7 @@ create_l1(struct dchannel *dch, dchannel_l1callback *dcb) {EXPORT_SYMBOL (create_l1);int -l1_init (u_int *deb) +Isdnl1_Init (u_int *deb) { debug = deb; l1fsm_s.state_count =L1S_STATE_COUNT ;
@@ -409,7 +409,7 @@ l1_init(u_int *deb) }void -l1_cleanup (void ) +Isdnl1_cleanup (void ) {mISDN_FsmFree (&l1fsm_s); }
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 65/72 drm/amd/display: fix B0 TMDS deepcolor no dislay issue
In reply to Greg Kroah-HartmanFrom: Charlene Liu <[email protected]>
[ Upstream commit 2eb82577a16d4c8eb31e4ed520649850bb95b223 ]
[why]
B0 PHY C map to F, D map to G driver use logic instance, dmub does the remap. Driver still need use the right PHY instance to access right HW.
[how]
use phyical instance when program PHY register.
[note]
could move resync_control programming to dmub next.
--- .../drm/amd/display/dc/dcn31/dcn31_resource.c | 25 +++++++++++++-- .../drm/amd/display/dc/dcn31/dcn31_resource.h | 31 +++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c +23 -2
@@ -352,6 +352,14 @@ static const struct dce110_clk_src_regs clk_src_regs[] = {clk_src_regs (3 ,D ),clk_src_regs (4 ,E ) }; +/*pll_id being rempped in dmub, in driver it is logical instance*/ +static const struct dce110_clk_src_regs clk_src_regs_b0[] = { +clk_src_regs (0 ,A ), +clk_src_regs (1 ,B ), +clk_src_regs (2 ,F ), +clk_src_regs (3 ,G ), +clk_src_regs (4 ,E ) +};static const struct dce110_clk_src_shift cs_shift = { CS_COMMON_MASK_SH_LIST_DCN2_0(__SHIFT)
@@ -2019,14 +2027,27 @@ static bool dcn31_resource_construct(dcn30_clock_source_create (ctx, ctx->dc_bios,CLOCK_SOURCE_COMBO_PHY_PLL1 , &clk_src_regs[1 ], false); - pool->base.clock_sources[DCN31_CLK_SRC_PLL2 ] = +/*move phypllx_pixclk_resync to dmub next*/ +if (dc->ctx->asic_id.hw_internal_rev ==YELLOW_CARP_B0 ) { + pool->base.clock_sources[DCN31_CLK_SRC_PLL2 ] = +dcn30_clock_source_create (ctx, ctx->dc_bios, +CLOCK_SOURCE_COMBO_PHY_PLL2 , + &clk_src_regs_b0[2 ], false); + pool->base.clock_sources[DCN31_CLK_SRC_PLL3 ] = +dcn30_clock_source_create (ctx, ctx->dc_bios, +CLOCK_SOURCE_COMBO_PHY_PLL3 , + &clk_src_regs_b0[3 ], false); + }else { + pool->base.clock_sources[DCN31_CLK_SRC_PLL2 ] =dcn30_clock_source_create (ctx, ctx->dc_bios,CLOCK_SOURCE_COMBO_PHY_PLL2 , &clk_src_regs[2 ], false); - pool->base.clock_sources[DCN31_CLK_SRC_PLL3 ] = + pool->base.clock_sources[DCN31_CLK_SRC_PLL3 ] =dcn30_clock_source_create (ctx, ctx->dc_bios,CLOCK_SOURCE_COMBO_PHY_PLL3 , &clk_src_regs[3 ], false); + } + pool->base.clock_sources[DCN31_CLK_SRC_PLL4 ] = dcn30_clock_source_create(ctx, ctx->dc_bios, CLOCK_SOURCE_COMBO_PHY_PLL4,
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.h +31 -0
@@ -39,4 +39,35 @@ struct resource_pool *dcn31_create_resource_pool(const struct dc_init_data *init_data, struct dc *dc); +/*temp: B0 specific before switch to dcn313 headers*/ +#ifndef regPHYPLLF_PIXCLK_RESYNC_CNTL +#define regPHYPLLF_PIXCLK_RESYNC_CNTL 0x007e +#define regPHYPLLF_PIXCLK_RESYNC_CNTL_BASE_IDX 1 +#define regPHYPLLG_PIXCLK_RESYNC_CNTL 0x005f +#define regPHYPLLG_PIXCLK_RESYNC_CNTL_BASE_IDX 1 + +//PHYPLLF_PIXCLK_RESYNC_CNTL +#define PHYPLLF_PIXCLK_RESYNC_CNTL__PHYPLLF_PIXCLK_RESYNC_ENABLE__SHIFT 0x0 +#define PHYPLLF_PIXCLK_RESYNC_CNTL__PHYPLLF_DEEP_COLOR_DTO_ENABLE_STATUS__SHIFT 0x1 +#define PHYPLLF_PIXCLK_RESYNC_CNTL__PHYPLLF_DCCG_DEEP_COLOR_CNTL__SHIFT 0x4 +#define PHYPLLF_PIXCLK_RESYNC_CNTL__PHYPLLF_PIXCLK_ENABLE__SHIFT 0x8 +#define PHYPLLF_PIXCLK_RESYNC_CNTL__PHYPLLF_PIXCLK_DOUBLE_RATE_ENABLE__SHIFT 0x9 +#define PHYPLLF_PIXCLK_RESYNC_CNTL__PHYPLLF_PIXCLK_RESYNC_ENABLE_MASK 0x00000001L +#define PHYPLLF_PIXCLK_RESYNC_CNTL__PHYPLLF_DEEP_COLOR_DTO_ENABLE_STATUS_MASK 0x00000002L +#define PHYPLLF_PIXCLK_RESYNC_CNTL__PHYPLLF_DCCG_DEEP_COLOR_CNTL_MASK 0x00000030L +#define PHYPLLF_PIXCLK_RESYNC_CNTL__PHYPLLF_PIXCLK_ENABLE_MASK 0x00000100L +#define PHYPLLF_PIXCLK_RESYNC_CNTL__PHYPLLF_PIXCLK_DOUBLE_RATE_ENABLE_MASK 0x00000200L + +//PHYPLLG_PIXCLK_RESYNC_CNTL +#define PHYPLLG_PIXCLK_RESYNC_CNTL__PHYPLLG_PIXCLK_RESYNC_ENABLE__SHIFT 0x0 +#define PHYPLLG_PIXCLK_RESYNC_CNTL__PHYPLLG_DEEP_COLOR_DTO_ENABLE_STATUS__SHIFT 0x1 +#define PHYPLLG_PIXCLK_RESYNC_CNTL__PHYPLLG_DCCG_DEEP_COLOR_CNTL__SHIFT 0x4 +#define PHYPLLG_PIXCLK_RESYNC_CNTL__PHYPLLG_PIXCLK_ENABLE__SHIFT 0x8 +#define PHYPLLG_PIXCLK_RESYNC_CNTL__PHYPLLG_PIXCLK_DOUBLE_RATE_ENABLE__SHIFT 0x9 +#define PHYPLLG_PIXCLK_RESYNC_CNTL__PHYPLLG_PIXCLK_RESYNC_ENABLE_MASK 0x00000001L +#define PHYPLLG_PIXCLK_RESYNC_CNTL__PHYPLLG_DEEP_COLOR_DTO_ENABLE_STATUS_MASK 0x00000002L +#define PHYPLLG_PIXCLK_RESYNC_CNTL__PHYPLLG_DCCG_DEEP_COLOR_CNTL_MASK 0x00000030L +#define PHYPLLG_PIXCLK_RESYNC_CNTL__PHYPLLG_PIXCLK_ENABLE_MASK 0x00000100L +#define PHYPLLG_PIXCLK_RESYNC_CNTL__PHYPLLG_PIXCLK_DOUBLE_RATE_ENABLE_MASK 0x00000200L +#endif #endif /* _DCN31_RESOURCE_H_ */
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 66/72 drm/amd/display: Added power down for DCN10
In reply to Greg Kroah-HartmanFrom: Lai, Derek <[email protected]>
[ Upstream commit d97e631af2db84c8c9d63abf68d487d0bb559e4c ]
[Why]
The change of setting a timer callback on boot for 10 seconds is still working, just lacked power down for DCN10.
[How]
Added power down for DCN10.
--- drivers/gpu/drm/amd/display/dc/dcn10/dcn10_init.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_init.c +1 -0
@@ -78,6 +78,7 @@ static const struct hw_sequencer_funcs dcn10_funcs = { .get_clock = dcn10_get_clock, .get_vupdate_offset_from_vsync = dcn10_get_vupdate_offset_from_vsync, .calc_vupdate_position = dcn10_calc_vupdate_position, + .power_down = dce110_power_down, .set_backlight_level = dce110_set_backlight_level, .set_abm_immediate_disable = dce110_set_abm_immediate_disable, .set_pipe = dce110_set_pipe,
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 67/72 ipv6: raw: check passed optlen before reading
In reply to Greg Kroah-HartmanFrom: Tamir Duberstein <[email protected]>
[ Upstream commit fb7bc9204095090731430c8921f9e629740c110a ]
Add a check that the user-provided option is at least as long as the number of bytes we intend to read. Before this patch we would blindly read sizeof(int) bytes even in cases where the user passed optlen<sizeof(int), which would potentially read garbage or fault.
Discovered by new tests in https://github.com/google/gvisor/pull/6957 .
The original get_user call predates history in the git repo.
--- net/ipv6/raw.c | 3 +++ 1 file changed, 3 insertions(+)
net/ipv6/raw.c +3 -0
@@ -1020,6 +1020,9 @@ static int do_rawv6_setsockopt(struct sock *sk, int level, int optname,struct raw6_sock *rp =raw6_sk (sk);int val; +if (optlen <sizeof (val)) +return -EINVAL ; +if (copy_from_sockptr (&val, optval,sizeof (val)))return -EFAULT ;
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 68/72 userfaultfd/selftests: fix hugetlb area allocations
In reply to Greg Kroah-HartmanFrom: Mike Kravetz <[email protected]>
[ Upstream commit f5c73297181c6b3ad76537bad98eaad6d29b9333 ]
Currently, userfaultfd selftest for hugetlb as run from run_vmtests.sh or any environment where there are 'just enough' hugetlb pages will always fail with:
testing events (fork, remap, remove):
ERROR: UFFDIO_COPY error: -12 (errno=12, line=616)
The ENOMEM error code implies there are not enough hugetlb pages. However, there are free hugetlb pages but they are all reserved. There is a basic problem with the way the test allocates hugetlb pages which has existed since the test was originally written.
Due to the way 'cleanup' was done between different phases of the test, this issue was masked until recently. The issue was uncovered by commit 8ba6e8640844 ("userfaultfd/selftests: reinitialize test context in each test").
For the hugetlb test, src and dst areas are allocated as PRIVATE mappings of a hugetlb file. This means that at mmap time, pages are reserved for the src and dst areas. At the start of event testing (and other tests) the src area is populated which results in allocation of huge pages to fill the area and consumption of reserves associated with the area. Then, a child is forked to fault in the dst area. Note that the dst area was allocated in the parent and hence the parent owns the reserves associated with the mapping. The child has normal access to the dst area, but can not use the reserves created/owned by the parent. Thus, if there are no other huge pages available allocation of a page for the dst by the child will fail.
Fix by not creating reserves for the dst area. In this way the child can use free (non-reserved) pages.
Also, MAP_PRIVATE of a file only makes sense if you are interested in the contents of the file before making a COW copy. The test does not do this. So, just use MAP_ANONYMOUS | MAP_HUGETLB to create an anonymous hugetlb mapping. There is no need to create a hugetlb file in the non-shared case.
--- tools/testing/selftests/vm/userfaultfd.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
tools/testing/selftests/vm/userfaultfd.c +10 -6
@@ -86,7 +86,7 @@ static bool test_uffdio_minor = false;static bool map_shared;static int shm_fd; -static int huge_fd; +static int huge_fd =-1 ;/* only used for hugetlb_shared test */ static char *huge_fd_off0;static unsigned long long *count_verify;static int uffd =-1 ;
@@ -222,6 +222,9 @@ static void noop_alias_mapping(__u64 *start, size_t len, unsigned long offset)static void hugetlb_release_pages (char *rel_area) { +if (huge_fd ==-1 ) +return ; +if (fallocate (huge_fd,FALLOC_FL_PUNCH_HOLE |FALLOC_FL_KEEP_SIZE , rel_area == huge_fd_off0 ?0 : nr_pages * page_size, nr_pages * page_size))
@@ -234,16 +237,17 @@ static void hugetlb_allocate_area(void **alloc_area)char **alloc_area_alias; *alloc_area =mmap (NULL , nr_pages * page_size,PROT_READ |PROT_WRITE , - (map_shared ?MAP_SHARED :MAP_PRIVATE ) | -MAP_HUGETLB , - huge_fd, *alloc_area == area_src ?0 : - nr_pages * page_size); + map_shared ?MAP_SHARED : +MAP_PRIVATE |MAP_HUGETLB | + (*alloc_area == area_src ?0 :MAP_NORESERVE ), + huge_fd, + *alloc_area == area_src ?0 : nr_pages * page_size);if (*alloc_area ==MAP_FAILED )err ("mmap of hugetlbfs file failed" );if (map_shared) { area_alias =mmap (NULL , nr_pages * page_size,PROT_READ |PROT_WRITE , -MAP_SHARED |MAP_HUGETLB , +MAP_SHARED , huge_fd, *alloc_area == area_src ?0 : nr_pages * page_size);if (area_alias ==MAP_FAILED )
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 69/72 ARM: dts: gpio-ranges property is now required
In reply to Greg Kroah-HartmanFrom: Phil Elwell <[email protected]>
[ Upstream commit c8013355ead68dce152cf426686f8a5f80d88b40 ]
Since [1], added in 5.7, the absence of a gpio-ranges property has prevented GPIOs from being restored to inputs when released. Add those properties for BCM283x and BCM2711 devices.
[1] commit 2ab73c6d8323 ("gpio: Support GPIO controllers without pin-ranges")
--- arch/arm/boot/dts/bcm2711.dtsi | 2 ++ arch/arm/boot/dts/bcm283x.dtsi | 2 ++ 2 files changed, 4 insertions(+)
arch/arm/boot/dts/bcm2711.dtsi +2 -0
@@ -582,6 +582,8 @@ <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>; + gpio-ranges = <&gpio 0 0 58>; + gpclk0_gpio49: gpclk0_gpio49 { pin-gpclk { pins = "gpio49";
arch/arm/boot/dts/bcm283x.dtsi +2 -0
@@ -126,6 +126,8 @@ interrupt-controller; #interrupt-cells = <2>; + gpio-ranges = <&gpio 0 0 54>; + /* Defines common pin muxing groups * * While each pin can have its mux selected
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 70/72 Input: zinitix - make sure the IRQ is allocated before it gets enabled
In reply to Greg Kroah-HartmanFrom: Nikita Travkin <[email protected]>
[ Upstream commit cf73ed894ee939d6706d65e0cd186e4a64e3af6d ]
Since irq request is the last thing in the driver probe, it happens later than the input device registration. This means that there is a small time window where if the open method is called the driver will attempt to enable not yet available irq.
Fix that by moving the irq request before the input device registration.
--- drivers/input/touchscreen/zinitix.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
drivers/input/touchscreen/zinitix.c +9 -9
@@ -488,6 +488,15 @@ static int zinitix_ts_probe(struct i2c_client *client)return error; } + error =devm_request_threaded_irq (&client->dev, client->irq, +NULL , zinitix_ts_irq_handler, +IRQF_ONESHOT |IRQF_NO_AUTOEN , + client->name, bt541); +if (error) { +dev_err (&client->dev,"Failed to request IRQ: %d\n" , error); +return error; + } + error =zinitix_init_input_dev (bt541);if (error) { dev_err(&client->dev,
@@ -513,15 +522,6 @@ static int zinitix_ts_probe(struct i2c_client *client)return -EINVAL ; } - error =devm_request_threaded_irq (&client->dev, client->irq, -NULL , zinitix_ts_irq_handler, -IRQF_ONESHOT |IRQF_NO_AUTOEN , - client->name, bt541); -if (error) { -dev_err (&client->dev,"Failed to request IRQ: %d\n" , error); -return error; - } -return 0 ; }
Signature · 1 line
2.34.1
Greg Kroah-Hartman
maintainerPATCH 71/72 Revert "drm/amdgpu: stop scheduler when calling hw_fini (v2)"
In reply to Greg Kroah-HartmanFrom: Len Brown <[email protected]>
commit df5bc0aa7ff6e2e14cb75182b4eda20253c711d4 upstream.
This reverts commit f7d6779df642720e22bffd449e683bb8690bd3bf.
This bisected regression has impacted suspend-resume stability since 5.15-rc1. It regressed -stable via 5.14.10.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 8 -------- 1 file changed, 8 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c +0 -8
@@ -552,9 +552,6 @@ void amdgpu_fence_driver_hw_fini(structif (!ring || !ring->fence_drv.initialized)continue ; -if (!ring->no_scheduler) -drm_sched_stop (&ring->sched,NULL ); -/* You can't wait for HW to signal if it's gone */ if (!drm_dev_is_unplugged (&adev->ddev)) r =amdgpu_fence_wait_empty (ring);
@@ -614,11 +611,6 @@ void amdgpu_fence_driver_hw_init(structif (!ring || !ring->fence_drv.initialized)continue ; -if (!ring->no_scheduler) { -drm_sched_resubmit_jobs (&ring->sched); -drm_sched_start (&ring->sched, true); - } -/* enable the interrupt */ if (ring->fence_drv.irq_src) amdgpu_irq_get(adev, ring->fence_drv.irq_src,
Greg Kroah-Hartman
maintainerPATCH 72/72 drm/amd/pm: keep the BACO feature enabled for suspend
In reply to Greg Kroah-HartmanFrom: Evan Quan <[email protected]>
commit eaa090538e8d21801c6d5f94590c3799e6a528b5 upstream.
To pair with the workaround which always reset the ASIC in suspend. Otherwise, the reset which relies on BACO will fail.
--- drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +7 -1
@@ -1386,8 +1386,14 @@ static int smu_disable_dpms(struct smu_c {struct amdgpu_device *adev = smu->adev;int ret =0 ; +/* +* TODO: (adev->in_suspend && !adev->in_s0ix) is added to pair +* the workaround which always reset the asic in suspend. +* It's likely that workaround will be dropped in the future. +* Then the change here should be dropped together. +*/ bool use_baco = !smu->is_apu && - ((amdgpu_in_reset (adev) && + (((amdgpu_in_reset (adev) || (adev->in_suspend && !adev->in_s0ix)) && (amdgpu_asic_reset_method (adev) ==AMD_RESET_METHOD_BACO )) || ((adev->in_runpm || adev->in_s4) &&amdgpu_asic_supports_baco (adev)));
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.15.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.15:
10 builds: 10 pass, 0 fail
28 boots: 28 pass, 0 fail
114 tests: 114 pass, 0 failLinux version: 5.15.14-rc1-ge8d40b0a7738
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04Jon
Quoted 17 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please
let me know.Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.15.14-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-
stable-rc.git linux-5.15.y
and the diffstat can be found below.
Quoted 3 lines
thanks,
greg k-h
hello,
Compiled and booted 5.15.14-rc1+ on VivoBook 15_ASUS Laptop X507UAR .
No Regression from dmesg.
Signature · 2 lines
software engineer rajagiri school of engineering and technology - autonomous
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.15.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels:
Signature · 1 line
Florian
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.15.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.y
and the diffstat can be found below.thanks,
greg k-h
5.15.14-rc1 Successfully Compiled and booted on my Raspberry PI 4b (8g) (bcm2711)
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.15.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
Build results:
total: 154 pass: 154 fail: 0 Qemu test results: total: 480 pass: 480 fail: 0
Guenter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
Quoted 9 lines
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.15.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.y
and the diffstat can be found below.
thanks,greg k-h
Compiled and booted on my test system Lenovo P50s: Intel Core i7 No emergency and critical messages in the dmesg
Thanks
-Zan
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.15.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.15.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
## Build
* kernel: 5.15.14-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-5.15.y
* git commit: e8d40b0a77381adfdcadb8307596341334c9e18d
* git describe: v5.15.13-73-ge8d40b0a7738
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-5.15.y/build/v5.15.13-73-ge8d40b0a7738
## Test Regressions (compared to v5.15.11-129-g47b0c2878802) No test regressions found.
## Metric Regressions (compared to v5.15.11-129-g47b0c2878802) No metric regressions found.
## Test Fixes (compared to v5.15.11-129-g47b0c2878802) No test fixes found.
## Metric Fixes (compared to v5.15.11-129-g47b0c2878802) No metric fixes found.
## Test result summary
total: 97540, pass: 83368, fail: 678, skip: 12534, xfail: 960
## Build Summary
* arc: 10 total, 10 passed, 0 failed
* arm: 263 total, 257 passed, 6 failed
* arm64: 42 total, 40 passed, 2 failed
* dragonboard-410c: 1 total, 1 passed, 0 failed
* hi6220-hikey: 1 total, 1 passed, 0 failed
* i386: 40 total, 37 passed, 3 failed
* juno-r2: 1 total, 1 passed, 0 failed
* mips: 37 total, 31 passed, 6 failed
* parisc: 14 total, 14 passed, 0 failed
* powerpc: 56 total, 50 passed, 6 failed
* riscv: 28 total, 23 passed, 5 failed
* s390: 22 total, 20 passed, 2 failed
* sh: 26 total, 24 passed, 2 failed
* sparc: 14 total, 14 passed, 0 failed
* x15: 1 total, 1 passed, 0 failed
* x86: 1 total, 1 passed, 0 failed
* x86_64: 42 total, 40 passed, 2 failed
## Test suites summary
* fwts
* igt-gpu-tools
* kselftest-android
* kselftest-arm64
* kselftest-arm64/arm64.btitest.bti_c_func
* kselftest-arm64/arm64.btitest.bti_j_func
* kselftest-arm64/arm64.btitest.bti_jc_func
* kselftest-arm64/arm64.btitest.bti_none_func
* kselftest-arm64/arm64.btitest.nohint_func
* kselftest-arm64/arm64.btitest.paciasp_func
* kselftest-arm64/arm64.nobtitest.bti_c_func
* kselftest-arm64/arm64.nobtitest.bti_j_func
* kselftest-arm64/arm64.nobtitest.bti_jc_func
* kselftest-arm64/arm64.nobtitest.bti_none_func
* kselftest-arm64/arm64.nobtitest.nohint_func
* kselftest-arm64/arm64.nobtitest.paciasp_func
* kselftest-bpf
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers
* kselftest-efivarfs
* kselftest-filesystems
* kselftest-firmware
* kselftest-fpu
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-kvm
* kselftest-lib
* kselftest-livepatch
* kselftest-lkdtm
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-splice
* kselftest-static_keys
* kselftest-sync
* kselftest-sysctl
* kselftest-tc-testing
* kselftest-timens
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-vm
* kselftest-x86
* kselftest-zram
* kunit
* kvm-unit-tests
* libgpiod
* libhugetlbfs
* linux-log-parser
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-containers-tests
* ltp-controllers-tests
* ltp-cpuhotplug-tests
* ltp-crypto-tests
* ltp-cve-tests
* ltp-dio-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-mm-tests
* ltp-nptl-tests
* ltp-open-posix-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-tracing-tests
* network-basic-tests
* packetdrill
* perf
* rcutorture
* ssuite
* v4l2-compliance
--
Linaro LKFT
https://lkft.linaro.org
Quoted 7 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
Hi Greg,
Corrected email - 5.15.14-rc1
Looking good.
Run tested on:
- SolidRun Cubox-i Dual/Quad - NXP iMX6 (Cubox-i4Pro)
In addition: build tested on:
- Allwinner A64
- Allwinner H3
- Allwinner H5
- Allwinner H6
- Intel x86_64
- NXP iMX8
- Qualcomm Dragonboard
- Rockchip RK3288
- Rockchip RK3328
- Rockchip RK3399pro
- Samsung Exynos
--
Rudi
Hi Greg,
Quoted 7 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.15.14 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed, 12 Jan 2022 07:18:05 +0000. Anything received after that time might be too late.
Boot test:x86_64: Booted on my test laptop. No regression.
mips: Booted on ci20 board. No regression.
--
Regards
Sudip