4.9.334-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 4.9.334-rc1 review
This is the start of the stable review cycle for the 4.9.334 release. There are 76 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 Fri, 25 Nov 2022 08:45:20 +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/v4.x/stable-review/patch-4.9.334-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-4.9.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.9.334-rc1
Hawkins Jiawei <[email protected]>
ntfs: check overflow when iterating ATTR_RECORDs
Hawkins Jiawei <[email protected]>
ntfs: fix out-of-bounds read in ntfs_attr_find()
Hawkins Jiawei <[email protected]>
ntfs: fix use-after-free in ntfs_attr_find()
Alexander Potapenko <[email protected]>
mm: fs: initialize fsdata passed to write_begin/write_end interface
Tetsuo Handa <[email protected]>
9p/trans_fd: always use O_NONBLOCK read/write
Andreas Gruenbacher <[email protected]>
gfs2: Switch from strlcpy to strscpy
Andrew Price <[email protected]>
gfs2: Check sb_bsize_shift after reading superblock
Dominique Martinet <[email protected]>
9p: trans_fd/p9_conn_cancel: drop client lock earlier
Eric Dumazet <[email protected]>
kcm: avoid potential race in kcm_tx_work
Eric Dumazet <[email protected]>
tcp: cdg: allow tcp_cdg_release() to be called multiple times
Ilpo Järvinen <[email protected]>
serial: 8250: Flush DMA Rx on RLSI
Ryusuke Konishi <[email protected]>
nilfs2: fix use-after-free bug of ns_writer on remount
Alexander Potapenko <[email protected]>
misc/vmw_vmci: fix an infoleak in vmci_host_do_receive_datagram()
Yann Gautier <[email protected]>
mmc: core: properly select voltage range without power cycle
Ilpo Järvinen <[email protected]>
serial: 8250_lpss: Configure DMA also w/o DMA filter
Ilpo Järvinen <[email protected]>
serial: 8250: Fall back to non-DMA Rx if IIR_RDI occurs
Mikulas Patocka <[email protected]>
dm ioctl: fix misbehavior if list_versions races with module loading
Mitja Spes <[email protected]>
iio: pressure: ms5611: changed hardcoded SPI speed to value limited
Yang Yingliang <[email protected]>
iio: trigger: sysfs: fix possible memory leak in iio_sysfs_trig_init()
Yang Yingliang <[email protected]>
iio: adc: at91_adc: fix possible memory leak in at91_adc_allocate_trigger()
Duoming Zhou <[email protected]>
usb: chipidea: fix deadlock in ci_otg_del_timer
Nicolas Dumazet <[email protected]>
usb: add NO_LPM quirk for Realforce 87U Keyboard
Reinhard Speyerer <[email protected]>
USB: serial: option: add Fibocom FM160 0x0111 composition
Davide Tronchin <[email protected]>
USB: serial: option: add u-blox LARA-L6 modem
Davide Tronchin <[email protected]>
USB: serial: option: add u-blox LARA-R6 00B modem
Davide Tronchin <[email protected]>
USB: serial: option: remove old LARA-R6 PID
Benoît Monin <[email protected]>
USB: serial: option: add Sierra Wireless EM9191
Takashi Iwai <[email protected]>
ALSA: usb-audio: Drop snd_BUG_ON() from snd_usbmidi_output_open()
Daniil Tatianin <[email protected]>
ring_buffer: Do not deactivate non-existant pages
Wang Wensheng <[email protected]>
ftrace: Optimize the allocation for mcount entries
Wang Wensheng <[email protected]>
ftrace: Fix the possible incorrect kernel message
Zhang Xiaoxu <[email protected]>
cifs: Fix wrong return value checking when GETFLAGS
Wei Yongjun <[email protected]>
net/x25: Fix skb leak in x25_lapb_receive_frame()
Yang Yingliang <[email protected]>
xen/pcpu: fix possible memory leak in register_pcpu()
Zhengchao Shao <[email protected]>
net: caif: fix double disconnect client in chnl_net_open()
Wang ShaoBo <[email protected]>
mISDN: fix misuse of put_device() in mISDN_register_device()
Yang Yingliang <[email protected]>
mISDN: fix possible memory leak in mISDN_dsp_element_register()
Zeng Heng <[email protected]>
pinctrl: devicetree: fix null pointer dereferencing in pinctrl_dt_to_map
Maciej W. Rozycki <[email protected]>
parport_pc: Avoid FIFO port location truncation
Chen Zhongjin <[email protected]>
ASoC: soc-utils: Remove __exit for snd_soc_util_exit()
Duoming Zhou <[email protected]>
tty: n_gsm: fix sleep-in-atomic-context bug in gsm_control_send
Tony Lindgren <[email protected]>
serial: 8250: omap: Flush PM QOS work on remove
Matthias Schiffer <[email protected]>
serial: 8250_omap: remove wait loop from Errata i202 workaround
Chen Zhongjin <[email protected]>
ASoC: core: Fix use-after-free in snd_soc_exit()
Luiz Augusto von Dentz <[email protected]>
Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm
Nathan Huckleberry <[email protected]>
drm/imx: imx-tve: Fix return type of imx_tve_connector_mode_valid
Alexandre Belloni <[email protected]>
rtc: cmos: fix build on non-ACPI platforms
Borislav Petkov <[email protected]>
x86/cpu: Restore AMD's DE_CFG MSR after resume
Tudor Ambarus <[email protected]>
dmaengine: at_hdmac: Check return code of dma_async_device_register
Tudor Ambarus <[email protected]>
dmaengine: at_hdmac: Fix impossible condition
Tudor Ambarus <[email protected]>
dmaengine: at_hdmac: Don't allow CPU to reorder channel enable
Tudor Ambarus <[email protected]>
dmaengine: at_hdmac: Fix completion of unissued descriptor in case of errors
Tudor Ambarus <[email protected]>
dmaengine: at_hdmac: Don't start transactions at tx_submit level
Tudor Ambarus <[email protected]>
dmaengine: at_hdmac: Fix at_lli struct definition
Linus Torvalds <[email protected]>
cert host tools: Stop complaining about deprecated OpenSSL functions
ZhangPeng <[email protected]>
udf: Fix a slab-out-of-bounds write bug in udf_find_entry()
Zhang Xiaoxu <[email protected]>
btrfs: selftests: fix wrong error check in btrfs_free_dummy_root()
Jorge Lopez <[email protected]>
platform/x86: hp_wmi: Fix rfkill causing soft blocked wifi
Ryusuke Konishi <[email protected]>
nilfs2: fix deadlock in nilfs_count_free_blocks()
Takashi Iwai <[email protected]>
ALSA: usb-audio: Add quirk entry for M-Audio Micro
Ye Bin <[email protected]>
ALSA: hda: fix potential memleak in 'add_widget_node'
Chuang Wang <[email protected]>
net: macvlan: fix memory leaks of macvlan_common_newlink
Zhengchao Shao <[email protected]>
net: mv643xx_eth: disable napi when init rxq or txq failed in mv643xx_eth_open()
Zhengchao Shao <[email protected]>
ethernet: s2io: disable napi when start nic failed in s2io_card_up()
Zhengchao Shao <[email protected]>
net: cxgb3_main: disable napi when bind qsets failed in cxgb_up()
Zhengchao Shao <[email protected]>
drivers: net: xgene: disable napi when register irq failed in xgene_enet_open()
Christophe JAILLET <[email protected]>
dmaengine: mv_xor_v2: Fix a resource leak in mv_xor_v2_remove()
Xin Long <[email protected]>
tipc: fix the msg->req tlv len check in tipc_nl_compat_name_table_dump_header
Alexander Potapenko <[email protected]>
ipv6: addrlabel: fix infoleak when sending struct ifaddrlblmsg to network
Zhengchao Shao <[email protected]>
hamradio: fix issue of dev reference count leakage in bpq_device_event()
Zhengchao Shao <[email protected]>
net: lapbether: fix issue of dev reference count leakage in lapbeth_device_event()
Gaosheng Cui <[email protected]>
capabilities: fix undefined behavior in bit shift for CAP_TO_MASK
Sean Anderson <[email protected]>
net: fman: Unregister ethernet device on removal
Alex Barba <[email protected]>
bnxt_en: fix potentially incorrect return value for ndo_rx_flow_steer
Jiri Benc <[email protected]>
net: gso: fix panic on frag_list with mixed head alloc types
Yang Yingliang <[email protected]>
HID: hyperv: fix possible memory leak in mousevsc_probe()
-------------
Diffstat:
Makefile | 4 +-- arch/x86/include/asm/msr-index.h | 8 ++++-- arch/x86/kernel/cpu/amd.c | 10 +++---- arch/x86/kvm/svm.c | 10 +++---- arch/x86/kvm/x86.c | 2 +- arch/x86/power/cpu.c | 1 + drivers/dma/at_hdmac.c | 34 ++++++++++------------ drivers/dma/at_hdmac_regs.h | 10 +++---- drivers/dma/mv_xor_v2.c | 1 + drivers/gpu/drm/imx/imx-tve.c | 5 ++-- drivers/hid/hid-hyperv.c | 2 +- drivers/iio/adc/at91_adc.c | 4 ++- drivers/iio/pressure/ms5611_spi.c | 2 +- drivers/iio/trigger/iio-trig-sysfs.c | 6 +++- drivers/isdn/mISDN/core.c | 2 +- drivers/isdn/mISDN/dsp_pipeline.c | 3 +- drivers/md/dm-ioctl.c | 4 +-- drivers/misc/vmw_vmci/vmci_queue_pair.c | 2 ++ drivers/mmc/core/core.c | 8 +++++- drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 4 ++- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +- drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 1 + drivers/net/ethernet/freescale/fman/mac.c | 9 ++++++ drivers/net/ethernet/marvell/mv643xx_eth.c | 1 + drivers/net/ethernet/neterion/s2io.c | 29 +++++++++++++------ drivers/net/hamradio/bpqether.c | 2 +- drivers/net/macvlan.c | 4 ++- drivers/net/wan/lapbether.c | 2 +- drivers/parport/parport_pc.c | 2 +- drivers/pinctrl/devicetree.c | 2 ++ drivers/platform/x86/hp-wmi.c | 12 ++++++-- drivers/rtc/rtc-cmos.c | 3 ++ drivers/tty/n_gsm.c | 2 +- drivers/tty/serial/8250/8250_lpss.c | 15 +++++++--- drivers/tty/serial/8250/8250_omap.c | 18 +----------- drivers/tty/serial/8250/8250_port.c | 7 +++-- drivers/usb/chipidea/otg_fsm.c | 2 ++ drivers/usb/core/quirks.c | 3 ++ drivers/usb/serial/option.c | 19 +++++++++++-- drivers/xen/pcpu.c | 2 +- fs/btrfs/tests/btrfs-tests.c | 2 +- fs/buffer.c | 4 +-- fs/cifs/ioctl.c | 4 +-- fs/gfs2/ops_fstype.c | 11 ++++++-- fs/namei.c | 2 +- fs/nilfs2/segment.c | 15 +++++----- fs/nilfs2/super.c | 2 -- fs/nilfs2/the_nilfs.c | 2 -- fs/ntfs/attrib.c | 28 +++++++++++++++--- fs/ntfs/inode.c | 7 +++++ fs/udf/namei.c | 2 +- include/uapi/linux/capability.h | 2 +- kernel/trace/ftrace.c | 4 +-- kernel/trace/ring_buffer.c | 4 +-- mm/filemap.c | 2 +- net/9p/trans_fd.c | 6 +++- net/bluetooth/l2cap_core.c | 2 +- net/caif/chnl_net.c | 3 -- net/core/skbuff.c | 36 +++++++++++++----------- net/ipv4/tcp_cdg.c | 2 ++ net/ipv6/addrlabel.c | 1 + net/kcm/kcmsock.c | 2 +- net/tipc/netlink_compat.c | 2 +- net/x25/x25_dev.c | 2 +- scripts/extract-cert.c | 7 +++++ scripts/sign-file.c | 7 +++++ sound/hda/hdac_sysfs.c | 4 ++- sound/soc/soc-core.c | 17 +++++++++-- sound/soc/soc-utils.c | 2 +- sound/usb/midi.c | 4 +-- sound/usb/quirks-table.h | 4 +++ 71 files changed, 292 insertions(+), 159 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/76 HID: hyperv: fix possible memory leak in mousevsc_probe()
From: Yang Yingliang <[email protected]>
[ Upstream commit b5bcb94b0954a026bbd671741fdb00e7141f9c91 ]
If hid_add_device() returns error, it should call hid_destroy_device() to free hid_dev which is allocated in hid_allocate_device().
--- drivers/hid/hid-hyperv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hid/hid-hyperv.c +1 -1
@@ -536,7 +536,7 @@ static int mousevsc_probe(struct hv_device *device, ret =hid_add_device (hid_dev);if (ret) - goto probe_err1; + goto probe_err2; ret =hid_parse (hid_dev);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 2/76 net: gso: fix panic on frag_list with mixed head alloc types
In reply to Greg Kroah-HartmanFrom: Jiri Benc <[email protected]>
[ Upstream commit 9e4b7a99a03aefd37ba7bb1f022c8efab5019165 ]
Since commit 3dcbdb134f32 ("net: gso: Fix skb_segment splat when splitting gso_size mangled skb having linear-headed frag_list"), it is allowed to change gso_size of a GRO packet. However, that commit assumes that "checking the first list_skb member suffices; i.e if either of the list_skb members have non head_frag head, then the first one has too".
It turns out this assumption does not hold. We've seen BUG_ON being hit in skb_segment when skbs on the frag_list had differing head_frag with the vmxnet3 driver. This happens because __netdev_alloc_skb and __napi_alloc_skb can return a skb that is page backed or kmalloced depending on the requested size. As the result, the last small skb in the GRO packet can be kmalloced.
There are three different locations where this can be fixed:
(1) We could check head_frag in GRO and not allow GROing skbs with different head_frag. However, that would lead to performance regression on normal forward paths with unmodified gso_size, where !head_frag in the last packet is not a problem.
(2) Set a flag in bpf_skb_net_grow and bpf_skb_net_shrink indicating that NETIF_F_SG is undesirable. That would need to eat a bit in sk_buff. Furthermore, that flag can be unset when all skbs on the frag_list are page backed. To retain good performance, bpf_skb_net_grow/shrink would have to walk the frag_list.
(3) Walk the frag_list in skb_segment when determining whether NETIF_F_SG should be cleared. This of course slows things down.
This patch implements (3). To limit the performance impact in skb_segment, the list is walked only for skbs with SKB_GSO_DODGY set that have gso_size changed. Normal paths thus will not hit it.
We could check only the last skb but since we need to walk the whole list anyway, let's stay on the safe side.
--- net/core/skbuff.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-)
net/core/skbuff.c +19 -17
@@ -3125,23 +3125,25 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb,int pos;int dummy; -if (list_skb && !list_skb->head_frag &&skb_headlen (list_skb) && - (skb_shinfo (head_skb)->gso_type &SKB_GSO_DODGY )) { -/* gso_size is untrusted, and we have a frag_list with a linear -* non head_frag head. -* -* (we assume checking the first list_skb member suffices; -* i.e if either of the list_skb members have non head_frag -* head, then the first one has too). -* -* If head_skb's headlen does not fit requested gso_size, it -* means that the frag_list members do NOT terminate on exact -* gso_size boundaries. Hence we cannot perform skb_frag_t page -* sharing. Therefore we must fallback to copying the frag_list -* skbs; we do so by disabling SG. -*/ -if (mss !=GSO_BY_FRAGS && mss !=skb_headlen (head_skb)) - features &= ~NETIF_F_SG ; +if ((skb_shinfo (head_skb)->gso_type &SKB_GSO_DODGY ) && + mss !=GSO_BY_FRAGS && mss !=skb_headlen (head_skb)) { +struct sk_buff *check_skb; + +for (check_skb = list_skb; check_skb; check_skb = check_skb->next) { +if (skb_headlen (check_skb) && !check_skb->head_frag) { +/* gso_size is untrusted, and we have a frag_list with +* a linear non head_frag item. +* +* If head_skb's headlen does not fit requested gso_size, +* it means that the frag_list members do NOT terminate +* on exact gso_size boundaries. Hence we cannot perform +* skb_frag_t page sharing. Therefore we must fallback to +* copying the frag_list skbs; we do so by disabling SG. +*/ + features &= ~NETIF_F_SG ; +break ; + } + } }__skb_push (head_skb, doffset);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 3/76 bnxt_en: fix potentially incorrect return value for ndo_rx_flow_steer
In reply to Greg Kroah-HartmanFrom: Alex Barba <[email protected]>
[ Upstream commit 02597d39145bb0aa81d04bf39b6a913ce9a9d465 ]
In the bnxt_en driver ndo_rx_flow_steer returns '0' whenever an entry that we are attempting to steer is already found. This is not the correct behavior. The return code should be the value/index that corresponds to the entry. Returning zero all the time causes the RFS records to be incorrect unless entry '0' is the correct one. As flows migrate to different cores this can create entries that are not correct.
--- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/broadcom/bnxt/bnxt.c +1 -1
@@ -6577,8 +6577,8 @@ static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,rcu_read_lock ();hlist_for_each_entry_rcu (fltr, head, hash) {if (bnxt_fltr_match (fltr, new_fltr)) { + rc = fltr->sw_id;rcu_read_unlock (); - rc =0 ; goto err_free; } }
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 4/76 net: fman: Unregister ethernet device on removal
In reply to Greg Kroah-HartmanFrom: Sean Anderson <[email protected]>
[ Upstream commit b7cbc6740bd6ad5d43345a2504f7e4beff0d709f ]
When the mac device gets removed, it leaves behind the ethernet device. This will result in a segfault next time the ethernet device accesses mac_dev. Remove the ethernet device when we get removed to prevent this. This is not completely reversible, since some resources aren't cleaned up properly, but that can be addressed later.
--- drivers/net/ethernet/freescale/fman/mac.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/net/ethernet/freescale/fman/mac.c +9 -0
@@ -953,12 +953,21 @@ static int mac_probe(struct platform_device *_of_dev)return err; } +static int mac_remove (struct platform_device *pdev) +{ +struct mac_device *mac_dev =platform_get_drvdata (pdev); + +platform_device_unregister (mac_dev->priv->eth_dev); +return 0 ; +} +static struct platform_driver mac_driver = { .driver = { .name =KBUILD_MODNAME , .of_match_table = mac_match, }, .probe = mac_probe, + .remove = mac_remove, };builtin_platform_driver (mac_driver);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 5/76 capabilities: fix undefined behavior in bit shift for CAP_TO_MASK
In reply to Greg Kroah-HartmanFrom: Gaosheng Cui <[email protected]>
[ Upstream commit 46653972e3ea64f79e7f8ae3aa41a4d3fdb70a13 ]
Shifting signed 32-bit value by 31 bits is undefined, so changing significant bit to unsigned. The UBSAN warning calltrace like below:
UBSAN: shift-out-of-bounds in security/commoncap.c:1252:2 left shift of 1 by 31 places cannot be represented in type 'int' Call Trace: <TASK> dump_stack_lvl+0x7d/0xa5 dump_stack+0x15/0x1b ubsan_epilogue+0xe/0x4e __ubsan_handle_shift_out_of_bounds+0x1e7/0x20c cap_task_prctl+0x561/0x6f0 security_task_prctl+0x5a/0xb0 __x64_sys_prctl+0x61/0x8f0 do_syscall_64+0x58/0x80 entry_SYSCALL_64_after_hwframe+0x63/0xcd </TASK>
--- include/uapi/linux/capability.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/uapi/linux/capability.h +1 -1
@@ -359,7 +359,7 @@ struct vfs_cap_data {*/ #define CAP_TO_INDEX (x) ((x) >> 5)/* 1 << 5 == bits in __u32 */ -#define CAP_TO_MASK (x) (1 << ((x) & 31))/* mask for indexed __u32 */ +#define CAP_TO_MASK (x) (1U << ((x) & 31))/* mask for indexed __u32 */ #endif /* _UAPI_LINUX_CAPABILITY_H */
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 6/76 net: lapbether: fix issue of dev reference count leakage in lapbeth_device_event()
In reply to Greg Kroah-HartmanFrom: Zhengchao Shao <[email protected]>
[ Upstream commit 531705a765493655472c993627106e19f7e5a6d2 ]
When following tests are performed, it will cause dev reference counting leakage.
a)ip link add bond2 type bond mode balance-rr
b)ip link set bond2 up
c)ifenslave -f bond2 rose1
d)ip link del bond2
When new bond device is created, the default type of the bond device is ether. And the bond device is up, lapbeth_device_event() receives the message and creates a new lapbeth device. In this case, the reference count value of dev is hold once. But after "ifenslave -f bond2 rose1" command is executed, the type of the bond device is changed to rose. When the bond device is unregistered, lapbeth_device_event() will not put the dev reference count.
--- drivers/net/wan/lapbether.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wan/lapbether.c +1 -1
@@ -407,7 +407,7 @@ static int lapbeth_device_event(struct notifier_block *this,if (dev_net (dev) != &init_net)return NOTIFY_DONE ; -if (!dev_is_ethdev (dev)) +if (!dev_is_ethdev (dev) && !lapbeth_get_x25_dev (dev))return NOTIFY_DONE ;switch (event) {
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 7/76 hamradio: fix issue of dev reference count leakage in bpq_device_event()
In reply to Greg Kroah-HartmanFrom: Zhengchao Shao <[email protected]>
[ Upstream commit 85cbaf032d3cd9f595152625eda5d4ecb1d6d78d ]
When following tests are performed, it will cause dev reference counting leakage.
a)ip link add bond2 type bond mode balance-rr
b)ip link set bond2 up
c)ifenslave -f bond2 rose1
d)ip link del bond2
When new bond device is created, the default type of the bond device is ether. And the bond device is up, bpq_device_event() receives the message and creates a new bpq device. In this case, the reference count value of dev is hold once. But after "ifenslave -f bond2 rose1" command is executed, the type of the bond device is changed to rose. When the bond device is unregistered, bpq_device_event() will not put the dev reference count.
--- drivers/net/hamradio/bpqether.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/hamradio/bpqether.c +1 -1
@@ -551,7 +551,7 @@ static int bpq_device_event(struct notifier_block *this,if (!net_eq (dev_net (dev), &init_net))return NOTIFY_DONE ; -if (!dev_is_ethdev (dev)) +if (!dev_is_ethdev (dev) && !bpq_get_ax25_dev (dev))return NOTIFY_DONE ;switch (event) {
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 8/76 ipv6: addrlabel: fix infoleak when sending struct ifaddrlblmsg to network
In reply to Greg Kroah-HartmanFrom: Alexander Potapenko <[email protected]>
[ Upstream commit c23fb2c82267638f9d206cb96bb93e1f93ad7828 ]
When copying a struct ifaddrlblmsg to the network, __ifal_reserved remained uninitialized, resulting in a 1-byte infoleak:
BUG: KMSAN: kernel-network-infoleak in __netdev_start_xmit ./include/linux/netdevice.h:4841 __netdev_start_xmit ./include/linux/netdevice.h:4841 netdev_start_xmit ./include/linux/netdevice.h:4857 xmit_one net/core/dev.c:3590 dev_hard_start_xmit+0x1dc/0x800 net/core/dev.c:3606 __dev_queue_xmit+0x17e8/0x4350 net/core/dev.c:4256 dev_queue_xmit ./include/linux/netdevice.h:3009 __netlink_deliver_tap_skb net/netlink/af_netlink.c:307 __netlink_deliver_tap+0x728/0xad0 net/netlink/af_netlink.c:325 netlink_deliver_tap net/netlink/af_netlink.c:338 __netlink_sendskb net/netlink/af_netlink.c:1263 netlink_sendskb+0x1d9/0x200 net/netlink/af_netlink.c:1272 netlink_unicast+0x56d/0xf50 net/netlink/af_netlink.c:1360 nlmsg_unicast ./include/net/netlink.h:1061 rtnl_unicast+0x5a/0x80 net/core/rtnetlink.c:758 ip6addrlbl_get+0xfad/0x10f0 net/ipv6/addrlabel.c:628 rtnetlink_rcv_msg+0xb33/0x1570 net/core/rtnetlink.c:6082 ... Uninit was created at: slab_post_alloc_hook+0x118/0xb00 mm/slab.h:742 slab_alloc_node mm/slub.c:3398 __kmem_cache_alloc_node+0x4f2/0x930 mm/slub.c:3437 __do_kmalloc_node mm/slab_common.c:954 __kmalloc_node_track_caller+0x117/0x3d0 mm/slab_common.c:975 kmalloc_reserve net/core/skbuff.c:437 __alloc_skb+0x27a/0xab0 net/core/skbuff.c:509 alloc_skb ./include/linux/skbuff.h:1267 nlmsg_new ./include/net/netlink.h:964 ip6addrlbl_get+0x490/0x10f0 net/ipv6/addrlabel.c:608 rtnetlink_rcv_msg+0xb33/0x1570 net/core/rtnetlink.c:6082 netlink_rcv_skb+0x299/0x550 net/netlink/af_netlink.c:2540 rtnetlink_rcv+0x26/0x30 net/core/rtnetlink.c:6109 netlink_unicast_kernel net/netlink/af_netlink.c:1319 netlink_unicast+0x9ab/0xf50 net/netlink/af_netlink.c:1345 netlink_sendmsg+0xebc/0x10f0 net/netlink/af_netlink.c:1921 ...
This patch ensures that the reserved field is always initialized.
--- net/ipv6/addrlabel.c | 1 + 1 file changed, 1 insertion(+)
net/ipv6/addrlabel.c +1 -0
@@ -458,6 +458,7 @@ static void ip6addrlbl_putmsg(struct nlmsghdr *nlh, {struct ifaddrlblmsg *ifal =nlmsg_data (nlh); ifal->ifal_family =AF_INET6 ; + ifal->__ifal_reserved =0 ; ifal->ifal_prefixlen = prefixlen; ifal->ifal_flags =0 ; ifal->ifal_index = ifindex;
Signature · 1 line
2.35.1
syzbot
syzbotRe: [PATCH 4.9 08/76] ipv6: addrlabel: fix infoleak when sending struct ifaddrlblmsg to network
I see the command but can't find the corresponding bug. The email is sent to [email protected] address but the HASH does not correspond to any known bug. Please double check the…
Quoted 73 lines
From: Alexander Potapenko <[email protected]>
[ Upstream commit
c23fb2c82267638f9d206cb96bb93e1f93ad7828]When copying a
struct ifaddrlblmsgto the network,__ifal_reservedremained uninitialized, resulting in a 1-byte infoleak:BUG: KMSAN: kernel-network-infoleak in __netdev_start_xmit ./include/linux/netdevice.h:4841 __netdev_start_xmit ./include/linux/netdevice.h:4841 netdev_start_xmit ./include/linux/netdevice.h:4857 xmit_one net/core/dev.c:3590 dev_hard_start_xmit+0x1dc/0x800 net/core/dev.c:3606 __dev_queue_xmit+0x17e8/0x4350 net/core/dev.c:4256 dev_queue_xmit ./include/linux/netdevice.h:3009 __netlink_deliver_tap_skb net/netlink/af_netlink.c:307 __netlink_deliver_tap+0x728/0xad0 net/netlink/af_netlink.c:325 netlink_deliver_tap net/netlink/af_netlink.c:338 __netlink_sendskb net/netlink/af_netlink.c:1263 netlink_sendskb+0x1d9/0x200 net/netlink/af_netlink.c:1272 netlink_unicast+0x56d/0xf50 net/netlink/af_netlink.c:1360 nlmsg_unicast ./include/net/netlink.h:1061 rtnl_unicast+0x5a/0x80 net/core/rtnetlink.c:758 ip6addrlbl_get+0xfad/0x10f0 net/ipv6/addrlabel.c:628 rtnetlink_rcv_msg+0xb33/0x1570 net/core/rtnetlink.c:6082 ... Uninit was created at: slab_post_alloc_hook+0x118/0xb00 mm/slab.h:742 slab_alloc_node mm/slub.c:3398 __kmem_cache_alloc_node+0x4f2/0x930 mm/slub.c:3437 __do_kmalloc_node mm/slab_common.c:954 __kmalloc_node_track_caller+0x117/0x3d0 mm/slab_common.c:975 kmalloc_reserve net/core/skbuff.c:437 __alloc_skb+0x27a/0xab0 net/core/skbuff.c:509 alloc_skb ./include/linux/skbuff.h:1267 nlmsg_new ./include/net/netlink.h:964 ip6addrlbl_get+0x490/0x10f0 net/ipv6/addrlabel.c:608 rtnetlink_rcv_msg+0xb33/0x1570 net/core/rtnetlink.c:6082 netlink_rcv_skb+0x299/0x550 net/netlink/af_netlink.c:2540 rtnetlink_rcv+0x26/0x30 net/core/rtnetlink.c:6109 netlink_unicast_kernel net/netlink/af_netlink.c:1319 netlink_unicast+0x9ab/0xf50 net/netlink/af_netlink.c:1345 netlink_sendmsg+0xebc/0x10f0 net/netlink/af_netlink.c:1921 ...This patch ensures that the reserved field is always initialized.
Fixes 2a8cc6c89039 ("[IPV6] ADDRCONF: Support RFC3484 configurable address selection policy table.")Signed-off-by Alexander Potapenko <[email protected]>Reviewed-by David Ahern <[email protected]>Signed-off-by David S. Miller <[email protected]>Signed-off-by Sasha Levin <[email protected]>--- net/ipv6/addrlabel.c | 1 + 1 file changed, 1 insertion(+)net/ipv6/addrlabel.c +1
-0@@ -458,6 +458,7 @@ static void ip6addrlbl_putmsg(struct nlmsghdr *nlh, {struct ifaddrlblmsg *ifal =nlmsg_data (nlh); ifal->ifal_family =AF_INET6 ; + ifal->__ifal_reserved =0 ; ifal->ifal_prefixlen = prefixlen; ifal->ifal_flags =0 ; ifal->ifal_index = ifindex;Signature · 1 line
2.35.1
I see the command but can't find the corresponding bug. The email is sent to [email protected] address but the HASH does not correspond to any known bug. Please double check the address.
Greg Kroah-Hartman
maintainerPATCH 9/76 tipc: fix the msg->req tlv len check in tipc_nl_compat_name_table_dump_header
In reply to Greg Kroah-HartmanFrom: Xin Long <[email protected]>
[ Upstream commit 1c075b192fe41030457cd4a5f7dea730412bca40 ]
This is a follow-up for commit 974cb0e3e7c9 ("tipc: fix uninit-value in tipc_nl_compat_name_table_dump") where it should have type casted sizeof(..) to int to work when TLV_GET_DATA_LEN() returns a negative value.
syzbot reported a call trace because of it:
BUG: KMSAN: uninit-value in ... tipc_nl_compat_name_table_dump+0x841/0xea0 net/tipc/netlink_compat.c:934 __tipc_nl_compat_dumpit+0xab2/0x1320 net/tipc/netlink_compat.c:238 tipc_nl_compat_dumpit+0x991/0xb50 net/tipc/netlink_compat.c:321 tipc_nl_compat_recv+0xb6e/0x1640 net/tipc/netlink_compat.c:1324 genl_family_rcv_msg_doit net/netlink/genetlink.c:731 [inline] genl_family_rcv_msg net/netlink/genetlink.c:775 [inline] genl_rcv_msg+0x103f/0x1260 net/netlink/genetlink.c:792 netlink_rcv_skb+0x3a5/0x6c0 net/netlink/af_netlink.c:2501 genl_rcv+0x3c/0x50 net/netlink/genetlink.c:803 netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline] netlink_unicast+0xf3b/0x1270 net/netlink/af_netlink.c:1345 netlink_sendmsg+0x1288/0x1440 net/netlink/af_netlink.c:1921 sock_sendmsg_nosec net/socket.c:714 [inline] sock_sendmsg net/socket.c:734 [inline]
--- net/tipc/netlink_compat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/tipc/netlink_compat.c +1 -1
@@ -856,7 +856,7 @@ static int tipc_nl_compat_name_table_dump_header(struct tipc_nl_compat_msg *msg) }; ntq = (struct tipc_name_table_query *)TLV_DATA (msg->req); -if (TLV_GET_DATA_LEN (msg->req) <sizeof (struct tipc_name_table_query )) +if (TLV_GET_DATA_LEN (msg->req) < (int )sizeof (struct tipc_name_table_query ))return -EINVAL ; depth =ntohl (ntq->depth);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 10/76 dmaengine: mv_xor_v2: Fix a resource leak in mv_xor_v2_remove()
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
[ Upstream commit 081195d17a0c4c636da2b869bd5809d42e8cbb13 ]
A clk_prepare_enable() call in the probe is not balanced by a corresponding clk_disable_unprepare() in the remove function.
Add the missing call.
--- drivers/dma/mv_xor_v2.c | 1 + 1 file changed, 1 insertion(+)
drivers/dma/mv_xor_v2.c +1 -0
@@ -847,6 +847,7 @@ static int mv_xor_v2_remove(struct platform_device *pdev)tasklet_kill (&xor_dev->irq_tasklet);clk_disable_unprepare (xor_dev->clk); +clk_disable_unprepare (xor_dev->reg_clk);return 0 ; }
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 11/76 drivers: net: xgene: disable napi when register irq failed in xgene_enet_open()
In reply to Greg Kroah-HartmanFrom: Zhengchao Shao <[email protected]>
[ Upstream commit ce9e57feeed81d17d5e80ed86f516ff0d39c3867 ]
When failed to register irq in xgene_enet_open() for opening device, napi isn't disabled. When open xgene device next time, it will reports a invalid opcode issue. Fix it. Only be compiled, not be tested.
--- drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/ethernet/apm/xgene/xgene_enet_main.c +3 -1
@@ -805,8 +805,10 @@ static int xgene_enet_open(struct net_device *ndev)xgene_enet_napi_enable (pdata); ret =xgene_enet_register_irq (ndev); -if (ret) +if (ret) { +xgene_enet_napi_disable (pdata);return ret; + }if (ndev->phydev) {phy_start (ndev->phydev);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 12/76 net: cxgb3_main: disable napi when bind qsets failed in cxgb_up()
In reply to Greg Kroah-HartmanFrom: Zhengchao Shao <[email protected]>
[ Upstream commit d75aed1428da787cbe42bc073d76f1354f364d92 ]
When failed to bind qsets in cxgb_up() for opening device, napi isn't disabled. When open cxgb3 device next time, it will trigger a BUG_ON() in napi_enable(). Compile tested only.
--- drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c +1 -0
@@ -1304,6 +1304,7 @@ static int cxgb_up(struct adapter *adap)if (ret <0 ) {CH_ERR (adap,"failed to bind qsets, err %d\n" , ret);t3_intr_disable (adap); +quiesce_rx (adap);free_irq_resources (adap); err = ret; goto out;
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 13/76 ethernet: s2io: disable napi when start nic failed in s2io_card_up()
In reply to Greg Kroah-HartmanFrom: Zhengchao Shao <[email protected]>
[ Upstream commit 0348c1ab980c1d43fb37b758d4b760990c066cb5 ]
When failed to start nic or add interrupt service routine in s2io_card_up() for opening device, napi isn't disabled. When open s2io device next time, it will trigger a BUG_ON()in napi_enable(). Compile tested only.
--- drivers/net/ethernet/neterion/s2io.c | 29 +++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-)
drivers/net/ethernet/neterion/s2io.c +20 -9
@@ -7171,9 +7171,8 @@ static int s2io_card_up(struct s2io_nic *sp)if (ret) {DBG_PRINT (ERR_DBG ,"%s: Out of memory in Open\n" , dev->name); -s2io_reset (sp); -free_rx_buffers (sp); -return -ENOMEM ; + ret = -ENOMEM ; + goto err_fill_buff; }DBG_PRINT (INFO_DBG ,"Buf in ring:%d is %d:\n" , i, ring->rx_bufs_left);
@@ -7211,18 +7210,16 @@ static int s2io_card_up(struct s2io_nic *sp)/* Enable Rx Traffic and interrupts on the NIC */ if (start_nic (sp)) {DBG_PRINT (ERR_DBG ,"%s: Starting NIC failed\n" , dev->name); -s2io_reset (sp); -free_rx_buffers (sp); -return -ENODEV ; + ret = -ENODEV ; + goto err_out; }/* Add interrupt service routine */ if (s2io_add_isr (sp) !=0 ) {if (sp->config.intr_type ==MSI_X )s2io_rem_isr (sp); -s2io_reset (sp); -free_rx_buffers (sp); -return -ENODEV ; + ret = -ENODEV ; + goto err_out; }S2IO_TIMER_CONF (sp->alarm_timer, s2io_alarm_handle, sp, (HZ /2 ));
@@ -7241,6 +7238,20 @@ static int s2io_card_up(struct s2io_nic *sp) }return 0 ; + +err_out: +if (config->napi) { +if (config->intr_type ==MSI_X ) { +for (i =0 ; i < sp->config.rx_ring_num; i++) +napi_disable (&sp->mac_control.rings[i].napi); + }else { +napi_disable (&sp->napi); + } + } +err_fill_buff: +s2io_reset (sp); +free_rx_buffers (sp); +return ret; }/**
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 14/76 net: mv643xx_eth: disable napi when init rxq or txq failed in mv643xx_eth_open()
In reply to Greg Kroah-HartmanFrom: Zhengchao Shao <[email protected]>
[ Upstream commit f111606b63ff2282428ffbac0447c871eb957b6c ]
When failed to init rxq or txq in mv643xx_eth_open() for opening device, napi isn't disabled. When open mv643xx_eth device next time, it will trigger a BUG_ON() in napi_enable(). Compile tested only.
--- drivers/net/ethernet/marvell/mv643xx_eth.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/marvell/mv643xx_eth.c +1 -0
@@ -2491,6 +2491,7 @@ static int mv643xx_eth_open(struct net_device *dev)for (i =0 ; i < mp->rxq_count; i++)rxq_deinit (mp->rxq + i); out: +napi_disable (&mp->napi);free_irq (dev->irq, dev);return err;
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 15/76 net: macvlan: fix memory leaks of macvlan_common_newlink
In reply to Greg Kroah-HartmanFrom: Chuang Wang <[email protected]>
[ Upstream commit 23569b5652ee8e8e55a12f7835f59af6f3cefc30 ]
kmemleak reports memory leaks in macvlan_common_newlink, as follows:
ip link add link eth0 name .. type macvlan mode source macaddr add <MAC-ADDR>
kmemleak reports:
unreferenced object 0xffff8880109bb140 (size 64):
comm "ip", pid 284, jiffies 4294986150 (age 430.108s) hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 b8 aa 5a 12 80 88 ff ff ..........Z.....
80 1b fa 0d 80 88 ff ff 1e ff ac af c7 c1 6b 6b ..............kk
backtrace:
[<ffffffff813e06a7>] kmem_cache_alloc_trace+0x1c7/0x300
[<ffffffff81b66025>] macvlan_hash_add_source+0x45/0xc0
[<ffffffff81b66a67>] macvlan_changelink_sources+0xd7/0x170
[<ffffffff81b6775c>] macvlan_common_newlink+0x38c/0x5a0
[<ffffffff81b6797e>] macvlan_newlink+0xe/0x20
[<ffffffff81d97f8f>] __rtnl_newlink+0x7af/0xa50
[<ffffffff81d98278>] rtnl_newlink+0x48/0x70
...In the scenario where the macvlan mode is configured as 'source', macvlan_changelink_sources() will be execured to reconfigure list of remote source mac addresses, at the same time, if register_netdevice() return an error, the resource generated by macvlan_changelink_sources() is not cleaned up.
Using this patch, in the case of an error, it will execute macvlan_flush_sources() to ensure that the resource is cleaned up.
--- drivers/net/macvlan.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/macvlan.c +3 -1
@@ -1392,8 +1392,10 @@ destroy_macvlan_port:/* the macvlan port may be freed by macvlan_uninit when fail to register. * so we destroy the macvlan port only when it's valid. */ -if (create &&macvlan_port_get_rtnl (lowerdev)) +if (create &&macvlan_port_get_rtnl (lowerdev)) { +macvlan_flush_sources (port, vlan);macvlan_port_destroy (port->dev); + }return err; }EXPORT_SYMBOL_GPL (macvlan_common_newlink);
Greg Kroah-Hartman
maintainerPATCH 16/76 ALSA: hda: fix potential memleak in add_widget_node
In reply to Greg Kroah-HartmanFrom: Ye Bin <[email protected]>
commit 9a5523f72bd2b0d66eef3d58810c6eb7b5ffc143 upstream.
As 'kobject_add' may allocated memory for 'kobject->name' when return error. And in this function, if call 'kobject_add' failed didn't free kobject. So call 'kobject_put' to recycling resources.
--- sound/hda/hdac_sysfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
sound/hda/hdac_sysfs.c +3 -1
@@ -345,8 +345,10 @@ static int add_widget_node(struct kobjecreturn -ENOMEM ;kobject_init (kobj, &widget_ktype); err =kobject_add (kobj, parent,"%02x" , nid); -if (err <0 ) +if (err <0 ) { +kobject_put (kobj);return err; + } err =sysfs_create_group (kobj, group);if (err <0 ) {kobject_put (kobj);
Greg Kroah-Hartman
maintainerPATCH 17/76 ALSA: usb-audio: Add quirk entry for M-Audio Micro
In reply to Greg Kroah-HartmanFrom: Takashi Iwai <[email protected]>
commit 2f01a612d4758b45f775dbb88a49cf534ba47275 upstream.
M-Audio Micro (0762:201a) defines the descriptor as vendor-specific, while the content seems class-compliant. Just overriding the probe makes the device working.
--- sound/usb/quirks-table.h | 4 ++++ 1 file changed, 4 insertions(+)
sound/usb/quirks-table.h +4 -0
@@ -2090,6 +2090,10 @@ YAMAHA_DEVICE(0x7010, "UB99"), } }, { +/* M-Audio Micro */ +USB_DEVICE_VENDOR_SPEC (0x0763 ,0x201a ), +}, +{USB_DEVICE_VENDOR_SPEC (0x0763 ,0x2030 ), .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {/* .vendor_name = "M-Audio", */
Greg Kroah-Hartman
maintainerPATCH 18/76 nilfs2: fix deadlock in nilfs_count_free_blocks()
In reply to Greg Kroah-HartmanFrom: Ryusuke Konishi <[email protected]>
commit 8ac932a4921a96ca52f61935dbba64ea87bbd5dc upstream.
A semaphore deadlock can occur if nilfs_get_block() detects metadata corruption while locating data blocks and a superblock writeback occurs at the same time:
task 1 task 2
------ ------
* A file operation *nilfs_truncate()
nilfs_get_block()
down_read(rwsem A) <--
nilfs_bmap_lookup_contig()
... generic_shutdown_super()
nilfs_put_super()
* Prepare to write superblock *
down_write(rwsem B) <--
nilfs_cleanup_super()
* Detect b-tree corruption * nilfs_set_log_cursor()
nilfs_bmap_convert_error() nilfs_count_free_blocks()
__nilfs_error() down_read(rwsem A) <--
nilfs_set_error()
down_write(rwsem B) <--
*** DEADLOCK ***Here, nilfs_get_block() readlocks rwsem A (= NILFS_MDT(dat_inode)->mi_sem) and then calls nilfs_bmap_lookup_contig(), but if it fails due to metadata corruption, __nilfs_error() is called from nilfs_bmap_convert_error() inside the lock section.
Since __nilfs_error() calls nilfs_set_error() unless the filesystem is read-only and nilfs_set_error() attempts to writelock rwsem B (= nilfs->ns_sem) to write back superblock exclusively, hierarchical lock acquisition occurs in the order rwsem A -> rwsem B.
Now, if another task starts updating the superblock, it may writelock rwsem B during the lock sequence above, and can deadlock trying to readlock rwsem A in nilfs_count_free_blocks().
However, there is actually no need to take rwsem A in nilfs_count_free_blocks() because it, within the lock section, only reads a single integer data on a shared struct with nilfs_sufile_get_ncleansegs(). This has been the case after commit aa474a220180 ("nilfs2: add local variable to cache the number of clean segments"), that is, even before this bug was introduced.
So, this resolves the deadlock problem by just not taking the semaphore in nilfs_count_free_blocks().
--- fs/nilfs2/the_nilfs.c | 2 -- 1 file changed, 2 deletions(-)
fs/nilfs2/the_nilfs.c +0 -2
@@ -704,9 +704,7 @@ int nilfs_count_free_blocks(struct the_n {unsigned long ncleansegs; -down_read (&NILFS_MDT (nilfs->ns_dat)->mi_sem); ncleansegs =nilfs_sufile_get_ncleansegs (nilfs->ns_sufile); -up_read (&NILFS_MDT (nilfs->ns_dat)->mi_sem); *nblocks = (sector_t )ncleansegs * nilfs->ns_blocks_per_segment;return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 19/76 platform/x86: hp_wmi: Fix rfkill causing soft blocked wifi
In reply to Greg Kroah-HartmanFrom: Jorge Lopez <[email protected]>
commit 1598bfa8e1faa932de42e1ee7628a1c4c4263f0a upstream.
After upgrading BIOS to U82 01.02.01 Rev.A, the console is flooded strange char "^@" which printed out every second and makes login nearly impossible. Also the below messages were shown both in console and journal/dmesg every second:
usb 1-3: Device not responding to setup address. usb 1-3: device not accepting address 4, error -71 usb 1-3: device descriptor read/all, error -71 usb usb1-port3: unable to enumerate USB device
Wifi is soft blocked by checking rfkill. When unblocked manually, after few seconds it would be soft blocked again. So I was suspecting something triggered rfkill to soft block wifi. At the end it was fixed by removing hp_wmi module.
The root cause is the way hp-wmi driver handles command 1B on post-2009 BIOS. In pre-2009 BIOS, command 1Bh return 0x4 to indicate that BIOS no longer controls the power for the wireless devices.
--- drivers/platform/x86/hp-wmi.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
drivers/platform/x86/hp-wmi.c +10 -2
@@ -899,8 +899,16 @@ static int __init hp_wmi_bios_setup(stru wwan_rfkill =NULL ; rfkill2_count =0 ; -if (hp_wmi_rfkill_setup (device)) -hp_wmi_rfkill2_setup (device); +/* +* In pre-2009 BIOS, command 1Bh return 0x4 to indicate that +* BIOS no longer controls the power for the wireless +* devices. All features supported by this command will no +* longer be supported. +*/ +if (!hp_wmi_bios_2009_later ()) { +if (hp_wmi_rfkill_setup (device)) +hp_wmi_rfkill2_setup (device); + } err =device_create_file (&device->dev, &dev_attr_display);if (err)
Greg Kroah-Hartman
maintainerPATCH 20/76 btrfs: selftests: fix wrong error check in btrfs_free_dummy_root()
In reply to Greg Kroah-HartmanFrom: Zhang Xiaoxu <[email protected]>
commit 9b2f20344d450137d015b380ff0c2e2a6a170135 upstream.
The btrfs_alloc_dummy_root() uses ERR_PTR as the error return value rather than NULL, if error happened, there will be a NULL pointer dereference:
BUG: KASAN: null-ptr-deref in btrfs_free_dummy_root+0x21/0x50 [btrfs] Read of size 8 at addr 000000000000002c by task insmod/258926 CPU: 2 PID: 258926 Comm: insmod Tainted: G W 6.1.0-rc2+ #5 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-1.fc33 04/01/2014 Call Trace: <TASK> dump_stack_lvl+0x34/0x44 kasan_report+0xb7/0x140 kasan_check_range+0x145/0x1a0 btrfs_free_dummy_root+0x21/0x50 [btrfs] btrfs_test_free_space_cache+0x1a8c/0x1add [btrfs] btrfs_run_sanity_tests+0x65/0x80 [btrfs] init_btrfs_fs+0xec/0x154 [btrfs] do_one_initcall+0x87/0x2a0 do_init_module+0xdf/0x320 load_module+0x3006/0x3390 __do_sys_finit_module+0x113/0x1b0 do_syscall_64+0x35/0x80 entry_SYSCALL_64_after_hwframe+0x46/0xb0
--- fs/btrfs/tests/btrfs-tests.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/btrfs/tests/btrfs-tests.c +1 -1
@@ -183,7 +183,7 @@ void btrfs_free_dummy_fs_info(struct btrvoid btrfs_free_dummy_root (struct btrfs_root *root) { -if (!root) +if (IS_ERR_OR_NULL (root))return ;/* Will be freed by btrfs_free_fs_roots */ if (WARN_ON (test_bit (BTRFS_ROOT_IN_RADIX , &root->state)))
Greg Kroah-Hartman
maintainerPATCH 21/76 udf: Fix a slab-out-of-bounds write bug in udf_find_entry()
In reply to Greg Kroah-HartmanFrom: ZhangPeng <[email protected]>
commit c8af247de385ce49afabc3bf1cf4fd455c94bfe8 upstream.
Syzbot reported a slab-out-of-bounds Write bug:
loop0: detected capacity change from 0 to 2048
==================================================================
BUG: KASAN: slab-out-of-bounds in udf_find_entry+0x8a5/0x14f0 fs/udf/namei.c:253 Write of size 105 at addr ffff8880123ff896 by task syz-executor323/3610 CPU: 0 PID: 3610 Comm: syz-executor323 Not tainted 6.1.0-rc2-syzkaller-00105-gb229b6ca5abb #0 Hardware name: Google Compute Engine/Google Compute Engine, BIOS Google 10/11/2022 Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x1b1/0x28e lib/dump_stack.c:106 print_address_description+0x74/0x340 mm/kasan/report.c:284 print_report+0x107/0x1f0 mm/kasan/report.c:395 kasan_report+0xcd/0x100 mm/kasan/report.c:495 kasan_check_range+0x2a7/0x2e0 mm/kasan/generic.c:189 memcpy+0x3c/0x60 mm/kasan/shadow.c:66 udf_find_entry+0x8a5/0x14f0 fs/udf/namei.c:253 udf_lookup+0xef/0x340 fs/udf/namei.c:309 lookup_open fs/namei.c:3391 [inline] open_last_lookups fs/namei.c:3481 [inline] path_openat+0x10e6/0x2df0 fs/namei.c:3710 do_filp_open+0x264/0x4f0 fs/namei.c:3740 do_sys_openat2+0x124/0x4e0 fs/open.c:1310 do_sys_open fs/open.c:1326 [inline] __do_sys_creat fs/open.c:1402 [inline] __se_sys_creat fs/open.c:1396 [inline] __x64_sys_creat+0x11f/0x160 fs/open.c:1396 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x7ffab0d164d9 Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 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 c7 c1 c0 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffe1a7e6bb8 EFLAGS: 00000246 ORIG_RAX: 0000000000000055
RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007ffab0d164d9
RDX: 00007ffab0d164d9 RSI: 0000000000000000 RDI: 0000000020000180
RBP: 00007ffab0cd5a10 R08: 0000000000000000 R09: 0000000000000000
R10: 00005555573552c0 R11: 0000000000000246 R12: 00007ffab0cd5aa0
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
</TASK> Allocated by task 3610: kasan_save_stack mm/kasan/common.c:45 [inline] kasan_set_track+0x3d/0x60 mm/kasan/common.c:52 ____kasan_kmalloc mm/kasan/common.c:371 [inline] __kasan_kmalloc+0x97/0xb0 mm/kasan/common.c:380 kmalloc include/linux/slab.h:576 [inline] udf_find_entry+0x7b6/0x14f0 fs/udf/namei.c:243 udf_lookup+0xef/0x340 fs/udf/namei.c:309 lookup_open fs/namei.c:3391 [inline] open_last_lookups fs/namei.c:3481 [inline] path_openat+0x10e6/0x2df0 fs/namei.c:3710 do_filp_open+0x264/0x4f0 fs/namei.c:3740 do_sys_openat2+0x124/0x4e0 fs/open.c:1310 do_sys_open fs/open.c:1326 [inline] __do_sys_creat fs/open.c:1402 [inline] __se_sys_creat fs/open.c:1396 [inline] __x64_sys_creat+0x11f/0x160 fs/open.c:1396 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd The buggy address belongs to the object at ffff8880123ff800 which belongs to the cache kmalloc-256 of size 256
The buggy address is located 150 bytes inside of
256-byte region [ffff8880123ff800, ffff8880123ff900)
The buggy address belongs to the physical page:
page:ffffea000048ff80 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x123fe
head:ffffea000048ff80 order:1 compound_mapcount:0 compound_pincount:0
flags: 0xfff00000010200(slab|head|node=0|zone=1|lastcpupid=0x7ff)
raw: 00fff00000010200 ffffea00004b8500 dead000000000003 ffff888012041b40 raw: 0000000000000000 0000000080100010 00000001ffffffff 0000000000000000 page dumped because: kasan: bad access detected page_owner tracks the page as allocated page last allocated via order 0, migratetype Unmovable, gfp_mask 0x0(), pid 1, tgid 1 (swapper/0), ts 1841222404, free_ts 0 create_dummy_stack mm/page_owner.c:67 [inline] register_early_stack+0x77/0xd0 mm/page_owner.c:83 init_page_owner+0x3a/0x731 mm/page_owner.c:93 kernel_init_freeable+0x41c/0x5d5 init/main.c:1629 kernel_init+0x19/0x2b0 init/main.c:1519
page_owner free stack trace missing
Memory state around the buggy address:
ffff8880123ff780: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff8880123ff800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>ffff8880123ff880: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06
^
ffff8880123ff900: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff8880123ff980: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
==================================================================Fix this by changing the memory size allocated for copy_name from UDF_NAME_LEN(254) to UDF_NAME_LEN_CS0(255), because the total length (lfi) of subsequent memcpy can be up to 255.
--- fs/udf/namei.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/udf/namei.c +1 -1
@@ -237,7 +237,7 @@ static struct fileIdentDesc *udf_find_en poffset - lfi); else {if (!copy_name) { - copy_name =kmalloc (UDF_NAME_LEN , + copy_name =kmalloc (UDF_NAME_LEN_CS0 ,GFP_NOFS );if (!copy_name) { fi =ERR_PTR (-ENOMEM );
Greg Kroah-Hartman
maintainerPATCH 22/76 cert host tools: Stop complaining about deprecated OpenSSL functions
In reply to Greg Kroah-HartmanFrom: Linus Torvalds <[email protected]>
commit 6bfb56e93bcef41859c2d5ab234ffd80b691be35 upstream.
OpenSSL 3.0 deprecated the OpenSSL's ENGINE API. That is as may be, but the kernel build host tools still use it. Disable the warning about deprecated declarations until somebody who cares fixes it.
--- scripts/extract-cert.c | 7 +++++++ scripts/sign-file.c | 7 +++++++ 2 files changed, 14 insertions(+)
scripts/extract-cert.c +7 -0
@@ -23,6 +23,13 @@#include <openssl/err.h> #include <openssl/engine.h> +/* +* OpenSSL 3.0 deprecates the OpenSSL's ENGINE API. +* +* Remove this if/when that API is no longer used +*/ +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#define PKEY_ID_PKCS7 2 static __attribute__((noreturn))
scripts/sign-file.c +7 -0
@@ -30,6 +30,13 @@#include <openssl/engine.h> /* +* OpenSSL 3.0 deprecates the OpenSSL's ENGINE API. +* +* Remove this if/when that API is no longer used +*/ +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + +/* * Use CMS if we have openssl-1.0.0 or newer available - otherwise we have to * assume that it's not available and its header file is missing and that we * should use PKCS#7 instead. Switching to the older PKCS#7 format restricts
Greg Kroah-Hartman
maintainerPATCH 23/76 dmaengine: at_hdmac: Fix at_lli struct definition
In reply to Greg Kroah-HartmanFrom: Tudor Ambarus <[email protected]>
commit f1171bbdd2ba2a50ee64bb198a78c268a5baf5f1 upstream.
Those hardware registers are all of 32 bits, while dma_addr_t ca be of type u64 or u32 depending on CONFIG_ARCH_DMA_ADDR_T_64BIT. Force u32 to comply with what the hardware expects.
--- drivers/dma/at_hdmac_regs.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/dma/at_hdmac_regs.h +5 -5
@@ -168,13 +168,13 @@/* LLI == Linked List Item; aka DMA buffer descriptor */ struct at_lli {/* values that are not changed by hardware */ -dma_addr_t saddr; -dma_addr_t daddr; +u32 saddr; +u32 daddr;/* value that may get written back: */ -u32 ctrla; +u32 ctrla;/* more values that are not changed by hardware */ -u32 ctrlb; -dma_addr_t dscr;/* chain to next lli */ +u32 ctrlb; +u32 dscr;/* chain to next lli */ };/**
Greg Kroah-Hartman
maintainerPATCH 24/76 dmaengine: at_hdmac: Dont start transactions at tx_submit level
In reply to Greg Kroah-HartmanFrom: Tudor Ambarus <[email protected]>
commit 7176a6a8982d311e50a7c1168868d26e65bbba19 upstream.
tx_submit is supposed to push the current transaction descriptor to a pending queue, waiting for issue_pending() to be called. issue_pending() must start the transfer, not tx_submit(), thus remove atc_dostart() from atc_tx_submit(). Clients of at_xdmac that assume that tx_submit() starts the transfer must be updated and call dma_async_issue_pending() if they miss to call it.
The vdbg print was moved to after the lock is released. It is desirable to do the prints without the lock held if possible, and because the if statement disappears there's no reason why to do the print while holding the lock.
--- drivers/dma/at_hdmac.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-)
drivers/dma/at_hdmac.c +3 -11
@@ -681,19 +681,11 @@ static dma_cookie_t atc_tx_submit(structspin_lock_irqsave (&atchan->lock, flags); cookie =dma_cookie_assign (tx); -if (list_empty (&atchan->active_list)) { -dev_vdbg (chan2dev (tx->chan),"tx_submit: started %u\n" , - desc->txd.cookie); -atc_dostart (atchan, desc); -list_add_tail (&desc->desc_node, &atchan->active_list); - }else { -dev_vdbg (chan2dev (tx->chan),"tx_submit: queued %u\n" , - desc->txd.cookie); -list_add_tail (&desc->desc_node, &atchan->queue); - } - +list_add_tail (&desc->desc_node, &atchan->queue);spin_unlock_irqrestore (&atchan->lock, flags); +dev_vdbg (chan2dev (tx->chan),"tx_submit: queued %u\n" , + desc->txd.cookie);return cookie; }
Greg Kroah-Hartman
maintainerPATCH 25/76 dmaengine: at_hdmac: Fix completion of unissued descriptor in case of errors
In reply to Greg Kroah-HartmanFrom: Tudor Ambarus <[email protected]>
commit ef2cb4f0ce479f77607b04c4b0414bf32f863ee8 upstream.
In case the controller detected an error, the code took the chance to move all the queued (submitted) descriptors to the active (issued) list. This was wrong as if there were any descriptors in the submitted list they were moved to the issued list without actually issuing them to the controller, thus a completion could be raised without even fireing the descriptor.
--- drivers/dma/at_hdmac.c | 4 ---- 1 file changed, 4 deletions(-)
drivers/dma/at_hdmac.c +0 -4
@@ -557,10 +557,6 @@ static void atc_handle_error(struct at_d bad_desc =atc_first_active (atchan);list_del_init (&bad_desc->desc_node); -/* As we are stopped, take advantage to push queued descriptors -* in active_list */ -list_splice_init (&atchan->queue, atchan->active_list.prev); -/* Try to restart the controller */ if (!list_empty (&atchan->active_list))atc_dostart (atchan,atc_first_active (atchan));
Greg Kroah-Hartman
maintainerPATCH 26/76 dmaengine: at_hdmac: Dont allow CPU to reorder channel enable
In reply to Greg Kroah-HartmanFrom: Tudor Ambarus <[email protected]>
commit 580ee84405c27d6ed419abe4d2b3de1968abdafd upstream.
at_hdmac uses __raw_writel for register writes. In the absence of a barrier, the CPU may reorder the register operations. Introduce a write memory barrier so that the CPU does not reorder the channel enable, thus the start of the transfer, without making sure that all the pre-required register fields are already written.
--- drivers/dma/at_hdmac.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/dma/at_hdmac.c +2 -0
@@ -253,6 +253,8 @@ static void atc_dostart(struct at_dma_ch ATC_SPIP_BOUNDARY(first->boundary));channel_writel (atchan,DPIP ,ATC_DPIP_HOLE (first->dst_hole) |ATC_DPIP_BOUNDARY (first->boundary)); +/* Don't allow CPU to reorder channel enable. */ +wmb ();dma_writel (atdma,CHER , atchan->mask);vdbg_dump_regs (atchan);
Greg Kroah-Hartman
maintainerPATCH 27/76 dmaengine: at_hdmac: Fix impossible condition
In reply to Greg Kroah-HartmanFrom: Tudor Ambarus <[email protected]>
commit 28cbe5a0a46a6637adbda52337d7b2777fc04027 upstream.
The iterator can not be greater than ATC_MAX_DSCR_TRIALS, as the for loop will stop when i == ATC_MAX_DSCR_TRIALS. While here, use the common "i" name for the iterator.
--- drivers/dma/at_hdmac.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/dma/at_hdmac.c +4 -3
@@ -315,7 +315,8 @@ static int atc_get_bytes_left(struct dmastruct at_desc *desc_first =atc_first_active (atchan);struct at_desc *desc;int ret; -u32 ctrla, dscr, trials; +u32 ctrla, dscr; +unsigned int i;/* * If the cookie doesn't match to the currently running transfer then
@@ -385,7 +386,7 @@ static int atc_get_bytes_left(struct dma dscr =channel_readl (atchan,DSCR );rmb ();/* ensure DSCR is read before CTRLA */ ctrla =channel_readl (atchan,CTRLA ); -for (trials =0 ; trials <ATC_MAX_DSCR_TRIALS ; ++trials) { +for (i =0 ; i <ATC_MAX_DSCR_TRIALS ; ++i) {u32 new_dscr;rmb ();/* ensure DSCR is read after CTRLA */
@@ -411,7 +412,7 @@ static int atc_get_bytes_left(struct dmarmb ();/* ensure DSCR is read before CTRLA */ ctrla =channel_readl (atchan,CTRLA ); } -if (unlikely (trials >=ATC_MAX_DSCR_TRIALS )) +if (unlikely (i ==ATC_MAX_DSCR_TRIALS ))return -ETIMEDOUT ;/* for the first descriptor we can be more accurate */
Greg Kroah-Hartman
maintainerPATCH 28/76 dmaengine: at_hdmac: Check return code of dma_async_device_register
In reply to Greg Kroah-HartmanFrom: Tudor Ambarus <[email protected]>
commit c47e6403fa099f200868d6b106701cb42d181d2b upstream.
dma_async_device_register() can fail, check the return code and display an error.
--- drivers/dma/at_hdmac.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/dma/at_hdmac.c +6 -1
@@ -2092,7 +2092,11 @@ static int __init at_dma_probe(struct pldma_has_cap (DMA_SG , atdma->dma_common.cap_mask) ?"sg-cpy " :"" , plat_dat->nr_channels); -dma_async_device_register (&atdma->dma_common); + err =dma_async_device_register (&atdma->dma_common); +if (err) { +dev_err (&pdev->dev,"Unable to register: %d.\n" , err); + goto err_dma_async_device_register; + }/* * Do not return an error if the dmac node is not present in order to
@@ -2112,6 +2116,7 @@ static int __init at_dma_probe(struct pl err_of_dma_controller_register:dma_async_device_unregister (&atdma->dma_common); +err_dma_async_device_register:dma_pool_destroy (atdma->memset_pool); err_memset_pool_create:dma_pool_destroy (atdma->dma_desc_pool);
Greg Kroah-Hartman
maintainerPATCH 29/76 x86/cpu: Restore AMDs DE_CFG MSR after resume
In reply to Greg Kroah-HartmanFrom: Borislav Petkov <[email protected]>
commit 2632daebafd04746b4b96c2f26a6021bc38f6209 upstream.
DE_CFG contains the LFENCE serializing bit, restore it on resume too. This is relevant to older families due to the way how they do S3.
Unify and correct naming while at it.
--- arch/x86/include/asm/msr-index.h | 8 +++++--- arch/x86/kernel/cpu/amd.c | 10 ++++------ arch/x86/kvm/svm.c | 10 +++++----- arch/x86/kvm/x86.c | 2 +- arch/x86/power/cpu.c | 1 + 5 files changed, 16 insertions(+), 15 deletions(-)
arch/x86/include/asm/msr-index.h +5 -3
@@ -364,6 +364,11 @@#define MSR_AMD64_OSVW_STATUS 0xc0010141#define MSR_AMD64_LS_CFG 0xc0011020#define MSR_AMD64_DC_CFG 0xc0011022 + +#define MSR_AMD64_DE_CFG 0xc0011029 +#define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT 1 +#define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE BIT_ULL(MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT) +#define MSR_AMD64_BU_CFG2 0xc001102a#define MSR_AMD64_IBSFETCHCTL 0xc0011030#define MSR_AMD64_IBSFETCHLINAD 0xc0011031
@@ -414,9 +419,6 @@#define FAM10H_MMIO_CONF_BASE_MASK 0xfffffffULL#define FAM10H_MMIO_CONF_BASE_SHIFT 20#define MSR_FAM10H_NODE_ID 0xc001100c -#define MSR_F10H_DECFG 0xc0011029 -#define MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT 1 -#define MSR_F10H_DECFG_LFENCE_SERIALIZE BIT_ULL(MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT)/* K8 MSRs */ #define MSR_K8_TOP_MEM1 0xc001001a
arch/x86/kernel/cpu/amd.c +4 -6
@@ -735,8 +735,6 @@ static void init_amd_gh(struct cpuinfo_xset_cpu_bug (c,X86_BUG_AMD_TLB_MMATCH ); } -#define MSR_AMD64_DE_CFG 0xC0011029 -static void init_amd_ln (struct cpuinfo_x86 *c) {/*
@@ -898,16 +896,16 @@ static void init_amd(struct cpuinfo_x86* msr_set_bit() uses the safe accessors, too, even if the MSR * is not present. */ -msr_set_bit (MSR_F10H_DECFG , -MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT ); +msr_set_bit (MSR_AMD64_DE_CFG , +MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT );/* * Verify that the MSR write was successful (could be running * under a hypervisor) and only then assume that LFENCE is * serializing. */ - ret =rdmsrl_safe (MSR_F10H_DECFG , &val); -if (!ret && (val &MSR_F10H_DECFG_LFENCE_SERIALIZE )) { + ret =rdmsrl_safe (MSR_AMD64_DE_CFG , &val); +if (!ret && (val &MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT )) {/* A serializing LFENCE stops RDTSC speculation */ set_cpu_cap (c,X86_FEATURE_LFENCE_RDTSC ); }else {
arch/x86/kvm/svm.c +5 -5
@@ -3528,9 +3528,9 @@ static int svm_get_msr_feature(struct kv msr->data =0 ;switch (msr->index) { -case MSR_F10H_DECFG : -if (boot_cpu_has (X86_FEATURE_LFENCE_RDTSC )) - msr->data |=MSR_F10H_DECFG_LFENCE_SERIALIZE ; +case MSR_AMD64_DE_CFG : +if (cpu_feature_enabled (X86_FEATURE_LFENCE_RDTSC )) + msr->data |=MSR_AMD64_DE_CFG_LFENCE_SERIALIZE ;break ;default :return 1 ;
@@ -3638,7 +3638,7 @@ static int svm_get_msr(struct kvm_vcpu * msr_info->data =0x1E ; }break ; -case MSR_F10H_DECFG : +case MSR_AMD64_DE_CFG : msr_info->data = svm->msr_decfg;break ;default :
@@ -3829,7 +3829,7 @@ static int svm_set_msr(struct kvm_vcpu *case MSR_VM_IGNNE :vcpu_unimpl (vcpu,"unimplemented wrmsr: 0x%x data 0x%llx\n" , ecx, data);break ; -case MSR_F10H_DECFG : { +case MSR_AMD64_DE_CFG : {struct kvm_msr_entry msr_entry; msr_entry.index = msr->index;
arch/x86/kvm/x86.c +1 -1
@@ -1026,7 +1026,7 @@ static unsigned num_emulated_msrs;* can be used by a hypervisor to validate requested CPU features. */ static u32 msr_based_features[] = { -MSR_F10H_DECFG , +MSR_AMD64_DE_CFG ,MSR_IA32_UCODE_REV ,MSR_IA32_ARCH_CAPABILITIES , };
arch/x86/power/cpu.c +1 -0
@@ -526,6 +526,7 @@ static void pm_save_spec_msr(void)MSR_TSX_FORCE_ABORT ,MSR_IA32_MCU_OPT_CTRL ,MSR_AMD64_LS_CFG , +MSR_AMD64_DE_CFG , };msr_build_context (spec_msr_id,ARRAY_SIZE (spec_msr_id));
Greg Kroah-Hartman
maintainerPATCH 30/76 rtc: cmos: fix build on non-ACPI platforms
In reply to Greg Kroah-HartmanFrom: Alexandre Belloni <[email protected]>
[ Upstream commit db4e955ae333567dea02822624106c0b96a2f84f ]
Now that rtc_wake_setup is called outside of cmos_wake_setup, it also need to be defined on non-ACPI platforms.
--- drivers/rtc/rtc-cmos.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/rtc/rtc-cmos.c +3 -0
@@ -1113,6 +1113,9 @@ static void cmos_check_acpi_rtc_status(struct device *dev, { } +static void rtc_wake_setup (struct device *dev) +{ +}#endif #ifdef CONFIG_PNP
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 31/76 drm/imx: imx-tve: Fix return type of imx_tve_connector_mode_valid
In reply to Greg Kroah-HartmanFrom: Nathan Huckleberry <[email protected]>
[ Upstream commit fc007fb815ab5395c3962c09b79a1630b0fbed9c ]
The mode_valid field in drm_connector_helper_funcs is expected to be of type:
enum drm_mode_status (* mode_valid) (struct drm_connector *connector,
struct drm_display_mode *mode);
The mismatched return type breaks forward edge kCFI since the underlying function definition does not match the function hook definition.
The return type of imx_tve_connector_mode_valid should be changed from int to enum drm_mode_status.
--- drivers/gpu/drm/imx/imx-tve.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/gpu/drm/imx/imx-tve.c +3 -2
@@ -254,8 +254,9 @@ static int imx_tve_connector_get_modes(struct drm_connector *connector)return ret; } -static int imx_tve_connector_mode_valid (struct drm_connector *connector, -struct drm_display_mode *mode) +static enum drm_mode_status +imx_tve_connector_mode_valid (struct drm_connector *connector, +struct drm_display_mode *mode) {struct imx_tve *tve =con_to_tve (connector);unsigned long rate;
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 32/76 Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm
In reply to Greg Kroah-HartmanFrom: Luiz Augusto von Dentz <[email protected]>
[ Upstream commit f937b758a188d6fd328a81367087eddbb2fce50f ]
l2cap_global_chan_by_psm shall not return fixed channels as they are not meant to be connected by (S)PSM.
--- net/bluetooth/l2cap_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/bluetooth/l2cap_core.c +1 -1
@@ -1824,7 +1824,7 @@ static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,if (link_type ==LE_LINK && c->src_type ==BDADDR_BREDR )continue ; -if (c->psm == psm) { +if (c->chan_type !=L2CAP_CHAN_FIXED && c->psm == psm) {int src_match, dst_match;int src_any, dst_any;
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 33/76 ASoC: core: Fix use-after-free in snd_soc_exit()
In reply to Greg Kroah-HartmanFrom: Chen Zhongjin <[email protected]>
[ Upstream commit 6ec27c53886c8963729885bcf2dd996eba2767a7 ]
KASAN reports a use-after-free:
BUG: KASAN: use-after-free in device_del+0xb5b/0xc60 Read of size 8 at addr ffff888008655050 by task rmmod/387 CPU: 2 PID: 387 Comm: rmmod Hardware name: QEMU Standard PC (i440FX + PIIX, 1996) Call Trace: <TASK> dump_stack_lvl+0x79/0x9a print_report+0x17f/0x47b kasan_report+0xbb/0xf0 device_del+0xb5b/0xc60 platform_device_del.part.0+0x24/0x200 platform_device_unregister+0x2e/0x40 snd_soc_exit+0xa/0x22 [snd_soc_core] __do_sys_delete_module.constprop.0+0x34f/0x5b0 do_syscall_64+0x3a/0x90 entry_SYSCALL_64_after_hwframe+0x63/0xcd ... </TASK>
It's bacause in snd_soc_init(), snd_soc_util_init() is possble to fail, but its ret is ignored, which makes soc_dummy_dev unregistered twice.
snd_soc_init()
snd_soc_util_init()
platform_device_register_simple(soc_dummy_dev) platform_driver_register() # fail platform_device_unregister(soc_dummy_dev)
platform_driver_register() # success
...snd_soc_exit()
snd_soc_util_exit()
# soc_dummy_dev will be unregistered for second time
To fix it, handle error and stop snd_soc_init() when util_init() fail. Also clean debugfs when util_init() or driver_register() fail.
--- sound/soc/soc-core.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)
sound/soc/soc-core.c +15 -2
@@ -3931,10 +3931,23 @@ EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_link_codecs);static int __init snd_soc_init (void ) { +int ret; +snd_soc_debugfs_init (); -snd_soc_util_init (); + ret =snd_soc_util_init (); +if (ret) + goto err_util_init; -return platform_driver_register (&soc_driver); + ret =platform_driver_register (&soc_driver); +if (ret) + goto err_register; +return 0 ; + +err_register: +snd_soc_util_exit (); +err_util_init: +snd_soc_debugfs_exit (); +return ret; }module_init (snd_soc_init);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 34/76 serial: 8250_omap: remove wait loop from Errata i202 workaround
In reply to Greg Kroah-HartmanFrom: Matthias Schiffer <[email protected]>
[ Upstream commit e828e56684d61b17317e0cfdef83791fa61cb76b ]
We were occasionally seeing the "Errata i202: timedout" on an AM335x board when repeatedly opening and closing a UART connected to an active sender. As new input may arrive at any time, it is possible to miss the "RX FIFO empty" condition, forcing the loop to wait until it times out.
Nothing in the i202 Advisory states that such a wait is even necessary; other FIFO clear functions like serial8250_clear_fifos() do not wait either. For this reason, it seems safe to remove the wait, fixing the mentioned issue.
--- drivers/tty/serial/8250/8250_omap.c | 17 ----------------- 1 file changed, 17 deletions(-)
drivers/tty/serial/8250/8250_omap.c +0 -17
@@ -160,27 +160,10 @@ static void omap8250_set_mctrl(struct uart_port *port, unsigned int mctrl)static void omap_8250_mdr1_errataset (struct uart_8250_port *up,struct omap8250_priv *priv) { -u8 timeout =255 ; -serial_out (up,UART_OMAP_MDR1 , priv->mdr1);udelay (2 );serial_out (up,UART_FCR , up->fcr |UART_FCR_CLEAR_XMIT |UART_FCR_CLEAR_RCVR ); -/* -* Wait for FIFO to empty: when empty, RX_FIFO_E bit is 0 and -* TX_FIFO_E bit is 1. -*/ -while (UART_LSR_THRE != (serial_in (up,UART_LSR ) & - (UART_LSR_THRE |UART_LSR_DR ))) { - timeout--; -if (!timeout) { -/* Should *never* happen. we warn and carry on */ -dev_crit (up->port.dev,"Errata i202: timedout %x\n" , -serial_in (up,UART_LSR )); -break ; - } -udelay (1 ); - } } static void omap_8250_get_divisor(struct uart_port *port, unsigned int baud,
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 35/76 serial: 8250: omap: Flush PM QOS work on remove
In reply to Greg Kroah-HartmanFrom: Tony Lindgren <[email protected]>
[ Upstream commit d0b68629bd2fb61e0171a62f2e8da3db322f5cf6 ]
Rebinding 8250_omap in a loop will at some point produce a warning for kernel/power/qos.c:296 cpu_latency_qos_update_request() with error "cpu_latency_qos_update_request called for unknown object". Let's flush the possibly pending PM QOS work scheduled from omap8250_runtime_suspend() before we disable runtime PM.
--- drivers/tty/serial/8250/8250_omap.c | 1 + 1 file changed, 1 insertion(+)
drivers/tty/serial/8250/8250_omap.c +1 -0
@@ -1234,6 +1234,7 @@ static int omap8250_remove(struct platform_device *pdev)pm_runtime_dont_use_autosuspend (&pdev->dev);pm_runtime_put_sync (&pdev->dev); +flush_work (&priv->qos_work);pm_runtime_disable (&pdev->dev);serial8250_unregister_port (priv->line);pm_qos_remove_request (&priv->pm_qos_request);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 36/76 tty: n_gsm: fix sleep-in-atomic-context bug in gsm_control_send
In reply to Greg Kroah-HartmanFrom: Duoming Zhou <[email protected]>
[ Upstream commit 7b7dfe4833c70a11cdfa51b38705103bd31eddaa ]
The function gsm_dlci_t1() is a timer handler that runs in an atomic context, but it calls "kzalloc(..., GFP_KERNEL)" that may sleep. As a result, the sleep-in-atomic-context bug will happen. The process is shown below:
gsm_dlci_t1()
gsm_dlci_open()
gsm_modem_update()
gsm_modem_upd_via_msc()
gsm_control_send()
kzalloc(sizeof(.., GFP_KERNEL) //may sleep
This patch changes the gfp_t parameter of kzalloc() from GFP_KERNEL to GFP_ATOMIC in order to mitigate the bug.
--- drivers/tty/n_gsm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/tty/n_gsm.c +1 -1
@@ -1377,7 +1377,7 @@ static struct gsm_control *gsm_control_send(struct gsm_mux *gsm, unsigned int command, u8 *data, int clen) { struct gsm_control *ctrl = kzalloc(sizeof(struct gsm_control), -GFP_KERNEL ); +GFP_ATOMIC );unsigned long flags;if (ctrl ==NULL )return NULL ;
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 37/76 ASoC: soc-utils: Remove __exit for snd_soc_util_exit()
In reply to Greg Kroah-HartmanFrom: Chen Zhongjin <[email protected]>
[ Upstream commit 314d34fe7f0a5836cb0472950c1f17744b4efde8 ]
snd_soc_util_exit() is called in __init snd_soc_init() for cleanup. Remove the __exit annotation for it to fix the build warning:
WARNING: modpost: sound/soc/snd-soc-core.o: section mismatch in reference: init_module (section: .init.text) -> snd_soc_util_exit (section: .exit.text)
--- sound/soc/soc-utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/soc-utils.c +1 -1
@@ -186,7 +186,7 @@ int __init snd_soc_util_init(void)return ret; } -void __exit snd_soc_util_exit(void) +void snd_soc_util_exit (void ) {platform_device_unregister (soc_dummy_dev);platform_driver_unregister (&soc_dummy_driver);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 38/76 parport_pc: Avoid FIFO port location truncation
In reply to Greg Kroah-HartmanFrom: Maciej W. Rozycki <[email protected]>
[ Upstream commit ab126f51c93a15093df604f661c9480854c005a3 ]
Match the data type of a temporary holding a reference to the FIFO port with the type of the original reference coming from `struct parport', avoiding data truncation with LP64 ports such as SPARC64 that refer to PCI port I/O locations via their corresponding MMIO addresses and will therefore have non-zero bits in the high 32-bit part of the reference. And in any case it is cleaner to have the data types matching here.
--- drivers/parport/parport_pc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/parport/parport_pc.c +1 -1
@@ -474,7 +474,7 @@ static size_t parport_pc_fifo_write_block_pio(struct parport *port,const unsigned char *bufp = buf;size_t left = length;unsigned long expire = jiffies + port->physport->cad->timeout; -const int fifo =FIFO (port); +const unsigned long fifo =FIFO (port);int poll_for =8 ;/* 80 usecs */ const struct parport_pc_private *priv = port->physport->private_data;const int fifo_depth = priv->fifo_depth;
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 39/76 pinctrl: devicetree: fix null pointer dereferencing in pinctrl_dt_to_map
In reply to Greg Kroah-HartmanFrom: Zeng Heng <[email protected]>
[ Upstream commit 91d5c5060ee24fe8da88cd585bb43b843d2f0dce ]
Here is the BUG report by KASAN about null pointer dereference:
BUG: KASAN: null-ptr-deref in strcmp+0x2e/0x50 Read of size 1 at addr 0000000000000000 by task python3/2640 Call Trace: strcmp __of_find_property of_find_property pinctrl_dt_to_map
kasprintf() would return NULL pointer when kmalloc() fail to allocate. So directly return ENOMEM, if kasprintf() return NULL pointer.
--- drivers/pinctrl/devicetree.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/pinctrl/devicetree.c +2 -0
@@ -207,6 +207,8 @@ int pinctrl_dt_to_map(struct pinctrl *p)for (state =0 ; ; state++) {/* Retrieve the pinctrl-* property */ propname =kasprintf (GFP_KERNEL ,"pinctrl-%d" , state); +if (!propname) +return -ENOMEM ; prop =of_find_property (np, propname, &size);kfree (propname);if (!prop) {
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 40/76 mISDN: fix possible memory leak in mISDN_dsp_element_register()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit 98a2ac1ca8fd6eca6867726fe238d06e75eb1acd ]
Afer commit 1fa5ae857bb1 ("driver core: get rid of struct device's bus_id string array"), the name of device is allocated dynamically, use put_device() to give up the reference, so that the name can be freed in kobject_cleanup() when the refcount is 0.
The 'entry' is going to be freed in mISDN_dsp_dev_release(), so the kfree() is removed. list_del() is called in mISDN_dsp_dev_release(), so it need be initialized.
--- drivers/isdn/mISDN/dsp_pipeline.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/isdn/mISDN/dsp_pipeline.c +2 -1
@@ -97,6 +97,7 @@ int mISDN_dsp_element_register(struct mISDN_dsp_element *elem)if (!entry)return -ENOMEM ; +INIT_LIST_HEAD (&entry->list); entry->elem = elem; entry->dev.class = elements_class;
@@ -131,7 +132,7 @@ int mISDN_dsp_element_register(struct mISDN_dsp_element *elem)device_unregister (&entry->dev);return ret; err1: -kfree (entry); +put_device (&entry->dev);return ret; }EXPORT_SYMBOL (mISDN_dsp_element_register);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 41/76 mISDN: fix misuse of put_device() in mISDN_register_device()
In reply to Greg Kroah-HartmanFrom: Wang ShaoBo <[email protected]>
[ Upstream commit 2d25107e111a85c56f601a5470f1780ec054e6ac ]
We should not release reference by put_device() before calling device_initialize().
--- drivers/isdn/mISDN/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/isdn/mISDN/core.c +1 -1
@@ -231,7 +231,7 @@ mISDN_register_device(struct mISDNdevice *dev, err =get_free_devid ();if (err <0 ) - goto error1; +return err; dev->id = err;device_initialize (&dev->dev);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 42/76 net: caif: fix double disconnect client in chnl_net_open()
In reply to Greg Kroah-HartmanFrom: Zhengchao Shao <[email protected]>
[ Upstream commit 8fbb53c8bfd8c56ecf1f78dc821778b58f505503 ]
When connecting to client timeout, disconnect client for twice in chnl_net_open(). Remove one. Compile tested only.
--- net/caif/chnl_net.c | 3 --- 1 file changed, 3 deletions(-)
net/caif/chnl_net.c +0 -3
@@ -316,9 +316,6 @@ static int chnl_net_open(struct net_device *dev)if (result ==0 ) {pr_debug ("connect timeout\n" ); -caif_disconnect_client (dev_net (dev), &priv->chnl); - priv->state =CAIF_DISCONNECTED ; -pr_debug ("state disconnected\n" ); result = -ETIMEDOUT ; goto error; }
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 43/76 xen/pcpu: fix possible memory leak in register_pcpu()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit da36a2a76b01b210ffaa55cdc2c99bc8783697c5 ]
In device_add(), dev_set_name() is called to allocate name, if it returns error, the name need be freed. As comment of device_register() says, it should use put_device() to give up the reference in the error path. So fix this by calling put_device(), then the name can be freed in kobject_cleanup().
--- drivers/xen/pcpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/xen/pcpu.c +1 -1
@@ -228,7 +228,7 @@ static int register_pcpu(struct pcpu *pcpu) err =device_register (dev);if (err) { -pcpu_release (dev); +put_device (dev);return err; }
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 44/76 net/x25: Fix skb leak in x25_lapb_receive_frame()
In reply to Greg Kroah-HartmanFrom: Wei Yongjun <[email protected]>
[ Upstream commit 2929cceb2fcf0ded7182562e4888afafece82cce ]
x25_lapb_receive_frame() using skb_copy() to get a private copy of skb, the new skb should be freed in the undersized/fragmented skb error handling path. Otherwise there is a memory leak.
--- net/x25/x25_dev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/x25/x25_dev.c +1 -1
@@ -122,7 +122,7 @@ int x25_lapb_receive_frame(struct sk_buff *skb, struct net_device *dev,if (!pskb_may_pull (skb,1 )) {x25_neigh_put (nb); -return 0 ; + goto drop; }switch (skb->data[0 ]) {
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 45/76 cifs: Fix wrong return value checking when GETFLAGS
In reply to Greg Kroah-HartmanFrom: Zhang Xiaoxu <[email protected]>
[ Upstream commit 92bbd67a55fee50743b42825d1c016e7fd5c79f9 ]
The return value of CIFSGetExtAttr is negative, should be checked with -EOPNOTSUPP rather than EOPNOTSUPP.
--- fs/cifs/ioctl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/cifs/ioctl.c +2 -2
@@ -206,7 +206,7 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) rc =put_user (ExtAttrBits &FS_FL_USER_VISIBLE , (int __user *)arg); -if (rc !=EOPNOTSUPP ) +if (rc != -EOPNOTSUPP ) break; }#endif /* CONFIG_CIFS_POSIX */
@@ -235,7 +235,7 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg)* pSMBFile->fid.netfid, * extAttrBits, * &ExtAttrMask); -* if (rc != EOPNOTSUPP) +* if (rc != -EOPNOTSUPP) * break; */
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 46/76 ftrace: Fix the possible incorrect kernel message
In reply to Greg Kroah-HartmanFrom: Wang Wensheng <[email protected]>
commit 08948caebe93482db1adfd2154eba124f66d161d upstream.
If the number of mcount entries is an integer multiple of ENTRIES_PER_PAGE, the page count showing on the console would be wrong.
--- kernel/trace/ftrace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/trace/ftrace.c +1 -1
@@ -5177,7 +5177,7 @@ void __init ftrace_init(void) }pr_info ("ftrace: allocating %ld entries in %ld pages\n" , - count, count /ENTRIES_PER_PAGE +1 ); + count,DIV_ROUND_UP (count,ENTRIES_PER_PAGE )); last_ftrace_enabled = ftrace_enabled =1 ;
Greg Kroah-Hartman
maintainerPATCH 47/76 ftrace: Optimize the allocation for mcount entries
In reply to Greg Kroah-HartmanFrom: Wang Wensheng <[email protected]>
commit bcea02b096333dc74af987cb9685a4dbdd820840 upstream.
If we can't allocate this size, try something smaller with half of the size. Its order should be decreased by one instead of divided by two.
--- kernel/trace/ftrace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/trace/ftrace.c +1 -1
@@ -3013,7 +3013,7 @@ static int ftrace_allocate_records(struc/* if we can't allocate this size, try something smaller */ if (!order)return -ENOMEM ; - order >>=1 ; + order--; goto again; }
Greg Kroah-Hartman
maintainerPATCH 48/76 ring_buffer: Do not deactivate non-existant pages
In reply to Greg Kroah-HartmanFrom: Daniil Tatianin <[email protected]>
commit 56f4ca0a79a9f1af98f26c54b9b89ba1f9bcc6bd upstream.
rb_head_page_deactivate() expects cpu_buffer to contain a valid list of ->pages, so verify that the list is actually present before calling it.
Found by Linux Verification Center (linuxtesting.org) with the SVACE static analysis tool.
--- kernel/trace/ring_buffer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
kernel/trace/ring_buffer.c +2 -2
@@ -1267,9 +1267,9 @@ static void rb_free_cpu_buffer(struct rifree_buffer_page (cpu_buffer->reader_page); -rb_head_page_deactivate (cpu_buffer); -if (head) { +rb_head_page_deactivate (cpu_buffer); +list_for_each_entry_safe (bpage, tmp, head, list) {list_del_init (&bpage->list);free_buffer_page (bpage);
Greg Kroah-Hartman
maintainerPATCH 49/76 ALSA: usb-audio: Drop snd_BUG_ON() from snd_usbmidi_output_open()
In reply to Greg Kroah-HartmanFrom: Takashi Iwai <[email protected]>
commit ad72c3c3f6eb81d2cb189ec71e888316adada5df upstream.
snd_usbmidi_output_open() has a check of the NULL port with snd_BUG_ON(). snd_BUG_ON() was used as this shouldn't have happened, but in reality, the NULL port may be seen when the device gives an invalid endpoint setup at the descriptor, hence the driver skips the allocation. That is, the check itself is valid and snd_BUG_ON() should be dropped from there. Otherwise it's confusing as if it were a real bug, as recently syzbot stumbled on it.
--- sound/usb/midi.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
sound/usb/midi.c +1 -3
@@ -1148,10 +1148,8 @@ static int snd_usbmidi_output_open(struc port = &umidi->endpoints[i].out->ports[j];break ; } -if (!port) { -snd_BUG (); +if (!port)return -ENXIO ; - } substream->runtime->private_data = port; port->state =STATE_UNKNOWN ;
Greg Kroah-Hartman
maintainerPATCH 50/76 USB: serial: option: add Sierra Wireless EM9191
In reply to Greg Kroah-HartmanFrom: Benoît Monin <[email protected]>
commit df3414b0a245f43476061fddd78cee7d6cff797f upstream.
Add support for the AT and diag ports, similar to other qualcomm SDX55 modems. In QDL mode, the modem uses a different device ID and support is provided by qcserial in commit 11c52d250b34 ("USB: serial: qcserial:
add EM9191 QDL support").
T: Bus=08 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 3 Spd=5000 MxCh= 0 D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1 P: Vendor=1199 ProdID=90d3 Rev=00.06 S: Manufacturer=Sierra Wireless, Incorporated S: Product=Sierra Wireless EM9191 S: SerialNumber=xxxxxxxxxxxxxxxx C: #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=896mA I: If#=0x0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim I: If#=0x1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim I: If#=0x3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none) I: If#=0x4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=(none)
--- drivers/usb/serial/option.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/usb/serial/option.c +5 -0
@@ -575,6 +575,9 @@ static void option_instat_callback(struc#define OPPO_VENDOR_ID 0x22d9#define OPPO_PRODUCT_R11 0x276c +/* Sierra Wireless products */ +#define SIERRA_VENDOR_ID 0x1199 +#define SIERRA_PRODUCT_EM9191 0x90d3/* Device flags */
@@ -2137,6 +2140,8 @@ static const struct usb_device_id option { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) }, /* GosunCn GM500 ECM/NCM */ { USB_DEVICE_AND_INTERFACE_INFO(OPPO_VENDOR_ID, OPPO_PRODUCT_R11, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0, 0) }, { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
Greg Kroah-Hartman
maintainerPATCH 51/76 USB: serial: option: remove old LARA-R6 PID
In reply to Greg Kroah-HartmanFrom: Davide Tronchin <[email protected]>
commit 2ec106b96afc19698ff934323b633c0729d4c7f8 upstream.
Remove the UBLOX_PRODUCT_R6XX 0x90fa association since LARA-R6 00B final product uses a new USB composition with different PID. 0x90fa PID used only by LARA-R6 internal prototypes.
Move 0x90fa PID directly in the option_ids array since used by other Qualcomm based modem vendors as pointed out in:
https://lore.kernel.org/all/[email protected]
--- drivers/usb/serial/option.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/usb/serial/option.c +1 -2
@@ -243,7 +243,6 @@ static void option_instat_callback(struc#define QUECTEL_PRODUCT_UC15 0x9090/* These u-blox products use Qualcomm's vendor ID */ #define UBLOX_PRODUCT_R410M 0x90b2 -#define UBLOX_PRODUCT_R6XX 0x90fa/* These Yuga products use Qualcomm's vendor ID */ #define YUGA_PRODUCT_CLM920_NC5 0x9625
@@ -1118,7 +1117,7 @@ static const struct usb_device_id option/* u-blox products using Qualcomm vendor ID */ { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M), .driver_info = RSVD(1) | RSVD(3) }, - { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R6XX), + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x90fa), .driver_info = RSVD(3) },/* Quectel products using Quectel vendor ID */ { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21),
Greg Kroah-Hartman
maintainerPATCH 52/76 USB: serial: option: add u-blox LARA-R6 00B modem
In reply to Greg Kroah-HartmanFrom: Davide Tronchin <[email protected]>
commit d9e37a5c4d80ea25a7171ab8557a449115554e76 upstream.
The official LARA-R6 (00B) modem uses 0x908b PID. LARA-R6 00B does not implement a QMI interface on port 4, the reservation (RSVD(4)) has been added to meet other companies that implement QMI on that interface.
LARA-R6 00B USB composition exposes the following interfaces:
If 0: Diagnostic
If 1: AT parser
If 2: AT parser
If 3: AT parser/alternative functions
--- drivers/usb/serial/option.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/serial/option.c +2 -0
@@ -1117,6 +1117,8 @@ static const struct usb_device_id option/* u-blox products using Qualcomm vendor ID */ { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M), .driver_info = RSVD(1) | RSVD(3) }, + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x908b), /* u-blox LARA-R6 00B */ + .driver_info = RSVD(4) }, { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x90fa), .driver_info = RSVD(3) },/* Quectel products using Quectel vendor ID */
Greg Kroah-Hartman
maintainerPATCH 53/76 USB: serial: option: add u-blox LARA-L6 modem
In reply to Greg Kroah-HartmanFrom: Davide Tronchin <[email protected]>
commit c1547f12df8b8e9ca2686accee43213ecd117efe upstream.
Add LARA-L6 PIDs for three different USB compositions.
LARA-L6 module can be configured (by AT interface) in three different USB modes:
* Default mode (Vendor ID: 0x1546 Product ID: 0x1341) with 4 serial interfaces
* RmNet mode (Vendor ID: 0x1546 Product ID: 0x1342) with 4 serial interfaces and 1 RmNet virtual network interface
* CDC-ECM mode (Vendor ID: 0x1546 Product ID: 0x1343) with 4 serial interface and 1 CDC-ECM virtual network interface
In default mode LARA-L6 exposes the following interfaces:
If 0: Diagnostic
If 1: AT parser
If 2: AT parser
If 3: AT parser/alternative functions
In RmNet mode LARA-L6 exposes the following interfaces:
If 0: Diagnostic
If 1: AT parser
If 2: AT parser
If 3: AT parset/alternative functions
If 4: RMNET interface
In CDC-ECM mode LARA-L6 exposes the following interfaces:
If 0: Diagnostic
If 1: AT parser
If 2: AT parser
If 3: AT parset/alternative functions
If 4: CDC-ECM interface
--- drivers/usb/serial/option.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/usb/serial/option.c +8 -0
@@ -165,6 +165,8 @@ static void option_instat_callback(struc#define NOVATELWIRELESS_PRODUCT_G2 0xA010#define NOVATELWIRELESS_PRODUCT_MC551 0xB001 +#define UBLOX_VENDOR_ID 0x1546 +/* AMOI PRODUCTS */ #define AMOI_VENDOR_ID 0x1614#define AMOI_PRODUCT_H01 0x0800
@@ -1121,6 +1123,12 @@ static const struct usb_device_id option .driver_info = RSVD(4) }, { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x90fa), .driver_info = RSVD(3) }, +/* u-blox products */ + { USB_DEVICE(UBLOX_VENDOR_ID, 0x1341) }, /* u-blox LARA-L6 */ + { USB_DEVICE(UBLOX_VENDOR_ID, 0x1342), /* u-blox LARA-L6 (RMNET) */ + .driver_info = RSVD(4) }, + { USB_DEVICE(UBLOX_VENDOR_ID, 0x1343), /* u-blox LARA-L6 (ECM) */ + .driver_info = RSVD(4) },/* Quectel products using Quectel vendor ID */ { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21), .driver_info = RSVD(4) },
Greg Kroah-Hartman
maintainerPATCH 54/76 USB: serial: option: add Fibocom FM160 0x0111 composition
In reply to Greg Kroah-HartmanFrom: Reinhard Speyerer <[email protected]>
commit 148f4b32b4504d8a32cf82049b7b9499a4b299ab upstream.
Add support for the following Fibocom FM160 composition:
0x0111: MBIM + MODEM + DIAG + AT
T: Bus=01 Lev=02 Prnt=125 Port=01 Cnt=02 Dev#= 93 Spd=480 MxCh= 0 D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=2cb7 ProdID=0111 Rev= 5.04 S: Manufacturer=Fibocom S: Product=Fibocom FM160 Modem_SN:12345678 S: SerialNumber=12345678 C:* #Ifs= 5 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= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option E: Ad=86(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
--- drivers/usb/serial/option.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/serial/option.c +1 -0
@@ -2140,6 +2140,7 @@ static const struct usb_device_id option { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x010a, 0xff) }, /* Fibocom MA510 (ECM mode) */ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0111, 0xff) }, /* Fibocom FM160 (MBIM mode) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a2, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a4, 0xff), /* Fibocom FM101-GL (laptop MBIM) */
Greg Kroah-Hartman
maintainerPATCH 55/76 usb: add NO_LPM quirk for Realforce 87U Keyboard
In reply to Greg Kroah-HartmanFrom: Nicolas Dumazet <[email protected]>
commit 181135bb20dcb184edd89817831b888eb8132741 upstream.
Before adding this quirk, this (mechanical keyboard) device would not be recognized, logging:
new full-speed USB device number 56 using xhci_hcd unable to read config index 0 descriptor/start: -32 chopping to 0 config(s)
It would take dozens of plugging/unpuggling cycles for the keyboard to be recognized. Keyboard seems to simply work after applying this quirk.
This issue had been reported by users in two places already ([1], [2]) but nobody tried upstreaming a patch yet. After testing I believe their suggested fix (DELAY_INIT + NO_LPM + DEVICE_QUALIFIER) was probably a little overkill. I assume this particular combination was tested because it had been previously suggested in [3], but only NO_LPM seems sufficient for this device.
[1]: https://qiita.com/float168/items/fed43d540c8e2201b543
[2]: https://blog.kostic.dev/posts/making-the-realforce-87ub-work-with-usb30-on-Ubuntu/
[3]: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1678477
--- drivers/usb/core/quirks.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/usb/core/quirks.c +3 -0
@@ -209,6 +209,9 @@ static const struct usb_device_id usb_qu { USB_DEVICE(0x0781, 0x5583), .driver_info = USB_QUIRK_NO_LPM }, { USB_DEVICE(0x0781, 0x5591), .driver_info = USB_QUIRK_NO_LPM }, + /* Realforce 87U Keyboard */ + { USB_DEVICE(0x0853, 0x011b), .driver_info = USB_QUIRK_NO_LPM }, + /* M-Systems Flash Disk Pioneers */ { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
Greg Kroah-Hartman
maintainerPATCH 56/76 usb: chipidea: fix deadlock in ci_otg_del_timer
In reply to Greg Kroah-HartmanFrom: Duoming Zhou <[email protected]>
commit 7a58b8d6021426b796eebfae80983374d9a80a75 upstream.
There is a deadlock in ci_otg_del_timer(), the process is shown below:
(thread 1) | (thread 2) ci_otg_del_timer() | ci_otg_hrtimer_func() ... | spin_lock_irqsave() //(1) | ... ... | hrtimer_cancel() | spin_lock_irqsave() //(2)
(block forever)
We hold ci->lock in position (1) and use hrtimer_cancel() to wait ci_otg_hrtimer_func() to stop, but ci_otg_hrtimer_func() also need ci->lock in position (2). As a result, the hrtimer_cancel() in ci_otg_del_timer() will be blocked forever.
This patch extracts hrtimer_cancel() from the protection of spin_lock_irqsave() in order that the ci_otg_hrtimer_func() could obtain the ci->lock.
What`s more, there will be no race happen. Because the "next_timer" is always under the protection of spin_lock_irqsave() and we only check whether "next_timer" equals to NUM_OTG_FSM_TIMERS in the following code.
--- drivers/usb/chipidea/otg_fsm.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/chipidea/otg_fsm.c +2 -0
@@ -260,8 +260,10 @@ static void ci_otg_del_timer(struct ci_h ci->enabled_otg_timer_bits &= ~(1 << t);if (ci->next_otg_timer == t) {if (ci->enabled_otg_timer_bits ==0 ) { +spin_unlock_irqrestore (&ci->lock, flags);/* No enabled timers after delete it */ hrtimer_cancel (&ci->otg_fsm_hrtimer); +spin_lock_irqsave (&ci->lock, flags); ci->next_otg_timer =NUM_OTG_FSM_TIMERS ; }else {/* Find the next timer */
Greg Kroah-Hartman
maintainerPATCH 57/76 iio: adc: at91_adc: fix possible memory leak in at91_adc_allocate_trigger()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
commit 65f20301607d07ee279b0804d11a05a62a6c1a1c upstream.
If iio_trigger_register() returns error, it should call iio_trigger_free() to give up the reference that hold in iio_trigger_alloc(), so that it can call iio_trig_release() to free memory when the refcount hit to 0.
--- drivers/iio/adc/at91_adc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/iio/adc/at91_adc.c +3 -1
@@ -617,8 +617,10 @@ static struct iio_trigger *at91_adc_allo trig->ops = &at91_adc_trigger_ops; ret =iio_trigger_register (trig); -if (ret) +if (ret) { +iio_trigger_free (trig);return NULL ; + }return trig; }
Greg Kroah-Hartman
maintainerPATCH 58/76 iio: trigger: sysfs: fix possible memory leak in iio_sysfs_trig_init()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
commit efa17e90e1711bdb084e3954fa44afb6647331c0 upstream.
dev_set_name() allocates memory for name, it need be freed when device_add() fails, call put_device() to give up the reference that hold in device_initialize(), so that it can be freed in kobject_cleanup() when the refcount hit to 0.
Fault injection test can trigger this:
unreferenced object 0xffff8e8340a7b4c0 (size 32):
comm "modprobe", pid 243, jiffies 4294678145 (age 48.845s) hex dump (first 32 bytes):
69 69 6f 5f 73 79 73 66 73 5f 74 72 69 67 67 65 iio_sysfs_trigge
72 00 a7 40 83 8e ff ff 00 86 13 c4 f6 ee ff ff r..@............
backtrace:
[<0000000074999de8>] __kmem_cache_alloc_node+0x1e9/0x360
[<00000000497fd30b>] __kmalloc_node_track_caller+0x44/0x1a0
[<000000003636c520>] kstrdup+0x2d/0x60
[<0000000032f84da2>] kobject_set_name_vargs+0x1e/0x90
[<0000000092efe493>] dev_set_name+0x4e/0x70--- drivers/iio/trigger/iio-trig-sysfs.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/iio/trigger/iio-trig-sysfs.c +5 -1
@@ -212,9 +212,13 @@ static int iio_sysfs_trigger_remove(intstatic int __init iio_sysfs_trig_init (void ) { +int ret;device_initialize (&iio_sysfs_trig_dev);dev_set_name (&iio_sysfs_trig_dev,"iio_sysfs_trigger" ); -return device_add (&iio_sysfs_trig_dev); + ret =device_add (&iio_sysfs_trig_dev); +if (ret) +put_device (&iio_sysfs_trig_dev); +return ret; }module_init (iio_sysfs_trig_init);
Greg Kroah-Hartman
maintainerPATCH 59/76 iio: pressure: ms5611: changed hardcoded SPI speed to value limited
In reply to Greg Kroah-HartmanFrom: Mitja Spes <[email protected]>
commit 741cec30cc52058d1c10d415f3b98319887e4f73 upstream.
Don't hardcode the ms5611 SPI speed, limit it instead.
--- drivers/iio/pressure/ms5611_spi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/pressure/ms5611_spi.c +1 -1
@@ -95,7 +95,7 @@ static int ms5611_spi_probe(struct spi_dspi_set_drvdata (spi, indio_dev); spi->mode =SPI_MODE_0 ; - spi->max_speed_hz =20000000 ; + spi->max_speed_hz =min (spi->max_speed_hz,20000000U ); spi->bits_per_word =8 ; ret =spi_setup (spi);if (ret <0 )
Greg Kroah-Hartman
maintainerPATCH 60/76 dm ioctl: fix misbehavior if list_versions races with module loading
In reply to Greg Kroah-HartmanFrom: Mikulas Patocka <[email protected]>
commit 4fe1ec995483737f3d2a14c3fe1d8fe634972979 upstream.
__list_versions will first estimate the required space using the "dm_target_iterate(list_version_get_needed, &needed)" call and then will fill the space using the "dm_target_iterate(list_version_get_info, &iter_info)" call. Each of these calls locks the targets using the "down_read(&_lock)" and "up_read(&_lock)" calls, however between the first and second "dm_target_iterate" there is no lock held and the target modules can be loaded at this point, so the second "dm_target_iterate" call may need more space than what was the first "dm_target_iterate" returned.
The code tries to handle this overflow (see the beginning of list_version_get_info), however this handling is incorrect.
The code sets "param->data_size = param->data_start + needed" and "iter_info.end = (char *)vers+len" - "needed" is the size returned by the first dm_target_iterate call; "len" is the size of the buffer allocated by userspace.
"len" may be greater than "needed"; in this case, the code will write up to "len" bytes into the buffer, however param->data_size is set to "needed", so it may write data past the param->data_size value. The ioctl interface copies only up to param->data_size into userspace, thus part of the result will be truncated.
Fix this bug by setting "iter_info.end = (char *)vers + needed;" - this guarantees that the second "dm_target_iterate" call will write only up to the "needed" buffer and it will exit with "DM_BUFFER_FULL_FLAG" if it overflows the "needed" space - in this case, userspace will allocate a larger buffer and retry.
Note that there is also a bug in list_version_get_needed - we need to add "strlen(tt->name) + 1" to the needed size, not "strlen(tt->name)".
--- drivers/md/dm-ioctl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/md/dm-ioctl.c +2 -2
@@ -561,7 +561,7 @@ static void list_version_get_needed(strusize_t *needed = needed_param; *needed +=sizeof (struct dm_target_versions ); - *needed +=strlen (tt->name); + *needed +=strlen (tt->name) +1 ; *needed +=ALIGN_MASK ; }
@@ -616,7 +616,7 @@ static int list_versions(struct dm_ioctl iter_info.old_vers =NULL ; iter_info.vers = vers; iter_info.flags =0 ; - iter_info.end = (char *)vers+len; + iter_info.end = (char *)vers + needed;/* * Now loop through filling out the names & versions.
Greg Kroah-Hartman
maintainerPATCH 61/76 serial: 8250: Fall back to non-DMA Rx if IIR_RDI occurs
In reply to Greg Kroah-HartmanFrom: Ilpo Järvinen <[email protected]>
commit a931237cbea256aff13bb403da13a97b2d1605d9 upstream.
DW UART sometimes triggers IIR_RDI during DMA Rx when IIR_RX_TIMEOUT should have been triggered instead. Since IIR_RDI has higher priority than IIR_RX_TIMEOUT, this causes the Rx to hang into interrupt loop. The problem seems to occur at least with some combinations of small-sized transfers (I've reproduced the problem on Elkhart Lake PSE UARTs).
If there's already an on-going Rx DMA and IIR_RDI triggers, fall graciously back to non-DMA Rx. That is, behave as if IIR_RX_TIMEOUT had occurred.
8250_omap already considers IIR_RDI similar to this change so its nothing unheard of.
--- drivers/tty/serial/8250/8250_port.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/tty/serial/8250/8250_port.c +4 -0
@@ -1798,6 +1798,10 @@ EXPORT_SYMBOL_GPL(serial8250_modem_statustatic bool handle_rx_dma (struct uart_8250_port *up,unsigned int iir) {switch (iir &0x3f ) { +case UART_IIR_RDI : +if (!up->dma->rx_running) +break ; +/* fall-through */ case UART_IIR_RX_TIMEOUT :serial8250_rx_dma_flush (up);/* fall-through */
Greg Kroah-Hartman
maintainerPATCH 62/76 serial: 8250_lpss: Configure DMA also w/o DMA filter
In reply to Greg Kroah-HartmanFrom: Ilpo Järvinen <[email protected]>
commit 1bfcbe5805d0cfc83c3544dcd01e0a282c1f6790 upstream.
If the platform doesn't use DMA device filter (as is the case with Elkhart Lake), whole lpss8250_dma_setup() setup is skipped. This results in skipping also *_maxburst setup which is undesirable. Refactor lpss8250_dma_setup() to configure DMA even if filter is not setup.
--- drivers/tty/serial/8250/8250_lpss.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)
drivers/tty/serial/8250/8250_lpss.c +11 -4
@@ -245,8 +245,13 @@ static int lpss8250_dma_setup(struct lpsstruct dw_dma_slave *rx_param, *tx_param;struct device *dev = port->port.dev; -if (!lpss->dma_param.dma_dev) +if (!lpss->dma_param.dma_dev) { + dma = port->dma; +if (dma) + goto out_configuration_only; +return 0 ; + } rx_param =devm_kzalloc (dev,sizeof (*rx_param),GFP_KERNEL );if (!rx_param)
@@ -257,16 +262,18 @@ static int lpss8250_dma_setup(struct lpsreturn -ENOMEM ; *rx_param = lpss->dma_param; - dma->rxconf.src_maxburst = lpss->dma_maxburst; - *tx_param = lpss->dma_param; - dma->txconf.dst_maxburst = lpss->dma_maxburst; dma->fn = lpss8250_dma_filter; dma->rx_param = rx_param; dma->tx_param = tx_param; port->dma = dma; + +out_configuration_only: + dma->rxconf.src_maxburst = lpss->dma_maxburst; + dma->txconf.dst_maxburst = lpss->dma_maxburst; +return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 63/76 mmc: core: properly select voltage range without power cycle
In reply to Greg Kroah-HartmanFrom: Yann Gautier <[email protected]>
commit 39a72dbfe188291b156dd6523511e3d5761ce775 upstream.
In mmc_select_voltage(), if there is no full power cycle, the voltage range selected at the end of the function will be on a single range (e.g. 3.3V/3.4V). To keep a range around the selected voltage (3.2V/3.4V), the mask shift should be reduced by 1.
This issue was triggered by using a specific SD-card (Verbatim Premium 16GB UHS-1) on an STM32MP157C-DK2 board. This board cannot do UHS modes and there is no power cycle. And the card was failing to switch to high-speed mode. When adding the range 3.2V/3.3V for this card with the proposed shift change, the card can switch to high-speed mode.
--- drivers/mmc/core/core.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/mmc/core/core.c +7 -1
@@ -1641,7 +1641,13 @@ u32 mmc_select_voltage(struct mmc_host *mmc_power_cycle (host, ocr); }else { bit =fls (ocr) -1 ; - ocr &=3 << bit; +/* +* The bit variable represents the highest voltage bit set in +* the OCR register. +* To keep a range of 2 values (e.g. 3.2V/3.3V and 3.3V/3.4V), +* we must shift the mask '3' with (bit - 1). +*/ + ocr &=3 << (bit -1 );if (bit != host->ios.vdd)dev_warn (mmc_dev (host),"exceeding card's volts\n" ); }
Greg Kroah-Hartman
maintainerPATCH 64/76 misc/vmw_vmci: fix an infoleak in vmci_host_do_receive_datagram()
In reply to Greg Kroah-HartmanFrom: Alexander Potapenko <[email protected]>
commit e5b0d06d9b10f5f43101bd6598b076c347f9295f upstream.
struct vmci_event_qp allocated by qp_notify_peer() contains padding, which may carry uninitialized data to the userspace, as observed by KMSAN:
BUG: KMSAN: kernel-infoleak in instrument_copy_to_user ./include/linux/instrumented.h:121 instrument_copy_to_user ./include/linux/instrumented.h:121 _copy_to_user+0x5f/0xb0 lib/usercopy.c:33 copy_to_user ./include/linux/uaccess.h:169 vmci_host_do_receive_datagram drivers/misc/vmw_vmci/vmci_host.c:431 vmci_host_unlocked_ioctl+0x33d/0x43d0 drivers/misc/vmw_vmci/vmci_host.c:925 vfs_ioctl fs/ioctl.c:51 ...
Uninit was stored to memory at:
kmemdup+0x74/0xb0 mm/util.c:131 dg_dispatch_as_host drivers/misc/vmw_vmci/vmci_datagram.c:271 vmci_datagram_dispatch+0x4f8/0xfc0 drivers/misc/vmw_vmci/vmci_datagram.c:339 qp_notify_peer+0x19a/0x290 drivers/misc/vmw_vmci/vmci_queue_pair.c:1479 qp_broker_attach drivers/misc/vmw_vmci/vmci_queue_pair.c:1662 qp_broker_alloc+0x2977/0x2f30 drivers/misc/vmw_vmci/vmci_queue_pair.c:1750 vmci_qp_broker_alloc+0x96/0xd0 drivers/misc/vmw_vmci/vmci_queue_pair.c:1940 vmci_host_do_alloc_queuepair drivers/misc/vmw_vmci/vmci_host.c:488 vmci_host_unlocked_ioctl+0x24fd/0x43d0 drivers/misc/vmw_vmci/vmci_host.c:927 ...
Local variable ev created at:
qp_notify_peer+0x54/0x290 drivers/misc/vmw_vmci/vmci_queue_pair.c:1456 qp_broker_attach drivers/misc/vmw_vmci/vmci_queue_pair.c:1662 qp_broker_alloc+0x2977/0x2f30 drivers/misc/vmw_vmci/vmci_queue_pair.c:1750
Bytes 28-31 of 48 are uninitialized
Memory access of size 48 starts at ffff888035155e00 Data copied to user address 0000000020000100
Use memset() to prevent the infoleaks.
Also speculatively fix qp_notify_peer_local(), which may suffer from the same problem.
--- drivers/misc/vmw_vmci/vmci_queue_pair.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/misc/vmw_vmci/vmci_queue_pair.c +2 -0
@@ -952,6 +952,7 @@ static int qp_notify_peer_local(bool attu32 context_id =vmci_get_context_id ();struct vmci_event_qp ev; +memset (&ev,0 ,sizeof (ev)); ev.msg.hdr.dst =vmci_make_handle (context_id,VMCI_EVENT_HANDLER ); ev.msg.hdr.src =vmci_make_handle (VMCI_HYPERVISOR_CONTEXT_ID ,VMCI_CONTEXT_RESOURCE_ID );
@@ -1563,6 +1564,7 @@ static int qp_notify_peer(bool attach,* kernel. */ +memset (&ev,0 ,sizeof (ev)); ev.msg.hdr.dst =vmci_make_handle (peer_id,VMCI_EVENT_HANDLER ); ev.msg.hdr.src =vmci_make_handle (VMCI_HYPERVISOR_CONTEXT_ID ,VMCI_CONTEXT_RESOURCE_ID );
Greg Kroah-Hartman
maintainerPATCH 65/76 nilfs2: fix use-after-free bug of ns_writer on remount
In reply to Greg Kroah-HartmanFrom: Ryusuke Konishi <[email protected]>
commit 8cccf05fe857a18ee26e20d11a8455a73ffd4efd upstream.
If a nilfs2 filesystem is downgraded to read-only due to metadata corruption on disk and is remounted read/write, or if emergency read-only remount is performed, detaching a log writer and synchronizing the filesystem can be done at the same time.
In these cases, use-after-free of the log writer (hereinafter nilfs->ns_writer) can happen as shown in the scenario below:
Task1 Task2
-------------------------------- ------------------------------
nilfs_construct_segment
nilfs_segctor_sync
init_wait
init_waitqueue_entry
add_wait_queue
schedule
nilfs_remount (R/W remount case)
nilfs_attach_log_writer
nilfs_detach_log_writer
nilfs_segctor_destroy
kfree
finish_wait
_raw_spin_lock_irqsave
__raw_spin_lock_irqsave
do_raw_spin_lock
debug_spin_lock_before <-- use-after-free
While Task1 is sleeping, nilfs->ns_writer is freed by Task2. After Task1 waked up, Task1 accesses nilfs->ns_writer which is already freed. This scenario diagram is based on the Shigeru Yoshida's post [1].
This patch fixes the issue by not detaching nilfs->ns_writer on remount so that this UAF race doesn't happen. Along with this change, this patch also inserts a few necessary read-only checks with superblock instance where only the ns_writer pointer was used to check if the filesystem is read-only.
--- fs/nilfs2/segment.c | 15 ++++++++------- fs/nilfs2/super.c | 2 -- 2 files changed, 8 insertions(+), 9 deletions(-)
fs/nilfs2/segment.c +8 -7
@@ -329,7 +329,7 @@ void nilfs_relax_pressure_in_lock(structstruct the_nilfs *nilfs = sb->s_fs_info;struct nilfs_sc_info *sci = nilfs->ns_writer; -if (!sci || !sci->sc_flush_request) +if (sb->s_flags &MS_RDONLY ||unlikely (!sci) || !sci->sc_flush_request)return ;set_bit (NILFS_SC_PRIOR_FLUSH , &sci->sc_flags);
@@ -2252,7 +2252,7 @@ int nilfs_construct_segment(struct superstruct nilfs_transaction_info *ti;int err; -if (!sci) +if (sb->s_flags &MS_RDONLY ||unlikely (!sci))return -EROFS ;/* A call inside transactions causes a deadlock. */
@@ -2291,7 +2291,7 @@ int nilfs_construct_dsync_segment(structstruct nilfs_transaction_info ti;int err =0 ; -if (!sci) +if (sb->s_flags &MS_RDONLY ||unlikely (!sci))return -EROFS ;nilfs_transaction_lock (sb, &ti,0 );
@@ -2788,11 +2788,12 @@ int nilfs_attach_log_writer(struct superif (nilfs->ns_writer) {/* -* This happens if the filesystem was remounted -* read/write after nilfs_error degenerated it into a -* read-only mount. +* This happens if the filesystem is made read-only by +* __nilfs_error or nilfs_remount and then remounted +* read/write. In these cases, reuse the existing +* writer. */ -nilfs_detach_log_writer (sb); +return 0 ; } nilfs->ns_writer =nilfs_segctor_new (sb, root);
fs/nilfs2/super.c +0 -2
@@ -1147,8 +1147,6 @@ static int nilfs_remount(struct super_blif ((*flags &MS_RDONLY ) == (sb->s_flags &MS_RDONLY )) goto out;if (*flags &MS_RDONLY ) { -/* Shutting down log writer */ -nilfs_detach_log_writer (sb); sb->s_flags |=MS_RDONLY ;/*
Greg Kroah-Hartman
maintainerPATCH 66/76 serial: 8250: Flush DMA Rx on RLSI
In reply to Greg Kroah-HartmanFrom: Ilpo Järvinen <[email protected]>
commit 1980860e0c8299316cddaf0992dd9e1258ec9d88 upstream.
Returning true from handle_rx_dma() without flushing DMA first creates a data ordering hazard. If DMA Rx has handled any character at the point when RLSI occurs, the non-DMA path handles any pending characters jumping them ahead of those characters that are pending under DMA.
--- drivers/tty/serial/8250/8250_port.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/tty/serial/8250/8250_port.c +1 -2
@@ -1802,10 +1802,9 @@ static bool handle_rx_dma(struct uart_82if (!up->dma->rx_running)break ;/* fall-through */ +case UART_IIR_RLSI :case UART_IIR_RX_TIMEOUT :serial8250_rx_dma_flush (up); -/* fall-through */ -case UART_IIR_RLSI :return true; }return up->dma->rx_dma (up);
Greg Kroah-Hartman
maintainerPATCH 67/76 tcp: cdg: allow tcp_cdg_release() to be called multiple times
In reply to Greg Kroah-HartmanFrom: Eric Dumazet <[email protected]>
commit 72e560cb8c6f80fc2b4afc5d3634a32465e13a51 upstream.
Apparently, mptcp is able to call tcp_disconnect() on an already disconnected flow. This is generally fine, unless current congestion control is CDG, because it might trigger a double-free [1]
Instead of fixing MPTCP, and future bugs, we can make tcp_disconnect() more resilient.
[1]
BUG: KASAN: double-free in slab_free mm/slub.c:3539 [inline] BUG: KASAN: double-free in kfree+0xe2/0x580 mm/slub.c:4567 CPU: 0 PID: 3645 Comm: kworker/0:7 Not tainted 6.0.0-syzkaller-02734-g0326074ff465 #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/22/2022 Workqueue: events mptcp_worker Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106 print_address_description mm/kasan/report.c:317 [inline] print_report.cold+0x2ba/0x719 mm/kasan/report.c:433 kasan_report_invalid_free+0x81/0x190 mm/kasan/report.c:462 ____kasan_slab_free+0x18b/0x1c0 mm/kasan/common.c:356 kasan_slab_free include/linux/kasan.h:200 [inline] slab_free_hook mm/slub.c:1759 [inline] slab_free_freelist_hook+0x8b/0x1c0 mm/slub.c:1785 slab_free mm/slub.c:3539 [inline] kfree+0xe2/0x580 mm/slub.c:4567 tcp_disconnect+0x980/0x1e20 net/ipv4/tcp.c:3145 __mptcp_close_ssk+0x5ca/0x7e0 net/mptcp/protocol.c:2327 mptcp_do_fastclose net/mptcp/protocol.c:2592 [inline] mptcp_worker+0x78c/0xff0 net/mptcp/protocol.c:2627 process_one_work+0x991/0x1610 kernel/workqueue.c:2289 worker_thread+0x665/0x1080 kernel/workqueue.c:2436 kthread+0x2e4/0x3a0 kernel/kthread.c:376 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:306 </TASK> Allocated by task 3671: kasan_save_stack+0x1e/0x40 mm/kasan/common.c:38 kasan_set_track mm/kasan/common.c:45 [inline] set_alloc_info mm/kasan/common.c:437 [inline] ____kasan_kmalloc mm/kasan/common.c:516 [inline] ____kasan_kmalloc mm/kasan/common.c:475 [inline] __kasan_kmalloc+0xa9/0xd0 mm/kasan/common.c:525 kmalloc_array include/linux/slab.h:640 [inline] kcalloc include/linux/slab.h:671 [inline] tcp_cdg_init+0x10d/0x170 net/ipv4/tcp_cdg.c:380 tcp_init_congestion_control+0xab/0x550 net/ipv4/tcp_cong.c:193 tcp_reinit_congestion_control net/ipv4/tcp_cong.c:217 [inline] tcp_set_congestion_control+0x96c/0xaa0 net/ipv4/tcp_cong.c:391 do_tcp_setsockopt+0x505/0x2320 net/ipv4/tcp.c:3513 tcp_setsockopt+0xd4/0x100 net/ipv4/tcp.c:3801 mptcp_setsockopt+0x35f/0x2570 net/mptcp/sockopt.c:844 __sys_setsockopt+0x2d6/0x690 net/socket.c:2252 __do_sys_setsockopt net/socket.c:2263 [inline] __se_sys_setsockopt net/socket.c:2260 [inline] __x64_sys_setsockopt+0xba/0x150 net/socket.c:2260 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd Freed by task 16: kasan_save_stack+0x1e/0x40 mm/kasan/common.c:38 kasan_set_track+0x21/0x30 mm/kasan/common.c:45 kasan_set_free_info+0x20/0x30 mm/kasan/generic.c:370 ____kasan_slab_free mm/kasan/common.c:367 [inline] ____kasan_slab_free+0x166/0x1c0 mm/kasan/common.c:329 kasan_slab_free include/linux/kasan.h:200 [inline] slab_free_hook mm/slub.c:1759 [inline] slab_free_freelist_hook+0x8b/0x1c0 mm/slub.c:1785 slab_free mm/slub.c:3539 [inline] kfree+0xe2/0x580 mm/slub.c:4567 tcp_cleanup_congestion_control+0x70/0x120 net/ipv4/tcp_cong.c:226 tcp_v4_destroy_sock+0xdd/0x750 net/ipv4/tcp_ipv4.c:2254 tcp_v6_destroy_sock+0x11/0x20 net/ipv6/tcp_ipv6.c:1969 inet_csk_destroy_sock+0x196/0x440 net/ipv4/inet_connection_sock.c:1157 tcp_done+0x23b/0x340 net/ipv4/tcp.c:4649 tcp_rcv_state_process+0x40e7/0x4990 net/ipv4/tcp_input.c:6624 tcp_v6_do_rcv+0x3fc/0x13c0 net/ipv6/tcp_ipv6.c:1525 tcp_v6_rcv+0x2e8e/0x3830 net/ipv6/tcp_ipv6.c:1759 ip6_protocol_deliver_rcu+0x2db/0x1950 net/ipv6/ip6_input.c:439 ip6_input_finish+0x14c/0x2c0 net/ipv6/ip6_input.c:484 NF_HOOK include/linux/netfilter.h:302 [inline] NF_HOOK include/linux/netfilter.h:296 [inline] ip6_input+0x9c/0xd0 net/ipv6/ip6_input.c:493 dst_input include/net/dst.h:455 [inline] ip6_rcv_finish+0x193/0x2c0 net/ipv6/ip6_input.c:79 ip_sabotage_in net/bridge/br_netfilter_hooks.c:874 [inline] ip_sabotage_in+0x1fa/0x260 net/bridge/br_netfilter_hooks.c:865 nf_hook_entry_hookfn include/linux/netfilter.h:142 [inline] nf_hook_slow+0xc5/0x1f0 net/netfilter/core.c:614 nf_hook.constprop.0+0x3ac/0x650 include/linux/netfilter.h:257 NF_HOOK include/linux/netfilter.h:300 [inline] ipv6_rcv+0x9e/0x380 net/ipv6/ip6_input.c:309 __netif_receive_skb_one_core+0x114/0x180 net/core/dev.c:5485 __netif_receive_skb+0x1f/0x1c0 net/core/dev.c:5599 netif_receive_skb_internal net/core/dev.c:5685 [inline] netif_receive_skb+0x12f/0x8d0 net/core/dev.c:5744 NF_HOOK include/linux/netfilter.h:302 [inline] NF_HOOK include/linux/netfilter.h:296 [inline] br_pass_frame_up+0x303/0x410 net/bridge/br_input.c:68 br_handle_frame_finish+0x909/0x1aa0 net/bridge/br_input.c:199 br_nf_hook_thresh+0x2f8/0x3d0 net/bridge/br_netfilter_hooks.c:1041 br_nf_pre_routing_finish_ipv6+0x695/0xef0 net/bridge/br_netfilter_ipv6.c:207 NF_HOOK include/linux/netfilter.h:302 [inline] br_nf_pre_routing_ipv6+0x417/0x7c0 net/bridge/br_netfilter_ipv6.c:237 br_nf_pre_routing+0x1496/0x1fe0 net/bridge/br_netfilter_hooks.c:507 nf_hook_entry_hookfn include/linux/netfilter.h:142 [inline] nf_hook_bridge_pre net/bridge/br_input.c:255 [inline] br_handle_frame+0x9c9/0x12d0 net/bridge/br_input.c:399 __netif_receive_skb_core+0x9fe/0x38f0 net/core/dev.c:5379 __netif_receive_skb_one_core+0xae/0x180 net/core/dev.c:5483 __netif_receive_skb+0x1f/0x1c0 net/core/dev.c:5599 process_backlog+0x3a0/0x7c0 net/core/dev.c:5927 __napi_poll+0xb3/0x6d0 net/core/dev.c:6494 napi_poll net/core/dev.c:6561 [inline] net_rx_action+0x9c1/0xd90 net/core/dev.c:6672 __do_softirq+0x1d0/0x9c8 kernel/softirq.c:571
--- net/ipv4/tcp_cdg.c | 2 ++ 1 file changed, 2 insertions(+)
net/ipv4/tcp_cdg.c +2 -0
@@ -382,6 +382,7 @@ static void tcp_cdg_init(struct sock *skstruct cdg *ca =inet_csk_ca (sk);struct tcp_sock *tp =tcp_sk (sk); + ca->gradients =NULL ;/* We silently fall back to window = 1 if allocation fails. */ if (window >1 ) ca->gradients = kcalloc(window, sizeof(ca->gradients[0]),
@@ -395,6 +396,7 @@ static void tcp_cdg_release(struct sockstruct cdg *ca =inet_csk_ca (sk);kfree (ca->gradients); + ca->gradients =NULL ; }struct tcp_congestion_ops tcp_cdg__read_mostly = {
Greg Kroah-Hartman
maintainerPATCH 68/76 kcm: avoid potential race in kcm_tx_work
In reply to Greg Kroah-HartmanFrom: Eric Dumazet <[email protected]>
commit ec7eede369fe5b0d085ac51fdbb95184f87bfc6c upstream.
syzbot found that kcm_tx_work() could crash [1] in:
/* Primarily for SOCK_SEQPACKET sockets */
if (likely(sk->sk_socket) &&
test_bit(SOCK_NOSPACE, &sk->sk_socket->flags)) {
<<*>> clear_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
sk->sk_write_space(sk);
}I think the reason is that another thread might concurrently run in kcm_release() and call sock_orphan(sk) while sk is not locked. kcm_tx_work() find sk->sk_socket being NULL.
[1]
BUG: KASAN: null-ptr-deref in instrument_atomic_write include/linux/instrumented.h:86 [inline] BUG: KASAN: null-ptr-deref in clear_bit include/asm-generic/bitops/instrumented-atomic.h:41 [inline] BUG: KASAN: null-ptr-deref in kcm_tx_work+0xff/0x160 net/kcm/kcmsock.c:742 Write of size 8 at addr 0000000000000008 by task kworker/u4:3/53 CPU: 0 PID: 53 Comm: kworker/u4:3 Not tainted 5.19.0-rc3-next-20220621-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Workqueue: kkcmd kcm_tx_work Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106 kasan_report+0xbe/0x1f0 mm/kasan/report.c:495 check_region_inline mm/kasan/generic.c:183 [inline] kasan_check_range+0x13d/0x180 mm/kasan/generic.c:189 instrument_atomic_write include/linux/instrumented.h:86 [inline] clear_bit include/asm-generic/bitops/instrumented-atomic.h:41 [inline] kcm_tx_work+0xff/0x160 net/kcm/kcmsock.c:742 process_one_work+0x996/0x1610 kernel/workqueue.c:2289 worker_thread+0x665/0x1080 kernel/workqueue.c:2436 kthread+0x2e9/0x3a0 kernel/kthread.c:376 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:302 </TASK>
--- net/kcm/kcmsock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/kcm/kcmsock.c +1 -1
@@ -1850,10 +1850,10 @@ static int kcm_release(struct socket *so kcm =kcm_sk (sk); mux = kcm->mux; +lock_sock (sk);sock_orphan (sk);kfree_skb (kcm->seq_skb); -lock_sock (sk);/* Purge queue under lock to avoid race condition with tx_work trying * to act when queue is nonempty. If tx_work runs after this point * it will just return.
Greg Kroah-Hartman
maintainerPATCH 69/76 9p: trans_fd/p9_conn_cancel: drop client lock earlier
In reply to Greg Kroah-HartmanFrom: Dominique Martinet <[email protected]>
commit 52f1c45dde9136f964d63a77d19826c8a74e2c7f upstream.
syzbot reported a double-lock here and we no longer need this lock after requests have been moved off to local list:
just drop the lock earlier.
--- net/9p/trans_fd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/9p/trans_fd.c +2 -1
@@ -215,6 +215,8 @@ static void p9_conn_cancel(struct p9_conlist_move (&req->req_list, &cancel_list); } +spin_unlock (&m->client->lock); +list_for_each_entry_safe (req, rtmp, &cancel_list, req_list) {p9_debug (P9_DEBUG_ERROR ,"call back req %p\n" , req);list_del (&req->req_list);
@@ -222,7 +224,6 @@ static void p9_conn_cancel(struct p9_con req->t_err = err;p9_client_cb (m->client, req,REQ_STATUS_ERROR ); } -spin_unlock (&m->client->lock); } static int
Greg Kroah-Hartman
maintainerPATCH 70/76 gfs2: Check sb_bsize_shift after reading superblock
In reply to Greg Kroah-HartmanFrom: Andrew Price <[email protected]>
commit 670f8ce56dd0632dc29a0322e188cc73ce3c6b92 upstream.
Fuzzers like to scribble over sb_bsize_shift but in reality it's very unlikely that this field would be corrupted on its own. Nevertheless it should be checked to avoid the possibility of messy mount errors due to bad calculations. It's always a fixed value based on the block size so we can just check that it's the expected value.
Tested with:
mkfs.gfs2 -O -p lock_nolock /dev/vdb
for i in 0 -1 64 65 32 33; do
gfs2_edit -p sb field sb_bsize_shift $i /dev/vdb mount /dev/vdb /mnt/test && umount /mnt/test
done
Before this patch we get a withdraw after
[ 76.413681] gfs2: fsid=loop0.0: fatal: invalid metadata block [ 76.413681] bh = 19 (type: exp=5, found=4) [ 76.413681] function = gfs2_meta_buffer, file = fs/gfs2/meta_io.c, line = 492
and with UBSAN configured we also get complaints like
[ 76.373395] UBSAN: shift-out-of-bounds in fs/gfs2/ops_fstype.c:295:19 [ 76.373815] shift exponent 4294967287 is too large for 64-bit type 'long unsigned int'
After the patch, these complaints don't appear, mount fails immediately and we get an explanation in dmesg.
--- fs/gfs2/ops_fstype.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
fs/gfs2/ops_fstype.c +4 -1
@@ -171,7 +171,10 @@ static int gfs2_check_sb(struct gfs2_sbdpr_warn ("Invalid superblock size\n" );return -EINVAL ; } - +if (sb->sb_bsize_shift !=ffs (sb->sb_bsize) -1 ) { +pr_warn ("Invalid block size shift\n" ); +return -EINVAL ; + }return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 71/76 gfs2: Switch from strlcpy to strscpy
In reply to Greg Kroah-HartmanFrom: Andreas Gruenbacher <[email protected]>
commit 204c0300c4e99707e9fb6e57840aa1127060e63f upstream.
Switch from strlcpy to strscpy and make sure that @count is the size of the smaller of the source and destination buffers. This prevents reading beyond the end of the source buffer when the source string isn't null terminated.
Found by a modified version of syzkaller.
--- fs/gfs2/ops_fstype.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
fs/gfs2/ops_fstype.c +4 -2
@@ -390,8 +390,10 @@ static int init_names(struct gfs2_sbd *sif (!table[0 ]) table = sdp->sd_vfs->s_id; -strlcpy (sdp->sd_proto_name, proto,GFS2_FSNAME_LEN ); -strlcpy (sdp->sd_table_name, table,GFS2_FSNAME_LEN ); +BUILD_BUG_ON (GFS2_LOCKNAME_LEN >GFS2_FSNAME_LEN ); + +strscpy (sdp->sd_proto_name, proto,GFS2_LOCKNAME_LEN ); +strscpy (sdp->sd_table_name, table,GFS2_LOCKNAME_LEN ); table = sdp->sd_table_name;while ((table =strchr (table,'/' )))
Greg Kroah-Hartman
maintainerPATCH 72/76 9p/trans_fd: always use O_NONBLOCK read/write
In reply to Greg Kroah-HartmanFrom: Tetsuo Handa <[email protected]>
commit ef575281b21e9a34dfae544a187c6aac2ae424a9 upstream.
syzbot is reporting hung task at p9_fd_close() [1], for p9_mux_poll_stop()
from p9_conn_destroy() from p9_fd_close() is failing to interrupt already
started kernel_read() from p9_fd_read() from p9_read_work() and/or kernel_write() from p9_fd_write() from p9_write_work() requests.
Since p9_socket_open() sets O_NONBLOCK flag, p9_mux_poll_stop() does not need to interrupt kernel_read()/kernel_write(). However, since p9_fd_open() does not set O_NONBLOCK flag, but pipe blocks unless signal is pending, p9_mux_poll_stop() needs to interrupt kernel_read()/kernel_write() when the file descriptor refers to a pipe. In other words, pipe file descriptor needs to be handled as if socket file descriptor.
We somehow need to interrupt kernel_read()/kernel_write() on pipes.
A minimal change, which this patch is doing, is to set O_NONBLOCK flag
from p9_fd_open(), for O_NONBLOCK flag does not affect reading/writing
of regular files. But this approach changes O_NONBLOCK flag on userspace- supplied file descriptors (which might break userspace programs), and O_NONBLOCK flag could be changed by userspace. It would be possible to set O_NONBLOCK flag every time p9_fd_read()/p9_fd_write() is invoked, but still remains small race window for clearing O_NONBLOCK flag.
If we don't want to manipulate O_NONBLOCK flag, we might be able to surround kernel_read()/kernel_write() with set_thread_flag(TIF_SIGPENDING) and recalc_sigpending(). Since p9_read_work()/p9_write_work() works are processed by kernel threads which process global system_wq workqueue, signals could not be delivered from remote threads when p9_mux_poll_stop()
from p9_conn_destroy() from p9_fd_close() is called. Therefore, calling
set_thread_flag(TIF_SIGPENDING)/recalc_sigpending() every time would be needed if we count on signals for making kernel_read()/kernel_write() non-blocking.
--- net/9p/trans_fd.c | 3 +++ 1 file changed, 3 insertions(+)
net/9p/trans_fd.c +3 -0
@@ -820,11 +820,14 @@ static int p9_fd_open(struct p9_client * goto out_free_ts;if (!(ts->rd->f_mode &FMODE_READ )) goto out_put_rd; +/* prevent workers from hanging on IO when fd is a pipe */ + ts->rd->f_flags |=O_NONBLOCK ; ts->wr =fget (wfd);if (!ts->wr) goto out_put_rd;if (!(ts->wr->f_mode &FMODE_WRITE )) goto out_put_wr; + ts->wr->f_flags |=O_NONBLOCK ; client->trans = ts; client->status = Connected;
Greg Kroah-Hartman
maintainerPATCH 73/76 mm: fs: initialize fsdata passed to write_begin/write_end interface
In reply to Greg Kroah-HartmanFrom: Alexander Potapenko <[email protected]>
commit 1468c6f4558b1bcd92aa0400f2920f9dc7588402 upstream.
Functions implementing the a_ops->write_end() interface accept the void *fsdata parameter that is supposed to be initialized by the corresponding a_ops->write_begin() (which accepts void **fsdata).
However not all a_ops->write_begin() implementations initialize fsdata unconditionally, so it may get passed uninitialized to a_ops->write_end(), resulting in undefined behavior.
Fix this by initializing fsdata with NULL before the call to write_begin(), rather than doing so in all possible a_ops implementations.
This patch covers only the following cases found by running x86 KMSAN under syzkaller:
- generic_perform_write()
- cont_expand_zero() and generic_cont_expand_simple()
- page_symlink()
Other cases of passing uninitialized fsdata may persist in the codebase.
--- fs/buffer.c | 4 ++-- fs/namei.c | 2 +- mm/filemap.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-)
fs/buffer.c +2 -2
@@ -2329,7 +2329,7 @@ int generic_cont_expand_simple(struct in {struct address_space *mapping = inode->i_mapping;struct page *page; -void *fsdata; +void *fsdata =NULL ;int err; err =inode_newsize_ok (inode, size);
@@ -2356,7 +2356,7 @@ static int cont_expand_zero(struct filestruct inode *inode = mapping->host;unsigned int blocksize =i_blocksize (inode);struct page *page; -void *fsdata; +void *fsdata =NULL ;pgoff_t index, curidx;loff_t curpos;unsigned zerofrom, offset, len;
fs/namei.c +1 -1
@@ -4802,7 +4802,7 @@ int __page_symlink(struct inode *inode, {struct address_space *mapping = inode->i_mapping;struct page *page; -void *fsdata; +void *fsdata =NULL ;int err;unsigned int flags =AOP_FLAG_UNINTERRUPTIBLE ;if (nofs)
mm/filemap.c +1 -1
@@ -2719,7 +2719,7 @@ ssize_t generic_perform_write(struct filunsigned long offset;/* Offset into pagecache page */ unsigned long bytes;/* Bytes to write to page */ size_t copied;/* Bytes copied from user */ -void *fsdata; +void *fsdata =NULL ; offset = (pos & (PAGE_SIZE -1 )); bytes = min_t(unsigned long, PAGE_SIZE - offset,
Greg Kroah-Hartman
maintainerPATCH 74/76 ntfs: fix use-after-free in ntfs_attr_find()
In reply to Greg Kroah-HartmanFrom: Hawkins Jiawei <[email protected]>
commit d85a1bec8e8d552ab13163ca1874dcd82f3d1550 upstream.
Patch series "ntfs: fix bugs about Attribute", v2.
This patchset fixes three bugs relative to Attribute in record:
Patch 1 adds a sanity check to ensure that, attrs_offset field in first mft record loading from disk is within bounds.
Patch 2 moves the ATTR_RECORD's bounds checking earlier, to avoid dereferencing ATTR_RECORD before checking this ATTR_RECORD is within bounds.
Patch 3 adds an overflow checking to avoid possible forever loop in ntfs_attr_find().
Without patch 1 and patch 2, the kernel triggersa KASAN use-after-free detection as reported by Syzkaller.
Although one of patch 1 or patch 2 can fix this, we still need both of them. Because patch 1 fixes the root cause, and patch 2 not only fixes the direct cause, but also fixes the potential out-of-bounds bug.
This patch (of 3):
Syzkaller reported use-after-free read as follows:
==================================================================
BUG: KASAN: use-after-free in ntfs_attr_find+0xc02/0xce0 fs/ntfs/attrib.c:597 Read of size 2 at addr ffff88807e352009 by task syz-executor153/3607
[...]
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
print_address_description mm/kasan/report.c:317 [inline]
print_report.cold+0x2ba/0x719 mm/kasan/report.c:433
kasan_report+0xb1/0x1e0 mm/kasan/report.c:495
ntfs_attr_find+0xc02/0xce0 fs/ntfs/attrib.c:597
ntfs_attr_lookup+0x1056/0x2070 fs/ntfs/attrib.c:1193
ntfs_read_inode_mount+0x89a/0x2580 fs/ntfs/inode.c:1845
ntfs_fill_super+0x1799/0x9320 fs/ntfs/super.c:2854
mount_bdev+0x34d/0x410 fs/super.c:1400
legacy_get_tree+0x105/0x220 fs/fs_context.c:610
vfs_get_tree+0x89/0x2f0 fs/super.c:1530
do_new_mount fs/namespace.c:3040 [inline]
path_mount+0x1326/0x1e20 fs/namespace.c:3370
do_mount fs/namespace.c:3383 [inline]
__do_sys_mount fs/namespace.c:3591 [inline]
__se_sys_mount fs/namespace.c:3568 [inline]
__x64_sys_mount+0x27f/0x300 fs/namespace.c:3568
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x63/0xcd
[...]
</TASK>
The buggy address belongs to the physical page:
page:ffffea0001f8d400 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x7e350
head:ffffea0001f8d400 order:3 compound_mapcount:0 compound_pincount:0
flags: 0xfff00000010200(slab|head|node=0|zone=1|lastcpupid=0x7ff)
raw: 00fff00000010200 0000000000000000 dead000000000122 ffff888011842140
raw: 0000000000000000 0000000000040004 00000001ffffffff 0000000000000000
page dumped because: kasan: bad access detected
Memory state around the buggy address:
ffff88807e351f00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff88807e351f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
>ffff88807e352000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
^
ffff88807e352080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
ffff88807e352100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
==================================================================Kernel will loads $MFT/$DATA's first mft record in ntfs_read_inode_mount().
Yet the problem is that after loading, kernel doesn't check whether attrs_offset field is a valid value.
To be more specific, if attrs_offset field is larger than bytes_allocated field, then it may trigger the out-of-bounds read bug(reported as use-after-free bug) in ntfs_attr_find(), when kernel tries to access the corresponding mft record's attribute.
This patch solves it by adding the sanity check between attrs_offset field and bytes_allocated field, after loading the first mft record.
--- fs/ntfs/inode.c | 7 +++++++ 1 file changed, 7 insertions(+)
fs/ntfs/inode.c +7 -0
@@ -1863,6 +1863,13 @@ int ntfs_read_inode_mount(struct inode * goto err_out; } +/* Sanity check offset to the first attribute */ +if (le16_to_cpu (m->attrs_offset) >=le32_to_cpu (m->bytes_allocated)) { +ntfs_error (sb,"Incorrect mft offset to the first attribute %u in superblock." , +le16_to_cpu (m->attrs_offset)); + goto err_out; + } +/* Need this to sanity check attribute list references to $MFT. */ vi->i_generation = ni->seq_no =le16_to_cpu (m->sequence_number);
Greg Kroah-Hartman
maintainerPATCH 75/76 ntfs: fix out-of-bounds read in ntfs_attr_find()
In reply to Greg Kroah-HartmanFrom: Hawkins Jiawei <[email protected]>
commit 36a4d82dddbbd421d2b8e79e1cab68c8126d5075 upstream.
Kernel iterates over ATTR_RECORDs in mft record in ntfs_attr_find(). To ensure access on these ATTR_RECORDs are within bounds, kernel will do some checking during iteration.
The problem is that during checking whether ATTR_RECORD's name is within bounds, kernel will dereferences the ATTR_RECORD name_offset field, before checking this ATTR_RECORD strcture is within bounds. This problem may result out-of-bounds read in ntfs_attr_find(), reported by Syzkaller:
==================================================================
BUG: KASAN: use-after-free in ntfs_attr_find+0xc02/0xce0 fs/ntfs/attrib.c:597 Read of size 2 at addr ffff88807e352009 by task syz-executor153/3607
[...]
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
print_address_description mm/kasan/report.c:317 [inline]
print_report.cold+0x2ba/0x719 mm/kasan/report.c:433
kasan_report+0xb1/0x1e0 mm/kasan/report.c:495
ntfs_attr_find+0xc02/0xce0 fs/ntfs/attrib.c:597
ntfs_attr_lookup+0x1056/0x2070 fs/ntfs/attrib.c:1193
ntfs_read_inode_mount+0x89a/0x2580 fs/ntfs/inode.c:1845
ntfs_fill_super+0x1799/0x9320 fs/ntfs/super.c:2854
mount_bdev+0x34d/0x410 fs/super.c:1400
legacy_get_tree+0x105/0x220 fs/fs_context.c:610
vfs_get_tree+0x89/0x2f0 fs/super.c:1530
do_new_mount fs/namespace.c:3040 [inline]
path_mount+0x1326/0x1e20 fs/namespace.c:3370
do_mount fs/namespace.c:3383 [inline]
__do_sys_mount fs/namespace.c:3591 [inline]
__se_sys_mount fs/namespace.c:3568 [inline]
__x64_sys_mount+0x27f/0x300 fs/namespace.c:3568
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x63/0xcd
[...]
</TASK>
The buggy address belongs to the physical page:
page:ffffea0001f8d400 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x7e350
head:ffffea0001f8d400 order:3 compound_mapcount:0 compound_pincount:0
flags: 0xfff00000010200(slab|head|node=0|zone=1|lastcpupid=0x7ff)
raw: 00fff00000010200 0000000000000000 dead000000000122 ffff888011842140
raw: 0000000000000000 0000000000040004 00000001ffffffff 0000000000000000
page dumped because: kasan: bad access detected
Memory state around the buggy address:
ffff88807e351f00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff88807e351f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
>ffff88807e352000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
^
ffff88807e352080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
ffff88807e352100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
==================================================================This patch solves it by moving the ATTR_RECORD strcture's bounds checking earlier, then checking whether ATTR_RECORD's name is within bounds. What's more, this patch also add some comments to improve its maintainability.
--- fs/ntfs/attrib.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)
fs/ntfs/attrib.c +16 -4
@@ -608,11 +608,23 @@ static int ntfs_attr_find(const ATTR_TYPfor (;; a = (ATTR_RECORD *)((u8 *)a +le32_to_cpu (a->length))) {u8 *mrec_end = (u8 *)ctx->mrec +le32_to_cpu (ctx->mrec->bytes_allocated); -u8 *name_end = (u8 *)a +le16_to_cpu (a->name_offset) + - a->name_length *sizeof (ntfschar); -if ((u8 *)a < (u8 *)ctx->mrec || (u8 *)a > mrec_end || - name_end > mrec_end) +u8 *name_end; + +/* check whether ATTR_RECORD wrap */ +if ((u8 *)a < (u8 *)ctx->mrec)break ; + +/* check whether Attribute Record Header is within bounds */ +if ((u8 *)a > mrec_end || + (u8 *)a +sizeof (ATTR_RECORD ) > mrec_end) +break ; + +/* check whether ATTR_RECORD's name is within bounds */ + name_end = (u8 *)a +le16_to_cpu (a->name_offset) + + a->name_length *sizeof (ntfschar); +if (name_end > mrec_end) +break ; + ctx->attr = a;if (unlikely (le32_to_cpu (a->type) >le32_to_cpu (type) || a->type ==AT_END ))
Greg Kroah-Hartman
maintainerPATCH 76/76 ntfs: check overflow when iterating ATTR_RECORDs
In reply to Greg Kroah-HartmanFrom: Hawkins Jiawei <[email protected]>
commit 63095f4f3af59322bea984a6ae44337439348fe0 upstream.
Kernel iterates over ATTR_RECORDs in mft record in ntfs_attr_find(). Because the ATTR_RECORDs are next to each other, kernel can get the next ATTR_RECORD from end address of current ATTR_RECORD, through current ATTR_RECORD length field.
The problem is that during iteration, when kernel calculates the end address of current ATTR_RECORD, kernel may trigger an integer overflow bug in executing a = (ATTR_RECORD*)((u8*)a + le32_to_cpu(a->length)). This may wrap, leading to a forever iteration on 32bit systems.
This patch solves it by adding some checks on calculating end address of current ATTR_RECORD during iteration.
--- fs/ntfs/attrib.c | 8 ++++++++ 1 file changed, 8 insertions(+)
fs/ntfs/attrib.c +8 -0
@@ -631,6 +631,14 @@ static int ntfs_attr_find(const ATTR_TYPreturn -ENOENT ;if (unlikely (!a->length))break ; + +/* check whether ATTR_RECORD's length wrap */ +if ((u8 *)a +le32_to_cpu (a->length) < (u8 *)a) +break ; +/* check whether ATTR_RECORD's length is within bounds */ +if ((u8 *)a +le32_to_cpu (a->length) > mrec_end) +break ; +if (a->type != type)continue ;/*
Hi!
Quoted 4 lines
This is the start of the stable review cycle for the 4.9.334 release. There are 76 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.
CIP testing did not find any problems here:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-4.9.y
Best regards,
Pavel
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Hi!
Quoted 8 lines
This is the start of the stable review cycle for the 4.9.334 release. There are 76 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.
Nathan Huckleberry <[email protected]>
drm/imx: imx-tve: Fix return type ofimx_tve_connector_mode_valid
This is just a kCFI annotation, we don't really need them in stable.
Quoted 2 lines
Alexandre Belloni <[email protected]>
rtc: cmos: fix build on non-ACPI platforms
I believe maintainersaid we don't need this in stable. Should I google for exact mail?
Best regards,
Pavel
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.334 release. There are 76 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 Fri, 25 Nov 2022 08:45:20 +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/v4.x/stable-review/patch-4.9.334-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v4.9:
8 builds: 8 pass, 0 fail
16 boots: 16 pass, 0 fail
32 tests: 32 pass, 0 failLinux version: 4.9.334-rc1-g48639dd0eacc
Boards tested: tegra124-jetson-tk1, tegra20-ventana,
tegra210-p2371-2180, tegra30-cardhu-a04
Jon
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.334 release. There are 76 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 Fri, 25 Nov 2022 08:45:20 +0000. Anything received after that time might be too late.
Build results:
total: 164 pass: 164 fail: 0 Qemu test results: total: 395 pass: 395 fail: 0
Guenter
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.334 release. There are 76 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 Fri, 25 Nov 2022 08:45:20 +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/v4.x/stable-review/patch-4.9.334-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.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: 4.9.334-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-4.9.y
* git commit: 48639dd0eaccd88a77f3a3ca4c609915a94fcf79
* git describe: v4.9.333-77-g48639dd0eacc
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-4.9.y/build/v4.9.333-77-g48639dd0eacc
## Test Regressions (compared to v4.9.333-65-ga31fc950024b)
## Metric Regressions (compared to v4.9.333-65-ga31fc950024b)
## Test Fixes (compared to v4.9.333-65-ga31fc950024b)
## Metric Fixes (compared to v4.9.333-65-ga31fc950024b)
## Test result summary
total: 66462, pass: 57530, fail: 829, skip: 7490, xfail: 613
## Build Summary
* arc: 10 total, 10 passed, 0 failed
* arm: 280 total, 277 passed, 3 failed
* arm64: 51 total, 46 passed, 5 failed
* i386: 29 total, 28 passed, 1 failed
* mips: 41 total, 40 passed, 1 failed
* parisc: 12 total, 0 passed, 12 failed
* powerpc: 45 total, 19 passed, 26 failed
* s390: 15 total, 11 passed, 4 failed
* sh: 24 total, 24 passed, 0 failed
* sparc: 12 total, 12 passed, 0 failed
* x86_64: 48 total, 47 passed, 1 failed
## Test suites summary
* boot
* fwts
* igt-gpu-tools
* kselftest-android
* kselftest-arm64
* kselftest-arm64/arm64.btitest.bti_c_func
* kselftest-arm64/arm64.btitest.bti_j_func
* kselftest-arm64/arm64.btitest.bti_jc_func
* kselftest-arm64/arm64.btitest.bti_none_func
* kselftest-arm64/arm64.btitest.nohint_func
* kselftest-arm64/arm64.btitest.paciasp_func
* kselftest-arm64/arm64.nobtitest.bti_c_func
* kselftest-arm64/arm64.nobtitest.bti_j_func
* kselftest-arm64/arm64.nobtitest.bti_jc_func
* kselftest-arm64/arm64.nobtitest.bti_none_func
* kselftest-arm64/arm64.nobtitest.nohint_func
* kselftest-arm64/arm64.nobtitest.paciasp_func
* kselftest-breakpoints
* kselftest-drivers-dma-buf
* kselftest-efivarfs
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-kvm
* kselftest-lib
* kselftest-net-forwarding
* kselftest-netfilter
* kselftest-openat2
* kselftest-seccomp
* kselftest-timens
* 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-open-posix-tests
* ltp-pty
* ltp-sched
* ltp-securebits
* ltp-smoke
* ltp-syscalls
* ltp-tracing
* network-basic-tests
* packetdrill
* rcutorture
* timesync-off
* 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 4.9.334 release. There are 76 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 Fri, 25 Nov 2022 08:45:20 +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/v4.x/stable-review/patch-4.9.334-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.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