5.4.248-rc1 review
Subsystems (3)
Greg Kroah-Hartman
maintainercover 5.4.248-rc1 review
This is the start of the stable review cycle for the 5.4.248 release. There are 64 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, 21 Jun 2023 10:21:12 +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.4.248-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.4.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 5.4.248-rc1
Christian Loehle <[email protected]>
mmc: block: ensure error propagation for non-blk
Alexander Kapshuk <[email protected]>
drm/nouveau/kms: Fix NULL pointer dereference in nouveau_connector_detect_depth
Leon Romanovsky <[email protected]>
neighbour: delete neigh_lookup_nodev as not used
Gaosheng Cui <[email protected]>
net: Remove unused inline function dst_hold_and_use()
Gaosheng Cui <[email protected]>
neighbour: Remove unused inline function neigh_key_eq16()
David Howells <[email protected]>
afs: Fix vlserver probe RTT handling
Alex Maftei <[email protected]>
selftests/ptp: Fix timestamp printf format for PTP_SYS_OFFSET
Lin Ma <[email protected]>
net: tipc: resize nlattr array to correct size
Eric Dumazet <[email protected]>
net: lapbether: only support ethernet devices
Vlad Buslov <[email protected]>
net/sched: cls_api: Fix lockup on flushing explicitly created chain
Natalia Petrova <[email protected]>
drm/nouveau: add nv_encoder pointer check for NULL
Lyude Paul <[email protected]>
drm/nouveau/kms: Don't change EDID when it hasn't actually changed
Natalia Petrova <[email protected]>
drm/nouveau/dp: check for NULL nv_connector->native_mode
Aleksandr Loktionov <[email protected]>
igb: fix nvm.ops.read() error handling
Dan Carpenter <[email protected]>
sctp: fix an error code in sctp_sf_eat_auth()
Hangbin Liu <[email protected]>
ipvlan: fix bound dev checking for IPv6 l3s mode
Saravanan Vajravel <[email protected]>
IB/isert: Fix incorrect release of isert connection
Saravanan Vajravel <[email protected]>
IB/isert: Fix possible list corruption in CMA handler
Saravanan Vajravel <[email protected]>
IB/isert: Fix dead lock in ib_isert
Yishai Hadas <[email protected]>
IB/uverbs: Fix to consider event queue closing also upon non-blocking mode
Ahmed Zaki <[email protected]>
iavf: remove mask from iavf_irq_enable_queues()
Zhu Yanjun <[email protected]>
RDMA/rxe: Fix the use-before-initialization error of resp_pkts
Bob Pearson <[email protected]>
RDMA/rxe: Removed unused name from rxe_task struct
Zhu Yanjun <[email protected]>
RDMA/rxe: Remove the unused variable obj
Lee Jones <[email protected]>
net/sched: cls_u32: Fix reference counter leak leading to overflow
Guillaume Nault <[email protected]>
ping6: Fix send to link-local addresses with VRF.
Pablo Neira Ayuso <[email protected]>
netfilter: nfnetlink: skip error delivery on batch in case of ENOMEM
Vladimir Oltean <[email protected]>
spi: fsl-dspi: avoid SCK glitches with continuous transfers
Vladimir Oltean <[email protected]>
spi: spi-fsl-dspi: Remove unused chip->void_write_data
Elson Roy Serrao <[email protected]>
usb: dwc3: gadget: Reset num TRBs before giving back the request
Bernhard Seibold <[email protected]>
serial: lantiq: add missing interrupt ack
Jerry Meng <[email protected]>
USB: serial: option: add Quectel EM061KGL series
Stephen Hemminger <[email protected]>
Remove DECnet support from kernel
Edson Juliano Drosdeck <[email protected]>
ALSA: hda/realtek: Add a quirk for Compaq N14JP6
Wes Huang <[email protected]>
net: usb: qmi_wwan: add support for Compal RXM-G1
Edward Srouji <[email protected]>
RDMA/uverbs: Restrict usage of privileged QKEYs
Dave Airlie <[email protected]>
nouveau: fix client work fence deletion race
Ricardo Ribalda <[email protected]>
powerpc/purgatory: remove PGO flags
Ricardo Ribalda <[email protected]>
kexec: support purgatories with .text.hot sections
Ryusuke Konishi <[email protected]>
nilfs2: fix possible out-of-bounds segment allocation in resize ioctl
Ryusuke Konishi <[email protected]>
nilfs2: fix incomplete buffer cleanup in nilfs_btnode_abort_change_key()
Janne Grunau <[email protected]>
nios2: dts: Fix tse_mac "max-frame-size" property
Luís Henriques <[email protected]>
ocfs2: check new file size on fallocate call
Luís Henriques <[email protected]>
ocfs2: fix use-after-free when unmounting read-only filesystem
Sukrut Bellary <[email protected]>
drm:amd:amdgpu: Fix missing buffer object unlock in failure path
Ross Lagerwall <[email protected]>
xen/blkfront: Only check REQ_FUA for writes
Liviu Dudau <[email protected]>
mips: Move initrd_start check after initrd address sanitisation.
Manuel Lauss <[email protected]>
MIPS: Alchemy: fix dbdma2
Helge Deller <[email protected]>
parisc: Flush gatt writes and adjust gatt mask in parisc_agp_mask_memory()
Helge Deller <[email protected]>
parisc: Improve cache flushing for PCXL in arch_sync_dma_for_cpu()
Johannes Thumshirn <[email protected]>
btrfs: handle memory allocation failure in btrfs_csum_one_bio
Mario Limonciello <[email protected]>
power: supply: Fix logic checking if system is running from battery
Krzysztof Kozlowski <[email protected]>
irqchip/meson-gpio: Mark OF related data as maybe unused
Osama Muhammad <[email protected]>
regulator: Fix error checking for debugfs_create_dir
Alexandru Sorodoc <[email protected]>
platform/x86: asus-wmi: Ignore WMI events with codes 0x7B, 0xC0
Marek Vasut <[email protected]>
power: supply: Ratelimit no data debug output
Krzysztof Kozlowski <[email protected]>
ARM: dts: vexpress: add missing cache properties
Hans de Goede <[email protected]>
power: supply: bq27xxx: Use mod_delayed_work() instead of cancel() + schedule()
Hans de Goede <[email protected]>
power: supply: sc27xx: Fix external_power_changed race
Hans de Goede <[email protected]>
power: supply: ab8500: Fix external_power_changed race
Jan Höppner <[email protected]>
s390/dasd: Use correct lock while counting channel queue length
Christoph Hellwig <[email protected]>
dasd: refactor dasd_ioctl_information
Roberto Sassu <[email protected]>
KEYS: asymmetric: Copy sig and digest in public_key_verify_signature()
Mirsad Goran Todorovac <[email protected]>
test_firmware: fix a memory leak with reqs buffer
-------------
Diffstat:
Documentation/admin-guide/kernel-parameters.txt | 4 - Documentation/admin-guide/sysctl/net.rst | 15 +- Documentation/ioctl/ioctl-number.rst | 1 - Documentation/networking/decnet.txt | 230 --- MAINTAINERS | 7 - Makefile | 4 +- arch/arm/boot/dts/vexpress-v2p-ca5s.dts | 1 + arch/mips/alchemy/common/dbdma.c | 27 +- arch/mips/configs/decstation_64_defconfig | 2 - arch/mips/configs/decstation_defconfig | 2 - arch/mips/configs/decstation_r4k_defconfig | 2 - arch/mips/configs/gpr_defconfig | 2 - arch/mips/configs/jazz_defconfig | 2 - arch/mips/configs/mtx1_defconfig | 2 - arch/mips/configs/nlm_xlp_defconfig | 2 - arch/mips/configs/nlm_xlr_defconfig | 2 - arch/mips/configs/rm200_defconfig | 2 - arch/mips/kernel/setup.c | 9 +- arch/nios2/boot/dts/10m50_devboard.dts | 2 +- arch/nios2/boot/dts/3c120_devboard.dts | 2 +- arch/parisc/kernel/pci-dma.c | 18 +- arch/powerpc/configs/ppc6xx_defconfig | 2 - arch/powerpc/purgatory/Makefile | 5 + crypto/asymmetric_keys/public_key.c | 36 +- drivers/block/xen-blkfront.c | 3 +- drivers/char/agp/parisc-agp.c | 15 +- drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 4 +- drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 4 +- drivers/gpu/drm/nouveau/nouveau_connector.c | 67 +- drivers/gpu/drm/nouveau/nouveau_drm.c | 14 +- drivers/infiniband/core/uverbs_cmd.c | 7 +- drivers/infiniband/core/uverbs_main.c | 12 +- drivers/infiniband/sw/rxe/rxe_qp.c | 16 +- drivers/infiniband/sw/rxe/rxe_task.c | 5 +- drivers/infiniband/sw/rxe/rxe_task.h | 5 +- drivers/infiniband/ulp/isert/ib_isert.c | 16 +- drivers/irqchip/irq-meson-gpio.c | 2 +- drivers/mmc/core/block.c | 5 + drivers/net/ethernet/intel/iavf/iavf.h | 2 +- drivers/net/ethernet/intel/iavf/iavf_main.c | 15 +- drivers/net/ethernet/intel/iavf/iavf_register.h | 2 +- drivers/net/ethernet/intel/igb/igb_ethtool.c | 3 + drivers/net/ipvlan/ipvlan_l3s.c | 4 + drivers/net/usb/qmi_wwan.c | 2 + drivers/net/wan/lapbether.c | 3 + drivers/platform/x86/asus-nb-wmi.c | 2 + drivers/power/supply/ab8500_btemp.c | 6 +- drivers/power/supply/ab8500_fg.c | 6 +- drivers/power/supply/bq27xxx_battery.c | 6 +- drivers/power/supply/power_supply_core.c | 8 +- drivers/power/supply/power_supply_sysfs.c | 3 +- drivers/power/supply/sc27xx_fuel_gauge.c | 9 +- drivers/regulator/core.c | 4 +- drivers/s390/block/dasd_ioctl.c | 46 +- drivers/spi/spi-fsl-dspi.c | 19 +- drivers/tty/serial/lantiq.c | 1 + drivers/usb/dwc3/gadget.c | 1 + drivers/usb/serial/option.c | 16 + fs/afs/vl_probe.c | 4 +- fs/btrfs/file-item.c | 4 +- fs/nilfs2/btnode.c | 12 +- fs/nilfs2/sufile.c | 9 + fs/ocfs2/file.c | 8 +- fs/ocfs2/super.c | 6 +- include/linux/netdevice.h | 4 - include/linux/netfilter.h | 5 - include/linux/netfilter_defs.h | 8 - include/net/dn.h | 231 --- include/net/dn_dev.h | 199 -- include/net/dn_fib.h | 167 -- include/net/dn_neigh.h | 30 - include/net/dn_nsp.h | 195 -- include/net/dn_route.h | 115 -- include/net/dst.h | 6 - include/net/neighbour.h | 7 - include/net/netns/netfilter.h | 3 - include/uapi/linux/dn.h | 149 -- include/uapi/linux/netfilter_decnet.h | 72 - include/uapi/linux/netlink.h | 2 +- kernel/kexec_file.c | 14 +- lib/test_firmware.c | 10 + net/Kconfig | 2 - net/Makefile | 1 - net/core/dev.c | 4 +- net/core/neighbour.c | 34 - net/decnet/Kconfig | 43 - net/decnet/Makefile | 10 - net/decnet/README | 8 - net/decnet/af_decnet.c | 2400 ----------------------- net/decnet/dn_dev.c | 1438 -------------- net/decnet/dn_fib.c | 799 -------- net/decnet/dn_neigh.c | 605 ------ net/decnet/dn_nsp_in.c | 906 --------- net/decnet/dn_nsp_out.c | 695 ------- net/decnet/dn_route.c | 1921 ------------------ net/decnet/dn_rules.c | 258 --- net/decnet/dn_table.c | 929 --------- net/decnet/dn_timer.c | 104 - net/decnet/netfilter/Kconfig | 17 - net/decnet/netfilter/Makefile | 6 - net/decnet/netfilter/dn_rtmsg.c | 158 -- net/decnet/sysctl_net_decnet.c | 373 ---- net/ipv6/ping.c | 3 +- net/netfilter/core.c | 10 - net/netfilter/nfnetlink.c | 3 +- net/sched/cls_api.c | 12 +- net/sched/cls_u32.c | 18 +- net/sctp/sm_statefuns.c | 2 +- net/tipc/bearer.c | 4 +- sound/pci/hda/patch_realtek.c | 1 + tools/testing/selftests/ptp/testptp.c | 6 +- 111 files changed, 364 insertions(+), 12380 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/64 test_firmware: fix a memory leak with reqs buffer
From: Mirsad Goran Todorovac <[email protected]>
[ Upstream commit be37bed754ed90b2655382f93f9724b3c1aae847 ]
Dan Carpenter spotted that test_fw_config->reqs will be leaked if trigger_batched_requests_store() is called two or more times. The same appears with trigger_batched_requests_async_store().
This bug wasn't trigger by the tests, but observed by Dan's visual inspection of the code.
The recommended workaround was to return -EBUSY if test_fw_config->reqs is already allocated.
--- lib/test_firmware.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
lib/test_firmware.c +10 -0
@@ -679,6 +679,11 @@ static ssize_t trigger_batched_requests_store(struct device *dev,mutex_lock (&test_fw_mutex); +if (test_fw_config->reqs) { + rc = -EBUSY ; + goto out_bail; + } + test_fw_config->reqs =vzalloc (array3_size (sizeof (struct test_batched_req ), test_fw_config->num_requests,2 ));
@@ -778,6 +783,11 @@ ssize_t trigger_batched_requests_async_store(struct device *dev,mutex_lock (&test_fw_mutex); +if (test_fw_config->reqs) { + rc = -EBUSY ; + goto out_bail; + } + test_fw_config->reqs =vzalloc (array3_size (sizeof (struct test_batched_req ), test_fw_config->num_requests,2 ));
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 2/64 KEYS: asymmetric: Copy sig and digest in public_key_verify_signature()
In reply to Greg Kroah-HartmanFrom: Roberto Sassu <[email protected]>
[ Upstream commit c3d03e8e35e005e1a614e51bb59053eeb5857f76 ]
Commit ac4e97abce9b8 ("scatterlist: sg_set_buf() argument must be in linear mapping") checks that both the signature and the digest reside in the linear mapping area.
However, more recently commit ba14a194a434c ("fork: Add generic vmalloced stack support") made it possible to move the stack in the vmalloc area, which is not contiguous, and thus not suitable for sg_set_buf() which needs adjacent pages.
Always make a copy of the signature and digest in the same buffer used to store the key and its parameters, and pass them to sg_init_one(). Prefer it to conditionally doing the copy if necessary, to keep the code simple. The buffer allocated with kmalloc() is in the linear mapping area.
--- crypto/asymmetric_keys/public_key.c | 36 ++++++++++++++++------------- 1 file changed, 20 insertions(+), 16 deletions(-)
crypto/asymmetric_keys/public_key.c +20 -16
@@ -255,9 +255,10 @@ int public_key_verify_signature(const struct public_key *pkey,struct crypto_wait cwait;struct crypto_akcipher *tfm;struct akcipher_request *req; -struct scatterlist src_sg[2 ]; +struct scatterlist src_sg;char alg_name[CRYPTO_MAX_ALG_NAME ]; -char *key, *ptr; +char *buf, *ptr; +size_t buf_len;int ret;pr_devel ("==>%s()\n" , __func__);
@@ -281,28 +282,31 @@ int public_key_verify_signature(const struct public_key *pkey,if (!req) goto error_free_tfm; - key =kmalloc (pkey->keylen +sizeof (u32) *2 + pkey->paramlen, -GFP_KERNEL ); -if (!key) + buf_len =max_t (size_t, pkey->keylen +sizeof (u32) *2 + pkey->paramlen, + sig->s_size + sig->digest_size); + + buf =kmalloc (buf_len,GFP_KERNEL ); +if (!buf) goto error_free_req; -memcpy (key, pkey->key, pkey->keylen); - ptr = key + pkey->keylen; +memcpy (buf, pkey->key, pkey->keylen); + ptr = buf + pkey->keylen; ptr =pkey_pack_u32 (ptr, pkey->algo); ptr =pkey_pack_u32 (ptr, pkey->paramlen);memcpy (ptr, pkey->params, pkey->paramlen);if (pkey->key_is_private) - ret =crypto_akcipher_set_priv_key (tfm, key, pkey->keylen); + ret =crypto_akcipher_set_priv_key (tfm, buf, pkey->keylen);else - ret =crypto_akcipher_set_pub_key (tfm, key, pkey->keylen); + ret =crypto_akcipher_set_pub_key (tfm, buf, pkey->keylen);if (ret) - goto error_free_key; + goto error_free_buf; -sg_init_table (src_sg,2 ); -sg_set_buf (&src_sg[0 ], sig->s, sig->s_size); -sg_set_buf (&src_sg[1 ], sig->digest, sig->digest_size); -akcipher_request_set_crypt (req, src_sg,NULL , sig->s_size, +memcpy (buf, sig->s, sig->s_size); +memcpy (buf + sig->s_size, sig->digest, sig->digest_size); + +sg_init_one (&src_sg, buf, sig->s_size + sig->digest_size); +akcipher_request_set_crypt (req, &src_sg,NULL , sig->s_size, sig->digest_size);crypto_init_wait (&cwait); akcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG |
@@ -310,8 +314,8 @@ int public_key_verify_signature(const struct public_key *pkey, crypto_req_done, &cwait); ret =crypto_wait_req (crypto_akcipher_verify (req), &cwait); -error_free_key: -kfree (key); +error_free_buf: +kfree (buf); error_free_req:akcipher_request_free (req); error_free_tfm:
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 3/64 dasd: refactor dasd_ioctl_information
In reply to Greg Kroah-HartmanFrom: Christoph Hellwig <[email protected]>
[ Upstream commit 9353848c6589ffe6373d03f3a58feaeda1009641 ]
Prepare for in-kernel callers of this functionality.
Stable-dep-of: ccc45cb4e727 ("s390/dasd: Use correct lock while counting channel queue length")
--- drivers/s390/block/dasd_ioctl.c | 42 ++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 19 deletions(-)
drivers/s390/block/dasd_ioctl.c +23 -19
@@ -457,10 +457,9 @@ static int dasd_ioctl_read_profile(struct dasd_block *block, void __user *argp)/* * Return dasd information. Used for BIODASDINFO and BIODASDINFO2. */ -static int dasd_ioctl_information (struct dasd_block *block, -unsigned int cmd,void __user *argp) +static int __dasd_ioctl_information (struct dasd_block *block, +struct dasd_information2_t *dasd_info) { -struct dasd_information2_t *dasd_info;struct subchannel_id sch_id;struct ccw_dev_id dev_id;struct dasd_device *base;
@@ -473,15 +472,9 @@ static int dasd_ioctl_information(struct dasd_block *block,if (!base->discipline || !base->discipline->fill_info)return -EINVAL ; - dasd_info =kzalloc (sizeof (struct dasd_information2_t ),GFP_KERNEL ); -if (dasd_info ==NULL ) -return -ENOMEM ; - rc = base->discipline->fill_info (base, dasd_info); -if (rc) { -kfree (dasd_info); +if (rc)return rc; - } cdev = base->cdev;ccw_device_get_id (cdev, &dev_id);
@@ -520,15 +513,24 @@ static int dasd_ioctl_information(struct dasd_block *block,list_for_each (l, &base->ccw_queue) dasd_info->chanq_len++;spin_unlock_irqrestore (&block->queue_lock, flags); +return 0 ; +} - rc =0 ; -if (copy_to_user (argp, dasd_info, - ((cmd == (unsigned int )BIODASDINFO2 ) ? -sizeof (struct dasd_information2_t ) : -sizeof (struct dasd_information_t )))) - rc = -EFAULT ; +static int dasd_ioctl_information (struct dasd_block *block,void __user *argp, +size_t copy_size) +{ +struct dasd_information2_t *dasd_info; +int error; + + dasd_info =kzalloc (sizeof (*dasd_info),GFP_KERNEL ); +if (!dasd_info) +return -ENOMEM ; + + error =__dasd_ioctl_information (block, dasd_info); +if (!error &©_to_user (argp, dasd_info, copy_size)) + error = -EFAULT ;kfree (dasd_info); -return rc; +return error; }/*
@@ -622,10 +624,12 @@ int dasd_ioctl(struct block_device *bdev, fmode_t mode, rc =dasd_ioctl_check_format (bdev, argp);break ;case BIODASDINFO : - rc =dasd_ioctl_information (block, cmd, argp); + rc =dasd_ioctl_information (block, argp, +sizeof (struct dasd_information_t ));break ;case BIODASDINFO2 : - rc =dasd_ioctl_information (block, cmd, argp); + rc =dasd_ioctl_information (block, argp, +sizeof (struct dasd_information2_t ));break ;case BIODASDPRRD : rc =dasd_ioctl_read_profile (block, argp);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 4/64 s390/dasd: Use correct lock while counting channel queue length
In reply to Greg Kroah-HartmanFrom: Jan Höppner <[email protected]>
[ Upstream commit ccc45cb4e7271c74dbb27776ae8f73d84557f5c6 ]
The lock around counting the channel queue length in the BIODASDINFO ioctl was incorrectly changed to the dasd_block->queue_lock with commit 583d6535cb9d ("dasd: remove dead code"). This can lead to endless list iterations and a subsequent crash.
The queue_lock is supposed to be used only for queue lists belonging to dasd_block. For dasd_device related queue lists the ccwdev lock must be used.
Fix the mentioned issues by correctly using the ccwdev lock instead of the queue lock.
--- drivers/s390/block/dasd_ioctl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/s390/block/dasd_ioctl.c +2 -2
@@ -509,10 +509,10 @@ static int __dasd_ioctl_information(struct dasd_block *block,memcpy (dasd_info->type, base->discipline->name,4 ); -spin_lock_irqsave (&block->queue_lock, flags); +spin_lock_irqsave (get_ccwdev_lock (base->cdev), flags);list_for_each (l, &base->ccw_queue) dasd_info->chanq_len++; -spin_unlock_irqrestore (&block->queue_lock, flags); +spin_unlock_irqrestore (get_ccwdev_lock (base->cdev), flags);return 0 ; }
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 5/64 power: supply: ab8500: Fix external_power_changed race
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit a5299ce4e96f3e8930e9c051b28d8093ada87b08 ]
ab8500_btemp_external_power_changed() dereferences di->btemp_psy, which gets sets in ab8500_btemp_probe() like this:
di->btemp_psy = devm_power_supply_register(dev, &ab8500_btemp_desc,
&psy_cfg);As soon as devm_power_supply_register() has called device_add() the external_power_changed callback can get called. So there is a window where ab8500_btemp_external_power_changed() may get called while di->btemp_psy has not been set yet leading to a NULL pointer dereference.
Fixing this is easy. The external_power_changed callback gets passed the power_supply which will eventually get stored in di->btemp_psy, so ab8500_btemp_external_power_changed() can simply directly use the passed in psy argument which is always valid.
And the same applies to ab8500_fg_external_power_changed().
--- drivers/power/supply/ab8500_btemp.c | 6 ++---- drivers/power/supply/ab8500_fg.c | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-)
drivers/power/supply/ab8500_btemp.c +2 -4
@@ -919,10 +919,8 @@ static int ab8500_btemp_get_ext_psy_data(struct device *dev, void *data)*/ static void ab8500_btemp_external_power_changed (struct power_supply *psy) { -struct ab8500_btemp *di =power_supply_get_drvdata (psy); - -class_for_each_device (power_supply_class,NULL , - di->btemp_psy, ab8500_btemp_get_ext_psy_data); +class_for_each_device (power_supply_class,NULL , psy, + ab8500_btemp_get_ext_psy_data); }/* ab8500 btemp driver interrupts and their respective isr */
drivers/power/supply/ab8500_fg.c +2 -4
@@ -2380,10 +2380,8 @@ static int ab8500_fg_init_hw_registers(struct ab8500_fg *di)*/ static void ab8500_fg_external_power_changed (struct power_supply *psy) { -struct ab8500_fg *di =power_supply_get_drvdata (psy); - -class_for_each_device (power_supply_class,NULL , - di->fg_psy, ab8500_fg_get_ext_psy_data); +class_for_each_device (power_supply_class,NULL , psy, + ab8500_fg_get_ext_psy_data); }/**
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 6/64 power: supply: sc27xx: Fix external_power_changed race
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit 4d5c129d6c8993fe96e9ae712141eedcb9ca68c2 ]
sc27xx_fgu_external_power_changed() dereferences data->battery, which gets sets in ab8500_btemp_probe() like this:
data->battery = devm_power_supply_register(dev, &sc27xx_fgu_desc,
&fgu_cfg);As soon as devm_power_supply_register() has called device_add() the external_power_changed callback can get called. So there is a window where sc27xx_fgu_external_power_changed() may get called while data->battery has not been set yet leading to a NULL pointer dereference.
Fixing this is easy. The external_power_changed callback gets passed the power_supply which will eventually get stored in data->battery, so sc27xx_fgu_external_power_changed() can simply directly use the passed in psy argument which is always valid.
After this change sc27xx_fgu_external_power_changed() is reduced to just "power_supply_changed(psy);" and it has the same prototype. While at it simply replace it with making the external_power_changed callback directly point to power_supply_changed.
--- drivers/power/supply/sc27xx_fuel_gauge.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-)
drivers/power/supply/sc27xx_fuel_gauge.c +1 -8
@@ -634,13 +634,6 @@ static int sc27xx_fgu_set_property(struct power_supply *psy,return ret; } -static void sc27xx_fgu_external_power_changed (struct power_supply *psy) -{ -struct sc27xx_fgu_data *data =power_supply_get_drvdata (psy); - -power_supply_changed (data->battery); -} -static int sc27xx_fgu_property_is_writeable (struct power_supply *psy,enum power_supply_property psp) {
@@ -671,7 +664,7 @@ static const struct power_supply_desc sc27xx_fgu_desc = { .num_properties = ARRAY_SIZE(sc27xx_fgu_props), .get_property = sc27xx_fgu_get_property, .set_property = sc27xx_fgu_set_property, - .external_power_changed = sc27xx_fgu_external_power_changed, + .external_power_changed = power_supply_changed, .property_is_writeable = sc27xx_fgu_property_is_writeable, };
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 7/64 power: supply: bq27xxx: Use mod_delayed_work() instead of cancel() + schedule()
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit 59dddea9879713423c7b2ade43c423bb71e0d216 ]
Use mod_delayed_work() instead of separate cancel_delayed_work_sync() + schedule_delayed_work() calls.
--- drivers/power/supply/bq27xxx_battery.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/power/supply/bq27xxx_battery.c +2 -4
@@ -886,10 +886,8 @@ static int poll_interval_param_set(const char *val, const struct kernel_param *kreturn ret;mutex_lock (&bq27xxx_list_lock); -list_for_each_entry (di, &bq27xxx_battery_devices, list) { -cancel_delayed_work_sync (&di->work); -schedule_delayed_work (&di->work,0 ); - } +list_for_each_entry (di, &bq27xxx_battery_devices, list) +mod_delayed_work (system_wq, &di->work,0 );mutex_unlock (&bq27xxx_list_lock);return ret;
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 8/64 ARM: dts: vexpress: add missing cache properties
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 328acc5657c6197753238d7ce0a6924ead829347 ]
As all level 2 and level 3 caches are unified, add required cache-unified property to fix warnings like:
vexpress-v2p-ca5s.dtb: cache-controller@2c0f0000: 'cache-unified' is a required property
--- arch/arm/boot/dts/vexpress-v2p-ca5s.dts | 1 + 1 file changed, 1 insertion(+)
arch/arm/boot/dts/vexpress-v2p-ca5s.dts +1 -0
@@ -132,6 +132,7 @@ L2: cache-controller@2c0f0000 { reg = <0x2c0f0000 0x1000>; interrupts = <0 84 4>; cache-level = <2>; + cache-unified; }; pmu {
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 9/64 power: supply: Ratelimit no data debug output
In reply to Greg Kroah-HartmanFrom: Marek Vasut <[email protected]>
[ Upstream commit 155c45a25679f571c2ae57d10db843a9dfc63430 ]
Reduce the amount of output this dev_dbg() statement emits into logs, otherwise if system software polls the sysfs entry for data and keeps getting -ENODATA, it could end up filling the logs up.
This does in fact make systemd journald choke, since during boot the sysfs power supply entries are polled and if journald starts at the same time, the journal is just being repeatedly filled up, and the system stops on trying to start journald without booting any further.
--- drivers/power/supply/power_supply_sysfs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/power/supply/power_supply_sysfs.c +2 -1
@@ -127,7 +127,8 @@ static ssize_t power_supply_show_property(struct device *dev,if (ret <0 ) {if (ret == -ENODATA ) -dev_dbg (dev,"driver has no data for `%s' property\n" , +dev_dbg_ratelimited (dev, +"driver has no data for `%s' property\n" , attr->attr.name);else if (ret != -ENODEV && ret != -EAGAIN ) dev_err_ratelimited(dev,
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 10/64 platform/x86: asus-wmi: Ignore WMI events with codes 0x7B, 0xC0
In reply to Greg Kroah-HartmanFrom: Alexandru Sorodoc <[email protected]>
[ Upstream commit 362c1f2ec82cb65940e1c73e15a395a7a891fc6f ]
On ASUS GU604V the key 0x7B is issued when the charger is connected or disconnected, and key 0xC0 is issued when an external display is connected or disconnected.
This commit maps them to KE_IGNORE to slience kernel messages about unknown keys, such as:
kernel: asus_wmi: Unknown key code 0x7b
--- drivers/platform/x86/asus-nb-wmi.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/platform/x86/asus-nb-wmi.c +2 -0
@@ -555,6 +555,7 @@ static const struct key_entry asus_nb_wmi_keymap[] = { { KE_KEY, 0x6B, { KEY_TOUCHPAD_TOGGLE } }, { KE_IGNORE, 0x6E, }, /* Low Battery notification */ { KE_KEY, 0x7a, { KEY_ALS_TOGGLE } }, /* Ambient Light Sensor Toggle */ + { KE_IGNORE, 0x7B, }, /* Charger connect/disconnect notification */ { KE_KEY, 0x7c, { KEY_MICMUTE } }, { KE_KEY, 0x7D, { KEY_BLUETOOTH } }, /* Bluetooth Enable */ { KE_KEY, 0x7E, { KEY_BLUETOOTH } }, /* Bluetooth Disable */
@@ -580,6 +581,7 @@ static const struct key_entry asus_nb_wmi_keymap[] = { { KE_KEY, 0xA6, { KEY_SWITCHVIDEOMODE } }, /* SDSP CRT + TV + HDMI */ { KE_KEY, 0xA7, { KEY_SWITCHVIDEOMODE } }, /* SDSP LCD + CRT + TV + HDMI */ { KE_KEY, 0xB5, { KEY_CALC } }, + { KE_IGNORE, 0xC0, }, /* External display connect/disconnect notification */ { KE_KEY, 0xC4, { KEY_KBDILLUMUP } }, { KE_KEY, 0xC5, { KEY_KBDILLUMDOWN } }, { KE_IGNORE, 0xC6, }, /* Ambient Light Sensor notification */
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 11/64 regulator: Fix error checking for debugfs_create_dir
In reply to Greg Kroah-HartmanFrom: Osama Muhammad <[email protected]>
[ Upstream commit 2bf1c45be3b8f3a3f898d0756c1282f09719debd ]
This patch fixes the error checking in core.c in debugfs_create_dir. The correct way to check if an error occurred is 'IS_ERR' inline function.
--- drivers/regulator/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/regulator/core.c +2 -2
@@ -4906,7 +4906,7 @@ static void rdev_init_debugfs(struct regulator_dev *rdev) } rdev->debugfs =debugfs_create_dir (rname, debugfs_root); -if (!rdev->debugfs) { +if (IS_ERR (rdev->debugfs)) {rdev_warn (rdev,"Failed to create debugfs directory\n" );return ; }
@@ -5796,7 +5796,7 @@ static int __init regulator_init(void) ret =class_register (®ulator_class); debugfs_root =debugfs_create_dir ("regulator" ,NULL ); -if (!debugfs_root) +if (IS_ERR (debugfs_root))pr_warn ("regulator: Failed to create debugfs directory\n" );#ifdef CONFIG_DEBUG_FS
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 12/64 irqchip/meson-gpio: Mark OF related data as maybe unused
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 14130211be5366a91ec07c3284c183b75d8fba17 ]
The driver can be compile tested with !CONFIG_OF making certain data unused:
drivers/irqchip/irq-meson-gpio.c:153:34: error: ‘meson_irq_gpio_matches’ defined but not used [-Werror=unused-const-variable=]
--- drivers/irqchip/irq-meson-gpio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/irqchip/irq-meson-gpio.c +1 -1
@@ -70,7 +70,7 @@ static const struct meson_gpio_irq_params sm1_params = { .support_edge_both = true, }; -static const struct of_device_id meson_irq_gpio_matches[] = { +static const struct of_device_id meson_irq_gpio_matches[]__maybe_unused = { { .compatible ="amlogic,meson8-gpio-intc" , .data = &meson8_params }, { .compatible ="amlogic,meson8b-gpio-intc" , .data = &meson8b_params }, { .compatible ="amlogic,meson-gxbb-gpio-intc" , .data = &gxbb_params },
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 13/64 power: supply: Fix logic checking if system is running from battery
In reply to Greg Kroah-HartmanFrom: Mario Limonciello <[email protected]>
[ Upstream commit 95339f40a8b652b5b1773def31e63fc53c26378a ]
The logic used for power_supply_is_system_supplied() counts all power supplies and assumes that the system is running from AC if there is either a non-battery power-supply reporting to be online or if no power-supplies exist at all.
The second rule is for desktop systems, that don't have any battery/charger devices. These systems will incorrectly report to be powered from battery once a device scope power-supply is registered (e.g. a HID device), since these power-supplies increase the counter.
Apart from HID devices, recent dGPUs provide UCSI power supplies on a desktop systems. The dGPU by default doesn't have anything plugged in so it's 'offline'. This makes power_supply_is_system_supplied() return 0 with a count of 1 meaning all drivers that use this get a wrong judgement.
To fix this case adjust the logic to also examine the scope of the power supply. If the power supply is deemed a device power supply, then don't count it.
--- drivers/power/supply/power_supply_core.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/power/supply/power_supply_core.c +6 -2
@@ -347,6 +347,10 @@ static int __power_supply_is_system_supplied(struct device *dev, void *data)struct power_supply *psy =dev_get_drvdata (dev);unsigned int *count = data; +if (!psy->desc->get_property (psy,POWER_SUPPLY_PROP_SCOPE , &ret)) +if (ret.intval ==POWER_SUPPLY_SCOPE_DEVICE ) +return 0 ; + (*count)++;if (psy->desc->type !=POWER_SUPPLY_TYPE_BATTERY ) if (!psy->desc->get_property(psy, POWER_SUPPLY_PROP_ONLINE,
@@ -365,8 +369,8 @@ int power_supply_is_system_supplied(void) __power_supply_is_system_supplied);/* -* If no power class device was found at all, most probably we are -* running on a desktop system, so assume we are on mains power. +* If no system scope power class device was found at all, most probably we +* are running on a desktop system, so assume we are on mains power. */ if (count ==0 )return 1 ;
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 14/64 btrfs: handle memory allocation failure in btrfs_csum_one_bio
In reply to Greg Kroah-HartmanFrom: Johannes Thumshirn <[email protected]>
[ Upstream commit 806570c0bb7b4847828c22c4934fcf2dc8fc572f ]
Since f8a53bb58ec7 ("btrfs: handle checksum generation in the storage layer") the failures of btrfs_csum_one_bio() are handled via bio_end_io().
This means, we can return BLK_STS_RESOURCE from btrfs_csum_one_bio() in case the allocation of the ordered sums fails.
This also fixes a syzkaller report, where injecting a failure into the kvzalloc() call results in a BUG_ON().
--- fs/btrfs/file-item.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/btrfs/file-item.c +3 -1
@@ -499,7 +499,9 @@ blk_status_t btrfs_csum_one_bio(struct inode *inode, struct bio *bio, sums =kvzalloc (btrfs_ordered_sum_size (fs_info, bytes_left),GFP_KERNEL );memalloc_nofs_restore (nofs_flag); -BUG_ON (!sums);/* -ENOMEM */ +if (!sums) +return BLK_STS_RESOURCE ; + sums->len = bytes_left; ordered =btrfs_lookup_ordered_extent (inode, offset);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 15/64 parisc: Improve cache flushing for PCXL in arch_sync_dma_for_cpu()
In reply to Greg Kroah-HartmanFrom: Helge Deller <[email protected]>
[ Upstream commit 59fa12646d9f56c842b4d5b6418ed77af625c588 ]
Add comment in arch_sync_dma_for_device() and handle the direction flag in arch_sync_dma_for_cpu().
When receiving data from the device (DMA_FROM_DEVICE) unconditionally purge the data cache in arch_sync_dma_for_cpu().
--- arch/parisc/kernel/pci-dma.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
arch/parisc/kernel/pci-dma.c +17 -1
@@ -442,13 +442,29 @@ void arch_dma_free(struct device *dev, size_t size, void *vaddr,void arch_sync_dma_for_device (phys_addr_t paddr,size_t size,enum dma_data_direction dir) { +/* +* fdc: The data cache line is written back to memory, if and only if +* it is dirty, and then invalidated from the data cache. +*/ flush_kernel_dcache_range ((unsigned long )phys_to_virt (paddr), size); }void arch_sync_dma_for_cpu (phys_addr_t paddr,size_t size,enum dma_data_direction dir) { -flush_kernel_dcache_range ((unsigned long )phys_to_virt (paddr), size); +unsigned long addr = (unsigned long )phys_to_virt (paddr); + +switch (dir) { +case DMA_TO_DEVICE : +case DMA_BIDIRECTIONAL : +flush_kernel_dcache_range (addr, size); +return ; +case DMA_FROM_DEVICE : +purge_kernel_dcache_range_asm (addr, addr + size); +return ; +default : +BUG (); + } } void arch_dma_cache_sync(struct device *dev, void *vaddr, size_t size,
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 16/64 parisc: Flush gatt writes and adjust gatt mask in parisc_agp_mask_memory()
In reply to Greg Kroah-HartmanFrom: Helge Deller <[email protected]>
[ Upstream commit d703797380c540bbeac03f104ebcfc364eaf47cc ]
Flush caches after changing gatt entries and calculate entry according to SBA requirements.
--- drivers/char/agp/parisc-agp.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
drivers/char/agp/parisc-agp.c +14 -1
@@ -90,6 +90,9 @@ parisc_agp_tlbflush(struct agp_memory *mem) {struct _parisc_agp_info *info = &parisc_agp_info; +/* force fdc ops to be visible to IOMMU */ +asm_io_sync (); +writeq (info->gart_base |ilog2 (info->gart_size), info->ioc_regs+IOC_PCOM );readq (info->ioc_regs+IOC_PCOM );/* flush */ }
@@ -158,6 +161,7 @@ parisc_agp_insert_memory(struct agp_memory *mem, off_t pg_start, int type) info->gatt[j] =parisc_agp_mask_memory (agp_bridge, paddr, type); +asm_io_fdc (&info->gatt[j]); } }
@@ -191,7 +195,16 @@ static unsigned long parisc_agp_mask_memory(struct agp_bridge_data *bridge, dma_addr_t addr, int type) { - return SBA_PDIR_VALID_BIT | addr; + unsigned ci; /* coherent index */ +dma_addr_t pa; + + pa = addr &IOVP_MASK ; + asm("lci 0(%1), %0" :"=r" (ci) :"r" (phys_to_virt (pa))); + + pa |= (ci >>PAGE_SHIFT ) &0xff ;/* move CI (8 bits) into lowest byte */ + pa |=SBA_PDIR_VALID_BIT ;/* set "valid" bit */ + +return cpu_to_le64 (pa); } static void
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 17/64 MIPS: Alchemy: fix dbdma2
In reply to Greg Kroah-HartmanFrom: Manuel Lauss <[email protected]>
[ Upstream commit 2d645604f69f3a772d58ead702f9a8e84ab2b342 ]
Various fixes for the Au1200/Au1550/Au1300 DBDMA2 code:
- skip cache invalidation if chip has working coherency circuitry.
- invalidate KSEG0-portion of the (physical) data address.
- force the dma channel doorbell write out to bus immediately with a sync.
--- arch/mips/alchemy/common/dbdma.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-)
arch/mips/alchemy/common/dbdma.c +15 -12
@@ -30,6 +30,7 @@* */ +#include <linux/dma-map-ops.h> /* for dma_default_coherent */ #include <linux/init.h> #include <linux/kernel.h> #include <linux/slab.h>
@@ -623,17 +624,18 @@ u32 au1xxx_dbdma_put_source(u32 chanid, dma_addr_t buf, int nbytes, u32 flags) dp->dscr_cmd0 &= ~DSCR_CMD0_IE ;/* -* There is an errata on the Au1200/Au1550 parts that could result -* in "stale" data being DMA'ed. It has to do with the snoop logic on -* the cache eviction buffer. DMA_NONCOHERENT is on by default for -* these parts. If it is fixed in the future, these dma_cache_inv will -* just be nothing more than empty macros. See io.h. +* There is an erratum on certain Au1200/Au1550 revisions that could +* result in "stale" data being DMA'ed. It has to do with the snoop +* logic on the cache eviction buffer. dma_default_coherent is set +* to false on these parts. */ -dma_cache_wback_inv ((unsigned long )buf, nbytes); +if (!dma_default_coherent) +dma_cache_wback_inv (KSEG0ADDR (buf), nbytes); dp->dscr_cmd0 |=DSCR_CMD0_V ;/* Let it rip */ wmb ();/* drain writebuffer */ dma_cache_wback_inv ((unsigned long )dp,sizeof (*dp)); ctp->chan_ptr->ddma_dbell =0 ; +wmb ();/* force doorbell write out to dma engine */ /* Get next descriptor pointer. */ ctp->put_ptr =phys_to_virt (DSCR_GET_NXTPTR (dp->dscr_nxtptr));
@@ -685,17 +687,18 @@ u32 au1xxx_dbdma_put_dest(u32 chanid, dma_addr_t buf, int nbytes, u32 flags) dp->dscr_source1, dp->dscr_dest0, dp->dscr_dest1);#endif /* -* There is an errata on the Au1200/Au1550 parts that could result in -* "stale" data being DMA'ed. It has to do with the snoop logic on the -* cache eviction buffer. DMA_NONCOHERENT is on by default for these -* parts. If it is fixed in the future, these dma_cache_inv will just -* be nothing more than empty macros. See io.h. +* There is an erratum on certain Au1200/Au1550 revisions that could +* result in "stale" data being DMA'ed. It has to do with the snoop +* logic on the cache eviction buffer. dma_default_coherent is set +* to false on these parts. */ -dma_cache_inv ((unsigned long )buf, nbytes); +if (!dma_default_coherent) +dma_cache_inv (KSEG0ADDR (buf), nbytes); dp->dscr_cmd0 |=DSCR_CMD0_V ;/* Let it rip */ wmb ();/* drain writebuffer */ dma_cache_wback_inv ((unsigned long )dp,sizeof (*dp)); ctp->chan_ptr->ddma_dbell =0 ; +wmb ();/* force doorbell write out to dma engine */ /* Get next descriptor pointer. */ ctp->put_ptr =phys_to_virt (DSCR_GET_NXTPTR (dp->dscr_nxtptr));
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 18/64 mips: Move initrd_start check after initrd address sanitisation.
In reply to Greg Kroah-HartmanFrom: Liviu Dudau <[email protected]>
[ Upstream commit 4897a898a216058dec55e5e5902534e6e224fcdf ]
PAGE_OFFSET is technically a virtual address so when checking the value of initrd_start against it we should make sure that it has been sanitised from the values passed by the bootloader. Without this change, even with a bootloader that passes correct addresses for an initrd, we are failing to load it on MT7621 boards, for example.
--- arch/mips/kernel/setup.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
arch/mips/kernel/setup.c +5 -4
@@ -190,10 +190,6 @@ static unsigned long __init init_initrd(void)pr_err ("initrd start must be page aligned\n" ); goto disable; } -if (initrd_start <PAGE_OFFSET ) { -pr_err ("initrd start < PAGE_OFFSET\n" ); - goto disable; - }/* * Sanitize initrd addresses. For example firmware
@@ -206,6 +202,11 @@ static unsigned long __init init_initrd(void) initrd_end = (unsigned long )__va (end); initrd_start = (unsigned long )__va (__pa (initrd_start)); +if (initrd_start <PAGE_OFFSET ) { +pr_err ("initrd start < PAGE_OFFSET\n" ); + goto disable; + } +ROOT_DEV = Root_RAM0;return PFN_UP (end); disable:
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 19/64 xen/blkfront: Only check REQ_FUA for writes
In reply to Greg Kroah-HartmanFrom: Ross Lagerwall <[email protected]>
[ Upstream commit b6ebaa8100090092aa602530d7e8316816d0c98d ]
The existing code silently converts read operations with the REQ_FUA bit set into write-barrier operations. This results in data loss as the backend scribbles zeroes over the data instead of returning it.
While the REQ_FUA bit doesn't make sense on a read operation, at least one well-known out-of-tree kernel module does set it and since it results in data loss, let's be safe here and only look at REQ_FUA for writes.
--- drivers/block/xen-blkfront.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/block/xen-blkfront.c +2 -1
@@ -779,7 +779,8 @@ static int blkif_queue_rw_req(struct request *req, struct blkfront_ring_info *ri ring_req->u.rw.handle = info->handle; ring_req->operation =rq_data_dir (req) ?BLKIF_OP_WRITE :BLKIF_OP_READ ; -if (req_op (req) ==REQ_OP_FLUSH || req->cmd_flags &REQ_FUA ) { +if (req_op (req) ==REQ_OP_FLUSH || + (req_op (req) ==REQ_OP_WRITE && (req->cmd_flags &REQ_FUA ))) {/* * Ideally we can do an unordered flush-to-disk. * In case the backend onlysupports barriers, use that.
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 20/64 drm:amd:amdgpu: Fix missing buffer object unlock in failure path
In reply to Greg Kroah-HartmanFrom: Sukrut Bellary <[email protected]>
[ Upstream commit 60ecaaf54886b0642d5c4744f7fbf1ff0d6b3e42 ]
smatch warning -
1) drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:3615 gfx_v9_0_kiq_resume()
warn: inconsistent returns 'ring->mqd_obj->tbo.base.resv'.
2) drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c:6901 gfx_v10_0_kiq_resume()
warn: inconsistent returns 'ring->mqd_obj->tbo.base.resv'.
--- drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 4 +++- drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +3 -1
@@ -3527,8 +3527,10 @@ static int gfx_v10_0_kiq_resume(struct amdgpu_device *adev)return r; r =amdgpu_bo_kmap (ring->mqd_obj, (void **)&ring->mqd_ptr); -if (unlikely (r !=0 )) +if (unlikely (r !=0 )) { +amdgpu_bo_unreserve (ring->mqd_obj);return r; + }gfx_v10_0_kiq_init_queue (ring);amdgpu_bo_kunmap (ring->mqd_obj);
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +3 -1
@@ -3748,8 +3748,10 @@ static int gfx_v9_0_kiq_resume(struct amdgpu_device *adev)return r; r =amdgpu_bo_kmap (ring->mqd_obj, (void **)&ring->mqd_ptr); -if (unlikely (r !=0 )) +if (unlikely (r !=0 )) { +amdgpu_bo_unreserve (ring->mqd_obj);return r; + }gfx_v9_0_kiq_init_queue (ring);amdgpu_bo_kunmap (ring->mqd_obj);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 21/64 ocfs2: fix use-after-free when unmounting read-only filesystem
In reply to Greg Kroah-HartmanFrom: Luís Henriques <[email protected]>
commit 50d927880e0f90d5cb25e897e9d03e5edacc79a8 upstream.
It's trivial to trigger a use-after-free bug in the ocfs2 quotas code using fstest generic/452. After a read-only remount, quotas are suspended and ocfs2_mem_dqinfo is freed through ->ocfs2_local_free_info(). When unmounting the filesystem, an UAF access to the oinfo will eventually cause a crash.
BUG: KASAN: slab-use-after-free in timer_delete+0x54/0xc0 Read of size 8 at addr ffff8880389a8208 by task umount/669 ... Call Trace: <TASK> ... timer_delete+0x54/0xc0 try_to_grab_pending+0x31/0x230 __cancel_work_timer+0x6c/0x270 ocfs2_disable_quotas.isra.0+0x3e/0xf0 [ocfs2] ocfs2_dismount_volume+0xdd/0x450 [ocfs2] generic_shutdown_super+0xaa/0x280 kill_block_super+0x46/0x70 deactivate_locked_super+0x4d/0xb0 cleanup_mnt+0x135/0x1f0 ... </TASK> Allocated by task 632: kasan_save_stack+0x1c/0x40 kasan_set_track+0x21/0x30 __kasan_kmalloc+0x8b/0x90 ocfs2_local_read_info+0xe3/0x9a0 [ocfs2] dquot_load_quota_sb+0x34b/0x680 dquot_load_quota_inode+0xfe/0x1a0 ocfs2_enable_quotas+0x190/0x2f0 [ocfs2] ocfs2_fill_super+0x14ef/0x2120 [ocfs2] mount_bdev+0x1be/0x200 legacy_get_tree+0x6c/0xb0 vfs_get_tree+0x3e/0x110 path_mount+0xa90/0xe10 __x64_sys_mount+0x16f/0x1a0 do_syscall_64+0x43/0x90 entry_SYSCALL_64_after_hwframe+0x72/0xdc Freed by task 650: kasan_save_stack+0x1c/0x40 kasan_set_track+0x21/0x30 kasan_save_free_info+0x2a/0x50 __kasan_slab_free+0xf9/0x150 __kmem_cache_free+0x89/0x180 ocfs2_local_free_info+0x2ba/0x3f0 [ocfs2] dquot_disable+0x35f/0xa70 ocfs2_susp_quotas.isra.0+0x159/0x1a0 [ocfs2] ocfs2_remount+0x150/0x580 [ocfs2] reconfigure_super+0x1a5/0x3a0 path_mount+0xc8a/0xe10 __x64_sys_mount+0x16f/0x1a0 do_syscall_64+0x43/0x90 entry_SYSCALL_64_after_hwframe+0x72/0xdc
--- fs/ocfs2/super.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
fs/ocfs2/super.c +4 -2
@@ -955,8 +955,10 @@ static void ocfs2_disable_quotas(structfor (type =0 ; type <OCFS2_MAXQUOTAS ; type++) {if (!sb_has_quota_loaded (sb, type))continue ; - oinfo =sb_dqinfo (sb, type)->dqi_priv; -cancel_delayed_work_sync (&oinfo->dqi_sync_work); +if (!sb_has_quota_suspended (sb, type)) { + oinfo =sb_dqinfo (sb, type)->dqi_priv; +cancel_delayed_work_sync (&oinfo->dqi_sync_work); + } inode =igrab (sb->s_dquot.files[type]);/* Turn off quotas. This will remove all dquot structures from * memory and so they will be automatically synced to global
Greg Kroah-Hartman
maintainerPATCH 22/64 ocfs2: check new file size on fallocate call
In reply to Greg Kroah-HartmanFrom: Luís Henriques <[email protected]>
commit 26a6ffff7de5dd369cdb12e38ba11db682f1dec0 upstream.
When changing a file size with fallocate() the new size isn't being checked. In particular, the FSIZE ulimit isn't being checked, which makes fstest generic/228 fail. Simply adding a call to inode_newsize_ok() fixes this issue.
--- fs/ocfs2/file.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
fs/ocfs2/file.c +7 -1
@@ -2103,14 +2103,20 @@ static long ocfs2_fallocate(struct filestruct ocfs2_space_resv sr;int change_size =1 ;int cmd =OCFS2_IOC_RESVSP64 ; +int ret =0 ;if (mode & ~(FALLOC_FL_KEEP_SIZE |FALLOC_FL_PUNCH_HOLE ))return -EOPNOTSUPP ;if (!ocfs2_writes_unwritten_extents (osb))return -EOPNOTSUPP ; -if (mode &FALLOC_FL_KEEP_SIZE ) +if (mode &FALLOC_FL_KEEP_SIZE ) { change_size =0 ; + }else { + ret =inode_newsize_ok (inode, offset + len); +if (ret) +return ret; + }if (mode &FALLOC_FL_PUNCH_HOLE ) cmd =OCFS2_IOC_UNRESVSP64 ;
Greg Kroah-Hartman
maintainerPATCH 23/64 nios2: dts: Fix tse_mac "max-frame-size" property
In reply to Greg Kroah-HartmanFrom: Janne Grunau <[email protected]>
commit 85041e12418fd0c08ff972b7729f7971afb361f8 upstream.
The given value of 1518 seems to refer to the layer 2 ethernet frame size without 802.1Q tag. Actual use of the "max-frame-size" including in the consumer of the "altr,tse-1.0" compatible is the MTU.
--- arch/nios2/boot/dts/10m50_devboard.dts | 2 +- arch/nios2/boot/dts/3c120_devboard.dts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
arch/nios2/boot/dts/10m50_devboard.dts +1 -1
@@ -97,7 +97,7 @@ rx-fifo-depth = <8192>; tx-fifo-depth = <8192>; address-bits = <48>; - max-frame-size = <1518>; + max-frame-size = <1500>; local-mac-address = [00 00 00 00 00 00]; altr,has-supplementary-unicast; altr,enable-sup-addr = <1>;
arch/nios2/boot/dts/3c120_devboard.dts +1 -1
@@ -106,7 +106,7 @@ interrupt-names = "rx_irq", "tx_irq"; rx-fifo-depth = <8192>; tx-fifo-depth = <8192>; - max-frame-size = <1518>; + max-frame-size = <1500>; local-mac-address = [ 00 00 00 00 00 00 ]; phy-mode = "rgmii-id"; phy-handle = <&phy0>;
Greg Kroah-Hartman
maintainerPATCH 24/64 nilfs2: fix incomplete buffer cleanup in nilfs_btnode_abort_change_key()
In reply to Greg Kroah-HartmanFrom: Ryusuke Konishi <[email protected]>
commit 2f012f2baca140c488e43d27a374029c1e59098d upstream.
A syzbot fault injection test reported that nilfs_btnode_create_block, a helper function that allocates a new node block for b-trees, causes a kernel BUG for disk images where the file system block size is smaller than the page size.
This was due to unexpected flags on the newly allocated buffer head, and it turned out to be because the buffer flags were not cleared by nilfs_btnode_abort_change_key() after an error occurred during a b-tree update operation and the buffer was later reused in that state.
Fix this issue by using nilfs_btnode_delete() to abandon the unused preallocated buffer in nilfs_btnode_abort_change_key().
--- fs/nilfs2/btnode.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
fs/nilfs2/btnode.c +10 -2
@@ -285,6 +285,14 @@ void nilfs_btnode_abort_change_key(strucif (nbh ==NULL ) {/* blocksize == pagesize */ xa_erase_irq (&btnc->i_pages, newkey);unlock_page (ctxt->bh->b_page); - }else -brelse (nbh); + }else { +/* +* When canceling a buffer that a prepare operation has +* allocated to copy a node block to another location, use +* nilfs_btnode_delete() to initialize and release the buffer +* so that the buffer flags will not be in an inconsistent +* state when it is reallocated. +*/ +nilfs_btnode_delete (nbh); + } }
Greg Kroah-Hartman
maintainerPATCH 25/64 nilfs2: fix possible out-of-bounds segment allocation in resize ioctl
In reply to Greg Kroah-HartmanFrom: Ryusuke Konishi <[email protected]>
commit fee5eaecca86afa544355569b831c1f90f334b85 upstream.
Syzbot reports that in its stress test for resize ioctl, the log writing function nilfs_segctor_do_construct hits a WARN_ON in nilfs_segctor_truncate_segments().
It turned out that there is a problem with the current implementation of the resize ioctl, which changes the writable range on the device (the range of allocatable segments) at the end of the resize process.
This order is necessary for file system expansion to avoid corrupting the superblock at trailing edge. However, in the case of a file system shrink, if log writes occur after truncating out-of-bounds trailing segments and before the resize is complete, segments may be allocated from the truncated space.
The userspace resize tool was fine as it limits the range of allocatable segments before performing the resize, but it can run into this issue if the resize ioctl is called alone.
Fix this issue by changing nilfs_sufile_resize() to update the range of allocatable segments immediately after successful truncation of segment space in case of file system shrink.
--- fs/nilfs2/sufile.c | 9 +++++++++ 1 file changed, 9 insertions(+)
fs/nilfs2/sufile.c +9 -0
@@ -782,6 +782,15 @@ int nilfs_sufile_resize(struct inode *su goto out_header; sui->ncleansegs -= nsegs - newnsegs; + +/* +* If the sufile is successfully truncated, immediately adjust +* the segment allocation space while locking the semaphore +* "mi_sem" so that nilfs_sufile_alloc() never allocates +* segments in the truncated space. +*/ + sui->allocmax = newnsegs -1 ; + sui->allocmin =0 ; } kaddr =kmap_atomic (header_bh->b_page);
Greg Kroah-Hartman
maintainerPATCH 26/64 kexec: support purgatories with .text.hot sections
In reply to Greg Kroah-HartmanFrom: Ricardo Ribalda <[email protected]>
commit 8652d44f466ad5772e7d1756e9457046189b0dfc upstream.
Patch series "kexec: Fix kexec_file_load for llvm16 with PGO", v7.
When upreving llvm I realised that kexec stopped working on my test platform.
The reason seems to be that due to PGO there are multiple .text sections on the purgatory, and kexec does not supports that.
This patch (of 4):
Clang16 links the purgatory text in two sections when PGO is in use:
[ 1] .text PROGBITS 0000000000000000 00000040
00000000000011a1 0000000000000000 AX 0 0 16
[ 2] .rela.text RELA 0000000000000000 00003498
0000000000000648 0000000000000018 I 24 1 8
...
[17] .text.hot. PROGBITS 0000000000000000 00003220
000000000000020b 0000000000000000 AX 0 0 1
[18] .rela.text.hot. RELA 0000000000000000 00004428
0000000000000078 0000000000000018 I 24 17 8And both of them have their range [sh_addr ... sh_addr+sh_size] on the area pointed by e_entry.
This causes that image->start is calculated twice, once for .text and another time for .text.hot. The second calculation leaves image->start in a random location.
Because of this, the system crashes immediately after:
kexec_core: Starting new kernel
--- kernel/kexec_file.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
kernel/kexec_file.c +13 -1
@@ -901,10 +901,22 @@ static int kexec_purgatory_setup_sechdrs } offset =ALIGN (offset, align); + +/* +* Check if the segment contains the entry point, if so, +* calculate the value of image->start based on it. +* If the compiler has produced more than one .text section +* (Eg: .text.hot), they are generally after the main .text +* section, and they shall not be used to calculate +* image->start. So do not re-calculate image->start if it +* is not set to the initial value, and warn the user so they +* have a chance to fix their purgatory's linker script. +*/ if (sechdrs[i].sh_flags &SHF_EXECINSTR && pi->ehdr->e_entry >= sechdrs[i].sh_addr && pi->ehdr->e_entry < (sechdrs[i].sh_addr - + sechdrs[i].sh_size)) { + + sechdrs[i].sh_size) && + !WARN_ON (kbuf->image->start != pi->ehdr->e_entry)) { kbuf->image->start -= sechdrs[i].sh_addr; kbuf->image->start += kbuf->mem + offset; }
Greg Kroah-Hartman
maintainerPATCH 27/64 powerpc/purgatory: remove PGO flags
In reply to Greg Kroah-HartmanFrom: Ricardo Ribalda <[email protected]>
commit 20188baceb7a1463dc0bcb0c8678b69c2f447df6 upstream.
If profile-guided optimization is enabled, the purgatory ends up with multiple .text sections. This is not supported by kexec and crashes the system.
--- arch/powerpc/purgatory/Makefile | 5 +++++ 1 file changed, 5 insertions(+)
arch/powerpc/purgatory/Makefile +5 -0
@@ -4,6 +4,11 @@ KASAN_SANITIZE := n targets += trampoline.o purgatory.ro kexec-purgatory.c +# When profile-guided optimization is enabled, llvm emits two different +# overlapping text sections, which is not supported by kexec. Remove profile +# optimization flags. +KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS)) + LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined $(obj)/purgatory.ro: $(obj)/trampoline.o FORCE
Greg Kroah-Hartman
maintainerPATCH 28/64 nouveau: fix client work fence deletion race
In reply to Greg Kroah-HartmanFrom: Dave Airlie <[email protected]>
commit c8a5d5ea3ba6a18958f8d76430e4cd68eea33943 upstream.
This seems to have existed for ever but is now more apparant after commit 9bff18d13473 ("drm/ttm: use per BO cleanup workers")
My analysis: two threads are running, one in the irq signalling the fence, in dma_fence_signal_timestamp_locked, it has done the DMA_FENCE_FLAG_SIGNALLED_BIT setting, but hasn't yet reached the callbacks.
The second thread in nouveau_cli_work_ready, where it sees the fence is signalled, so then puts the fence, cleanups the object and frees the work item, which contains the callback.
Thread one goes again and tries to call the callback and causes the use-after-free.
Proposed fix: lock the fence signalled check in nouveau_cli_work_ready, so either the callbacks are done or the memory is freed.
--- drivers/gpu/drm/nouveau/nouveau_drm.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
drivers/gpu/drm/nouveau/nouveau_drm.c +10 -4
@@ -123,10 +123,16 @@ nouveau_name(struct drm_device *dev)static inline bool nouveau_cli_work_ready (struct dma_fence *fence) { -if (!dma_fence_is_signaled (fence)) -return false; -dma_fence_put (fence); -return true; +bool ret = true; + +spin_lock_irq (fence->lock); +if (!dma_fence_is_signaled_locked (fence)) + ret = false; +spin_unlock_irq (fence->lock); + +if (ret == true) +dma_fence_put (fence); +return ret; } static void
Greg Kroah-Hartman
maintainerPATCH 29/64 RDMA/uverbs: Restrict usage of privileged QKEYs
In reply to Greg Kroah-HartmanFrom: Edward Srouji <[email protected]>
commit 0cadb4db79e1d9eea66711c4031e435c2191907e upstream.
According to the IB specification rel-1.6, section 3.5.3:
"QKEYs with the most significant bit set are considered controlled QKEYs, and a HCA does not allow a consumer to arbitrarily specify a controlled QKEY."
Thus, block non-privileged users from setting such a QKEY.
--- drivers/infiniband/core/uverbs_cmd.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/infiniband/core/uverbs_cmd.c +6 -1
@@ -1863,8 +1863,13 @@ static int modify_qp(struct uverbs_attr_ attr->path_mtu = cmd->base.path_mtu;if (cmd->base.attr_mask &IB_QP_PATH_MIG_STATE ) attr->path_mig_state = cmd->base.path_mig_state; -if (cmd->base.attr_mask &IB_QP_QKEY ) +if (cmd->base.attr_mask &IB_QP_QKEY ) { +if (cmd->base.qkey &IB_QP_SET_QKEY && !capable (CAP_NET_RAW )) { + ret = -EPERM ; + goto release_qp; + } attr->qkey = cmd->base.qkey; + }if (cmd->base.attr_mask &IB_QP_RQ_PSN ) attr->rq_psn = cmd->base.rq_psn;if (cmd->base.attr_mask &IB_QP_SQ_PSN )
Greg Kroah-Hartman
maintainerPATCH 30/64 net: usb: qmi_wwan: add support for Compal RXM-G1
In reply to Greg Kroah-HartmanFrom: Wes Huang <[email protected]>
commit 863199199713908afaa47ba09332b87621c12496 upstream.
Add support for Compal RXM-G1 which is based on Qualcomm SDX55 chip. This patch adds support for two compositions:
0x9091: DIAG + MODEM + QMI_RMNET + ADB 0x90db: DIAG + DUN + RMNET + DPL + QDSS(Trace) + ADB
T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=5000 MxCh= 0 D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1 P: Vendor=05c6 ProdID=9091 Rev= 4.14 S: Manufacturer=QCOM S: Product=SDXPRAIRIE-MTP _SN:719AB680 S: SerialNumber=719ab680 C:* #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=896mA I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=(none) E: Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none) E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan E: Ad=84(I) Atr=03(Int.) MxPS= 8 Ivl=32ms E: Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms E: Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none) E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms E: Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=5000 MxCh= 0 D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1 P: Vendor=05c6 ProdID=90db Rev= 4.14 S: Manufacturer=QCOM S: Product=SDXPRAIRIE-MTP _SN:719AB680 S: SerialNumber=719ab680 C:* #Ifs= 6 Cfg#= 1 Atr=80 MxPwr=896mA I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=(none) E: Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none) E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan E: Ad=84(I) Atr=03(Int.) MxPS= 8 Ivl=32ms E: Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms E: Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=8f(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 4 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms E: Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
--- drivers/net/usb/qmi_wwan.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/usb/qmi_wwan.c +2 -0
@@ -1178,7 +1178,9 @@ static const struct usb_device_id produc {QMI_FIXED_INTF(0x05c6, 0x9080, 8)}, {QMI_FIXED_INTF(0x05c6, 0x9083, 3)}, {QMI_FIXED_INTF(0x05c6, 0x9084, 4)}, + {QMI_QUIRK_SET_DTR(0x05c6, 0x9091, 2)}, /* Compal RXM-G1 */ {QMI_FIXED_INTF(0x05c6, 0x90b2, 3)}, /* ublox R410M */ + {QMI_QUIRK_SET_DTR(0x05c6, 0x90db, 2)}, /* Compal RXM-G1 */ {QMI_FIXED_INTF(0x05c6, 0x920d, 0)}, {QMI_FIXED_INTF(0x05c6, 0x920d, 5)}, {QMI_QUIRK_SET_DTR(0x05c6, 0x9625, 4)}, /* YUGA CLM920-NC5 */
Greg Kroah-Hartman
maintainerPATCH 31/64 ALSA: hda/realtek: Add a quirk for Compaq N14JP6
In reply to Greg Kroah-HartmanFrom: Edson Juliano Drosdeck <[email protected]>
commit a2a871483161014f1bcc4e9a04354b01aa77cedb upstream.
Add a quirk for Compaq N14JP6 to fixup ALC897 headset MIC no sound.
--- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_realtek.c +1 -0
@@ -10382,6 +10382,7 @@ static const struct snd_pci_quirk alc662SND_PCI_QUIRK (0x1b0a ,0x01b8 ,"ACER Veriton" ,ALC662_FIXUP_ACER_VERITON ),SND_PCI_QUIRK (0x1b35 ,0x1234 ,"CZC ET26" ,ALC662_FIXUP_CZC_ET26 ),SND_PCI_QUIRK (0x1b35 ,0x2206 ,"CZC P10T" ,ALC662_FIXUP_CZC_P10T ), +SND_PCI_QUIRK (0x1c6c ,0x1239 ,"Compaq N14JP6-V2" ,ALC897_FIXUP_HP_HSMIC_VERB ), #if 0/* Below is a quirk table taken from the old code.
Greg Kroah-Hartman
maintainerPATCH 32/64 Remove DECnet support from kernel
In reply to Greg Kroah-HartmanFrom: Stephen Hemminger <[email protected]>
commit 1202cdd665315c525b5237e96e0bedc76d7e754f upstream.
DECnet is an obsolete network protocol that receives more attention from kernel janitors than users. It belongs in computer protocol history museum not in Linux kernel.
It has been "Orphaned" in kernel since 2010. The iproute2 support for DECnet was dropped in 5.0 release. The documentation link on Sourceforge says it is abandoned there as well.
Leave the UAPI alone to keep userspace programs compiling. This means that there is still an empty neighbour table for AF_DECNET.
The table of /proc/sys/net entries was updated to match current directories and reformatted to be alphabetical.
--- Documentation/admin-guide/kernel-parameters.txt | 4 Documentation/admin-guide/sysctl/net.rst | 15 Documentation/ioctl/ioctl-number.rst | 1 Documentation/networking/decnet.txt | 230 -- MAINTAINERS | 7 arch/mips/configs/decstation_64_defconfig | 2 arch/mips/configs/decstation_defconfig | 2 arch/mips/configs/decstation_r4k_defconfig | 2 arch/mips/configs/gpr_defconfig | 2 arch/mips/configs/jazz_defconfig | 2 arch/mips/configs/mtx1_defconfig | 2 arch/mips/configs/nlm_xlp_defconfig | 2 arch/mips/configs/nlm_xlr_defconfig | 2 arch/mips/configs/rm200_defconfig | 2 arch/powerpc/configs/ppc6xx_defconfig | 2 include/linux/netdevice.h | 4 include/linux/netfilter.h | 5 include/linux/netfilter_defs.h | 8 include/net/dn.h | 231 -- include/net/dn_dev.h | 199 - include/net/dn_fib.h | 167 - include/net/dn_neigh.h | 30 include/net/dn_nsp.h | 195 - include/net/dn_route.h | 115 - include/net/netns/netfilter.h | 3 include/uapi/linux/dn.h | 149 - include/uapi/linux/netfilter_decnet.h | 72 include/uapi/linux/netlink.h | 2 net/Kconfig | 2 net/Makefile | 1 net/core/dev.c | 4 net/core/neighbour.c | 3 net/decnet/Kconfig | 43 net/decnet/Makefile | 10 net/decnet/README | 8 net/decnet/af_decnet.c | 2400 ------------------------ net/decnet/dn_dev.c | 1438 -------------- net/decnet/dn_fib.c | 799 ------- net/decnet/dn_neigh.c | 605 ------ net/decnet/dn_nsp_in.c | 906 --------- net/decnet/dn_nsp_out.c | 695 ------ net/decnet/dn_route.c | 1921 ------------------- net/decnet/dn_rules.c | 258 -- net/decnet/dn_table.c | 929 --------- net/decnet/dn_timer.c | 104 - net/decnet/netfilter/Kconfig | 17 net/decnet/netfilter/Makefile | 6 net/decnet/netfilter/dn_rtmsg.c | 158 - net/decnet/sysctl_net_decnet.c | 373 --- net/netfilter/core.c | 10 50 files changed, 10 insertions(+), 12137 deletions(-)
Documentation/admin-guide/kernel-parameters.txt +0 -4
@@ -825,10 +825,6 @@ debugpat [X86] Enable PAT debugging - decnet.addr= [HW,NET] - Format: <area>[,<node>] - See also Documentation/networking/decnet.txt. - default_hugepagesz= [same as hugepagesz=] The size of the default HugeTLB page size. This is the size represented by
Documentation/admin-guide/sysctl/net.rst +8 -7
@@ -34,13 +34,14 @@ Table : Subdirectories in /proc/sys/net ========= =================== = ========== ================== Directory Content Directory Content ========= =================== = ========== ================== - core General parameter appletalk Appletalk protocol - unix Unix domain sockets netrom NET/ROM - 802 E802 protocol ax25 AX25 - ethernet Ethernet protocol rose X.25 PLP layer - ipv4 IP version 4 x25 X.25 protocol - bridge Bridging decnet DEC net - ipv6 IP version 6 tipc TIPC + 802 E802 protocol mptcp Multipath TCP + appletalk Appletalk protocol netfilter Network Filter + ax25 AX25 netrom NET/ROM + bridge Bridging rose X.25 PLP layer + core General parameter tipc TIPC + ethernet Ethernet protocol unix Unix domain sockets + ipv4 IP version 4 x25 X.25 protocol + ipv6 IP version 6 ========= =================== = ========== ================== 1. /proc/sys/net/core - Network core options
Documentation/ioctl/ioctl-number.rst +0 -1
@@ -301,7 +301,6 @@ Code Seq# Include File 0x89 00-06 arch/x86/include/asm/sockios.h 0x89 0B-DF linux/sockios.h 0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range -0x89 E0-EF linux/dn.h PROTOPRIVATE range 0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range 0x8B all linux/wireless.h 0x8C 00-3F WiNRADiO driver
Documentation/networking/decnet.txt deleted +0 -230
230 lines not on this page · raw message
MAINTAINERS +0 -7
@@ -4617,13 +4617,6 @@ F: include/uapi/linux/dccp.h F: include/linux/tfrc.h F: net/dccp/ -DECnet NETWORK LAYER -W: http://linux-decnet.sourceforge.net -L: [email protected] -S: Orphan -F: Documentation/networking/decnet.txt -F: net/decnet/ - DECSTATION PLATFORM SUPPORT M: "Maciej W. Rozycki" <[email protected]> L: [email protected]
arch/mips/configs/decstation_64_defconfig +0 -2
@@ -53,8 +53,6 @@ CONFIG_IPV6_SUBTREES=y CONFIG_NETWORK_SECMARK=y CONFIG_IP_SCTP=m CONFIG_VLAN_8021Q=m -CONFIG_DECNET=m -CONFIG_DECNET_ROUTER=y # CONFIG_WIRELESS is not set # CONFIG_UEVENT_HELPER is not set # CONFIG_FW_LOADER is not set
arch/mips/configs/decstation_defconfig +0 -2
@@ -49,8 +49,6 @@ CONFIG_IPV6_SUBTREES=y CONFIG_NETWORK_SECMARK=y CONFIG_IP_SCTP=m CONFIG_VLAN_8021Q=m -CONFIG_DECNET=m -CONFIG_DECNET_ROUTER=y # CONFIG_WIRELESS is not set # CONFIG_UEVENT_HELPER is not set # CONFIG_FW_LOADER is not set
arch/mips/configs/decstation_r4k_defconfig +0 -2
@@ -48,8 +48,6 @@ CONFIG_IPV6_SUBTREES=y CONFIG_NETWORK_SECMARK=y CONFIG_IP_SCTP=m CONFIG_VLAN_8021Q=m -CONFIG_DECNET=m -CONFIG_DECNET_ROUTER=y # CONFIG_WIRELESS is not set # CONFIG_UEVENT_HELPER is not set # CONFIG_FW_LOADER is not set
arch/mips/configs/gpr_defconfig +0 -2
@@ -69,7 +69,6 @@ CONFIG_IP_NF_RAW=m CONFIG_IP_NF_ARPTABLES=m CONFIG_IP_NF_ARPFILTER=m CONFIG_IP_NF_ARP_MANGLE=m -CONFIG_DECNET_NF_GRABULATOR=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -99,7 +98,6 @@ CONFIG_ATM_MPOA=m CONFIG_ATM_BR2684=m CONFIG_BRIDGE=m CONFIG_VLAN_8021Q=m -CONFIG_DECNET=m CONFIG_LLC2=m CONFIG_ATALK=m CONFIG_DEV_APPLETALK=m
arch/mips/configs/jazz_defconfig +0 -2
@@ -106,7 +106,6 @@ CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_TARGET_REJECT=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_RAW=m -CONFIG_DECNET_NF_GRABULATOR=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -127,7 +126,6 @@ CONFIG_BRIDGE_EBT_REDIRECT=m CONFIG_BRIDGE_EBT_SNAT=m CONFIG_BRIDGE_EBT_LOG=m CONFIG_BRIDGE=m -CONFIG_DECNET=m CONFIG_NET_SCHED=y CONFIG_NET_SCH_CBQ=m CONFIG_NET_SCH_HTB=m
arch/mips/configs/mtx1_defconfig +0 -2
@@ -117,7 +117,6 @@ CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_TARGET_REJECT=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_RAW=m -CONFIG_DECNET_NF_GRABULATOR=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -147,7 +146,6 @@ CONFIG_ATM_MPOA=m CONFIG_ATM_BR2684=m CONFIG_BRIDGE=m CONFIG_VLAN_8021Q=m -CONFIG_DECNET=m CONFIG_LLC2=m CONFIG_ATALK=m CONFIG_DEV_APPLETALK=m
arch/mips/configs/nlm_xlp_defconfig +0 -2
@@ -200,7 +200,6 @@ CONFIG_IP6_NF_TARGET_REJECT=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_RAW=m CONFIG_IP6_NF_SECURITY=m -CONFIG_DECNET_NF_GRABULATOR=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -234,7 +233,6 @@ CONFIG_ATM_BR2684=m CONFIG_BRIDGE=m CONFIG_VLAN_8021Q=m CONFIG_VLAN_8021Q_GVRP=y -CONFIG_DECNET=m CONFIG_LLC2=m CONFIG_ATALK=m CONFIG_DEV_APPLETALK=m
arch/mips/configs/nlm_xlr_defconfig +0 -2
@@ -198,7 +198,6 @@ CONFIG_IP6_NF_TARGET_REJECT=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_RAW=m CONFIG_IP6_NF_SECURITY=m -CONFIG_DECNET_NF_GRABULATOR=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -232,7 +231,6 @@ CONFIG_ATM_BR2684=m CONFIG_BRIDGE=m CONFIG_VLAN_8021Q=m CONFIG_VLAN_8021Q_GVRP=y -CONFIG_DECNET=m CONFIG_LLC2=m CONFIG_ATALK=m CONFIG_DEV_APPLETALK=m
arch/mips/configs/rm200_defconfig +0 -2
@@ -116,7 +116,6 @@ CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_TARGET_REJECT=m CONFIG_IP6_NF_MANGLE=m CONFIG_IP6_NF_RAW=m -CONFIG_DECNET_NF_GRABULATOR=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -137,7 +136,6 @@ CONFIG_BRIDGE_EBT_REDIRECT=m CONFIG_BRIDGE_EBT_SNAT=m CONFIG_BRIDGE_EBT_LOG=m CONFIG_BRIDGE=m -CONFIG_DECNET=m CONFIG_NET_SCHED=y CONFIG_NET_SCH_CBQ=m CONFIG_NET_SCH_HTB=m
arch/powerpc/configs/ppc6xx_defconfig +0 -2
@@ -253,8 +253,6 @@ CONFIG_ATM_LANE=m CONFIG_ATM_BR2684=m CONFIG_BRIDGE=m CONFIG_VLAN_8021Q=m -CONFIG_DECNET=m -CONFIG_DECNET_ROUTER=y CONFIG_IPX=m CONFIG_ATALK=m CONFIG_DEV_APPLETALK=m
include/linux/netdevice.h +0 -4
@@ -1695,7 +1695,6 @@ enum netdev_ml_priv_type {* @tipc_ptr: TIPC specific data * @atalk_ptr: AppleTalk link * @ip_ptr: IPv4 specific data -* @dn_ptr: DECnet specific data * @ip6_ptr: IPv6 specific data * @ax25_ptr: AX.25 specific data * @ieee80211_ptr: IEEE 802.11 specific data, assign before registering
@@ -1941,9 +1940,6 @@ struct net_device {void *atalk_ptr;#endif struct in_device __rcu *ip_ptr; -#if IS_ENABLED (CONFIG_DECNET ) -struct dn_dev __rcu *dn_ptr; -#endif struct inet6_dev __rcu *ip6_ptr;#if IS_ENABLED (CONFIG_AX25 )void *ax25_ptr;
include/linux/netfilter.h +0 -5
@@ -241,11 +241,6 @@ static inline int nf_hook(u_int8_t pf, u hook_head =rcu_dereference (net->nf.hooks_bridge[hook]);#endif break ; -#if IS_ENABLED (CONFIG_DECNET ) -case NFPROTO_DECNET : - hook_head =rcu_dereference (net->nf.hooks_decnet[hook]); -break ; -#endif default :WARN_ON_ONCE (1 );break ;
include/linux/netfilter_defs.h +0 -8
@@ -7,14 +7,6 @@/* in/out/forward only */ #define NF_ARP_NUMHOOKS 3 -/* max hook is NF_DN_ROUTE (6), also see uapi/linux/netfilter_decnet.h */ -#define NF_DN_NUMHOOKS 7 - -#if IS_ENABLED (CONFIG_DECNET ) -/* Largest hook number + 1, see uapi/linux/netfilter_decnet.h */ -#define NF_MAX_HOOKS NF_DN_NUMHOOKS -#else #define NF_MAX_HOOKS NF_INET_NUMHOOKS -#endif #endif
include/net/dn.h deleted +0 -231
231 lines not on this page · raw message
include/net/dn_dev.h deleted +0 -199
199 lines not on this page · raw message
include/net/dn_fib.h deleted +0 -167
167 lines not on this page · raw message
include/net/dn_neigh.h deleted +0 -30
@@ -1,30 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef _NET_DN_NEIGH_H -#define _NET_DN_NEIGH_H - -/* -* The position of the first two fields of -* this structure are critical - SJW -*/ -struct dn_neigh { -struct neighbour n; -__le16 addr; -unsigned long flags; -#define DN_NDFLAG_R1 0x0001/* Router L1 */ -#define DN_NDFLAG_R2 0x0002/* Router L2 */ -#define DN_NDFLAG_P3 0x0004/* Phase III Node */ -unsigned long blksize; -__u8 priority; -}; - -void dn_neigh_init (void ); -void dn_neigh_cleanup (void ); -int dn_neigh_router_hello (struct net *net,struct sock *sk,struct sk_buff *skb); -int dn_neigh_endnode_hello (struct net *net,struct sock *sk,struct sk_buff *skb); -void dn_neigh_pointopoint_hello (struct sk_buff *skb); -int dn_neigh_elist (struct net_device *dev,unsigned char *ptr,int n); -int dn_to_neigh_output (struct net *net,struct sock *sk,struct sk_buff *skb); - -extern struct neigh_table dn_neigh_table; - -#endif /* _NET_DN_NEIGH_H */
include/net/dn_nsp.h deleted +0 -195
195 lines not on this page · raw message
include/net/dn_route.h deleted +0 -115
115 lines not on this page · raw message
include/net/netns/netfilter.h +0 -3
@@ -25,9 +25,6 @@ struct netns_nf {#ifdef CONFIG_NETFILTER_FAMILY_BRIDGE struct nf_hook_entries __rcu *hooks_bridge[NF_INET_NUMHOOKS ];#endif -#if IS_ENABLED (CONFIG_DECNET ) -struct nf_hook_entries __rcu *hooks_decnet[NF_DN_NUMHOOKS ]; -#endif #if IS_ENABLED (CONFIG_NF_DEFRAG_IPV4 )bool defrag_ipv4;#endif
include/uapi/linux/dn.h deleted +0 -149
149 lines not on this page · raw message
include/uapi/linux/netfilter_decnet.h deleted +0 -72
72 lines not on this page · raw message
include/uapi/linux/netlink.h +1 -1
@@ -20,7 +20,7 @@#define NETLINK_CONNECTOR 11#define NETLINK_NETFILTER 12/* netfilter subsystem */ #define NETLINK_IP6_FW 13 -#define NETLINK_DNRTMSG 14/* DECnet routing messages */ +#define NETLINK_DNRTMSG 14/* DECnet routing messages (obsolete) */ #define NETLINK_KOBJECT_UEVENT 15/* Kernel messages to userspace */ #define NETLINK_GENERIC 16/* leave room for NETLINK_DM (DM Events) */
net/Kconfig +0 -2
@@ -203,7 +203,6 @@ config BRIDGE_NETFILTER source "net/netfilter/Kconfig" source "net/ipv4/netfilter/Kconfig" source "net/ipv6/netfilter/Kconfig" -source "net/decnet/netfilter/Kconfig" source "net/bridge/netfilter/Kconfig" endif
@@ -220,7 +219,6 @@ source "net/802/Kconfig" source "net/bridge/Kconfig" source "net/dsa/Kconfig" source "net/8021q/Kconfig" -source "net/decnet/Kconfig" source "net/llc/Kconfig" source "drivers/net/appletalk/Kconfig" source "net/x25/Kconfig"
net/Makefile +0 -1
@@ -39,7 +39,6 @@ obj-$(CONFIG_AF_KCM) += kcm/ obj-$(CONFIG_STREAM_PARSER) += strparser/ obj-$(CONFIG_ATM) += atm/ obj-$(CONFIG_L2TP) += l2tp/ -obj-$(CONFIG_DECNET) += decnet/ obj-$(CONFIG_PHONET) += phonet/ ifneq ($(CONFIG_VLAN_8021Q),) obj-y += 8021q/
net/core/dev.c +1 -3
@@ -9440,9 +9440,7 @@ void netdev_run_todo(void)BUG_ON (!list_empty (&dev->ptype_specific));WARN_ON (rcu_access_pointer (dev->ip_ptr));WARN_ON (rcu_access_pointer (dev->ip6_ptr)); -#if IS_ENABLED (CONFIG_DECNET ) -WARN_ON (dev->dn_ptr); -#endif +if (dev->priv_destructor) dev->priv_destructor (dev);if (dev->needs_free_netdev)
net/core/neighbour.c +0 -3
@@ -1800,9 +1800,6 @@ static struct neigh_table *neigh_find_tacase AF_INET6 : tbl = neigh_tables[NEIGH_ND_TABLE ];break ; -case AF_DECnet: - tbl = neigh_tables[NEIGH_DN_TABLE ]; -break ; }return tbl;
net/decnet/Kconfig deleted +0 -43
43 lines not on this page · raw message
net/decnet/Makefile deleted +0 -10
@@ -1,10 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 - -obj-$(CONFIG_DECNET) += decnet.o - -decnet-y := af_decnet.o dn_nsp_in.o dn_nsp_out.o \ - dn_route.o dn_dev.o dn_neigh.o dn_timer.o -decnet-$(CONFIG_DECNET_ROUTER) += dn_fib.o dn_rules.o dn_table.o -decnet-y += sysctl_net_decnet.o - -obj-$(CONFIG_NETFILTER) += netfilter/
net/decnet/README deleted +0 -8
@@ -1,8 +0,0 @@ - Linux DECnet Project - ====================== - -The documentation for this kernel subsystem is available in the -Documentation/networking subdirectory of this distribution and also -on line at http://www.chygwyn.com/DECnet/ - -Steve Whitehouse <[email protected]>
net/decnet/af_decnet.c deleted +0 -2400
1,286 lines not on this page · raw message
net/decnet/dn_dev.c deleted +0 -1438
1,438 lines not on this page · raw message
net/decnet/dn_fib.c deleted +0 -799
799 lines not on this page · raw message
net/decnet/dn_neigh.c deleted +0 -605
605 lines not on this page · raw message
net/decnet/dn_nsp_in.c deleted +0 -906
906 lines not on this page · raw message
net/decnet/dn_nsp_out.c deleted +0 -695
695 lines not on this page · raw message
net/decnet/dn_route.c deleted +0 -1921
1,921 lines not on this page · raw message
net/decnet/dn_rules.c deleted +0 -258
258 lines not on this page · raw message
net/decnet/dn_table.c deleted +0 -929
929 lines not on this page · raw message
net/decnet/dn_timer.c deleted +0 -104
104 lines not on this page · raw message
net/decnet/netfilter/Kconfig deleted +0 -17
Lines of this file are not shown. View the raw message.
net/decnet/netfilter/Makefile deleted +0 -6
Lines of this file are not shown. View the raw message.
net/decnet/netfilter/dn_rtmsg.c deleted +0 -158
158 lines not on this page · raw message
net/decnet/sysctl_net_decnet.c deleted +0 -373
373 lines not on this page · raw message
net/netfilter/core.c +0 -10
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.
Greg Kroah-Hartman
maintainerPATCH 33/64 USB: serial: option: add Quectel EM061KGL series
In reply to Greg Kroah-HartmanFrom: Jerry Meng <[email protected]>
commit f1832e2b5e498e258b090af3b065b85cf8cc5161 upstream.
Add support for Quectel EM061KGL series which are based on Qualcomm SDX12 chip:
EM061KGL_LTA(0x2c7c / 0x0123): MBIM + GNSS + DIAG + NMEA + AT + QDSS + DPL EM061KGL_LMS(0x2c7c / 0x0124): MBIM + GNSS + DIAG + NMEA + AT + QDSS + DPL EM061KGL_LWW(0x2c7c / 0x6008): MBIM + GNSS + DIAG + NMEA + AT + QDSS + DPL EM061KGL_LCN(0x2c7c / 0x6009): MBIM + GNSS + DIAG + NMEA + AT + QDSS + DPL
Above products use the exact same interface layout and option driver is for interfaces DIAG, NMEA and AT.
T: Bus=03 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 5 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=2c7c ProdID=6008 Rev= 5.04 S: Manufacturer=Quectel S: Product=Quectel EM061K-GL S: SerialNumber=f6fa08b6 C:* #Ifs= 8 Cfg#= 1 Atr=a0 MxPwr=500mA A: FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00 I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=32ms I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim E: Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) E: Ad=82(I) Atr=03(Int.) MxPS= 64 Ivl=32ms I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=option E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
E: Ad=8f(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
--- drivers/usb/serial/option.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
drivers/usb/serial/option.c +16 -0
@@ -248,6 +248,8 @@ static void option_instat_callback(struc#define QUECTEL_VENDOR_ID 0x2c7c/* These Quectel products use Quectel's vendor ID */ #define QUECTEL_PRODUCT_EC21 0x0121 +#define QUECTEL_PRODUCT_EM061K_LTA 0x0123 +#define QUECTEL_PRODUCT_EM061K_LMS 0x0124#define QUECTEL_PRODUCT_EC25 0x0125#define QUECTEL_PRODUCT_EG91 0x0191#define QUECTEL_PRODUCT_EG95 0x0195
@@ -266,6 +268,8 @@ static void option_instat_callback(struc#define QUECTEL_PRODUCT_RM520N 0x0801#define QUECTEL_PRODUCT_EC200U 0x0901#define QUECTEL_PRODUCT_EC200S_CN 0x6002 +#define QUECTEL_PRODUCT_EM061K_LWW 0x6008 +#define QUECTEL_PRODUCT_EM061K_LCN 0x6009#define QUECTEL_PRODUCT_EC200T 0x6026#define QUECTEL_PRODUCT_RM500K 0x7001
@@ -1189,6 +1193,18 @@ static const struct usb_device_id option { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0x00, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0x00, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LCN, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0x00, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LMS, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0x00, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LTA, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0x00, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM061K_LWW, 0xff, 0xff, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0xff, 0xff), .driver_info = RSVD(1) | RSVD(2) | RSVD(3) | RSVD(4) | NUMEP2 }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM12, 0xff, 0, 0) },
Greg Kroah-Hartman
maintainerPATCH 34/64 serial: lantiq: add missing interrupt ack
In reply to Greg Kroah-HartmanFrom: Bernhard Seibold <[email protected]>
commit 306320034e8fbe7ee1cc4f5269c55658b4612048 upstream.
Currently, the error interrupt is never acknowledged, so once active it will stay active indefinitely, causing the handler to be called in an infinite loop.
Message-ID: <[email protected]>
--- drivers/tty/serial/lantiq.c | 1 + 1 file changed, 1 insertion(+)
drivers/tty/serial/lantiq.c +1 -0
@@ -274,6 +274,7 @@ lqasc_err_int(int irq, void *_port)struct ltq_uart_port *ltq_port =to_ltq_uart_port (port);spin_lock_irqsave (<q_port->lock, flags); +__raw_writel (ASC_IRNCR_EIR , port->membase +LTQ_ASC_IRNCR );/* clear any pending interrupts */ asc_update_bits (0 ,ASCWHBSTATE_CLRPE |ASCWHBSTATE_CLRFE |ASCWHBSTATE_CLRROE , port->membase +LTQ_ASC_WHBSTATE );
Greg Kroah-Hartman
maintainerPATCH 35/64 usb: dwc3: gadget: Reset num TRBs before giving back the request
In reply to Greg Kroah-HartmanFrom: Elson Roy Serrao <[email protected]>
commit 00f8205ffcf112dcef14f8151d78075d38d22c08 upstream.
Consider a scenario where cable disconnect happens when there is an active usb reqest queued to the UDC. As part of the disconnect we would issue an end transfer with no interrupt-on-completion before giving back this request. Since we are giving back the request without skipping TRBs the num_trbs field of dwc3_request still holds the stale value previously used. Function drivers re-use same request for a given bind-unbind session and hence their dwc3_request context gets preserved across cable disconnect/connect. When such a request gets re-queued after cable connect, we would increase the num_trbs field on top of the previous stale value thus incorrectly representing the number of TRBs used. Fix this by resetting num_trbs field before giving back the request.
Message-ID: <[email protected]>
--- drivers/usb/dwc3/gadget.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/dwc3/gadget.c +1 -0
@@ -177,6 +177,7 @@ static void dwc3_gadget_del_and_unmap_relist_del (&req->list); req->remaining =0 ; req->needs_extra_trb = false; + req->num_trbs =0 ;if (req->request.status == -EINPROGRESS ) req->request.status = status;
Greg Kroah-Hartman
maintainerPATCH 36/64 spi: spi-fsl-dspi: Remove unused chip->void_write_data
In reply to Greg Kroah-HartmanFrom: Vladimir Oltean <[email protected]>
[ Upstream commit 6d6af5796e5d9a88ae83c9c753023bba61deb18b ]
This variable has been present since the initial submission of the driver, and held, for some reason, the value of zero, to be sent on the wire in the case there wasn't any TX buffer for the current transfer.
Since quite a while now, however, it isn't doing anything at all.
Stable-dep-of: c5c31fb71f16 ("spi: fsl-dspi: avoid SCK glitches with continuous transfers")
--- drivers/spi/spi-fsl-dspi.c | 6 ------ 1 file changed, 6 deletions(-)
drivers/spi/spi-fsl-dspi.c +0 -6
@@ -121,7 +121,6 @@struct chip_data {u32 ctar_val; -u16 void_write_data; };enum dspi_trans_mode {
@@ -190,7 +189,6 @@ struct fsl_dspi {const void *tx;void *rx;void *rx_end; -u16 void_write_data;u16 tx_cmd;u8 bits_per_word;u8 bytes_per_word;
@@ -748,8 +746,6 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr, dspi->tx_cmd |=SPI_PUSHR_CMD_CONT ; } - dspi->void_write_data = dspi->cur_chip->void_write_data; - dspi->tx = transfer->tx_buf; dspi->rx = transfer->rx_buf; dspi->rx_end = dspi->rx + transfer->len;
@@ -848,8 +844,6 @@ static int dspi_setup(struct spi_device *spi) sck_cs_delay = pdata->sck_cs_delay; } - chip->void_write_data =0 ; - clkrate =clk_get_rate (dspi->clk);hz_to_spi_baud (&pbr, &br, spi->max_speed_hz, clkrate);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 37/64 spi: fsl-dspi: avoid SCK glitches with continuous transfers
In reply to Greg Kroah-HartmanFrom: Vladimir Oltean <[email protected]>
[ Upstream commit c5c31fb71f16ba75bad4ade208abbae225305b65 ]
The DSPI controller has configurable timing for
(a) tCSC: the interval between the assertion of the chip select and the first clock edge
(b) tASC: the interval between the last clock edge and the deassertion of the chip select
What is a bit surprising, but is documented in the figure "Example of continuous transfer (CPHA=1, CONT=1)" in the datasheet, is that when the chip select stays asserted between multiple TX FIFO writes, the tCSC and tASC times still apply. With CONT=1, chip select remains asserted, but SCK takes a break and goes to the idle state for tASC + tCSC ns.
In other words, the default values (of 0 and 0 ns) result in SCK glitches where the SCK transition to the idle state, as well as the SCK transition from the idle state, will have no delay in between, and it may appear that a SCK cycle has simply gone missing. The resulting timing violation might cause data corruption in many peripherals, as their chip select is asserted.
The driver has device tree bindings for tCSC ("fsl,spi-cs-sck-delay") and tASC ("fsl,spi-sck-cs-delay"), but these are only specified to apply when the chip select toggles in the first place, and this timing characteristic depends on each peripheral. Many peripherals do not have explicit timing requirements, so many device trees do not have these properties present at all.
Nonetheless, the lack of SCK glitches is a common sense requirement, and since the SCK stays in the idle state during transfers for tCSC+tASC ns, and that in itself should look like half a cycle, then let's ensure that tCSC and tASC are at least a quarter of a SCK period, such that their sum is at least half of one.
--- drivers/spi/spi-fsl-dspi.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
drivers/spi/spi-fsl-dspi.c +15 -0
@@ -816,7 +816,9 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr,static int dspi_setup (struct spi_device *spi) {struct fsl_dspi *dspi =spi_controller_get_devdata (spi->controller); +u32 period_ns =DIV_ROUND_UP (NSEC_PER_SEC , spi->max_speed_hz);unsigned char br =0 , pbr =0 , pcssck =0 , cssck =0 ; +u32 quarter_period_ns =DIV_ROUND_UP (period_ns,4 );u32 cs_sck_delay =0 , sck_cs_delay =0 ;struct fsl_dspi_platform_data *pdata;unsigned char pasc =0 , asc =0 ;
@@ -844,6 +846,19 @@ static int dspi_setup(struct spi_device *spi) sck_cs_delay = pdata->sck_cs_delay; } +/* Since tCSC and tASC apply to continuous transfers too, avoid SCK +* glitches of half a cycle by never allowing tCSC + tASC to go below +* half a SCK period. +*/ +if (cs_sck_delay < quarter_period_ns) + cs_sck_delay = quarter_period_ns; +if (sck_cs_delay < quarter_period_ns) + sck_cs_delay = quarter_period_ns; + +dev_dbg (&spi->dev, +"DSPI controller timing params: CS-to-SCK delay %u ns, SCK-to-CS delay %u ns\n" , + cs_sck_delay, sck_cs_delay); + clkrate =clk_get_rate (dspi->clk);hz_to_spi_baud (&pbr, &br, spi->max_speed_hz, clkrate);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 38/64 netfilter: nfnetlink: skip error delivery on batch in case of ENOMEM
In reply to Greg Kroah-HartmanFrom: Pablo Neira Ayuso <[email protected]>
[ Upstream commit a1a64a151dae8ac3581c1cbde44b672045cb658b ]
If caller reports ENOMEM, then stop iterating over the batch and send a single netlink message to userspace to report OOM.
--- net/netfilter/nfnetlink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/netfilter/nfnetlink.c +2 -1
@@ -455,7 +455,8 @@ static void nfnetlink_rcv_batch(struct sk_buff *skb, struct nlmsghdr *nlh,* processed, this avoids that the same error is * reported several times when replaying the batch. */ -if (nfnl_err_add (&err_list, nlh, err, &extack) <0 ) { +if (err == -ENOMEM || +nfnl_err_add (&err_list, nlh, err, &extack) <0 ) {/* We failed to enqueue an error, reset the * list of errors and send OOM to userspace * pointing to the batch header.
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 39/64 ping6: Fix send to link-local addresses with VRF.
In reply to Greg Kroah-HartmanFrom: Guillaume Nault <[email protected]>
[ Upstream commit 91ffd1bae1dafbb9e34b46813f5b058581d9144d ]
Ping sockets can't send packets when they're bound to a VRF master device and the output interface is set to a slave device.
For example, when net.ipv4.ping_group_range is properly set, so that ping6 can use ping sockets, the following kind of commands fails:
$ ip vrf exec red ping6 fe80::854:e7ff:fe88:4bf1%eth1
What happens is that sk->sk_bound_dev_if is set to the VRF master device, but 'oif' is set to the real output device. Since both are set but different, ping_v6_sendmsg() sees their value as inconsistent and fails.
Fix this by allowing 'oif' to be a slave device of ->sk_bound_dev_if.
This fixes the following kselftest failure:
$ ./fcnal-test.sh -t ipv6_ping [...] TEST: ping out, vrf device+address bind - ns-B IPv6 LLA [FAIL]
--- net/ipv6/ping.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/ipv6/ping.c +2 -1
@@ -96,7 +96,8 @@ static int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) addr_type =ipv6_addr_type (daddr);if ((__ipv6_addr_needs_scope_id (addr_type) && !oif) || (addr_type &IPV6_ADDR_MAPPED ) || - (oif && sk->sk_bound_dev_if && oif != sk->sk_bound_dev_if)) + (oif && sk->sk_bound_dev_if && oif != sk->sk_bound_dev_if && +l3mdev_master_ifindex_by_index (sock_net (sk), oif) != sk->sk_bound_dev_if))return -EINVAL ;/* TODO: use ip6_datagram_send_ctl to get options from cmsg */
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 40/64 net/sched: cls_u32: Fix reference counter leak leading to overflow
In reply to Greg Kroah-HartmanFrom: Lee Jones <[email protected]>
[ Upstream commit 04c55383fa5689357bcdd2c8036725a55ed632bc ]
In the event of a failure in tcf_change_indev(), u32_set_parms() will immediately return without decrementing the recently incremented reference counter. If this happens enough times, the counter will rollover and the reference freed, leading to a double free which can be used to do 'bad things'.
In order to prevent this, move the point of possible failure above the point where the reference counter is incremented. Also save any meaningful return values to be applied to the return data at the appropriate point in time.
This issue was caught with KASAN.
--- net/sched/cls_u32.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)
net/sched/cls_u32.c +10 -8
@@ -716,12 +716,18 @@ static int u32_set_parms(struct net *net, struct tcf_proto *tp, struct nlattr *est, bool ovr, struct netlink_ext_ack *extack) { - int err; + int err, ifindex = -1; err =tcf_exts_validate (net, tp, tb, est, &n->exts, ovr, true, extack);if (err <0 )return err; +if (tb[TCA_U32_INDEV ]) { + ifindex =tcf_change_indev (net, tb[TCA_U32_INDEV ], extack); +if (ifindex <0 ) +return -EINVAL ; + } +if (tb[TCA_U32_LINK ]) {u32 handle =nla_get_u32 (tb[TCA_U32_LINK ]);struct tc_u_hnode *ht_down =NULL , *ht_old;
@@ -756,13 +762,9 @@ static int u32_set_parms(struct net *net, struct tcf_proto *tp,tcf_bind_filter (tp, &n->res, base); } -if (tb[TCA_U32_INDEV ]) { -int ret; - ret =tcf_change_indev (net, tb[TCA_U32_INDEV ], extack); -if (ret <0 ) -return -EINVAL ; - n->ifindex = ret; - } +if (ifindex >=0 ) + n->ifindex = ifindex; +return 0 ; }
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 41/64 RDMA/rxe: Remove the unused variable obj
In reply to Greg Kroah-HartmanFrom: Zhu Yanjun <[email protected]>
[ Upstream commit f07853582d1f6ed282f8d9a0b1209a87dd761f58 ]
The member variable obj in struct rxe_task is not needed. So remove it to save memory.
Stable-dep-of: 2a62b6210ce8 ("RDMA/rxe: Fix the use-before-initialization error of resp_pkts")
--- drivers/infiniband/sw/rxe/rxe_qp.c | 6 +++--- drivers/infiniband/sw/rxe/rxe_task.c | 3 +-- drivers/infiniband/sw/rxe/rxe_task.h | 3 +-- 3 files changed, 5 insertions(+), 7 deletions(-)
drivers/infiniband/sw/rxe/rxe_qp.c +3 -3
@@ -278,9 +278,9 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,skb_queue_head_init (&qp->req_pkts); -rxe_init_task (rxe, &qp->req.task, qp, +rxe_init_task (&qp->req.task, qp, rxe_requester,"req" ); -rxe_init_task (rxe, &qp->comp.task, qp, +rxe_init_task (&qp->comp.task, qp, rxe_completer,"comp" ); qp->qp_timeout_jiffies =0 ;/* Can't be set for UD/UC in modify_qp */
@@ -327,7 +327,7 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,skb_queue_head_init (&qp->resp_pkts); -rxe_init_task (rxe, &qp->resp.task, qp, +rxe_init_task (&qp->resp.task, qp, rxe_responder,"resp" ); qp->resp.opcode =OPCODE_NONE ;
drivers/infiniband/sw/rxe/rxe_task.c +1 -2
@@ -114,10 +114,9 @@ void rxe_do_task(unsigned long data) task->ret = ret; } -int rxe_init_task (void *obj,struct rxe_task *task, +int rxe_init_task (struct rxe_task *task,void *arg,int (*func)(void *),char *name) { - task->obj = obj; task->arg = arg; task->func = func;snprintf (task->name,sizeof (task->name),"%s" , name);
drivers/infiniband/sw/rxe/rxe_task.h +1 -2
@@ -46,7 +46,6 @@ enum {* called again. */ struct rxe_task { -void *obj;struct tasklet_struct tasklet;int state;spinlock_t state_lock;/* spinlock for task state */
@@ -62,7 +61,7 @@ struct rxe_task {* arg => parameter to pass to fcn * fcn => function to call until it returns != 0 */ -int rxe_init_task (void *obj,struct rxe_task *task, +int rxe_init_task (struct rxe_task *task,void *arg,int (*func)(void *),char *name);/* cleanup task */
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 42/64 RDMA/rxe: Removed unused name from rxe_task struct
In reply to Greg Kroah-HartmanFrom: Bob Pearson <[email protected]>
[ Upstream commit de669ae8af49ceed0eed44f5b3d51dc62affc5e4 ]
The name field in struct rxe_task is never used. This patch removes it.
Stable-dep-of: 2a62b6210ce8 ("RDMA/rxe: Fix the use-before-initialization error of resp_pkts")
--- drivers/infiniband/sw/rxe/rxe_qp.c | 9 +++------ drivers/infiniband/sw/rxe/rxe_task.c | 4 +--- drivers/infiniband/sw/rxe/rxe_task.h | 4 +--- 3 files changed, 5 insertions(+), 12 deletions(-)
drivers/infiniband/sw/rxe/rxe_qp.c +3 -6
@@ -278,10 +278,8 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,skb_queue_head_init (&qp->req_pkts); -rxe_init_task (&qp->req.task, qp, - rxe_requester,"req" ); -rxe_init_task (&qp->comp.task, qp, - rxe_completer,"comp" ); +rxe_init_task (&qp->req.task, qp, rxe_requester); +rxe_init_task (&qp->comp.task, qp, rxe_completer); qp->qp_timeout_jiffies =0 ;/* Can't be set for UD/UC in modify_qp */ if (init->qp_type ==IB_QPT_RC ) {
@@ -327,8 +325,7 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,skb_queue_head_init (&qp->resp_pkts); -rxe_init_task (&qp->resp.task, qp, - rxe_responder,"resp" ); +rxe_init_task (&qp->resp.task, qp, rxe_responder); qp->resp.opcode =OPCODE_NONE ; qp->resp.msn =0 ;
drivers/infiniband/sw/rxe/rxe_task.c +1 -3
@@ -114,12 +114,10 @@ void rxe_do_task(unsigned long data) task->ret = ret; } -int rxe_init_task (struct rxe_task *task, -void *arg,int (*func)(void *),char *name) +int rxe_init_task (struct rxe_task *task,void *arg,int (*func)(void *)) { task->arg = arg; task->func = func; -snprintf (task->name,sizeof (task->name),"%s" , name); task->destroyed = false;tasklet_init (&task->tasklet, rxe_do_task, (unsigned long )task);
drivers/infiniband/sw/rxe/rxe_task.h +1 -3
@@ -52,7 +52,6 @@ struct rxe_task {void *arg;int (*func)(void *arg);int ret; -char name[16 ];bool destroyed; };
@@ -61,8 +60,7 @@ struct rxe_task {* arg => parameter to pass to fcn * fcn => function to call until it returns != 0 */ -int rxe_init_task (struct rxe_task *task, -void *arg,int (*func)(void *),char *name); +int rxe_init_task (struct rxe_task *task,void *arg,int (*func)(void *));/* cleanup task */ void rxe_cleanup_task (struct rxe_task *task);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 43/64 RDMA/rxe: Fix the use-before-initialization error of resp_pkts
In reply to Greg Kroah-HartmanFrom: Zhu Yanjun <[email protected]>
[ Upstream commit 2a62b6210ce876c596086ab8fd4c8a0c3d10611a ]
In the following:
Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106 assign_lock_key kernel/locking/lockdep.c:982 [inline] register_lock_class+0xdb6/0x1120 kernel/locking/lockdep.c:1295 __lock_acquire+0x10a/0x5df0 kernel/locking/lockdep.c:4951 lock_acquire kernel/locking/lockdep.c:5691 [inline] lock_acquire+0x1b1/0x520 kernel/locking/lockdep.c:5656 __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline] _raw_spin_lock_irqsave+0x3d/0x60 kernel/locking/spinlock.c:162 skb_dequeue+0x20/0x180 net/core/skbuff.c:3639 drain_resp_pkts drivers/infiniband/sw/rxe/rxe_comp.c:555 [inline] rxe_completer+0x250d/0x3cc0 drivers/infiniband/sw/rxe/rxe_comp.c:652 rxe_qp_do_cleanup+0x1be/0x820 drivers/infiniband/sw/rxe/rxe_qp.c:761 execute_in_process_context+0x3b/0x150 kernel/workqueue.c:3473 __rxe_cleanup+0x21e/0x370 drivers/infiniband/sw/rxe/rxe_pool.c:233 rxe_create_qp+0x3f6/0x5f0 drivers/infiniband/sw/rxe/rxe_verbs.c:583
This is a use-before-initialization problem.
It happens because rxe_qp_do_cleanup is called during error unwind before the struct has been fully initialized.
Move the initialization of the skb earlier.
--- drivers/infiniband/sw/rxe/rxe_qp.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/infiniband/sw/rxe/rxe_qp.c +3 -4
@@ -219,6 +219,9 @@ static void rxe_qp_init_misc(struct rxe_dev *rxe, struct rxe_qp *qp,spin_lock_init (&qp->rq.producer_lock);spin_lock_init (&qp->rq.consumer_lock); +skb_queue_head_init (&qp->req_pkts); +skb_queue_head_init (&qp->resp_pkts); +atomic_set (&qp->ssn,0 );atomic_set (&qp->skb_out,0 ); }
@@ -276,8 +279,6 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp, qp->req.opcode =-1 ; qp->comp.opcode =-1 ; -skb_queue_head_init (&qp->req_pkts); -rxe_init_task (&qp->req.task, qp, rxe_requester);rxe_init_task (&qp->comp.task, qp, rxe_completer);
@@ -323,8 +324,6 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp, } } -skb_queue_head_init (&qp->resp_pkts); -rxe_init_task (&qp->resp.task, qp, rxe_responder); qp->resp.opcode =OPCODE_NONE ;
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 44/64 iavf: remove mask from iavf_irq_enable_queues()
In reply to Greg Kroah-HartmanFrom: Ahmed Zaki <[email protected]>
[ Upstream commit c37cf54c12cfaa51e7aaf88708167b0d3259e64e ]
Enable more than 32 IRQs by removing the u32 bit mask in iavf_irq_enable_queues(). There is no need for the mask as there are no callers that select individual IRQs through the bitmask. Also, if the PF allocates more than 32 IRQs, this mask will prevent us from using all of them.
Modify the comment in iavf_register.h to show that the maximum number allowed for the IRQ index is 63 as per the iAVF standard 1.0 [1].
--- drivers/net/ethernet/intel/iavf/iavf.h | 2 +- drivers/net/ethernet/intel/iavf/iavf_main.c | 15 ++++++--------- drivers/net/ethernet/intel/iavf/iavf_register.h | 2 +- 3 files changed, 8 insertions(+), 11 deletions(-)
drivers/net/ethernet/intel/iavf/iavf.h +1 -1
@@ -385,7 +385,7 @@ void iavf_set_ethtool_ops(struct net_device *netdev);void iavf_update_stats (struct iavf_adapter *adapter);void iavf_reset_interrupt_capability (struct iavf_adapter *adapter);int iavf_init_interrupt_scheme (struct iavf_adapter *adapter); -void iavf_irq_enable_queues (struct iavf_adapter *adapter,u32 mask); +void iavf_irq_enable_queues (struct iavf_adapter *adapter);void iavf_free_all_tx_resources (struct iavf_adapter *adapter);void iavf_free_all_rx_resources (struct iavf_adapter *adapter);
drivers/net/ethernet/intel/iavf/iavf_main.c +6 -9
@@ -244,21 +244,18 @@ static void iavf_irq_disable(struct iavf_adapter *adapter) }/** -* iavf_irq_enable_queues - Enable interrupt for specified queues +* iavf_irq_enable_queues - Enable interrupt for all queues * @adapter: board private structure -* @mask: bitmap of queues to enable **/ -void iavf_irq_enable_queues (struct iavf_adapter *adapter,u32 mask) +void iavf_irq_enable_queues (struct iavf_adapter *adapter) {struct iavf_hw *hw = &adapter->hw;int i;for (i =1 ; i < adapter->num_msix_vectors; i++) { -if (mask &BIT (i -1 )) { -wr32 (hw,IAVF_VFINT_DYN_CTLN1 (i -1 ), -IAVF_VFINT_DYN_CTLN1_INTENA_MASK | -IAVF_VFINT_DYN_CTLN1_ITR_INDX_MASK ); - } +wr32 (hw,IAVF_VFINT_DYN_CTLN1 (i -1 ), +IAVF_VFINT_DYN_CTLN1_INTENA_MASK | +IAVF_VFINT_DYN_CTLN1_ITR_INDX_MASK ); } }
@@ -272,7 +269,7 @@ void iavf_irq_enable(struct iavf_adapter *adapter, bool flush)struct iavf_hw *hw = &adapter->hw;iavf_misc_irq_enable (adapter); -iavf_irq_enable_queues (adapter, ~0 ); +iavf_irq_enable_queues (adapter);if (flush)iavf_flush (hw);
drivers/net/ethernet/intel/iavf/iavf_register.h +1 -1
@@ -40,7 +40,7 @@#define IAVF_VFINT_DYN_CTL01_INTENA_MASK IAVF_MASK(0x1, IAVF_VFINT_DYN_CTL01_INTENA_SHIFT)#define IAVF_VFINT_DYN_CTL01_ITR_INDX_SHIFT 3#define IAVF_VFINT_DYN_CTL01_ITR_INDX_MASK IAVF_MASK(0x3, IAVF_VFINT_DYN_CTL01_ITR_INDX_SHIFT) -#define IAVF_VFINT_DYN_CTLN1 (_INTVF) (0x00003800 + ((_INTVF) * 4))/* _i=0...15 */ /* Reset: VFR */ +#define IAVF_VFINT_DYN_CTLN1 (_INTVF) (0x00003800 + ((_INTVF) * 4))/* _i=0...63 */ /* Reset: VFR */ #define IAVF_VFINT_DYN_CTLN1_INTENA_SHIFT 0#define IAVF_VFINT_DYN_CTLN1_INTENA_MASK IAVF_MASK(0x1, IAVF_VFINT_DYN_CTLN1_INTENA_SHIFT)#define IAVF_VFINT_DYN_CTLN1_SWINT_TRIG_SHIFT 2
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 45/64 IB/uverbs: Fix to consider event queue closing also upon non-blocking mode
In reply to Greg Kroah-HartmanFrom: Yishai Hadas <[email protected]>
[ Upstream commit 62fab312fa1683e812e605db20d4f22de3e3fb2f ]
Fix ib_uverbs_event_read() to consider event queue closing also upon non-blocking mode.
Once the queue is closed (e.g. hot-plug flow) all the existing events are cleaned-up as part of ib_uverbs_free_event_queue().
An application that uses the non-blocking FD mode should get -EIO in that case to let it knows that the device was removed already.
Otherwise, it can loose the indication that the device was removed and won't recover.
As part of that, refactor the code to have a single flow with regards to 'is_closed' for both blocking and non-blocking modes.
--- drivers/infiniband/core/uverbs_main.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)
drivers/infiniband/core/uverbs_main.c +5 -7
@@ -230,8 +230,12 @@ static ssize_t ib_uverbs_event_read(struct ib_uverbs_event_queue *ev_queue,spin_lock_irq (&ev_queue->lock);while (list_empty (&ev_queue->event_list)) { -spin_unlock_irq (&ev_queue->lock); +if (ev_queue->is_closed) { +spin_unlock_irq (&ev_queue->lock); +return -EIO ; + } +spin_unlock_irq (&ev_queue->lock);if (filp->f_flags &O_NONBLOCK )return -EAGAIN ;
@@ -241,12 +245,6 @@ static ssize_t ib_uverbs_event_read(struct ib_uverbs_event_queue *ev_queue,return -ERESTARTSYS ;spin_lock_irq (&ev_queue->lock); - -/* If device was disassociated and no event exists set an error */ -if (list_empty (&ev_queue->event_list) && ev_queue->is_closed) { -spin_unlock_irq (&ev_queue->lock); -return -EIO ; - } } event = list_entry(ev_queue->event_list.next, struct ib_uverbs_event, list);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 46/64 IB/isert: Fix dead lock in ib_isert
In reply to Greg Kroah-HartmanFrom: Saravanan Vajravel <[email protected]>
[ Upstream commit 691b0480933f0ce88a81ed1d1a0aff340ff6293a ]
- When a iSER session is released, ib_isert module is taking a mutex lock and releasing all pending connections. As part of this, ib_isert is destroying rdma cm_id. To destroy cm_id, rdma_cm module is sending CM events to CMA handler of ib_isert. This handler is taking same mutex lock. Hence it leads to deadlock between ib_isert & rdma_cm modules.
- For fix, created local list of pending connections and release the connection outside of mutex lock.
Calltrace:
---------
[ 1229.791410] INFO: task kworker/10:1:642 blocked for more than 120 seconds. [ 1229.791416] Tainted: G OE --------- - - 4.18.0-372.9.1.el8.x86_64 #1 [ 1229.791418] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [ 1229.791419] task:kworker/10:1 state:D stack: 0 pid: 642 ppid: 2 flags:0x80004000 [ 1229.791424] Workqueue: ib_cm cm_work_handler [ib_cm] [ 1229.791436] Call Trace: [ 1229.791438] __schedule+0x2d1/0x830 [ 1229.791445] ? select_idle_sibling+0x23/0x6f0 [ 1229.791449] schedule+0x35/0xa0 [ 1229.791451] schedule_preempt_disabled+0xa/0x10 [ 1229.791453] __mutex_lock.isra.7+0x310/0x420 [ 1229.791456] ? select_task_rq_fair+0x351/0x990 [ 1229.791459] isert_cma_handler+0x224/0x330 [ib_isert] [ 1229.791463] ? ttwu_queue_wakelist+0x159/0x170 [ 1229.791466] cma_cm_event_handler+0x25/0xd0 [rdma_cm] [ 1229.791474] cma_ib_handler+0xa7/0x2e0 [rdma_cm] [ 1229.791478] cm_process_work+0x22/0xf0 [ib_cm] [ 1229.791483] cm_work_handler+0xf4/0xf30 [ib_cm] [ 1229.791487] ? move_linked_works+0x6e/0xa0 [ 1229.791490] process_one_work+0x1a7/0x360 [ 1229.791491] ? create_worker+0x1a0/0x1a0 [ 1229.791493] worker_thread+0x30/0x390 [ 1229.791494] ? create_worker+0x1a0/0x1a0 [ 1229.791495] kthread+0x10a/0x120 [ 1229.791497] ? set_kthread_struct+0x40/0x40 [ 1229.791499] ret_from_fork+0x1f/0x40
[ 1229.791739] INFO: task targetcli:28666 blocked for more than 120 seconds. [ 1229.791740] Tainted: G OE --------- - - 4.18.0-372.9.1.el8.x86_64 #1 [ 1229.791741] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [ 1229.791742] task:targetcli state:D stack: 0 pid:28666 ppid: 5510 flags:0x00004080 [ 1229.791743] Call Trace: [ 1229.791744] __schedule+0x2d1/0x830 [ 1229.791746] schedule+0x35/0xa0 [ 1229.791748] schedule_preempt_disabled+0xa/0x10 [ 1229.791749] __mutex_lock.isra.7+0x310/0x420 [ 1229.791751] rdma_destroy_id+0x15/0x20 [rdma_cm] [ 1229.791755] isert_connect_release+0x115/0x130 [ib_isert] [ 1229.791757] isert_free_np+0x87/0x140 [ib_isert] [ 1229.791761] iscsit_del_np+0x74/0x120 [iscsi_target_mod] [ 1229.791776] lio_target_np_driver_store+0xe9/0x140 [iscsi_target_mod] [ 1229.791784] configfs_write_file+0xb2/0x110 [ 1229.791788] vfs_write+0xa5/0x1a0 [ 1229.791792] ksys_write+0x4f/0xb0 [ 1229.791794] do_syscall_64+0x5b/0x1a0 [ 1229.791798] entry_SYSCALL_64_after_hwframe+0x65/0xca
--- drivers/infiniband/ulp/isert/ib_isert.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
drivers/infiniband/ulp/isert/ib_isert.c +8 -2
@@ -2507,6 +2507,7 @@ isert_free_np(struct iscsi_np *np) {struct isert_np *isert_np = np->np_context;struct isert_conn *isert_conn, *n; +LIST_HEAD (drop_conn_list);if (isert_np->cm_id)rdma_destroy_id (isert_np->cm_id);
@@ -2526,7 +2527,7 @@ isert_free_np(struct iscsi_np *np) node) {isert_info ("cleaning isert_conn %p state (%d)\n" , isert_conn, isert_conn->state); -isert_connect_release (isert_conn); +list_move_tail (&isert_conn->node, &drop_conn_list); } }
@@ -2537,11 +2538,16 @@ isert_free_np(struct iscsi_np *np) node) {isert_info ("cleaning isert_conn %p state (%d)\n" , isert_conn, isert_conn->state); -isert_connect_release (isert_conn); +list_move_tail (&isert_conn->node, &drop_conn_list); } }mutex_unlock (&isert_np->mutex); +list_for_each_entry_safe (isert_conn, n, &drop_conn_list, node) { +list_del_init (&isert_conn->node); +isert_connect_release (isert_conn); + } + np->np_context =NULL ;kfree (isert_np); }
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 47/64 IB/isert: Fix possible list corruption in CMA handler
In reply to Greg Kroah-HartmanFrom: Saravanan Vajravel <[email protected]>
[ Upstream commit 7651e2d6c5b359a28c2d4c904fec6608d1021ca8 ]
When ib_isert module receives connection error event, it is releasing the isert session and removes corresponding list node but it doesn't take appropriate mutex lock to remove the list node. This can lead to linked list corruption
--- drivers/infiniband/ulp/isert/ib_isert.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/infiniband/ulp/isert/ib_isert.c +4 -0
@@ -733,9 +733,13 @@ static int isert_connect_error(struct rdma_cm_id *cma_id) {struct isert_conn *isert_conn = cma_id->qp->qp_context; +struct isert_np *isert_np = cma_id->context;ib_drain_qp (isert_conn->qp); + +mutex_lock (&isert_np->mutex);list_del_init (&isert_conn->node); +mutex_unlock (&isert_np->mutex); isert_conn->cm_id =NULL ;isert_put_conn (isert_conn);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 48/64 IB/isert: Fix incorrect release of isert connection
In reply to Greg Kroah-HartmanFrom: Saravanan Vajravel <[email protected]>
[ Upstream commit 699826f4e30ab76a62c238c86fbef7e826639c8d ]
The ib_isert module is releasing the isert connection both in isert_wait_conn() handler as well as isert_free_conn() handler. In isert_wait_conn() handler, it is expected to wait for iSCSI session logout operation to complete. It should free the isert connection only in isert_free_conn() handler.
When a bunch of iSER target is cleared, this issue can lead to use-after-free memory issue as isert conn is twice released
--- drivers/infiniband/ulp/isert/ib_isert.c | 2 -- 1 file changed, 2 deletions(-)
drivers/infiniband/ulp/isert/ib_isert.c +0 -2
@@ -2646,8 +2646,6 @@ static void isert_wait_conn(struct iscsi_conn *conn)isert_put_unsol_pending_cmds (conn);isert_wait4cmds (conn);isert_wait4logout (isert_conn); - -queue_work (isert_release_wq, &isert_conn->release_work); }static void isert_free_conn (struct iscsi_conn *conn)
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 49/64 ipvlan: fix bound dev checking for IPv6 l3s mode
In reply to Greg Kroah-HartmanFrom: Hangbin Liu <[email protected]>
[ Upstream commit ce57adc222aba32431c42632b396e9213d0eb0b8 ]
The commit 59a0b022aa24 ("ipvlan: Make skb->skb_iif track skb->dev for l3s mode") fixed ipvlan bonded dev checking by updating skb skb_iif. This fix works for IPv4, as in raw_v4_input() the dif is from inet_iif(skb), which is skb->skb_iif when there is no route.
But for IPv6, the fix is not enough, because in ipv6_raw_deliver() -> raw_v6_match(), the dif is inet6_iif(skb), which is returns IP6CB(skb)->iif instead of skb->skb_iif if it's not a l3_slave. To fix the IPv6 part issue. Let's set IP6CB(skb)->iif to correct ifindex.
BTW, ipvlan handles NS/NA specifically. Since it works fine, I will not reset IP6CB(skb)->iif when addr->atype is IPVL_ICMPV6.
--- drivers/net/ipvlan/ipvlan_l3s.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/net/ipvlan/ipvlan_l3s.c +4 -0
@@ -102,6 +102,10 @@ static unsigned int ipvlan_nf_input(void *priv, struct sk_buff *skb, skb->dev = addr->master->dev; skb->skb_iif = skb->dev->ifindex; +#if IS_ENABLED (CONFIG_IPV6 ) +if (addr->atype ==IPVL_IPV6 ) +IP6CB (skb)->iif = skb->dev->ifindex; +#endif len = skb->len +ETH_HLEN ;ipvlan_count_rx (addr->master, len, true, false); out:
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 50/64 sctp: fix an error code in sctp_sf_eat_auth()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit 75e6def3b26736e7ff80639810098c9074229737 ]
The sctp_sf_eat_auth() function is supposed to enum sctp_disposition values and returning a kernel error code will cause issues in the caller. Change -ENOMEM to SCTP_DISPOSITION_NOMEM.
--- net/sctp/sm_statefuns.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/sctp/sm_statefuns.c +1 -1
@@ -4379,7 +4379,7 @@ enum sctp_disposition sctp_sf_eat_auth(struct net *net, SCTP_AUTH_NEW_KEY, GFP_ATOMIC);if (!ev) -return -ENOMEM ; +return SCTP_DISPOSITION_NOMEM ;sctp_add_cmd_sf (commands,SCTP_CMD_EVENT_ULP ,SCTP_ULPEVENT (ev));
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 51/64 igb: fix nvm.ops.read() error handling
In reply to Greg Kroah-HartmanFrom: Aleksandr Loktionov <[email protected]>
[ Upstream commit 48a821fd58837800750ec1b3962f0f799630a844 ]
Add error handling into igb_set_eeprom() function, in case nvm.ops.read() fails just quit with error code asap.
--- drivers/net/ethernet/intel/igb/igb_ethtool.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/net/ethernet/intel/igb/igb_ethtool.c +3 -0
@@ -814,6 +814,8 @@ static int igb_set_eeprom(struct net_device *netdev,*/ ret_val = hw->nvm.ops.read (hw, last_word,1 , &eeprom_buff[last_word - first_word]); +if (ret_val) + goto out; }/* Device's eeprom is always little-endian, word addressable */
@@ -833,6 +835,7 @@ static int igb_set_eeprom(struct net_device *netdev, hw->nvm.ops.update (hw);igb_set_fw_version (adapter); +out:kfree (eeprom_buff);return ret_val; }
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 52/64 drm/nouveau/dp: check for NULL nv_connector->native_mode
In reply to Greg Kroah-HartmanFrom: Natalia Petrova <[email protected]>
[ Upstream commit 20a2ce87fbaf81e4c3dcb631d738e423959eb320 ]
Add checking for NULL before calling nouveau_connector_detect_depth() in nouveau_connector_get_modes() function because nv_connector->native_mode could be dereferenced there since connector pointer passed to nouveau_connector_detect_depth() and the same value of nv_connector->native_mode is used there.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
--- drivers/gpu/drm/nouveau/nouveau_connector.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/nouveau/nouveau_connector.c +2 -2
@@ -950,7 +950,7 @@ nouveau_connector_get_modes(struct drm_connector *connector)/* Determine display colour depth for everything except LVDS now, * DP requires this before mode_valid() is called. */ -if (connector->connector_type !=DRM_MODE_CONNECTOR_LVDS ) +if (connector->connector_type !=DRM_MODE_CONNECTOR_LVDS && nv_connector->native_mode)nouveau_connector_detect_depth (connector);/* Find the native mode if this is a digital panel, if we didn't
@@ -971,7 +971,7 @@ nouveau_connector_get_modes(struct drm_connector *connector)* "native" mode as some VBIOS tables require us to use the * pixel clock as part of the lookup... */ -if (connector->connector_type ==DRM_MODE_CONNECTOR_LVDS ) +if (connector->connector_type ==DRM_MODE_CONNECTOR_LVDS && nv_connector->native_mode)nouveau_connector_detect_depth (connector);if (nv_encoder->dcb->type ==DCB_OUTPUT_TV )
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 53/64 drm/nouveau/kms: Dont change EDID when it hasnt actually changed
In reply to Greg Kroah-HartmanFrom: Lyude Paul <[email protected]>
[ Upstream commit f28e32d3906eac2e1cb3291b448f0d528ec93996 ]
Currently in nouveau_connector_ddc_detect() and nouveau_connector_detect_lvds(), we start the connector probing process by releasing the previous EDID and informing DRM of the change. However, since commit 5186421cbfe2 ("drm: Introduce epoch counter to drm_connector") drm_connector_update_edid_property() actually checks whether the new EDID we've specified is different from the previous one, and updates the connector's epoch accordingly if it is. But, because we always set the EDID to NULL first in nouveau_connector_ddc_detect() and nouveau_connector_detect_lvds() we end up making DRM think that the EDID changes every single time we do a connector probe - which isn't needed.
So, let's fix this by not clearing the EDID at the start of the connector probing process, and instead simply changing or removing it once near the end of the probing process. This will help prevent us from sending unneeded hotplug events to userspace when nothing has actually changed.
Stable-dep-of: 55b94bb8c424 ("drm/nouveau: add nv_encoder pointer check for NULL")
--- drivers/gpu/drm/nouveau/nouveau_connector.c | 54 ++++++++++----------- 1 file changed, 27 insertions(+), 27 deletions(-)
drivers/gpu/drm/nouveau/nouveau_connector.c +27 -27
@@ -538,6 +538,17 @@ nouveau_connector_set_encoder(struct drm_connector *connector, } } +static void +nouveau_connector_set_edid (struct nouveau_connector *nv_connector, +struct edid *edid) +{ +struct edid *old_edid = nv_connector->edid; + +drm_connector_update_edid_property (&nv_connector->base, edid); +kfree (old_edid); + nv_connector->edid = edid; +} +static enum drm_connector_status nouveau_connector_detect (struct drm_connector *connector,bool force) {
@@ -551,13 +562,6 @@ nouveau_connector_detect(struct drm_connector *connector, bool force)int ret;enum drm_connector_status conn_status = connector_status_disconnected; -/* Cleanup the previous EDID block. */ -if (nv_connector->edid) { -drm_connector_update_edid_property (connector,NULL ); -kfree (nv_connector->edid); - nv_connector->edid =NULL ; - } -/* Outputs are only polled while runtime active, so resuming the * device here is unnecessary (and would deadlock upon runtime suspend * because it waits for polling to finish). We do however, want to
@@ -570,22 +574,23 @@ nouveau_connector_detect(struct drm_connector *connector, bool force) ret =pm_runtime_get_sync (dev->dev);if (ret <0 && ret != -EACCES ) {pm_runtime_put_autosuspend (dev->dev); +nouveau_connector_set_edid (nv_connector,NULL );return conn_status; } } nv_encoder =nouveau_connector_ddc_detect (connector);if (nv_encoder && (i2c = nv_encoder->i2c) !=NULL ) { +struct edid *new_edid; +if ((vga_switcheroo_handler_flags () &VGA_SWITCHEROO_CAN_SWITCH_DDC ) && nv_connector->type ==DCB_CONNECTOR_LVDS ) - nv_connector->edid =drm_get_edid_switcheroo (connector, - i2c); + new_edid =drm_get_edid_switcheroo (connector, i2c);else - nv_connector->edid =drm_get_edid (connector, i2c); + new_edid =drm_get_edid (connector, i2c); -drm_connector_update_edid_property (connector, - nv_connector->edid); +nouveau_connector_set_edid (nv_connector, new_edid);if (!nv_connector->edid) {NV_ERROR (drm,"DDC responded, but no EDID for %s\n" , connector->name);
@@ -619,6 +624,8 @@ nouveau_connector_detect(struct drm_connector *connector, bool force) conn_status = connector_status_connected;drm_dp_cec_set_edid (&nv_connector->aux, nv_connector->edid); goto out; + }else { +nouveau_connector_set_edid (nv_connector,NULL ); } nv_encoder =nouveau_connector_of_detect (connector);
@@ -661,18 +668,12 @@ nouveau_connector_detect_lvds(struct drm_connector *connector, bool force)struct nouveau_drm *drm =nouveau_drm (dev);struct nouveau_connector *nv_connector =nouveau_connector (connector);struct nouveau_encoder *nv_encoder =NULL ; +struct edid *edid =NULL ;enum drm_connector_status status = connector_status_disconnected; -/* Cleanup the previous EDID block. */ -if (nv_connector->edid) { -drm_connector_update_edid_property (connector,NULL ); -kfree (nv_connector->edid); - nv_connector->edid =NULL ; - } - nv_encoder =find_encoder (connector,DCB_OUTPUT_LVDS );if (!nv_encoder) -return connector_status_disconnected; + goto out;/* Try retrieving EDID via DDC */ if (!drm->vbios.fp_no_ddc) {
@@ -691,7 +692,8 @@ nouveau_connector_detect_lvds(struct drm_connector *connector, bool force)* valid - it's not (rh#613284) */ if (nv_encoder->dcb->lvdsconf.use_acpi_for_edid) { -if ((nv_connector->edid =nouveau_acpi_edid (dev, connector))) { + edid =nouveau_acpi_edid (dev, connector); +if (edid) { status = connector_status_connected; goto out; }
@@ -711,12 +713,10 @@ nouveau_connector_detect_lvds(struct drm_connector *connector, bool force)* stored for the panel stored in them. */ if (!drm->vbios.fp_no_ddc) { -struct edid *edid = - (struct edid *)nouveau_bios_embedded_edid (dev); + edid = (struct edid *)nouveau_bios_embedded_edid (dev);if (edid) { - nv_connector->edid = -kmemdup (edid,EDID_LENGTH ,GFP_KERNEL ); -if (nv_connector->edid) + edid =kmemdup (edid,EDID_LENGTH ,GFP_KERNEL ); +if (edid) status = connector_status_connected; } }
@@ -729,7 +729,7 @@ nouveau_connector_detect_lvds(struct drm_connector *connector, bool force) status = connector_status_unknown;#endif -drm_connector_update_edid_property (connector, nv_connector->edid); +nouveau_connector_set_edid (nv_connector, edid);nouveau_connector_set_encoder (connector, nv_encoder);return status; }
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 54/64 drm/nouveau: add nv_encoder pointer check for NULL
In reply to Greg Kroah-HartmanFrom: Natalia Petrova <[email protected]>
[ Upstream commit 55b94bb8c42464bad3d2217f6874aa1a85664eac ]
Pointer nv_encoder could be dereferenced at nouveau_connector.c in case it's equal to NULL by jumping to goto label. This patch adds a NULL-check to avoid it.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
--- drivers/gpu/drm/nouveau/nouveau_connector.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/drm/nouveau/nouveau_connector.c +2 -1
@@ -730,7 +730,8 @@ nouveau_connector_detect_lvds(struct drm_connector *connector, bool force)#endif nouveau_connector_set_edid (nv_connector, edid); -nouveau_connector_set_encoder (connector, nv_encoder); +if (nv_encoder) +nouveau_connector_set_encoder (connector, nv_encoder);return status; }
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 55/64 net/sched: cls_api: Fix lockup on flushing explicitly created chain
In reply to Greg Kroah-HartmanFrom: Vlad Buslov <[email protected]>
[ Upstream commit c9a82bec02c339cdda99b37c5e62b3b71fc4209c ]
Mingshuai Ren reports:
When a new chain is added by using tc, one soft lockup alarm will be
generated after delete the prio 0 filter of the chain. To reproduce the problem, perform the following steps:
(1) tc qdisc add dev eth0 root handle 1: htb default 1
(2) tc chain add dev eth0
(3) tc filter del dev eth0 chain 0 parent 1: prio 0
(4) tc filter add dev eth0 chain 0 parent 1:
Fix the issue by accounting for additional reference to chains that are explicitly created by RTM_NEWCHAIN message as opposed to implicitly by RTM_NEWTFILTER message.
--- net/sched/cls_api.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
net/sched/cls_api.c +7 -5
@@ -518,8 +518,8 @@ static void __tcf_chain_put(struct tcf_chain *chain, bool by_act, {struct tcf_block *block = chain->block;const struct tcf_proto_ops *tmplt_ops; +unsigned int refcnt, non_act_refcnt;bool free_block = false; -unsigned int refcnt;void *tmplt_priv;mutex_lock (&block->lock);
@@ -539,13 +539,15 @@ static void __tcf_chain_put(struct tcf_chain *chain, bool by_act,* save these to temporary variables. */ refcnt = --chain->refcnt; + non_act_refcnt = refcnt - chain->action_refcnt; tmplt_ops = chain->tmplt_ops; tmplt_priv = chain->tmplt_priv; -/* The last dropped non-action reference will trigger notification. */ -if (refcnt - chain->action_refcnt ==0 && !by_act) { -tc_chain_notify_delete (tmplt_ops, tmplt_priv, chain->index, - block,NULL ,0 ,0 , false); +if (non_act_refcnt == chain->explicitly_created && !by_act) { +if (non_act_refcnt ==0 ) +tc_chain_notify_delete (tmplt_ops, tmplt_priv, + chain->index, block,NULL ,0 ,0 , + false);/* Last reference to chain, no need to lock. */ chain->flushing = false; }
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 56/64 net: lapbether: only support ethernet devices
In reply to Greg Kroah-HartmanFrom: Eric Dumazet <[email protected]>
[ Upstream commit 9eed321cde22fc1afd76eac563ce19d899e0d6b2 ]
It probbaly makes no sense to support arbitrary network devices for lapbether.
syzbot reported:
skbuff: skb_under_panic: text:ffff80008934c100 len:44 put:40 head:ffff0000d18dd200 data:ffff0000d18dd1ea tail:0x16 end:0x140 dev:bond1 kernel BUG at net/core/skbuff.c:200 !
Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP Modules linked in: CPU: 0 PID: 5643 Comm: dhcpcd Not tainted 6.4.0-rc5-syzkaller-g4641cff8e810 #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/25/2023 pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : skb_panic net/core/skbuff.c:196 [inline] pc : skb_under_panic+0x13c/0x140 net/core/skbuff.c:210 lr : skb_panic net/core/skbuff.c:196 [inline] lr : skb_under_panic+0x13c/0x140 net/core/skbuff.c:210
sp : ffff8000973b7260
x29: ffff8000973b7270 x28: ffff8000973b7360 x27: dfff800000000000
x26: ffff0000d85d8150 x25: 0000000000000016 x24: ffff0000d18dd1ea
x23: ffff0000d18dd200 x22: 000000000000002c x21: 0000000000000140
x20: 0000000000000028 x19: ffff80008934c100 x18: ffff8000973b68a0
x17: 0000000000000000 x16: ffff80008a43bfbc x15: 0000000000000202
x14: 0000000000000000 x13: 0000000000000001 x12: 0000000000000001
x11: 0000000000000201 x10: 0000000000000000 x9 : f22f7eb937cced00 x8 : f22f7eb937cced00 x7 : 0000000000000001 x6 : 0000000000000001 x5 : ffff8000973b6b78 x4 : ffff80008df9ee80 x3 : ffff8000805974f4 x2 : 0000000000000001 x1 : 0000000100000201 x0 : 0000000000000086
Call trace: skb_panic net/core/skbuff.c:196 [inline] skb_under_panic+0x13c/0x140 net/core/skbuff.c:210 skb_push+0xf0/0x108 net/core/skbuff.c:2409 ip6gre_header+0xbc/0x738 net/ipv6/ip6_gre.c:1383 dev_hard_header include/linux/netdevice.h:3137 [inline] lapbeth_data_transmit+0x1c4/0x298 drivers/net/wan/lapbether.c:257 lapb_data_transmit+0x8c/0xb0 net/lapb/lapb_iface.c:447 lapb_transmit_buffer+0x178/0x204 net/lapb/lapb_out.c:149 lapb_send_control+0x220/0x320 net/lapb/lapb_subr.c:251 lapb_establish_data_link+0x94/0xec lapb_device_event+0x348/0x4e0 notifier_call_chain+0x1a4/0x510 kernel/notifier.c:93 raw_notifier_call_chain+0x3c/0x50 kernel/notifier.c:461 __dev_notify_flags+0x2bc/0x544 dev_change_flags+0xd0/0x15c net/core/dev.c:8643 devinet_ioctl+0x858/0x17e4 net/ipv4/devinet.c:1150 inet_ioctl+0x2ac/0x4d8 net/ipv4/af_inet.c:979 sock_do_ioctl+0x134/0x2dc net/socket.c:1201 sock_ioctl+0x4ec/0x858 net/socket.c:1318 vfs_ioctl fs/ioctl.c:51 [inline] __do_sys_ioctl fs/ioctl.c:870 [inline] __se_sys_ioctl fs/ioctl.c:856 [inline] __arm64_sys_ioctl+0x14c/0x1c8 fs/ioctl.c:856 __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline] invoke_syscall+0x98/0x2c0 arch/arm64/kernel/syscall.c:52 el0_svc_common+0x138/0x244 arch/arm64/kernel/syscall.c:142 do_el0_svc+0x64/0x198 arch/arm64/kernel/syscall.c:191 el0_svc+0x4c/0x160 arch/arm64/kernel/entry-common.c:647 el0t_64_sync_handler+0x84/0xfc arch/arm64/kernel/entry-common.c:665 el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:591 Code: aa1803e6 aa1903e7 a90023f5 947730f5 (d4210000)
--- drivers/net/wan/lapbether.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/net/wan/lapbether.c +3 -0
@@ -341,6 +341,9 @@ static int lapbeth_new_device(struct net_device *dev)ASSERT_RTNL (); +if (dev->type !=ARPHRD_ETHER ) +return -EINVAL ; + ndev =alloc_netdev (sizeof (*lapbeth),"lapb%d" ,NET_NAME_UNKNOWN , lapbeth_setup);if (!ndev)
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 57/64 net: tipc: resize nlattr array to correct size
In reply to Greg Kroah-HartmanFrom: Lin Ma <[email protected]>
[ Upstream commit 44194cb1b6045dea33ae9a0d54fb7e7cd93a2e09 ]
According to nla_parse_nested_deprecated(), the tb[] is supposed to the destination array with maxtype+1 elements. In current tipc_nl_media_get() and __tipc_nl_media_set(), a larger array is used which is unnecessary. This patch resize them to a proper size.
--- net/tipc/bearer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/tipc/bearer.c +2 -2
@@ -1195,7 +1195,7 @@ int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info)struct tipc_nl_msg msg;struct tipc_media *media;struct sk_buff *rep; -struct nlattr *attrs[TIPC_NLA_BEARER_MAX +1 ]; +struct nlattr *attrs[TIPC_NLA_MEDIA_MAX +1 ];if (!info->attrs[TIPC_NLA_MEDIA ])return -EINVAL ;
@@ -1244,7 +1244,7 @@ int __tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info)int err;char *name;struct tipc_media *m; -struct nlattr *attrs[TIPC_NLA_BEARER_MAX +1 ]; +struct nlattr *attrs[TIPC_NLA_MEDIA_MAX +1 ];if (!info->attrs[TIPC_NLA_MEDIA ])return -EINVAL ;
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 58/64 selftests/ptp: Fix timestamp printf format for PTP_SYS_OFFSET
In reply to Greg Kroah-HartmanFrom: Alex Maftei <[email protected]>
[ Upstream commit 76a4c8b82938bc5020b67663db41f451684bf327 ]
Previously, timestamps were printed using "%lld.%u" which is incorrect for nanosecond values lower than 100,000,000 as they're fractional digits, therefore leading zeros are meaningful.
This patch changes the format strings to "%lld.%09u" in order to add leading zeros to the nanosecond value.
--- tools/testing/selftests/ptp/testptp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
tools/testing/selftests/ptp/testptp.c +3 -3
@@ -455,11 +455,11 @@ int main(int argc, char *argv[]) interval = t2 - t1; offset = (t2 + t1) /2 - tp; -printf ("system time: %lld.%u\n" , +printf ("system time: %lld.%09u\n" , (pct+2 *i)->sec, (pct+2 *i)->nsec); -printf ("phc time: %lld.%u\n" , +printf ("phc time: %lld.%09u\n" , (pct+2 *i+1 )->sec, (pct+2 *i+1 )->nsec); -printf ("system time: %lld.%u\n" , +printf ("system time: %lld.%09u\n" , (pct+2 *i+2 )->sec, (pct+2 *i+2 )->nsec); printf("system/phc clock time offset is %" PRId64 " ns\n" "system clock time delay is %" PRId64 " ns\n",
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 59/64 afs: Fix vlserver probe RTT handling
In reply to Greg Kroah-HartmanFrom: David Howells <[email protected]>
[ Upstream commit ba00b190670809c1a89326d80de96d714f6004f2 ]
In the same spirit as commit ca57f02295f1 ("afs: Fix fileserver probe RTT handling"), don't rule out using a vlserver just because there haven't been enough packets yet to calculate a real rtt. Always set the server's probe rtt from the estimate provided by rxrpc_kernel_get_srtt, which is capped at 1 second.
This could lead to EDESTADDRREQ errors when accessing a cell for the first time, even though the vl servers are known and have responded to a probe.
--- fs/afs/vl_probe.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/afs/vl_probe.c +2 -2
@@ -92,8 +92,8 @@ void afs_vlserver_probe_result(struct afs_call *call) } } -if (rxrpc_kernel_get_srtt (call->net->socket, call->rxcall, &rtt_us) && - rtt_us < server->probe.rtt) { +rxrpc_kernel_get_srtt (call->net->socket, call->rxcall, &rtt_us); +if (rtt_us < server->probe.rtt) { server->probe.rtt = rtt_us; alist->preferred = index; have_result = true;
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 60/64 neighbour: Remove unused inline function neigh_key_eq16()
In reply to Greg Kroah-HartmanFrom: Gaosheng Cui <[email protected]>
commit c8f01a4a54473f88f8cc0d9046ec9eb5a99815d5 upstream.
All uses of neigh_key_eq16() have
been removed since commit 1202cdd66531 ("Remove DECnet support from kernel"), so remove it.
--- include/net/neighbour.h | 5 ----- 1 file changed, 5 deletions(-)
include/net/neighbour.h +0 -5
@@ -260,11 +260,6 @@ static inline void *neighbour_priv(constextern const struct nla_policy nda_policy[]; -static inline bool neigh_key_eq16 (const struct neighbour *n,const void *pkey) -{ -return *(const u16 *)n->primary_key == *(const u16 *)pkey; -} -static inline bool neigh_key_eq32 (const struct neighbour *n,const void *pkey) {return *(const u32 *)n->primary_key == *(const u32 *)pkey;
Greg Kroah-Hartman
maintainerPATCH 61/64 net: Remove unused inline function dst_hold_and_use()
In reply to Greg Kroah-HartmanFrom: Gaosheng Cui <[email protected]>
commit 0b81882ddf8ac2743f657afb001beec7fc3929af upstream.
All uses of dst_hold_and_use() have
been removed since commit 1202cdd66531 ("Remove DECnet support from kernel"), so remove it.
--- include/net/dst.h | 6 ------ 1 file changed, 6 deletions(-)
include/net/dst.h +0 -6
@@ -236,12 +236,6 @@ static inline void dst_use_noref(struct } } -static inline void dst_hold_and_use (struct dst_entry *dst,unsigned long time) -{ -dst_hold (dst); -dst_use_noref (dst, time); -} -static inline struct dst_entry *dst_clone (struct dst_entry *dst) {if (dst)
Greg Kroah-Hartman
maintainerPATCH 62/64 neighbour: delete neigh_lookup_nodev as not used
In reply to Greg Kroah-HartmanFrom: Leon Romanovsky <[email protected]>
commit 76b9bf965c98c9b53ef7420b3b11438dbd764f92 upstream.
neigh_lookup_nodev isn't used in the kernel after removal of DECnet. So let's remove it.
--- include/net/neighbour.h | 2 -- net/core/neighbour.c | 31 ------------------------------- 2 files changed, 33 deletions(-)
include/net/neighbour.h +0 -2
@@ -309,8 +309,6 @@ void neigh_table_init(int index, structint neigh_table_clear (int index,struct neigh_table *tbl);struct neighbour *neigh_lookup (struct neigh_table *tbl,const void *pkey,struct net_device *dev); -struct neighbour *neigh_lookup_nodev (struct neigh_table *tbl,struct net *net, -const void *pkey);struct neighbour *__neigh_create (struct neigh_table *tbl,const void *pkey,struct net_device *dev,bool want_ref); static inline struct neighbour *neigh_create(struct neigh_table *tbl,
net/core/neighbour.c +0 -31
@@ -571,37 +571,6 @@ struct neighbour *neigh_lookup(struct ne }EXPORT_SYMBOL (neigh_lookup); -struct neighbour *neigh_lookup_nodev (struct neigh_table *tbl,struct net *net, -const void *pkey) -{ -struct neighbour *n; -unsigned int key_len = tbl->key_len; -u32 hash_val; -struct neigh_hash_table *nht; - -NEIGH_CACHE_STAT_INC (tbl, lookups); - -rcu_read_lock_bh (); - nht =rcu_dereference_bh (tbl->nht); - hash_val = tbl->hash (pkey,NULL , nht->hash_rnd) >> (32 - nht->hash_shift); - -for (n =rcu_dereference_bh (nht->hash_buckets[hash_val]); - n !=NULL ; - n =rcu_dereference_bh (n->next)) { -if (!memcmp (n->primary_key, pkey, key_len) && -net_eq (dev_net (n->dev), net)) { -if (!refcount_inc_not_zero (&n->refcnt)) - n =NULL ; -NEIGH_CACHE_STAT_INC (tbl, hits); -break ; - } - } - -rcu_read_unlock_bh (); -return n; -} -EXPORT_SYMBOL (neigh_lookup_nodev); -static struct neighbour * ___neigh_create(struct neigh_table *tbl, const void *pkey, struct net_device *dev, u8 flags,
Greg Kroah-Hartman
maintainerPATCH 63/64 drm/nouveau/kms: Fix NULL pointer dereference in nouveau_connector_detect_depth
In reply to Greg Kroah-HartmanFrom: Alexander Kapshuk <[email protected]>
commit 630f512280604eecae0ddc2b3f8402f7931c56fd upstream.
This oops manifests itself on the following hardware:
01:00.0 VGA compatible controller: NVIDIA Corporation G98M [GeForce G 103M] (rev a1)
Oct 09 14:17:46 lp-sasha kernel: BUG: kernel NULL pointer dereference, address: 0000000000000000 Oct 09 14:17:46 lp-sasha kernel: #PF: supervisor read access in kernel mode Oct 09 14:17:46 lp-sasha kernel: #PF: error_code(0x0000) - not-present page Oct 09 14:17:46 lp-sasha kernel: PGD 0 P4D 0 Oct 09 14:17:46 lp-sasha kernel: Oops: 0000 [#1] SMP PTI Oct 09 14:17:46 lp-sasha kernel: CPU: 1 PID: 191 Comm: systemd-udevd Not tainted 5.9.0-rc8-next-20201009 #38 Oct 09 14:17:46 lp-sasha kernel: Hardware name: Hewlett-Packard Compaq Presario CQ61 Notebook PC/306A, BIOS F.03 03/23/2009 Oct 09 14:17:46 lp-sasha kernel: RIP: 0010:nouveau_connector_detect_depth+0x71/0xc0 [nouveau] Oct 09 14:17:46 lp-sasha kernel: Code: 0a 00 00 48 8b 49 48 c7 87 b8 00 00 00 06 00 00 00 80 b9 4d 0a 00 00 00 75 1e 83 fa 41 75 05 48 85 c0 75 29 8b 81 10 0d 00 00 <39> 06 7c 25 f6 81 14 0d 00 00 02 75 b7 c3 80 b9 0c 0d 00 00 00 75 Oct 09 14:17:46 lp-sasha kernel: RSP: 0018:ffffc9000028f8c0 EFLAGS: 00010297 Oct 09 14:17:46 lp-sasha kernel: RAX: 0000000000014c08 RBX: ffff8880369d4000 RCX: ffff8880369d3000 Oct 09 14:17:46 lp-sasha kernel: RDX: 0000000000000040 RSI: 0000000000000000 RDI: ffff8880369d4000 Oct 09 14:17:46 lp-sasha kernel: RBP: ffff88800601cc00 R08: ffff8880051da298 R09: ffffffff8226201a Oct 09 14:17:46 lp-sasha kernel: R10: ffff88800469aa80 R11: ffff888004c84ff8 R12: 0000000000000000 Oct 09 14:17:46 lp-sasha kernel: R13: ffff8880051da000 R14: 0000000000002000 R15: 0000000000000003 Oct 09 14:17:46 lp-sasha kernel: FS: 00007fd0192b3440(0000) GS:ffff8880bc900000(0000) knlGS:0000000000000000 Oct 09 14:17:46 lp-sasha kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 Oct 09 14:17:46 lp-sasha kernel: CR2: 0000000000000000 CR3: 0000000004976000 CR4: 00000000000006e0 Oct 09 14:17:46 lp-sasha kernel: Call Trace: Oct 09 14:17:46 lp-sasha kernel: nouveau_connector_get_modes+0x1e6/0x240 [nouveau] Oct 09 14:17:46 lp-sasha kernel: ? kfree+0xb9/0x240 Oct 09 14:17:46 lp-sasha kernel: ? drm_connector_list_iter_next+0x7c/0xa0 Oct 09 14:17:46 lp-sasha kernel: drm_helper_probe_single_connector_modes+0x1ba/0x7c0 Oct 09 14:17:46 lp-sasha kernel: drm_client_modeset_probe+0x27e/0x1360 Oct 09 14:17:46 lp-sasha kernel: ? nvif_object_sclass_put+0xc/0x20 [nouveau] Oct 09 14:17:46 lp-sasha kernel: ? nouveau_cli_init+0x3cc/0x440 [nouveau] Oct 09 14:17:46 lp-sasha kernel: ? ktime_get_mono_fast_ns+0x49/0xa0 Oct 09 14:17:46 lp-sasha kernel: ? nouveau_drm_open+0x4e/0x180 [nouveau] Oct 09 14:17:46 lp-sasha kernel: __drm_fb_helper_initial_config_and_unlock+0x3f/0x4a0 Oct 09 14:17:46 lp-sasha kernel: ? drm_file_alloc+0x18f/0x260 Oct 09 14:17:46 lp-sasha kernel: ? mutex_lock+0x9/0x40 Oct 09 14:17:46 lp-sasha kernel: ? drm_client_init+0x110/0x160 Oct 09 14:17:46 lp-sasha kernel: nouveau_fbcon_init+0x14d/0x1c0 [nouveau] Oct 09 14:17:46 lp-sasha kernel: nouveau_drm_device_init+0x1c0/0x880 [nouveau] Oct 09 14:17:46 lp-sasha kernel: nouveau_drm_probe+0x11a/0x1e0 [nouveau] Oct 09 14:17:46 lp-sasha kernel: pci_device_probe+0xcd/0x140 Oct 09 14:17:46 lp-sasha kernel: really_probe+0xd8/0x400 Oct 09 14:17:46 lp-sasha kernel: driver_probe_device+0x4a/0xa0 Oct 09 14:17:46 lp-sasha kernel: device_driver_attach+0x9c/0xc0 Oct 09 14:17:46 lp-sasha kernel: __driver_attach+0x6f/0x100 Oct 09 14:17:46 lp-sasha kernel: ? device_driver_attach+0xc0/0xc0 Oct 09 14:17:46 lp-sasha kernel: bus_for_each_dev+0x75/0xc0 Oct 09 14:17:46 lp-sasha kernel: bus_add_driver+0x106/0x1c0 Oct 09 14:17:46 lp-sasha kernel: driver_register+0x86/0xe0 Oct 09 14:17:46 lp-sasha kernel: ? 0xffffffffa044e000 Oct 09 14:17:46 lp-sasha kernel: do_one_initcall+0x48/0x1e0 Oct 09 14:17:46 lp-sasha kernel: ? _cond_resched+0x11/0x60 Oct 09 14:17:46 lp-sasha kernel: ? kmem_cache_alloc_trace+0x19c/0x1e0 Oct 09 14:17:46 lp-sasha kernel: do_init_module+0x57/0x220 Oct 09 14:17:46 lp-sasha kernel: __do_sys_finit_module+0xa0/0xe0 Oct 09 14:17:46 lp-sasha kernel: do_syscall_64+0x33/0x40 Oct 09 14:17:46 lp-sasha kernel: entry_SYSCALL_64_after_hwframe+0x44/0xa9 Oct 09 14:17:46 lp-sasha kernel: RIP: 0033:0x7fd01a060d5d Oct 09 14:17:46 lp-sasha kernel: Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d e3 70 0c 00 f7 d8 64 89 01 48 Oct 09 14:17:46 lp-sasha kernel: RSP: 002b:00007ffc8ad38a98 EFLAGS: 00000246 ORIG_RAX: 0000000000000139 Oct 09 14:17:46 lp-sasha kernel: RAX: ffffffffffffffda RBX: 0000563f6e7fd530 RCX: 00007fd01a060d5d Oct 09 14:17:46 lp-sasha kernel: RDX: 0000000000000000 RSI: 00007fd01a19f95d RDI: 000000000000000f Oct 09 14:17:46 lp-sasha kernel: RBP: 0000000000020000 R08: 0000000000000000 R09: 0000000000000007 Oct 09 14:17:46 lp-sasha kernel: R10: 000000000000000f R11: 0000000000000246 R12: 00007fd01a19f95d Oct 09 14:17:46 lp-sasha kernel: R13: 0000000000000000 R14: 0000563f6e7fbc10 R15: 0000563f6e7fd530 Oct 09 14:17:46 lp-sasha kernel: Modules linked in: nouveau(+) ttm xt_string xt_mark xt_LOG vgem v4l2_dv_timings uvcvideo ulpi udf ts_kmp ts_fsm ts_bm snd_aloop sil164 qat_dh895xccvf nf_nat_sip nf_nat_irc nf_nat_ftp nf_nat nf_log_ipv6 nf_log_ipv4 nf_log_common ltc2990 lcd intel_qat input_leds i2c_mux gspca_main videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev mc drivetemp cuse fuse crc_itu_t coretemp ch7006 ath5k ath algif_hash Oct 09 14:17:46 lp-sasha kernel: CR2: 0000000000000000 Oct 09 14:17:46 lp-sasha kernel: ---[ end trace 0ddafe218ad30017 ]--- Oct 09 14:17:46 lp-sasha kernel: RIP: 0010:nouveau_connector_detect_depth+0x71/0xc0 [nouveau] Oct 09 14:17:46 lp-sasha kernel: Code: 0a 00 00 48 8b 49 48 c7 87 b8 00 00 00 06 00 00 00 80 b9 4d 0a 00 00 00 75 1e 83 fa 41 75 05 48 85 c0 75 29 8b 81 10 0d 00 00 <39> 06 7c 25 f6 81 14 0d 00 00 02 75 b7 c3 80 b9 0c 0d 00 00 00 75 Oct 09 14:17:46 lp-sasha kernel: RSP: 0018:ffffc9000028f8c0 EFLAGS: 00010297 Oct 09 14:17:46 lp-sasha kernel: RAX: 0000000000014c08 RBX: ffff8880369d4000 RCX: ffff8880369d3000 Oct 09 14:17:46 lp-sasha kernel: RDX: 0000000000000040 RSI: 0000000000000000 RDI: ffff8880369d4000 Oct 09 14:17:46 lp-sasha kernel: RBP: ffff88800601cc00 R08: ffff8880051da298 R09: ffffffff8226201a Oct 09 14:17:46 lp-sasha kernel: R10: ffff88800469aa80 R11: ffff888004c84ff8 R12: 0000000000000000 Oct 09 14:17:46 lp-sasha kernel: R13: ffff8880051da000 R14: 0000000000002000 R15: 0000000000000003 Oct 09 14:17:46 lp-sasha kernel: FS: 00007fd0192b3440(0000) GS:ffff8880bc900000(0000) knlGS:0000000000000000 Oct 09 14:17:46 lp-sasha kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 Oct 09 14:17:46 lp-sasha kernel: CR2: 0000000000000000 CR3: 0000000004976000 CR4: 00000000000006e0
The disassembly:
Code: 0a 00 00 48 8b 49 48 c7 87 b8 00 00 00 06 00 00 00 80 b9 4d 0a 00 00 00 75 1e 83 fa 41 75 05 48 85 c0 75 29 8b 81 10 0d 00 00 <39> 06 7c 25 f6 81 14 0d 00 00 02 75 b7 c3 80 b9 0c 0d 00 00 00 75 All code ======== 0: 0a 00 or (%rax),%al 2: 00 48 8b add %cl,-0x75(%rax) 5: 49 rex.WB 6: 48 c7 87 b8 00 00 00 movq $0x6,0xb8(%rdi) d: 06 00 00 00 11: 80 b9 4d 0a 00 00 00 cmpb $0x0,0xa4d(%rcx) 18: 75 1e jne 0x38 1a: 83 fa 41 cmp $0x41,%edx 1d: 75 05 jne 0x24 1f: 48 85 c0 test %rax,%rax 22: 75 29 jne 0x4d 24: 8b 81 10 0d 00 00 mov 0xd10(%rcx),%eax 2a:* 39 06 cmp %eax,(%rsi) <-- trapping instruction 2c: 7c 25 jl 0x53 2e: f6 81 14 0d 00 00 02 testb $0x2,0xd14(%rcx) 35: 75 b7 jne 0xffffffffffffffee 37: c3 retq 38: 80 b9 0c 0d 00 00 00 cmpb $0x0,0xd0c(%rcx) 3f: 75 .byte 0x75
Code starting with the faulting instruction
===========================================
0: 39 06 cmp %eax,(%rsi) 2: 7c 25 jl 0x29 4: f6 81 14 0d 00 00 02 testb $0x2,0xd14(%rcx) b: 75 b7 jne 0xffffffffffffffc4 d: c3 retq e: 80 b9 0c 0d 00 00 00 cmpb $0x0,0xd0c(%rcx) 15: 75 .byte 0x75
objdump -SF --disassemble=nouveau_connector_detect_depth [...]
if (nv_connector->edid &&
c85e1: 83 fa 41 cmp $0x41,%edx
c85e4: 75 05 jne c85eb <nouveau_connector_detect_depth+0x6b> (File Offset: 0xc866b)
c85e6: 48 85 c0 test %rax,%rax
c85e9: 75 29 jne c8614 <nouveau_connector_detect_depth+0x94> (File Offset: 0xc8694)
nv_connector->type == DCB_CONNECTOR_LVDS_SPWG)
duallink = ((u8 *)nv_connector->edid)[121] == 2;
else
duallink = mode->clock >= bios->fp.duallink_transition_clk;
if ((!duallink && (bios->fp.strapless_is_24bit & 1)) ||
c85eb: 8b 81 10 0d 00 00 mov 0xd10(%rcx),%eax
c85f1: 39 06 cmp %eax,(%rsi)
c85f3: 7c 25 jl c861a <nouveau_connector_detect_depth+0x9a> (File Offset: 0xc869a)
( duallink && (bios->fp.strapless_is_24bit & 2)))
c85f5: f6 81 14 0d 00 00 02 testb $0x2,0xd14(%rcx)
c85fc: 75 b7 jne c85b5 <nouveau_connector_detect_depth+0x35> (File Offset: 0xc8635)
connector->display_info.bpc = 8;[...]
% scripts/faddr2line /lib/modules/5.9.0-rc8-next-20201009/kernel/drivers/gpu/drm/nouveau/nouveau.ko nouveau_connector_detect_depth+0x71/0xc0 nouveau_connector_detect_depth+0x71/0xc0:nouveau_connector_detect_depth at /home/sasha/linux-next/drivers/gpu/drm/nouveau/nouveau_connector.c:891
It is actually line 889. See the disassembly below.
889 duallink = mode->clock >= bios->fp.duallink_transition_clk;
The NULL pointer being dereferenced is mode.
Git bisect has identified the following commit as bad:f28e32d3906e drm/nouveau/kms: Don't change EDID when it hasn't actually changed
Here is the chain of events that causes the oops.
On entry to nouveau_connector_detect_lvds, edid is set to NULL. The call to nouveau_connector_detect sets nv_connector->edid to valid memory, with status set to connector_status_connected and the flow of execution branching to the out label.
The subsequent call to nouveau_connector_set_edid erronously clears nv_connector->edid, via the local edid pointer which remains set to NULL.
Fix this by setting edid to the value of the just acquired nv_connector->edid and executing the body of nouveau_connector_set_edid only if nv_connector->edid and edid point to different memory addresses thus preventing nv_connector->edid from being turned into a dangling pointer.
--- drivers/gpu/drm/nouveau/nouveau_connector.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
drivers/gpu/drm/nouveau/nouveau_connector.c +9 -5
@@ -542,11 +542,13 @@ static void nouveau_connector_set_edid(struct nouveau_connector *nv_connector, struct edid *edid) { - struct edid *old_edid = nv_connector->edid; +if (nv_connector->edid != edid) { +struct edid *old_edid = nv_connector->edid; -drm_connector_update_edid_property (&nv_connector->base, edid); -kfree (old_edid); - nv_connector->edid = edid; +drm_connector_update_edid_property (&nv_connector->base, edid); +kfree (old_edid); + nv_connector->edid = edid; + } } static enum drm_connector_status
@@ -678,8 +680,10 @@ nouveau_connector_detect_lvds(struct drm/* Try retrieving EDID via DDC */ if (!drm->vbios.fp_no_ddc) { status =nouveau_connector_detect (connector, force); -if (status == connector_status_connected) +if (status == connector_status_connected) { + edid = nv_connector->edid; goto out; + } }/* On some laptops (Sony, i'm looking at you) there appears to
Greg Kroah-Hartman
maintainerPATCH 64/64 mmc: block: ensure error propagation for non-blk
In reply to Greg Kroah-HartmanFrom: Christian Loehle <[email protected]>
commit 003fb0a51162d940f25fc35e70b0996a12c9e08a upstream.
Requests to the mmc layer usually come through a block device IO. The exceptions are the ioctl interface, RPMB chardev ioctl and debugfs, which issue their own blk_mq requests through blk_execute_rq and do not query the BLK_STS error but the mmcblk-internal drv_op_result. This patch ensures that drv_op_result defaults to an error and has to be overwritten by the operation to be considered successful.
The behavior leads to a bug where the request never propagates the error, e.g. by directly erroring out at mmc_blk_mq_issue_rq if mmc_blk_part_switch fails. The ioctl caller of the rpmb chardev then can never see an error (BLK_STS_IOERR, but drv_op_result is unchanged) and thus may assume that their call executed successfully when it did not.
While always checking the blk_execute_rq return value would be advised, let's eliminate the error by always setting drv_op_result as -EIO to be overwritten on success (or other error)
--- drivers/mmc/core/block.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/mmc/core/block.c +5 -0
@@ -249,6 +249,7 @@ static ssize_t power_ro_lock_store(struc goto out_put; }req_to_mmc_queue_req (req)->drv_op =MMC_DRV_OP_BOOT_WP ; +req_to_mmc_queue_req (req)->drv_op_result = -EIO ;blk_execute_rq (mq->queue,NULL , req,0 ); ret =req_to_mmc_queue_req (req)->drv_op_result;blk_put_request (req);
@@ -688,6 +689,7 @@ static int mmc_blk_ioctl_cmd(struct mmc_ idatas[0 ] = idata;req_to_mmc_queue_req (req)->drv_op = rpmb ?MMC_DRV_OP_IOCTL_RPMB :MMC_DRV_OP_IOCTL ; +req_to_mmc_queue_req (req)->drv_op_result = -EIO ;req_to_mmc_queue_req (req)->drv_op_data = idatas;req_to_mmc_queue_req (req)->ioc_count =1 ;blk_execute_rq (mq->queue,NULL , req,0 );
@@ -757,6 +759,7 @@ static int mmc_blk_ioctl_multi_cmd(struc }req_to_mmc_queue_req (req)->drv_op = rpmb ?MMC_DRV_OP_IOCTL_RPMB :MMC_DRV_OP_IOCTL ; +req_to_mmc_queue_req (req)->drv_op_result = -EIO ;req_to_mmc_queue_req (req)->drv_op_data = idata;req_to_mmc_queue_req (req)->ioc_count = num_of_cmds;blk_execute_rq (mq->queue,NULL , req,0 );
@@ -2738,6 +2741,7 @@ static int mmc_dbg_card_status_get(voidif (IS_ERR (req))return PTR_ERR (req);req_to_mmc_queue_req (req)->drv_op =MMC_DRV_OP_GET_CARD_STATUS ; +req_to_mmc_queue_req (req)->drv_op_result = -EIO ;blk_execute_rq (mq->queue,NULL , req,0 ); ret =req_to_mmc_queue_req (req)->drv_op_result;if (ret >=0 ) {
@@ -2776,6 +2780,7 @@ static int mmc_ext_csd_open(struct inode goto out_free; }req_to_mmc_queue_req (req)->drv_op =MMC_DRV_OP_GET_EXT_CSD ; +req_to_mmc_queue_req (req)->drv_op_result = -EIO ;req_to_mmc_queue_req (req)->drv_op_data = &ext_csd;blk_execute_rq (mq->queue,NULL , req,0 ); err =req_to_mmc_queue_req (req)->drv_op_result;
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.248 release. There are 64 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, 21 Jun 2023 10:21:12 +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.4.248-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels, build tested on BMIPS_GENERIC:
Signature · 1 line
Florian
Hello Greg,
Quoted 10 lines
From: Greg Kroah-Hartman <[email protected]>
Sent: Monday, June 19, 2023 11:30 AMThis is the start of the stable review cycle for the 5.4.248 release. There are 64 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, 21 Jun 2023 10:21:12 +0000. Anything received after that time might be too late.
Thank you for the release!
CIP configurations built and booted okay with Linux 5.4.248-rc1 (d4a1c8c10fcd):
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/pipelines/904359302
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/commits/linux-5.4.y
Kind regards, Chris
Hi Greg,
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.248 release. There are 64 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, 21 Jun 2023 10:21:12 +0000. Anything received after that time might be too late.
No problems seen on x86_64 and aarch64.
Thanks,
Harshit
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.4.248-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.248 release. There are 64 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, 21 Jun 2023 10:21:12 +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.4.248-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.4:
10 builds: 10 pass, 0 fail
26 boots: 26 pass, 0 fail
59 tests: 59 pass, 0 failLinux version: 5.4.248-rc1-gd4a1c8c10fcd
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra20-ventana,
tegra210-p2371-2180, tegra210-p3450-0000,
tegra30-cardhu-a04Jon
Hi Greg,
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.248 release. There are 64 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.
Build test (gcc version 11.3.1 20230511):
mips: 65 configs -> 3 failures
arm: 106 configs -> no failure
arm64: 2 configs -> no failurex86_64: 4 configs -> no failure
alpha allmodconfig -> no failure
powerpc allmodconfig -> no failure
riscv allmodconfig -> no failure
s390 allmodconfig -> no failure
xtensa allmodconfig -> no failure
Note:
mips db1xxx_defconfig, gpr_defconfig and mtx1_defconfig failed to build with:
arch/mips/alchemy/common/dbdma.c:33:10: fatal error: linux/dma-map-ops.h: No such file or directory
33 | #include <linux/dma-map-ops.h> /* for dma_default_coherent */
| ^~~~~~~~~~~~~~~~~~~~~
Boot test:x86_64: Booted on my test laptop. No regression.x86_64: Booted on qemu. No regression. [1]
[1]. https://openqa.qa.codethink.co.uk/tests/4066
Signature · 2 lines
Regards Sudip
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.248 release. There are 64 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, 21 Jun 2023 10:21:12 +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.4.248-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.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.4.248-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-5.4.y
* git commit: d4a1c8c10fcdfa1193f2b8a5a632ee5918e74a55
* git describe: v5.4.247-65-gd4a1c8c10fcd
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-5.4.y/build/v5.4.247-65-gd4a1c8c10fcd
## Test Regressions (compared to v5.4.246)
## Metric Regressions (compared to v5.4.246)
## Test Fixes (compared to v5.4.246)
## Metric Fixes (compared to v5.4.246)
## Test result summary
total: 135818, pass: 111037, fail: 3470, skip: 21217, xfail: 94
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 148 total, 129 passed, 19 failed
* arm64: 48 total, 44 passed, 4 failed
* i386: 30 total, 22 passed, 8 failed
* mips: 30 total, 29 passed, 1 failed
* parisc: 4 total, 4 passed, 0 failed
* powerpc: 33 total, 32 passed, 1 failed
* riscv: 15 total, 14 passed, 1 failed
* s390: 8 total, 8 passed, 0 failed
* sh: 14 total, 12 passed, 2 failed
* sparc: 8 total, 8 passed, 0 failed
* x86_64: 41 total, 39 passed, 2 failed
## Test suites summary
* boot
* fwts
* igt-gpu-tools
* kselftest-android
* kselftest-arm64
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers-dma-buf
* kselftest-efivarfs
* kselftest-exec
* kselftest-filesystems
* kselftest-filesystems-binderfs
* kselftest-firmware
* kselftest-fpu
* kselftest-ftrace
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-kvm
* kselftest-lib
* kselftest-livepatch
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-net-forwarding
* kselftest-net-mptcp
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-sigaltstack
* kselftest-size
* kselftest-tc-testing
* kselftest-timens
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-user_events
* kselftest-vDSO
* kselftest-watchdog
* kselftest-x86
* kselftest-zram
* kunit
* kvm-unit-tests
* libhugetlbfs
* log-parser-boot
* log-parser-test
* ltp-cap_bounds
* ltp-commands
* ltp-containers
* ltp-controllers
* ltp-cpuhotplug
* ltp-crypto
* ltp-cve
* ltp-dio
* ltp-fcntl-locktests
* ltp-filecaps
* ltp-fs
* ltp-fs_bind
* ltp-fs_perms_simple
* ltp-fsx
* ltp-hugetlb
* ltp-io
* ltp-ipc
* ltp-math
* ltp-mm
* ltp-nptl
* ltp-pty
* ltp-sched
* ltp-securebits
* ltp-smoke
* ltp-syscalls
* ltp-tracing
* network-basic-tests
* perf
* rcutorture
* v4l2-compliance
* vdso
--
Linaro LKFT
https://lkft.linaro.org
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.248 release. There are 64 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, 21 Jun 2023 10:21:12 +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.4.248-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.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.4.248 release. There are 64 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, 21 Jun 2023 10:21:12 +0000. Anything received after that time might be too late.
Build results:
total: 159 pass: 159 fail: 0 Qemu test results: total: 450 pass: 450 fail: 0
Guenter