4.9.130-stable review
Greg Kroah-Hartman
maintainerPATCH 1/44 NFC: Fix possible memory corruption when handling SHDLC I-Frame commands
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Suren Baghdasaryan <[email protected]>
commit 674d9de02aa7d521ebdf66c3958758bdd9c64e11 upstream.
When handling SHDLC I-Frame commands "pipe" field used for indexing into an array should be checked before usage. If left unchecked it might access memory outside of the array of size NFC_HCI_MAX_PIPES(127).
Malformed NFC HCI frames could be injected by a malicious NFC device communicating with the device being attacked (remote attack vector), or even by an attacker with physical access to the I2C bus such that they could influence the data transfers on that bus (local attack vector). skb->data is controlled by the attacker and has only been sanitized in the most trivial ways (CRC check), therefore we can consider the create_info struct and all of its members to tainted. 'create_info->pipe' with max value of 255 (uint8) is used to take an offset of the hdev->pipes array of 127 elements which can lead to OOB write.
--- net/nfc/hci/core.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
net/nfc/hci/core.c +10 -0
@@ -209,6 +209,11 @@ void nfc_hci_cmd_received(struct nfc_hci } create_info = (struct hci_create_pipe_resp *)skb->data; +if (create_info->pipe >=NFC_HCI_MAX_PIPES ) { + status =NFC_HCI_ANY_E_NOK ; + goto exit; + } +/* Save the new created pipe and bind with local gate, * the description for skb->data[3] is destination gate id * but since we received this cmd from host controller, we
@@ -232,6 +237,11 @@ void nfc_hci_cmd_received(struct nfc_hci } delete_info = (struct hci_delete_pipe_noti *)skb->data; +if (delete_info->pipe >=NFC_HCI_MAX_PIPES ) { + status =NFC_HCI_ANY_E_NOK ; + goto exit; + } + hdev->pipes[delete_info->pipe].gate =NFC_HCI_INVALID_GATE ; hdev->pipes[delete_info->pipe].dest_host =NFC_HCI_INVALID_HOST ;break ;
Greg Kroah-Hartman
maintainerPATCH 4/44 ALSA: bebob: fix memory leak for M-Audio FW1814 and ProjectMix I/O at error path
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Sakamoto <[email protected]>
commit b1fbebd4164b3d170ad916dcd692cf843c9c065d upstream.
After allocating model-dependent data for M-Audio FW1814 and ProjectMix I/O, ALSA bebob driver has memory leak at error path.
This commit releases the allocated data at the error path.
--- sound/firewire/bebob/bebob.c | 2 ++ sound/firewire/bebob/bebob_maudio.c | 4 ---- 2 files changed, 2 insertions(+), 4 deletions(-)
sound/firewire/bebob/bebob.c +2 -0
@@ -263,6 +263,8 @@ do_registration(struct work_struct *work error:mutex_unlock (&devices_mutex);snd_bebob_stream_destroy_duplex (bebob); +kfree (bebob->maudio_special_quirk); + bebob->maudio_special_quirk =NULL ;snd_card_free (bebob->card);dev_info (&bebob->unit->device,"Sound card registration failed: %d\n" , err);
sound/firewire/bebob/bebob_maudio.c +0 -4
@@ -290,10 +290,6 @@ snd_bebob_maudio_special_discover(struct bebob->midi_output_ports =2 ; } end: -if (err <0 ) { -kfree (params); - bebob->maudio_special_quirk =NULL ; - }mutex_unlock (&bebob->mutex);return err; }
Greg Kroah-Hartman
maintainerPATCH 5/44 ALSA: bebob: use address returned by kmalloc() instead of kernel stack for streaming DMA mapping
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Sakamoto <[email protected]>
commit 493626f2d87a74e6dbea1686499ed6e7e600484e upstream.
When executing 'fw_run_transaction()' with 'TCODE_WRITE_BLOCK_REQUEST', an address of 'payload' argument is used for streaming DMA mapping by 'firewire_ohci' module if 'size' argument is larger than 8 byte. Although in this case the address should not be on kernel stack, current implementation of ALSA bebob driver uses data in kernel stack for a cue to boot M-Audio devices. This often brings unexpected result, especially for a case of CONFIG_VMAP_STACK=y.
This commit fixes the bug.
Reference: https://bugzilla.kernel.org/show_bug.cgi?id=201021
Reference: https://forum.manjaro.org/t/firewire-m-audio-410-driver-wont-load-firmware/51165
--- sound/firewire/bebob/bebob_maudio.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-)
sound/firewire/bebob/bebob_maudio.c +14 -10
@@ -96,17 +96,13 @@ int snd_bebob_maudio_load_firmware(strucstruct fw_device *device =fw_parent_device (unit);int err, rcode;u64 date; -__le32 cues[3 ] = { -cpu_to_le32 (MAUDIO_BOOTLOADER_CUE1 ), -cpu_to_le32 (MAUDIO_BOOTLOADER_CUE2 ), -cpu_to_le32 (MAUDIO_BOOTLOADER_CUE3 ) - }; +__le32 *cues;/* check date of software used to build */ err =snd_bebob_read_block (unit,INFO_OFFSET_SW_DATE , &date,sizeof (u64));if (err <0 ) - goto end; +return err;/* * firmware version 5058 or later has date later than "20070401", but * 'date' is not null-terminated.
@@ -114,20 +110,28 @@ int snd_bebob_maudio_load_firmware(strucif (date <0x3230303730343031LL ) {dev_err (&unit->device,"Use firmware version 5058 or later\n" ); - err = -ENOSYS ; - goto end; +return -ENXIO ; } + cues =kmalloc_array (3 ,sizeof (*cues),GFP_KERNEL ); +if (!cues) +return -ENOMEM ; + + cues[0 ] =cpu_to_le32 (MAUDIO_BOOTLOADER_CUE1 ); + cues[1 ] =cpu_to_le32 (MAUDIO_BOOTLOADER_CUE2 ); + cues[2 ] =cpu_to_le32 (MAUDIO_BOOTLOADER_CUE3 ); + rcode =fw_run_transaction (device->card,TCODE_WRITE_BLOCK_REQUEST , device->node_id, device->generation, device->max_speed,BEBOB_ADDR_REG_REQ , - cues,sizeof (cues)); + cues,3 *sizeof (*cues)); +kfree (cues);if (rcode !=RCODE_COMPLETE ) {dev_err (&unit->device,"Failed to send a cue to load firmware\n" ); err = -EIO ; } -end: +return err; }
Greg Kroah-Hartman
maintainerPATCH 19/44 gso_segment: Reset skb->mac_len after modifying network header
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Toke H�iland-J�rgensen" <[email protected]>
[ Upstream commit c56cae23c6b167acc68043c683c4573b80cbcc2c ]
When splitting a GSO segment that consists of encapsulated packets, the skb->mac_len of the segments can end up being set wrong, causing packet drops in particular when using act_mirred and ifb interfaces in combination with a qdisc that splits GSO packets.
This happens because at the time skb_segment() is called, network_header will point to the inner header, throwing off the calculation in skb_reset_mac_len(). The network_header is subsequently adjust by the outer IP gso_segment handlers, but they don't set the mac_len.
Fix this by adding skb_reset_mac_len() calls to both the IPv4 and IPv6 gso_segment handlers, after they modify the network_header.
Many thanks to Eric Dumazet for his help in identifying the cause of the bug.
--- net/ipv4/af_inet.c | 1 + net/ipv6/ip6_offload.c | 1 + 2 files changed, 2 insertions(+)
net/ipv4/af_inet.c +1 -0
@@ -1277,6 +1277,7 @@ struct sk_buff *inet_gso_segment(structif (encap)skb_reset_inner_headers (skb); skb->network_header = (u8 *)iph - skb->head; +skb_reset_mac_len (skb); }while ((skb = skb->next)); out:
net/ipv6/ip6_offload.c +1 -0
@@ -113,6 +113,7 @@ static struct sk_buff *ipv6_gso_segment( payload_len = skb->len - nhoff -sizeof (*ipv6h); ipv6h->payload_len =htons (payload_len); skb->network_header = (u8 *)ipv6h - skb->head; +skb_reset_mac_len (skb);if (udpfrag) {int err =ip6_find_1stfragopt (skb, &prevhdr);
Greg Kroah-Hartman
maintainerPATCH 20/44 ipv6: fix possible use-after-free in ip6_xmit()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
[ Upstream commit bbd6528d28c1b8e80832b3b018ec402b6f5c3215 ]
In the unlikely case ip6_xmit() has to call skb_realloc_headroom(), we need to call skb_set_owner_w() before consuming original skb, otherwise we risk a use-after-free.
Bring IPv6 in line with what we do in IPv4 to fix this.
--- net/ipv6/ip6_output.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
net/ipv6/ip6_output.c +2 -4
@@ -201,12 +201,10 @@ int ip6_xmit(const struct sock *sk, strukfree_skb (skb);return -ENOBUFS ; } +if (skb->sk) +skb_set_owner_w (skb2, skb->sk);consume_skb (skb); skb = skb2; -/* skb_set_owner_w() changes sk->sk_wmem_alloc atomically, -* it is safe to call in our context (socket lock not held) -*/ -skb_set_owner_w (skb, (struct sock *)sk); }if (opt->opt_flen)ipv6_push_frag_opts (skb, opt, &proto);
Greg Kroah-Hartman
maintainerPATCH 23/44 udp4: fix IP_CMSG_CHECKSUM for connected sockets
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paolo Abeni <[email protected]>
[ Upstream commit 2b5a921740a55c00223a797d075b9c77c42cb171 ]
commit 2abb7cdc0dc8 ("udp: Add support for doing checksum unnecessary conversion") left out the early demux path for connected sockets. As a result IP_CMSG_CHECKSUM gives wrong values for such socket when GRO is not enabled/available.
This change addresses the issue by moving the csum conversion to a common helper and using such helper in both the default and the early demux rx path.
--- net/ipv4/udp.c | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-)
net/ipv4/udp.c +26 -23
@@ -1730,6 +1730,28 @@ static inline int udp4_csum_init(struct inet_compute_pseudo); } +/* wrapper for udp_queue_rcv_skb tacking care of csum conversion and +* return code conversion for ip layer consumption +*/ +static int udp_unicast_rcv_skb (struct sock *sk,struct sk_buff *skb, +struct udphdr *uh) +{ +int ret; + +if (inet_get_convert_csum (sk) && uh->check && !IS_UDPLITE (sk)) +skb_checksum_try_convert (skb,IPPROTO_UDP , uh->check, + inet_compute_pseudo); + + ret =udp_queue_rcv_skb (sk, skb); + +/* a return value > 0 means to resubmit the input, but +* it wants the return to be -protocol, or 0 +*/ +if (ret >0 ) +return -ret; +return 0 ; +} +/* * All we need to do is get the socket, and then do a checksum. */
@@ -1776,14 +1798,9 @@ int __udp4_lib_rcv(struct sk_buff *skb,if (unlikely (sk->sk_rx_dst != dst))udp_sk_rx_dst_set (sk, dst); - ret =udp_queue_rcv_skb (sk, skb); + ret =udp_unicast_rcv_skb (sk, skb, uh);sock_put (sk); -/* a return value > 0 means to resubmit the input, but -* it wants the return to be -protocol, or 0 -*/ -if (ret >0 ) -return -ret; -return 0 ; +return ret; }if (rt->rt_flags & (RTCF_BROADCAST |RTCF_MULTICAST ))
@@ -1791,22 +1808,8 @@ int __udp4_lib_rcv(struct sk_buff *skb, saddr, daddr, udptable, proto); sk =__udp4_lib_lookup_skb (skb, uh->source, uh->dest, udptable); -if (sk) { -int ret; - -if (inet_get_convert_csum (sk) && uh->check && !IS_UDPLITE (sk)) -skb_checksum_try_convert (skb,IPPROTO_UDP , uh->check, - inet_compute_pseudo); - - ret =udp_queue_rcv_skb (sk, skb); - -/* a return value > 0 means to resubmit the input, but -* it wants the return to be -protocol, or 0 -*/ -if (ret >0 ) -return -ret; -return 0 ; - } +if (sk) +return udp_unicast_rcv_skb (sk, skb, uh);if (!xfrm4_policy_check (NULL ,XFRM_POLICY_IN , skb)) goto drop;
Greg Kroah-Hartman
maintainerPATCH 24/44 neighbour: confirm neigh entries when ARP packet is received
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vasily Khoruzhick <[email protected]>
[ Upstream commit f0e0d04413fcce9bc76388839099aee93cd0d33b ]
Update 'confirmed' timestamp when ARP packet is received. It shouldn't affect locktime logic and anyway entry can be confirmed by any higher-layer protocol. Thus it makes sense to confirm it when ARP packet is received.
--- net/core/neighbour.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
net/core/neighbour.c +8 -5
@@ -1138,6 +1138,12 @@ int neigh_update(struct neighbour *neigh lladdr = neigh->ha; } +/* Update confirmed timestamp for neighbour entry after we +* received ARP packet even if it doesn't change IP to MAC binding. +*/ +if (new &NUD_CONNECTED ) + neigh->confirmed = jiffies; +/* If entry was valid and address is not changed, do not change entry state, if new one is STALE. */
@@ -1159,15 +1165,12 @@ int neigh_update(struct neighbour *neigh } } -/* Update timestamps only once we know we will make a change to the +/* Update timestamp only once we know we will make a change to the * neighbour entry. Otherwise we risk to move the locktime window with * noop updates and ignore relevant ARP updates. */ -if (new != old || lladdr != neigh->ha) { -if (new &NUD_CONNECTED ) - neigh->confirmed = jiffies; +if (new != old || lladdr != neigh->ha) neigh->updated = jiffies; - }if (new != old) {neigh_del_timer (neigh);
Greg Kroah-Hartman
maintainerPATCH 26/44 ocfs2: fix ocfs2 read block panic
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Junxiao Bi <[email protected]>
commit 234b69e3e089d850a98e7b3145bd00e9b52b1111 upstream.
While reading block, it is possible that io error return due to underlying storage issue, in this case, BH_NeedsValidate was left in the buffer head. Then when reading the very block next time, if it was already linked into journal, that will trigger the following panic.
[203748.702517] kernel BUG at fs/ocfs2/buffer_head_io.c:342! [203748.702533] invalid opcode: 0000 [#1] SMP [203748.702561] Modules linked in: ocfs2 ocfs2_dlmfs ocfs2_stack_o2cb ocfs2_dlm ocfs2_nodemanager ocfs2_stackglue configfs sunrpc dm_switch dm_queue_length dm_multipath bonding be2iscsi iscsi_boot_sysfs bnx2i cnic uio cxgb4i iw_cxgb4 cxgb4 cxgb3i libcxgbi iw_cxgb3 cxgb3 mdio ib_iser rdma_cm ib_cm iw_cm ib_sa ib_mad ib_core ib_addr ipv6 iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi ipmi_devintf iTCO_wdt iTCO_vendor_support dcdbas ipmi_ssif i2c_core ipmi_si ipmi_msghandler acpi_pad pcspkr sb_edac edac_core lpc_ich mfd_core shpchp sg tg3 ptp pps_core ext4 jbd2 mbcache2 sr_mod cdrom sd_mod ahci libahci megaraid_sas wmi dm_mirror dm_region_hash dm_log dm_mod [203748.703024] CPU: 7 PID: 38369 Comm: touch Not tainted 4.1.12-124.18.6.el6uek.x86_64 #2 [203748.703045] Hardware name: Dell Inc. PowerEdge R620/0PXXHP, BIOS 2.5.2 01/28/2015 [203748.703067] task: ffff880768139c00 ti: ffff88006ff48000 task.ti: ffff88006ff48000 [203748.703088] RIP: 0010:[<ffffffffa05e9f09>] [<ffffffffa05e9f09>] ocfs2_read_blocks+0x669/0x7f0 [ocfs2] [203748.703130] RSP: 0018:ffff88006ff4b818 EFLAGS: 00010206 [203748.703389] RAX: 0000000008620029 RBX: ffff88006ff4b910 RCX: 0000000000000000 [203748.703885] RDX: 0000000000000001 RSI: 0000000000000000 RDI: 00000000023079fe [203748.704382] RBP: ffff88006ff4b8d8 R08: 0000000000000000 R09: ffff8807578c25b0 [203748.704877] R10: 000000000f637376 R11: 000000003030322e R12: 0000000000000000 [203748.705373] R13: ffff88006ff4b910 R14: ffff880732fe38f0 R15: 0000000000000000 [203748.705871] FS: 00007f401992c700(0000) GS:ffff880bfebc0000(0000) knlGS:0000000000000000 [203748.706370] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [203748.706627] CR2: 00007f4019252440 CR3: 00000000a621e000 CR4: 0000000000060670 [203748.707124] Stack: [203748.707371] ffff88006ff4b828 ffffffffa0609f52 ffff88006ff4b838 0000000000000001 [203748.707885] 0000000000000000 0000000000000000 ffff880bf67c3800 ffffffffa05eca00 [203748.708399] 00000000023079ff ffffffff81c58b80 0000000000000000 0000000000000000 [203748.708915] Call Trace: [203748.709175] [<ffffffffa0609f52>] ? ocfs2_inode_cache_io_unlock+0x12/0x20 [ocfs2] [203748.709680] [<ffffffffa05eca00>] ? ocfs2_empty_dir_filldir+0x80/0x80 [ocfs2] [203748.710185] [<ffffffffa05ec0cb>] ocfs2_read_dir_block_direct+0x3b/0x200 [ocfs2] [203748.710691] [<ffffffffa05f0fbf>] ocfs2_prepare_dx_dir_for_insert.isra.57+0x19f/0xf60 [ocfs2] [203748.711204] [<ffffffffa065660f>] ? ocfs2_metadata_cache_io_unlock+0x1f/0x30 [ocfs2] [203748.711716] [<ffffffffa05f4f3a>] ocfs2_prepare_dir_for_insert+0x13a/0x890 [ocfs2] [203748.712227] [<ffffffffa05f442e>] ? ocfs2_check_dir_for_entry+0x8e/0x140 [ocfs2] [203748.712737] [<ffffffffa061b2f2>] ocfs2_mknod+0x4b2/0x1370 [ocfs2] [203748.713003] [<ffffffffa061c385>] ocfs2_create+0x65/0x170 [ocfs2] [203748.713263] [<ffffffff8121714b>] vfs_create+0xdb/0x150 [203748.713518] [<ffffffff8121b225>] do_last+0x815/0x1210 [203748.713772] [<ffffffff812192e9>] ? path_init+0xb9/0x450 [203748.714123] [<ffffffff8121bca0>] path_openat+0x80/0x600 [203748.714378] [<ffffffff811bcd45>] ? handle_pte_fault+0xd15/0x1620 [203748.714634] [<ffffffff8121d7ba>] do_filp_open+0x3a/0xb0 [203748.714888] [<ffffffff8122a767>] ? __alloc_fd+0xa7/0x130 [203748.715143] [<ffffffff81209ffc>] do_sys_open+0x12c/0x220 [203748.715403] [<ffffffff81026ddb>] ? syscall_trace_enter_phase1+0x11b/0x180 [203748.715668] [<ffffffff816f0c9f>] ? system_call_after_swapgs+0xe9/0x190 [203748.715928] [<ffffffff8120a10e>] SyS_open+0x1e/0x20 [203748.716184] [<ffffffff816f0d5e>] system_call_fastpath+0x18/0xd7 [203748.716440] Code: 00 00 48 8b 7b 08 48 83 c3 10 45 89 f8 44 89 e1 44 89 f2 4c 89 ee e8 07 06 11 e1 48 8b 03 48 85 c0 75 df 8b 5d c8 e9 4d fa ff ff <0f> 0b 48 8b 7d a0 e8 dc c6 06 00 48 b8 00 00 00 00 00 00 00 10 [203748.717505] RIP [<ffffffffa05e9f09>] ocfs2_read_blocks+0x669/0x7f0 [ocfs2] [203748.717775] RSP <ffff88006ff4b818>
Joesph ever reported a similar panic.
--- fs/ocfs2/buffer_head_io.c | 1 + 1 file changed, 1 insertion(+)
fs/ocfs2/buffer_head_io.c +1 -0
@@ -341,6 +341,7 @@ int ocfs2_read_blocks(struct ocfs2_cachi* for this bh as it's not marked locally * uptodate. */ status = -EIO ; +clear_buffer_needs_validate (bh);put_bh (bh); bhs[i] =NULL ;continue ;
Greg Kroah-Hartman
maintainerPATCH 34/44 ext4: recalucate superblock checksum after updating free blocks/inodes
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit 4274f516d4bc50648a4d97e4f67ecbd7b65cde4a upstream.
When mounting the superblock, ext4_fill_super() calculates the free blocks and free inodes and stores them in the superblock. It's not strictly necessary, since we don't use them any more, but it's nice to keep them roughly aligned to reality.
Since it's not critical for file system correctness, the code doesn't call ext4_commit_super(). The problem is that it's in ext4_commit_super() that we recalculate the superblock checksum. So if we're not going to call ext4_commit_super(), we need to call ext4_superblock_csum_set() to make sure the superblock checksum is consistent.
Most of the time, this doesn't matter, since we end up calling ext4_commit_super() very soon thereafter, and definitely by the time the file system is unmounted. However, it doesn't work in this sequence:
mke2fs -Fq -t ext4 /dev/vdc 128M
mount /dev/vdc /vdc
cp xfstests/git-versions /vdc
godown /vdc
umount /vdc
mount /dev/vdc
tune2fs -l /dev/vdc
With this commit, the "tune2fs -l" no longer fails.
--- fs/ext4/super.c | 2 ++ 1 file changed, 2 insertions(+)
fs/ext4/super.c +2 -0
@@ -4187,11 +4187,13 @@ no_journal: block =ext4_count_free_clusters (sb);ext4_free_blocks_count_set (sbi->s_es,EXT4_C2B (sbi, block)); +ext4_superblock_csum_set (sb); err =percpu_counter_init (&sbi->s_freeclusters_counter, block,GFP_KERNEL );if (!err) {unsigned long freei =ext4_count_free_inodes (sb); sbi->s_es->s_free_inodes_count =cpu_to_le32 (freei); +ext4_superblock_csum_set (sb); err =percpu_counter_init (&sbi->s_freeinodes_counter, freei,GFP_KERNEL ); }
Greg Kroah-Hartman
maintainerPATCH 39/44 sched/fair: Fix vruntime_normalized() for remote non-migration wakeup
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steve Muckle <[email protected]>
commit d0cdb3ce8834332d918fc9c8ff74f8a169ec9abe upstream.
When a task which previously ran on a given CPU is remotely queued to wake up on that same CPU, there is a period where the task's state is TASK_WAKING and its vruntime is not normalized. This is not accounted for in vruntime_normalized() which will cause an error in the task's vruntime if it is switched from the fair class during this time.
For example if it is boosted to RT priority via rt_mutex_setprio(), rq->min_vruntime will not be subtracted from the task's vruntime but it will be added again when the task returns to the fair class. The task's vruntime will have been erroneously doubled and the effective priority of the task will be reduced.
Note this will also lead to inflation of all vruntimes since the doubled vruntime value will become the rq's min_vruntime when other tasks leave the rq. This leads to repeated doubling of the vruntime and priority penalty.
Fix this by recognizing a WAKING task's vruntime as normalized only if sched_remote_wakeup is true. This indicates a migration, in which case the vruntime would have been normalized in migrate_task_rq_fair().
Based on a similar patch from John Dias <[email protected]>.
--- kernel/sched/fair.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/sched/fair.c +2 -1
@@ -8639,7 +8639,8 @@ static inline bool vruntime_normalized(s* - A task which has been woken up by try_to_wake_up() and * waiting for actually being woken up by sched_ttwu_pending(). */ -if (!se->sum_exec_runtime || p->state ==TASK_WAKING ) +if (!se->sum_exec_runtime || + (p->state ==TASK_WAKING && p->sched_remote_wakeup))return true;return false;
Greg Kroah-Hartman
maintainerPATCH 43/44 vmw_balloon: include asm/io.h
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nadav Amit <[email protected]>
commit a3b92ee6fc171d7c9d9b6b829b7fef169210440c upstream.
Fix a build error due to missing virt_to_phys()
--- drivers/misc/vmw_balloon.c | 1 + 1 file changed, 1 insertion(+)
drivers/misc/vmw_balloon.c +1 -0
@@ -45,6 +45,7 @@#include <linux/seq_file.h> #include <linux/vmw_vmci_defs.h> #include <linux/vmw_vmci_api.h> +#include <linux/io.h> #include <asm/hypervisor.h> MODULE_AUTHOR ("VMware, Inc." );
Greg Kroah-Hartman
maintainerPATCH 2/44 NFC: Fix the number of pipes
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Suren Baghdasaryan <[email protected]>
commit e285d5bfb7e9785d289663baef252dd315e171f8 upstream.
According to ETSI TS 102 622 specification chapter 4.4 pipe identifier is 7 bits long which allows for 128 unique pipe IDs. Because NFC_HCI_MAX_PIPES is used as the number of pipes supported and not as the max pipe ID, its value should be 128 instead of 127.
nfc_hci_recv_from_llc extracts pipe ID from packet header using NFC_HCI_FRAGMENT(0x7F) mask which allows for pipe ID value of 127. Same happens when NCI_HCP_MSG_GET_PIPE() is being used. With pipes array having only 127 elements and pipe ID of 127 the OOB memory access will result.
--- include/net/nfc/hci.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/net/nfc/hci.h +1 -1
@@ -87,7 +87,7 @@ struct nfc_hci_pipe {* According to specification 102 622 chapter 4.4 Pipes, * the pipe identifier is 7 bits long. */ -#define NFC_HCI_MAX_PIPES 127 +#define NFC_HCI_MAX_PIPES 128struct nfc_hci_init_data {u8 gate_count;struct nfc_hci_gate gates[NFC_HCI_MAX_CUSTOM_GATES ];
Greg Kroah-Hartman
maintainerPATCH 3/44 ASoC: cs4265: fix MMTLR Data switch control
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sébastien Szymanski <[email protected]>
commit 90a3b7f8aba3011badacd6d8121e03aa24ac79d1 upstream.
The MMTLR bit is in the CS4265_SPDIF_CTL2 register at address 0x12 bit 0 and not at address 0x0 bit 1. Fix this.
--- sound/soc/codecs/cs4265.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/soc/codecs/cs4265.c +2 -2
@@ -157,8 +157,8 @@ static const struct snd_kcontrol_new cs4SOC_SINGLE ("Validity Bit Control Switch" ,CS4265_SPDIF_CTL2 ,3 ,1 ,0 ),SOC_ENUM ("SPDIF Mono/Stereo" , spdif_mono_stereo_enum), -SOC_SINGLE ("MMTLR Data Switch" ,0 , -1 ,1 ,0 ), +SOC_SINGLE ("MMTLR Data Switch" ,CS4265_SPDIF_CTL2 , +0 ,1 ,0 ),SOC_ENUM ("Mono Channel Select" , spdif_mono_select_enum), SND_SOC_BYTES("C Data Buffer", CS4265_C_DATA_BUFF, 24), };
Greg Kroah-Hartman
maintainerPATCH 6/44 ALSA: emu10k1: fix possible info leak to userspace on SNDRV_EMU10K1_IOCTL_INFO
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Willy Tarreau <[email protected]>
commit 49434c6c575d2008c0abbc93e615019f39e01252 upstream.
snd_emu10k1_fx8010_ioctl(SNDRV_EMU10K1_IOCTL_INFO) allocates memory using kmalloc() and partially fills it by calling snd_emu10k1_fx8010_info() before returning the resulting structure to userspace, leaving uninitialized holes. Let's just use kzalloc() here.
--- sound/pci/emu10k1/emufx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/pci/emu10k1/emufx.c +1 -1
@@ -2520,7 +2520,7 @@ static int snd_emu10k1_fx8010_ioctl(stru emu->support_tlv =1 ;return put_user (SNDRV_EMU10K1_VERSION , (int __user *)argp);case SNDRV_EMU10K1_IOCTL_INFO : - info =kmalloc (sizeof (*info),GFP_KERNEL ); + info =kzalloc (sizeof (*info),GFP_KERNEL );if (!info)return -ENOMEM ;snd_emu10k1_fx8010_info (emu, info);
Greg Kroah-Hartman
maintainercover 4.9.130-stable review
This is the start of the stable review cycle for the 4.9.130 release. There are 44 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 Sat Sep 29 09:00:54 UTC 2018. 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.130-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.130-rc1
Steve Wise <[email protected]>
iw_cxgb4: only allow 1 flush on user qps
Nadav Amit <[email protected]>
vmw_balloon: include asm/io.h
Zachary Zhang <[email protected]>
PCI: aardvark: Size bridges before resources allocation
Roderick Colenbrander <[email protected]>
HID: sony: Support DS4 dongle
Roderick Colenbrander <[email protected]>
HID: sony: Update device ids
Steve Muckle <[email protected]>
sched/fair: Fix vruntime_normalized() for remote non-migration wakeup
Eric Biggers <[email protected]>
ext4: show test_dummy_encryption mount option in /proc/mounts
Li Dongyang <[email protected]>
ext4: don't mark mmp buffer head dirty
Theodore Ts'o <[email protected]>
ext4: fix online resizing for bigalloc file systems with a 1k block size
Theodore Ts'o <[email protected]>
ext4: fix online resize's handling of a too-small final block group
Theodore Ts'o <[email protected]>
ext4: recalucate superblock checksum after updating free blocks/inodes
Theodore Ts'o <[email protected]>
ext4: avoid divide by zero fault when deleting corrupted inline directories
Theodore Ts'o <[email protected]>
ext4: check to make sure the rename(2)'s destination is not freed
Gustavo A. R. Silva <[email protected]>
tty: vt_ioctl: fix potential Spectre v1
Boris Brezillon <[email protected]>
drm/vc4: Fix the "no scaling" case on multi-planar YUV formats
Lyude Paul <[email protected]>
drm/nouveau/drm/nouveau: Prevent handling ACPI HPD events too early
Lyude Paul <[email protected]>
drm/nouveau/drm/nouveau: Use pm_runtime_get_noresume() in connector_detect()
Lyude Paul <[email protected]>
drm/nouveau/drm/nouveau: Fix bogus drm_kms_helper_poll_enable() placement
Junxiao Bi <[email protected]>
ocfs2: fix ocfs2 read block panic
Vincent Pelletier <[email protected]>
scsi: target: iscsi: Use hex2bin instead of a re-implementation
Vasily Khoruzhick <[email protected]>
neighbour: confirm neigh entries when ARP packet is received
Paolo Abeni <[email protected]>
udp4: fix IP_CMSG_CHECKSUM for connected sockets
Colin Ian King <[email protected]>
net: hp100: fix always-true check for link up state
Willy Tarreau <[email protected]>
net/appletalk: fix minor pointer leak to userspace in SIOCFINDIPDDPRT
Eric Dumazet <[email protected]>
ipv6: fix possible use-after-free in ip6_xmit()
Toke Høiland-Jørgensen <[email protected]>
gso_segment: Reset skb->mac_len after modifying network header
Joel Fernandes (Google) <[email protected]>
mm: shmem.c: Correctly annotate new inodes for lockdep
Vaibhav Nagarnaik <[email protected]>
ring-buffer: Allow for rescheduling when removing pages
Mika Westerberg <[email protected]>
Revert "PCI: Add ACS quirk for Intel 300 series"
Boris Ostrovsky <[email protected]>
xen/x86/vpmu: Zero struct pt_regs before calling into sample handling code
Juergen Gross <[email protected]>
xen/netfront: don't bug in case of too many frags
Mario Limonciello <[email protected]>
platform/x86: alienware-wmi: Correct a memory leak
Takashi Sakamoto <[email protected]>
ALSA: oxfw: fix memory leak of private data
Takashi Sakamoto <[email protected]>
ALSA: oxfw: fix memory leak of discovered stream formats at error path
Takashi Sakamoto <[email protected]>
ALSA: oxfw: fix memory leak for model-dependent data at error path
Takashi Sakamoto <[email protected]>
ALSA: fireworks: fix memory leak of response buffer at error path
Takashi Sakamoto <[email protected]>
ALSA: firewire-tascam: fix memory leak of private data
Takashi Sakamoto <[email protected]>
ALSA: firewire-digi00x: fix memory leak of private data
Willy Tarreau <[email protected]>
ALSA: emu10k1: fix possible info leak to userspace on SNDRV_EMU10K1_IOCTL_INFO
Takashi Sakamoto <[email protected]>
ALSA: bebob: use address returned by kmalloc() instead of kernel stack for streaming DMA mapping
Takashi Sakamoto <[email protected]>
ALSA: bebob: fix memory leak for M-Audio FW1814 and ProjectMix I/O at error path
Sébastien Szymanski <[email protected]>
ASoC: cs4265: fix MMTLR Data switch control
Suren Baghdasaryan <[email protected]>
NFC: Fix the number of pipes
Suren Baghdasaryan <[email protected]>
NFC: Fix possible memory corruption when handling SHDLC I-Frame commands
-------------
Diffstat:
Makefile | 4 +-- arch/x86/xen/pmu.c | 2 +- drivers/gpu/drm/nouveau/nouveau_connector.c | 20 ++++++------ drivers/gpu/drm/nouveau/nouveau_display.c | 33 ++++++++++++++----- drivers/gpu/drm/vc4/vc4_plane.c | 25 +++++++-------- drivers/hid/hid-core.c | 3 ++ drivers/hid/hid-ids.h | 2 ++ drivers/hid/hid-sony.c | 6 ++++ drivers/infiniband/hw/cxgb4/qp.c | 6 ++++ drivers/misc/vmw_balloon.c | 1 + drivers/net/appletalk/ipddp.c | 8 +++-- drivers/net/ethernet/hp/hp100.c | 2 +- drivers/net/xen-netfront.c | 8 ++++- drivers/pci/host/pci-aardvark.c | 1 + drivers/pci/quirks.c | 6 ---- drivers/platform/x86/alienware-wmi.c | 1 + drivers/target/iscsi/iscsi_target_auth.c | 30 +++++++++--------- drivers/tty/vt/vt_ioctl.c | 4 +++ fs/ext4/dir.c | 20 ++++++------ fs/ext4/inline.c | 4 ++- fs/ext4/mmp.c | 1 - fs/ext4/namei.c | 6 ++++ fs/ext4/resize.c | 23 +++++++++++++- fs/ext4/super.c | 4 +++ fs/ocfs2/buffer_head_io.c | 1 + include/net/nfc/hci.h | 2 +- kernel/sched/fair.c | 3 +- kernel/trace/ring_buffer.c | 2 ++ mm/shmem.c | 2 ++ net/core/neighbour.c | 13 +++++--- net/ipv4/af_inet.c | 1 + net/ipv4/udp.c | 49 +++++++++++++++-------------- net/ipv6/ip6_offload.c | 1 + net/ipv6/ip6_output.c | 6 ++-- net/nfc/hci/core.c | 10 ++++++ sound/firewire/bebob/bebob.c | 2 ++ sound/firewire/bebob/bebob_maudio.c | 28 ++++++++--------- sound/firewire/digi00x/digi00x.c | 1 + sound/firewire/fireworks/fireworks.c | 2 ++ sound/firewire/oxfw/oxfw.c | 10 ++++++ sound/firewire/tascam/tascam.c | 1 + sound/pci/emu10k1/emufx.c | 2 +- sound/soc/codecs/cs4265.c | 4 +-- 43 files changed, 236 insertions(+), 124 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 8/44 ALSA: firewire-tascam: fix memory leak of private data
4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Sakamoto <[email protected]>
commit 8d28277c065a974873c6781d44b7bcdcd8fb4e8a upstream.
Although private data of sound card instance is usually allocated in the tail of the instance, drivers in ALSA firewire stack allocate the private data before allocating the instance. In this case, the private data should be released explicitly at .private_free callback of the instance.
This commit fixes memory leak following to the above design.
--- sound/firewire/tascam/tascam.c | 1 + 1 file changed, 1 insertion(+)
sound/firewire/tascam/tascam.c +1 -0
@@ -93,6 +93,7 @@ static void tscm_free(struct snd_tscm *tfw_unit_put (tscm->unit);mutex_destroy (&tscm->mutex); +kfree (tscm); }static void tscm_card_free (struct snd_card *card)
Greg Kroah-Hartman
maintainerPATCH 17/44 ring-buffer: Allow for rescheduling when removing pages
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vaibhav Nagarnaik <[email protected]>
commit 83f365554e47997ec68dc4eca3f5dce525cd15c3 upstream.
When reducing ring buffer size, pages are removed by scheduling a work item on each CPU for the corresponding CPU ring buffer. After the pages are removed from ring buffer linked list, the pages are free()d in a tight loop. The loop does not give up CPU until all pages are removed. In a worst case behavior, when lot of pages are to be freed, it can cause system stall.
After the pages are removed from the list, the free() can happen while the work is rescheduled. Call cond_resched() in the loop to prevent the system hangup.
--- kernel/trace/ring_buffer.c | 2 ++ 1 file changed, 2 insertions(+)
kernel/trace/ring_buffer.c +2 -0
@@ -1504,6 +1504,8 @@ rb_remove_pages(struct ring_buffer_per_c tmp_iter_page = first_page; do { + cond_resched(); + to_remove_page = tmp_iter_page; rb_inc_page(cpu_buffer, &tmp_iter_page);
Greg Kroah-Hartman
maintainerPATCH 18/44 mm: shmem.c: Correctly annotate new inodes for lockdep
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Joel Fernandes (Google) <[email protected]>
commit b45d71fb89ab8adfe727b9d0ee188ed58582a647 upstream.
Directories and inodes don't necessarily need to be in the same lockdep class. For ex, hugetlbfs splits them out too to prevent false positives in lockdep. Annotate correctly after new inode creation. If its a directory inode, it will be put into a different class.
This should fix a lockdep splat reported by syzbot:
Quoted 77 lines
======================================================
WARNING: possible circular locking dependency detected 4.18.0-rc8-next-20180810+ #36 Not tainted
------------------------------------------------------
syz-executor900/4483 is trying to acquire lock:00000000d2bfc8fe(&sb->s_type->i_mutex_key#9){++++}, at:inode_lockinclude/linux/fs.h:765[inline]00000000d2bfc8fe(&sb->s_type->i_mutex_key#9){++++}, at:shmem_fallocate+0x18b/0x12e0mm/shmem.c:2602but task is already holding lock:
0000000025208078 (ashmem_mutex){+.+.}, at:ashmem_shrink_scan+0xb4/0x630drivers/staging/android/ashmem.c:448which lock already depends on the new lock.
-> #2 (ashmem_mutex){+.+.}:
__mutex_lock_common kernel/locking/mutex.c:925 [inline] __mutex_lock+0x171/0x1700 kernel/locking/mutex.c:1073 mutex_lock_nested+0x16/0x20 kernel/locking/mutex.c:1088 ashmem_mmap+0x55/0x520 drivers/staging/android/ashmem.c:361 call_mmap include/linux/fs.h:1844 [inline] mmap_region+0xf27/0x1c50 mm/mmap.c:1762 do_mmap+0xa10/0x1220 mm/mmap.c:1535 do_mmap_pgoff include/linux/mm.h:2298 [inline] vm_mmap_pgoff+0x213/0x2c0 mm/util.c:357 ksys_mmap_pgoff+0x4da/0x660 mm/mmap.c:1585 __do_sys_mmap arch/x86/kernel/sys_x86_64.c:100 [inline] __se_sys_mmap arch/x86/kernel/sys_x86_64.c:91 [inline] __x64_sys_mmap+0xe9/0x1b0 arch/x86/kernel/sys_x86_64.c:91 do_syscall_64+0x1b9/0x820 arch/x86/entry/common.c:290 entry_SYSCALL_64_after_hwframe+0x49/0xbe-> #1 (&mm->mmap_sem){++++}:
__might_fault+0x155/0x1e0 mm/memory.c:4568 _copy_to_user+0x30/0x110 lib/usercopy.c:25 copy_to_user include/linux/uaccess.h:155 [inline] filldir+0x1ea/0x3a0 fs/readdir.c:196 dir_emit_dot include/linux/fs.h:3464 [inline] dir_emit_dots include/linux/fs.h:3475 [inline] dcache_readdir+0x13a/0x620 fs/libfs.c:193 iterate_dir+0x48b/0x5d0 fs/readdir.c:51 __do_sys_getdents fs/readdir.c:231 [inline] __se_sys_getdents fs/readdir.c:212 [inline] __x64_sys_getdents+0x29f/0x510 fs/readdir.c:212 do_syscall_64+0x1b9/0x820 arch/x86/entry/common.c:290 entry_SYSCALL_64_after_hwframe+0x49/0xbe-> #0 (&sb->s_type->i_mutex_key#9){++++}:
lock_acquire+0x1e4/0x540 kernel/locking/lockdep.c:3924 down_write+0x8f/0x130 kernel/locking/rwsem.c:70 inode_lock include/linux/fs.h:765 [inline] shmem_fallocate+0x18b/0x12e0 mm/shmem.c:2602 ashmem_shrink_scan+0x236/0x630 drivers/staging/android/ashmem.c:455 ashmem_ioctl+0x3ae/0x13a0 drivers/staging/android/ashmem.c:797 vfs_ioctl fs/ioctl.c:46 [inline] file_ioctl fs/ioctl.c:501 [inline] do_vfs_ioctl+0x1de/0x1720 fs/ioctl.c:685 ksys_ioctl+0xa9/0xd0 fs/ioctl.c:702 __do_sys_ioctl fs/ioctl.c:709 [inline] __se_sys_ioctl fs/ioctl.c:707 [inline] __x64_sys_ioctl+0x73/0xb0 fs/ioctl.c:707 do_syscall_64+0x1b9/0x820 arch/x86/entry/common.c:290 entry_SYSCALL_64_after_hwframe+0x49/0xbeother info that might help us debug this:
Chain exists of: &sb->s_type->i_mutex_key#9 --> &mm->mmap_sem --> ashmem_mutex Possible unsafe locking scenario:CPU0 CPU1 ---- ---- lock(ashmem_mutex); lock(&mm->mmap_sem); lock(ashmem_mutex);
Quoted 7 lines
lock(&sb->s_type->i_mutex_key#9);*** DEADLOCK ***
1 lock held by syz-executor900/4483:
#0: 0000000025208078 (ashmem_mutex){+.+.}, at:ashmem_shrink_scan+0xb4/0x630drivers/staging/android/ashmem.c:448
--- mm/shmem.c | 2 ++ 1 file changed, 2 insertions(+)
mm/shmem.c +2 -0
@@ -2160,6 +2160,8 @@ static struct inode *shmem_get_inode(strmpol_shared_policy_init (&info->policy,NULL );break ; } + +lockdep_annotate_inode_mutex_key (inode); }else shmem_free_inode (sb);return inode;
Greg Kroah-Hartman
maintainerPATCH 21/44 net/appletalk: fix minor pointer leak to userspace in SIOCFINDIPDDPRT
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Willy Tarreau <[email protected]>
[ Upstream commit 9824dfae5741275473a23a7ed5756c7b6efacc9d ]
Fields ->dev and ->next of struct ipddp_route may be copied to userspace on the SIOCFINDIPDDPRT ioctl. This is only accessible to CAP_NET_ADMIN though. Let's manually copy the relevant fields instead of using memcpy().
--- drivers/net/appletalk/ipddp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/net/appletalk/ipddp.c +6 -2
@@ -284,8 +284,12 @@ static int ipddp_ioctl(struct net_devicecase SIOCFINDIPDDPRT :spin_lock_bh (&ipddp_route_lock); rp =__ipddp_find_route (&rcp); -if (rp) -memcpy (&rcp2, rp,sizeof (rcp2)); +if (rp) { +memset (&rcp2,0 ,sizeof (rcp2)); + rcp2.ip = rp->ip; + rcp2.at = rp->at; + rcp2.flags = rp->flags; + }spin_unlock_bh (&ipddp_route_lock);if (rp) {
Greg Kroah-Hartman
maintainerPATCH 22/44 net: hp100: fix always-true check for link up state
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Colin Ian King <[email protected]>
[ Upstream commit a7f38002fb69b44f8fc622ecb838665d0b8666af ]
The operation ~(p100_inb(VG_LAN_CFG_1) & HP100_LINK_UP) returns a value that is always non-zero and hence the wait for the link to drop always terminates prematurely. Fix this by using a logical not operator instead of a bitwise complement. This issue has been in the driver since pre-2.6.12-rc2.
Detected by CoverityScan, CID#114157 ("Logical vs. bitwise operator")
--- drivers/net/ethernet/hp/hp100.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/hp/hp100.c +1 -1
@@ -2636,7 +2636,7 @@ static int hp100_login_to_vg_hub(struct/* Wait for link to drop */ time = jiffies + (HZ /10 ); do { - if (~(hp100_inb(VG_LAN_CFG_1) & HP100_LINK_UP_ST)) + if (!(hp100_inb(VG_LAN_CFG_1) & HP100_LINK_UP_ST)) break; if (!in_interrupt()) schedule_timeout_interruptible(1);
Greg Kroah-Hartman
maintainerPATCH 9/44 ALSA: fireworks: fix memory leak of response buffer at error path
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Sakamoto <[email protected]>
commit c3b55e2ec9c76e7a0de2a0b1dc851fdc9440385b upstream.
After allocating memory object for response buffer, ALSA fireworks driver has leak of the memory object at error path.
This commit releases the object at the error path.
--- sound/firewire/fireworks/fireworks.c | 2 ++ 1 file changed, 2 insertions(+)
sound/firewire/fireworks/fireworks.c +2 -0
@@ -301,6 +301,8 @@ error:snd_efw_transaction_remove_instance (efw);snd_efw_stream_destroy_duplex (efw);snd_card_free (efw->card); +kfree (efw->resp_buf); + efw->resp_buf =NULL ;dev_info (&efw->unit->device,"Sound card registration failed: %d\n" , err); }
Greg Kroah-Hartman
maintainerPATCH 27/44 drm/nouveau/drm/nouveau: Fix bogus drm_kms_helper_poll_enable() placement
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lyude Paul <[email protected]>
commit d77ef138ff572409ab93d492e5e6c826ee6fb21d upstream.
Turns out this part is my fault for not noticing when reviewing 9a2eba337cace ("drm/nouveau: Fix drm poll_helper handling"). Currently we call drm_kms_helper_poll_enable() from nouveau_display_hpd_work(). This makes basically no sense however, because that means we're calling drm_kms_helper_poll_enable() every time we schedule the hotplug detection work. This is also against the advice mentioned in drm_kms_helper_poll_enable()'s documentation:
Note that calls to enable and disable polling must be strictly ordered, which is automatically the case when they're only call from suspend/resume callbacks.
Of course, hotplugs can't really be ordered. They could even happen immediately after we called drm_kms_helper_poll_disable() in nouveau_display_fini(), which can lead to all sorts of issues.
Additionally; enabling polling /after/ we call drm_helper_hpd_irq_event() could also mean that we'd miss a hotplug event anyway, since drm_helper_hpd_irq_event() wouldn't bother trying to probe connectors so long as polling is disabled.
So; simply move this back into nouveau_display_init() again. The race condition that both of these patches attempted to work around has already been fixed properly in
d61a5c106351 ("drm/nouveau: Fix deadlock on runtime suspend")
--- drivers/gpu/drm/nouveau/nouveau_display.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/gpu/drm/nouveau/nouveau_display.c +5 -2
@@ -367,8 +367,6 @@ nouveau_display_hpd_work(struct work_strpm_runtime_get_sync (drm->dev->dev);drm_helper_hpd_irq_event (drm->dev); -/* enable polling for external displays */ -drm_kms_helper_poll_enable (drm->dev);pm_runtime_mark_last_busy (drm->dev->dev);pm_runtime_put_sync (drm->dev->dev);
@@ -422,6 +420,11 @@ nouveau_display_init(struct drm_device *if (ret)return ret; +/* enable connector detection and polling for connectors without HPD +* support +*/ +drm_kms_helper_poll_enable (dev); +/* enable hotplug interrupts */ list_for_each_entry (connector, &dev->mode_config.connector_list, head) {struct nouveau_connector *conn =nouveau_connector (connector);
Greg Kroah-Hartman
maintainerPATCH 28/44 drm/nouveau/drm/nouveau: Use pm_runtime_get_noresume() in connector_detect()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lyude Paul <[email protected]>
commit 6833fb1ec120bf078e1a527c573a09d4de286224 upstream.
It's true we can't resume the device from poll workers in nouveau_connector_detect(). We can however, prevent the autosuspend timer from elapsing immediately if it hasn't already without risking any sort of deadlock with the runtime suspend/resume operations. So do that instead of entirely avoiding grabbing a power reference.
--- drivers/gpu/drm/nouveau/nouveau_connector.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
drivers/gpu/drm/nouveau/nouveau_connector.c +11 -9
@@ -271,12 +271,16 @@ nouveau_connector_detect(struct drm_conn nv_connector->edid =NULL ; } -/* Outputs are only polled while runtime active, so acquiring a -* runtime PM ref here is unnecessary (and would deadlock upon -* runtime suspend because it waits for polling to finish). +/* Outputs are only polled while runtime active, so resuming the +* device here is unnecessary (and would deadlock upon runtime suspend +* because it waits for polling to finish). We do however, want to +* prevent the autosuspend timer from elapsing during this operation +* if possible. */ -if (!drm_kms_helper_is_poll_worker ()) { - ret =pm_runtime_get_sync (connector->dev->dev); +if (drm_kms_helper_is_poll_worker ()) { +pm_runtime_get_noresume (dev->dev); + }else { + ret =pm_runtime_get_sync (dev->dev);if (ret <0 && ret != -EACCES )return conn_status; }
@@ -354,10 +358,8 @@ detect_analog: out: -if (!drm_kms_helper_is_poll_worker ()) { -pm_runtime_mark_last_busy (connector->dev->dev); -pm_runtime_put_autosuspend (connector->dev->dev); - } +pm_runtime_mark_last_busy (dev->dev); +pm_runtime_put_autosuspend (dev->dev);return conn_status; }
Greg Kroah-Hartman
maintainerPATCH 29/44 drm/nouveau/drm/nouveau: Prevent handling ACPI HPD events too early
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lyude Paul <[email protected]>
commit 79e765ad665da4b8aa7e9c878bd2fef837f6fea5 upstream.
On most systems with ACPI hotplugging support, it seems that we always receive a hotplug event once we re-enable EC interrupts even if the GPU hasn't even been resumed yet.
This can cause problems since even though we schedule hpd_work to handle connector reprobing for us, hpd_work synchronizes on pm_runtime_get_sync() to wait until the device is ready to perform reprobing. Since runtime suspend/resume callbacks are disabled before the PM core calls ->suspend(), any calls to pm_runtime_get_sync() during this period will grab a runtime PM ref and return immediately with -EACCES. Because we schedule hpd_work from our ACPI HPD handler, and hpd_work synchronizes on pm_runtime_get_sync(), this causes us to launch a connector reprobe immediately even if the GPU isn't actually resumed just yet. This causes various warnings in dmesg and occasionally, also prevents some displays connected to the dedicated GPU from coming back up after suspend. Example:
usb 1-4: USB disconnect, device number 14
usb 1-4.1: USB disconnect, device number 15
WARNING: CPU: 0 PID: 838 at drivers/gpu/drm/nouveau/include/nvkm/subdev/i2c.h:170 nouveau_dp_detect+0x17e/0x370 [nouveau] CPU: 0 PID: 838 Comm: kworker/0:6 Not tainted 4.17.14-201.Lyude.bz1477182.V3.fc28.x86_64 #1 Hardware name: LENOVO 20EQS64N00/20EQS64N00, BIOS N1EET77W (1.50 ) 03/28/2018 Workqueue: events nouveau_display_hpd_work [nouveau] RIP: 0010:nouveau_dp_detect+0x17e/0x370 [nouveau] RSP: 0018:ffffa15143933cf0 EFLAGS: 00010293 RAX: 0000000000000000 RBX: ffff8cb4f656c400 RCX: 0000000000000000 RDX: ffffa1514500e4e4 RSI: ffffa1514500e4e4 RDI: 0000000001009002 RBP: ffff8cb4f4a8a800 R08: ffffa15143933cfd R09: ffffa15143933cfc R10: 0000000000000000 R11: 0000000000000000 R12: ffff8cb4fb57a000 R13: ffff8cb4fb57a000 R14: ffff8cb4f4a8f800 R15: ffff8cb4f656c418 FS: 0000000000000000(0000) GS:ffff8cb51f400000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f78ec938000 CR3: 000000073720a003 CR4: 00000000003606f0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: ? _cond_resched+0x15/0x30 nouveau_connector_detect+0x2ce/0x520 [nouveau] ? _cond_resched+0x15/0x30 ? ww_mutex_lock+0x12/0x40 drm_helper_probe_detect_ctx+0x8b/0xe0 [drm_kms_helper] drm_helper_hpd_irq_event+0xa8/0x120 [drm_kms_helper] nouveau_display_hpd_work+0x2a/0x60 [nouveau] process_one_work+0x187/0x340 worker_thread+0x2e/0x380 ? pwq_unbound_release_workfn+0xd0/0xd0 kthread+0x112/0x130 ? kthread_create_worker_on_cpu+0x70/0x70 ret_from_fork+0x35/0x40 Code: 4c 8d 44 24 0d b9 00 05 00 00 48 89 ef ba 09 00 00 00 be 01 00 00 00 e8 e1 09 f8 ff 85 c0 0f 85 b2 01 00 00 80 7c 24 0c 03 74 02 <0f> 0b 48 89 ef e8 b8 07 f8 ff f6 05 51 1b c8 ff 02 0f 84 72 ff ---[ end trace 55d811b38fc8e71a ]---
So, to fix this we attempt to grab a runtime PM reference in the ACPI handler itself asynchronously. If the GPU is already awake (it will have normal hotplugging at this point) or runtime PM callbacks are currently disabled on the device, we drop our reference without updating the autosuspend delay. We only schedule connector reprobes when we successfully managed to queue up a resume request with our asynchronous PM ref.
This also has the added benefit of preventing redundant connector reprobes from ACPI while the GPU is runtime resumed!
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1477182#c41
--- drivers/gpu/drm/nouveau/nouveau_display.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-)
drivers/gpu/drm/nouveau/nouveau_display.c +20 -6
@@ -389,15 +389,29 @@ nouveau_display_acpi_ntfy(struct notifie {struct nouveau_drm *drm =container_of (nb,typeof (*drm), acpi_nb);struct acpi_bus_event *info = data; +int ret;if (!strcmp (info->device_class,ACPI_VIDEO_CLASS )) {if (info->type ==ACPI_VIDEO_NOTIFY_PROBE ) { -/* -* This may be the only indication we receive of a -* connector hotplug on a runtime suspended GPU, -* schedule hpd_work to check. -*/ -schedule_work (&drm->hpd_work); + ret =pm_runtime_get (drm->dev->dev); +if (ret ==1 || ret == -EACCES ) { +/* If the GPU is already awake, or in a state +* where we can't wake it up, it can handle +* it's own hotplug events. +*/ +pm_runtime_put_autosuspend (drm->dev->dev); + }else if (ret ==0 ) { +/* This may be the only indication we receive +* of a connector hotplug on a runtime +* suspended GPU, schedule hpd_work to check. +*/ +NV_DEBUG (drm,"ACPI requested connector reprobe\n" ); +schedule_work (&drm->hpd_work); +pm_runtime_put_noidle (drm->dev->dev); + }else { +NV_WARN (drm,"Dropped ACPI reprobe event due to RPM error: %d\n" , + ret); + }/* acpi-video should not generate keypresses for this */ return NOTIFY_BAD ;
Greg Kroah-Hartman
maintainerPATCH 30/44 drm/vc4: Fix the "no scaling" case on multi-planar YUV formats
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Brezillon <[email protected]>
commit 658d8cbd07dae22ccecf49399e18c609c4e85c53 upstream.
When there's no scaling requested ->is_unity should be true no matter the format.
Also, when no scaling is requested and we have a multi-planar YUV format, we should leave ->y_scaling[0] to VC4_SCALING_NONE and only set ->x_scaling[0] to VC4_SCALING_PPF.
Doing this fixes an hardly visible artifact (seen when using modetest and a rather big overlay plane in YUV420).
--- drivers/gpu/drm/vc4/vc4_plane.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-)
drivers/gpu/drm/vc4/vc4_plane.c +12 -13
@@ -327,6 +327,9 @@ static int vc4_plane_setup_clipping_and_ vc4_state->y_scaling[0 ] =vc4_get_scaling_mode (vc4_state->src_h[0 ], vc4_state->crtc_h); + vc4_state->is_unity = (vc4_state->x_scaling[0 ] ==VC4_SCALING_NONE && + vc4_state->y_scaling[0 ] ==VC4_SCALING_NONE ); +if (num_planes >1 ) { vc4_state->is_yuv = true;
@@ -342,24 +345,17 @@ static int vc4_plane_setup_clipping_and_vc4_get_scaling_mode (vc4_state->src_h[1 ], vc4_state->crtc_h); -/* YUV conversion requires that scaling be enabled, -* even on a plane that's otherwise 1:1. Choose TPZ -* for simplicity. +/* YUV conversion requires that horizontal scaling be enabled, +* even on a plane that's otherwise 1:1. Looks like only PPF +* works in that case, so let's pick that one. */ -if (vc4_state->x_scaling[0 ] ==VC4_SCALING_NONE ) - vc4_state->x_scaling[0 ] =VC4_SCALING_TPZ ; -if (vc4_state->y_scaling[0 ] ==VC4_SCALING_NONE ) - vc4_state->y_scaling[0 ] =VC4_SCALING_TPZ ; +if (vc4_state->is_unity) + vc4_state->x_scaling[0 ] =VC4_SCALING_PPF ; }else { vc4_state->x_scaling[1 ] =VC4_SCALING_NONE ; vc4_state->y_scaling[1 ] =VC4_SCALING_NONE ; } - vc4_state->is_unity = (vc4_state->x_scaling[0 ] ==VC4_SCALING_NONE && - vc4_state->y_scaling[0 ] ==VC4_SCALING_NONE && - vc4_state->x_scaling[1 ] ==VC4_SCALING_NONE && - vc4_state->y_scaling[1 ] ==VC4_SCALING_NONE ); -/* No configuring scaling on the cursor plane, since it gets non-vblank-synced updates, and scaling requires requires LBM changes which have to be vblank-synced.
@@ -614,7 +610,10 @@ static int vc4_plane_mode_set(struct drmvc4_dlist_write (vc4_state,SCALER_CSC2_ITR_R_601_5 ); } -if (!vc4_state->is_unity) { +if (vc4_state->x_scaling[0 ] !=VC4_SCALING_NONE || + vc4_state->x_scaling[1 ] !=VC4_SCALING_NONE || + vc4_state->y_scaling[0 ] !=VC4_SCALING_NONE || + vc4_state->y_scaling[1 ] !=VC4_SCALING_NONE ) {/* LBM Base Address. */ if (vc4_state->y_scaling[0 ] !=VC4_SCALING_NONE || vc4_state->y_scaling[1 ] !=VC4_SCALING_NONE ) {
Greg Kroah-Hartman
maintainerPATCH 31/44 tty: vt_ioctl: fix potential Spectre v1
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gustavo A. R. Silva <[email protected]>
commit e97267cb4d1ee01ca0929638ec0fcbb0904f903d upstream.
vsa.console is indirectly controlled by user-space, hence leading to a potential exploitation of the Spectre variant 1 vulnerability.
This issue was detected with the help of Smatch:
drivers/tty/vt/vt_ioctl.c:711 vt_ioctl() warn: potential spectre issue 'vc_cons' [r]
Fix this by sanitizing vsa.console before using it to index vc_cons
Notice that given that speculation windows are large, the policy is to kill the speculation on the first load and not worry if it can be completed with a dependent load/store [1].
[1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2
--- drivers/tty/vt/vt_ioctl.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/tty/vt/vt_ioctl.c +4 -0
@@ -31,6 +31,8 @@#include <asm/io.h> #include <asm/uaccess.h> +#include <linux/nospec.h> +#include <linux/kbd_kern.h> #include <linux/vt_kern.h> #include <linux/kbd_diacr.h>
@@ -703,6 +705,8 @@ int vt_ioctl(struct tty_struct *tty,if (vsa.console ==0 || vsa.console >MAX_NR_CONSOLES ) ret = -ENXIO ;else { + vsa.console =array_index_nospec (vsa.console, +MAX_NR_CONSOLES +1 ); vsa.console--;console_lock (); ret =vc_allocate (vsa.console);
Greg Kroah-Hartman
maintainerPATCH 32/44 ext4: check to make sure the rename(2)s destination is not freed
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit b50282f3241acee880514212d88b6049fb5039c8 upstream.
If the destination of the rename(2) system call exists, the inode's link count (i_nlinks) must be non-zero. If it is, the inode can end up on the orphan list prematurely, leading to all sorts of hilarity, including a use-after-free.
https://bugzilla.kernel.org/show_bug.cgi?id=200931
--- fs/ext4/namei.c | 6 ++++++ 1 file changed, 6 insertions(+)
fs/ext4/namei.c +6 -0
@@ -3527,6 +3527,12 @@ static int ext4_rename(struct inode *oldint credits;u8 old_file_type; +if (new.inode && new.inode->i_nlink ==0 ) { +EXT4_ERROR_INODE (new.inode, +"target of rename is already freed" ); +return -EFSCORRUPTED ; + } +if ((ext4_test_inode_flag (new_dir,EXT4_INODE_PROJINHERIT )) && (!projid_eq (EXT4_I (new_dir)->i_projid,EXT4_I (old_dentry->d_inode)->i_projid)))
Greg Kroah-Hartman
maintainerPATCH 10/44 ALSA: oxfw: fix memory leak for model-dependent data at error path
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Sakamoto <[email protected]>
commit ce925f088b979537f22f9e05eb923ef9822ca139 upstream.
After allocating model-dependent data, ALSA OXFW driver has memory leak of the data at error path.
This commit releases the data at the error path.
--- sound/firewire/oxfw/oxfw.c | 2 ++ 1 file changed, 2 insertions(+)
sound/firewire/oxfw/oxfw.c +2 -0
@@ -275,6 +275,8 @@ error:if (oxfw->has_output)snd_oxfw_stream_destroy_simplex (oxfw, &oxfw->tx_stream);snd_card_free (oxfw->card); +kfree (oxfw->spec); + oxfw->spec =NULL ;dev_info (&oxfw->unit->device,"Sound card registration failed: %d\n" , err); }
Greg Kroah-Hartman
maintainerPATCH 11/44 ALSA: oxfw: fix memory leak of discovered stream formats at error path
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Sakamoto <[email protected]>
commit 1064bc685d359f549f91c2d5f111965a9284f328 upstream.
After finishing discover of stream formats, ALSA OXFW driver has memory leak of allocated memory object at error path.
This commit releases the memory object at the error path.
--- sound/firewire/oxfw/oxfw.c | 7 +++++++ 1 file changed, 7 insertions(+)
sound/firewire/oxfw/oxfw.c +7 -0
@@ -212,6 +212,7 @@ static int detect_quirks(struct snd_oxfwstatic void do_registration (struct work_struct *work) { struct snd_oxfw *oxfw = container_of(work, struct snd_oxfw, dwork.work); +int i;int err;if (oxfw->registered)
@@ -274,6 +275,12 @@ error:snd_oxfw_stream_destroy_simplex (oxfw, &oxfw->rx_stream);if (oxfw->has_output)snd_oxfw_stream_destroy_simplex (oxfw, &oxfw->tx_stream); +for (i =0 ; i <SND_OXFW_STREAM_FORMAT_ENTRIES ; ++i) { +kfree (oxfw->tx_stream_formats[i]); + oxfw->tx_stream_formats[i] =NULL ; +kfree (oxfw->rx_stream_formats[i]); + oxfw->rx_stream_formats[i] =NULL ; + }snd_card_free (oxfw->card);kfree (oxfw->spec); oxfw->spec =NULL ;
Greg Kroah-Hartman
maintainerPATCH 12/44 ALSA: oxfw: fix memory leak of private data
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Sakamoto <[email protected]>
commit 498fe23aad8e3b5a9554f55719c537603b4476ea upstream.
Although private data of sound card instance is usually allocated in the tail of the instance, drivers in ALSA firewire stack allocate the private data before allocating the instance. In this case, the private data should be released explicitly at .private_free callback of the instance.
This commit fixes memory leak following to the above design.
--- sound/firewire/oxfw/oxfw.c | 1 + 1 file changed, 1 insertion(+)
sound/firewire/oxfw/oxfw.c +1 -0
@@ -135,6 +135,7 @@ static void oxfw_free(struct snd_oxfw *okfree (oxfw->spec);mutex_destroy (&oxfw->mutex); +kfree (oxfw); }/*
Greg Kroah-Hartman
maintainerPATCH 13/44 platform/x86: alienware-wmi: Correct a memory leak
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mario Limonciello <[email protected]>
commit ff0e9f26288d2daee4950f42b37a3d3d30d36ec1 upstream.
An ACPI buffer that was allocated was not being freed after use.
--- drivers/platform/x86/alienware-wmi.c | 1 + 1 file changed, 1 insertion(+)
drivers/platform/x86/alienware-wmi.c +1 -0
@@ -518,6 +518,7 @@ static acpi_status alienware_wmax_commanif (obj && obj->type ==ACPI_TYPE_INTEGER ) *out_data = (u32 ) obj->integer.value; } +kfree (output.pointer);return status; }
Greg Kroah-Hartman
maintainerPATCH 14/44 xen/netfront: dont bug in case of too many frags
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Juergen Gross <[email protected]>
commit ad4f15dc2c70b1de5e0a64d27335962fbc9cf71c upstream.
Commit 57f230ab04d291 ("xen/netfront: raise max number of slots in xennet_get_responses()") raised the max number of allowed slots by one. This seems to be problematic in some configurations with netback using a larger MAX_SKB_FRAGS value (e.g. old Linux kernel with MAX_SKB_FRAGS defined as 18 instead of nowadays 17).
Instead of BUG_ON() in this case just fall back to retransmission.
--- drivers/net/xen-netfront.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/net/xen-netfront.c +7 -1
@@ -906,7 +906,11 @@ static RING_IDX xennet_fill_frags(structBUG_ON (pull_to <=skb_headlen (skb));__pskb_pull_tail (skb, pull_to -skb_headlen (skb)); } -BUG_ON (skb_shinfo (skb)->nr_frags >=MAX_SKB_FRAGS ); +if (unlikely (skb_shinfo (skb)->nr_frags >=MAX_SKB_FRAGS )) { + queue->rx.rsp_cons = ++cons; +kfree_skb (nskb); +return ~0U ; + } skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, skb_frag_page(nfrag),
@@ -1043,6 +1047,8 @@ err: skb->len += rx->status; i =xennet_fill_frags (queue, skb, &tmpq); +if (unlikely (i == ~0U )) + goto err;if (rx->flags & XEN_NETRXF_csum_blank) skb->ip_summed =CHECKSUM_PARTIAL ;
Greg Kroah-Hartman
maintainerPATCH 15/44 xen/x86/vpmu: Zero struct pt_regs before calling into sample handling code
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Boris Ostrovsky <[email protected]>
commit 70513d58751d7c6c1a0133557b13089b9f2e3e66 upstream.
Otherwise we may leak kernel stack for events that sample user registers.
--- arch/x86/xen/pmu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/xen/pmu.c +1 -1
@@ -477,7 +477,7 @@ static void xen_convert_regs(const strucirqreturn_t xen_pmu_irq_handler (int irq,void *dev_id) {int err, ret =IRQ_NONE ; -struct pt_regs regs; +struct pt_regs regs = {0 };const struct xen_pmu_data *xenpmu_data =get_xenpmu_data ();uint8_t xenpmu_flags =get_xenpmu_flags ();
Greg Kroah-Hartman
maintainerPATCH 16/44 Revert "PCI: Add ACS quirk for Intel 300 series"
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mika Westerberg <[email protected]>
commit 50ca031b51106b1b46162d4e9ecccb7edc95682f upstream.
This reverts f154a718e6cc ("PCI: Add ACS quirk for Intel 300 series").
It turns out that erratum "PCH PCIe* Controller Root Port (ACSCTLR) Appear As Read Only" has been fixed in 300 series chipsets, even though the datasheet [1] claims otherwise. To make ACS work properly on 300 series root ports, revert the faulty commit.
--- drivers/pci/quirks.c | 6 ------ 1 file changed, 6 deletions(-)
drivers/pci/quirks.c +0 -6
@@ -4236,11 +4236,6 @@ static int pci_quirk_qcom_rp_acs(struct* * 0x9d10-0x9d1b PCI Express Root port #{1-12} * -* The 300 series chipset suffers from the same bug so include those root -* ports here as well. -* -* 0xa32c-0xa343 PCI Express Root port #{0-24} -* * [1] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-2.html * [2] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-1.html * [3] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-spec-update.html
@@ -4258,7 +4253,6 @@ static bool pci_quirk_intel_spt_pch_acs_ case 0xa110 ... 0xa11f: case 0xa167 ... 0xa16a: /* Sunrise Point */ case 0xa290 ... 0xa29f: case 0xa2e7 ... 0xa2ee: /* Union Point */ case 0x9d10 ... 0x9d1b: /* 7th & 8th Gen Mobile */ - case 0xa32c ... 0xa343: /* 300 series */return true; }
Greg Kroah-Hartman
maintainerPATCH 7/44 ALSA: firewire-digi00x: fix memory leak of private data
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Sakamoto <[email protected]>
commit a49a83ab05e34edd6c71a4fbd062c9a7ba6d18aa upstream.
Although private data of sound card instance is usually allocated in the tail of the instance, drivers in ALSA firewire stack allocate the private data before allocating the instance. In this case, the private data should be released explicitly at .private_free callback of the instance.
This commit fixes memory leak following to the above design.
--- sound/firewire/digi00x/digi00x.c | 1 + 1 file changed, 1 insertion(+)
sound/firewire/digi00x/digi00x.c +1 -0
@@ -49,6 +49,7 @@ static void dg00x_free(struct snd_dg00xfw_unit_put (dg00x->unit);mutex_destroy (&dg00x->mutex); +kfree (dg00x); }static void dg00x_card_free (struct snd_card *card)
Greg Kroah-Hartman
maintainerPATCH 44/44 iw_cxgb4: only allow 1 flush on user qps
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steve Wise <[email protected]>
commit 308aa2b8f7b7db3332a7d41099fd37851fb793b2 upstream.
Once the qp has been flushed, it cannot be flushed again. The user qp flush logic wasn't enforcing it however. The bug can cause touch-after-free crashes like:
Unable to handle kernel paging request for data at address 0x000001ec Faulting instruction address: 0xc008000016069100 Oops: Kernel access of bad area, sig: 11 [#1] ... NIP [c008000016069100] flush_qp+0x80/0x480 [iw_cxgb4] LR [c00800001606cd6c] c4iw_modify_qp+0x71c/0x11d0 [iw_cxgb4] Call Trace: [c00800001606cd6c] c4iw_modify_qp+0x71c/0x11d0 [iw_cxgb4] [c00800001606e868] c4iw_ib_modify_qp+0x118/0x200 [iw_cxgb4] [c0080000119eae80] ib_security_modify_qp+0xd0/0x3d0 [ib_core] [c0080000119c4e24] ib_modify_qp+0xc4/0x2c0 [ib_core] [c008000011df0284] iwcm_modify_qp_err+0x44/0x70 [iw_cm] [c008000011df0fec] destroy_cm_id+0xcc/0x370 [iw_cm] [c008000011ed4358] rdma_destroy_id+0x3c8/0x520 [rdma_cm] [c0080000134b0540] ucma_close+0x90/0x1b0 [rdma_ucm] [c000000000444da4] __fput+0xe4/0x2f0
So fix flush_qp() to only flush the wq once.
--- drivers/infiniband/hw/cxgb4/qp.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/infiniband/hw/cxgb4/qp.c +6 -0
@@ -1258,6 +1258,12 @@ static void flush_qp(struct c4iw_qp *qhpt4_set_wq_in_error (&qhp->wq);if (qhp->ibqp.uobject) { + +/* for user qps, qhp->wq.flushed is protected by qhp->mutex */ +if (qhp->wq.flushed) +return ; + + qhp->wq.flushed =1 ;t4_set_cq_in_error (&rchp->cq);spin_lock_irqsave (&rchp->comp_handler_lock, flag); (*rchp->ibcq.comp_handler)(&rchp->ibcq, rchp->ibcq.cq_context);
Greg Kroah-Hartman
maintainerPATCH 35/44 ext4: fix online resizes handling of a too-small final block group
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit f0a459dec5495a3580f8d784555e6f8f3bf7f263 upstream.
Avoid growing the file system to an extent so that the last block group is too small to hold all of the metadata that must be stored in the block group.
This problem can be triggered with the following reproducer:
umount /mnt
mke2fs -F -m0 -b 4096 -t ext4 -O resize_inode,^has_journal \ -E resize=1073741824 /tmp/foo.img 128M
mount /tmp/foo.img /mnt
truncate --size 1708M /tmp/foo.img
resize2fs /dev/loop0 295400
umount /mnt
e2fsck -fy /tmp/foo.img
--- fs/ext4/resize.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
fs/ext4/resize.c +20 -0
@@ -1954,6 +1954,26 @@ retry: } } +/* +* Make sure the last group has enough space so that it's +* guaranteed to have enough space for all metadata blocks +* that it might need to hold. (We might not need to store +* the inode table blocks in the last block group, but there +* will be cases where this might be needed.) +*/ +if ((ext4_group_first_block_no (sb, n_group) + +ext4_group_overhead_blocks (sb, n_group) +2 + + sbi->s_itb_per_group + sbi->s_cluster_ratio) >= n_blocks_count) { + n_blocks_count =ext4_group_first_block_no (sb, n_group); + n_group--; + n_blocks_count_retry =0 ; +if (resize_inode) { +iput (resize_inode); + resize_inode =NULL ; + } + goto retry; + } +/* extend the last group */ if (n_group == o_group) add = n_blocks_count - o_blocks_count;
Greg Kroah-Hartman
maintainerPATCH 36/44 ext4: fix online resizing for bigalloc file systems with a 1k block size
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit 5f8c10936fab2b69a487400f2872902e597dd320 upstream.
An online resize of a file system with the bigalloc feature enabled and a 1k block size would be refused since ext4_resize_begin() did not understand s_first_data_block is 0 for all bigalloc file systems, even when the block size is 1k.
--- fs/ext4/resize.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/ext4/resize.c +2 -1
@@ -18,6 +18,7 @@int ext4_resize_begin (struct super_block *sb) { +struct ext4_sb_info *sbi =EXT4_SB (sb);int ret =0 ;if (!capable (CAP_SYS_RESOURCE ))
@@ -28,7 +29,7 @@ int ext4_resize_begin(struct super_block* because the user tools have no way of handling this. Probably a * bad time to do it anyways. */ -if (EXT4_SB (sb)->s_sbh->b_blocknr != +if (EXT4_B2C (sbi, sbi->s_sbh->b_blocknr) !=le32_to_cpu (EXT4_SB (sb)->s_es->s_first_data_block)) {ext4_warning (sb,"won't resize using backup superblock at %llu" , (unsigned long long )EXT4_SB (sb)->s_sbh->b_blocknr);
Greg Kroah-Hartman
maintainerPATCH 37/44 ext4: dont mark mmp buffer head dirty
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Li Dongyang <[email protected]>
commit fe18d649891d813964d3aaeebad873f281627fbc upstream.
Marking mmp bh dirty before writing it will make writeback pick up mmp block later and submit a write, we don't want the duplicate write as kmmpd thread should have full control of reading and writing the mmp block.
Another reason is we will also have random I/O error on the writeback request when blk integrity is enabled, because kmmpd could modify the content of the mmp block(e.g. setting new seq and time) while the mmp block is under I/O requested by writeback.
--- fs/ext4/mmp.c | 1 - 1 file changed, 1 deletion(-)
fs/ext4/mmp.c +0 -1
@@ -48,7 +48,6 @@ static int write_mmp_block(struct super_*/ sb_start_write (sb);ext4_mmp_csum_set (sb, mmp); -mark_buffer_dirty (bh);lock_buffer (bh); bh->b_end_io = end_buffer_write_sync;get_bh (bh);
Greg Kroah-Hartman
maintainerPATCH 38/44 ext4: show test_dummy_encryption mount option in /proc/mounts
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
commit 338affb548c243d2af25b1ca628e67819350de6b upstream.
When in effect, add "test_dummy_encryption" to _ext4_show_options() so that it is shown in /proc/mounts and other relevant procfs files.
--- fs/ext4/super.c | 2 ++ 1 file changed, 2 insertions(+)
fs/ext4/super.c +2 -0
@@ -2015,6 +2015,8 @@ static int _ext4_show_options(struct seqSEQ_OPTS_PRINT ("max_dir_size_kb=%u" , sbi->s_max_dir_size_kb);if (test_opt (sb,DATA_ERR_ABORT ))SEQ_OPTS_PUTS ("data_err=abort" ); +if (DUMMY_ENCRYPTION_ENABLED (sbi)) +SEQ_OPTS_PUTS ("test_dummy_encryption" );ext4_show_quota_options (seq, sb);return 0 ;
Greg Kroah-Hartman
maintainerPATCH 40/44 HID: sony: Update device ids
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Roderick Colenbrander <[email protected]>
commit cf1015d65d7c8a5504a4c03afb60fb86bff0f032 upstream.
Support additional DS4 model.
--- drivers/hid/hid-core.c | 2 ++ drivers/hid/hid-ids.h | 1 + drivers/hid/hid-sony.c | 4 ++++ 3 files changed, 7 insertions(+)
drivers/hid/hid-core.c +2 -0
@@ -2059,6 +2059,8 @@ static const struct hid_device_id hid_ha { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) }, { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) }, { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER) },
drivers/hid/hid-ids.h +1 -0
@@ -927,6 +927,7 @@#define USB_DEVICE_ID_SONY_PS3_BDREMOTE 0x0306#define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268#define USB_DEVICE_ID_SONY_PS4_CONTROLLER 0x05c4 +#define USB_DEVICE_ID_SONY_PS4_CONTROLLER_2 0x09cc#define USB_DEVICE_ID_SONY_MOTION_CONTROLLER 0x03d5#define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER 0x042f#define USB_DEVICE_ID_SONY_BUZZ_CONTROLLER 0x0002
drivers/hid/hid-sony.c +4 -0
@@ -2581,6 +2581,10 @@ static const struct hid_device_id sony_d .driver_data = DUALSHOCK4_CONTROLLER_USB }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER), .driver_data = DUALSHOCK4_CONTROLLER_BT }, + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2), + .driver_data = DUALSHOCK4_CONTROLLER_USB }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2), + .driver_data = DUALSHOCK4_CONTROLLER_BT }, /* Nyko Core Controller for PS3 */ { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER), .driver_data = SIXAXIS_CONTROLLER_USB | SINO_LITE_CONTROLLER },
Greg Kroah-Hartman
maintainerPATCH 41/44 HID: sony: Support DS4 dongle
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Roderick Colenbrander <[email protected]>
commit de66a1a04c25f2560a8dca7a95e2a150b0d5e17e upstream.
Add support for USB based DS4 dongle device, which allows connecting a DS4 through Bluetooth, but hides Bluetooth from the host system.
--- drivers/hid/hid-core.c | 1 + drivers/hid/hid-ids.h | 1 + drivers/hid/hid-sony.c | 2 ++ 3 files changed, 4 insertions(+)
drivers/hid/hid-core.c +1 -0
@@ -2061,6 +2061,7 @@ static const struct hid_device_id hid_ha { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) }, { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE) }, { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) }, { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER) },
drivers/hid/hid-ids.h +1 -0
@@ -928,6 +928,7 @@#define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268#define USB_DEVICE_ID_SONY_PS4_CONTROLLER 0x05c4#define USB_DEVICE_ID_SONY_PS4_CONTROLLER_2 0x09cc +#define USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE 0x0ba0#define USB_DEVICE_ID_SONY_MOTION_CONTROLLER 0x03d5#define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER 0x042f#define USB_DEVICE_ID_SONY_BUZZ_CONTROLLER 0x0002
drivers/hid/hid-sony.c +2 -0
@@ -2585,6 +2585,8 @@ static const struct hid_device_id sony_d .driver_data = DUALSHOCK4_CONTROLLER_USB }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2), .driver_data = DUALSHOCK4_CONTROLLER_BT }, + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE), + .driver_data = DUALSHOCK4_CONTROLLER_USB }, /* Nyko Core Controller for PS3 */ { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER), .driver_data = SIXAXIS_CONTROLLER_USB | SINO_LITE_CONTROLLER },
Greg Kroah-Hartman
maintainerPATCH 42/44 PCI: aardvark: Size bridges before resources allocation
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zachary Zhang <[email protected]>
commit 91a2968e245d6ba616db37001fa1a043078b1a65 upstream.
The PCIE I/O and MEM resource allocation mechanism is that root bus goes through the following steps:
1. Check PCI bridges' range and computes I/O and Mem base/limits.
2. Sort all subordinate devices I/O and MEM resource requirements and allocate the resources and writes/updates subordinate devices' requirements to PCI bridges I/O and Mem MEM/limits registers.
Currently, PCI Aardvark driver only handles the second step and lacks the first step, so there is an I/O and MEM resource allocation failure when using a PCI switch. This commit fixes that by sizing bridges before doing the resource allocation.
driver")
--- drivers/pci/host/pci-aardvark.c | 1 + 1 file changed, 1 insertion(+)
drivers/pci/host/pci-aardvark.c +1 -0
@@ -976,6 +976,7 @@ static int advk_pcie_probe(struct platforeturn -ENOMEM ; } +pci_bus_size_bridges (bus);pci_bus_assign_resources (bus);list_for_each_entry (child, &bus->children, node)
Greg Kroah-Hartman
maintainerPATCH 33/44 ext4: avoid divide by zero fault when deleting corrupted inline directories
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit 4d982e25d0bdc83d8c64e66fdeca0b89240b3b85 upstream.
A specially crafted file system can trick empty_inline_dir() into reading past the last valid entry in a inline directory, and then run into the end of xattr marker. This will trigger a divide by zero fault. Fix this by using the size of the inline directory instead of dir->i_size.
Also clean up error reporting in __ext4_check_dir_entry so that the message is clearer and more understandable --- and avoids the division by zero trap if the size passed in is zero. (I'm not sure why we coded it that way in the first place; printing offset % size is actually more confusing and less useful.)
https://bugzilla.kernel.org/show_bug.cgi?id=200933
--- fs/ext4/dir.c | 20 +++++++++----------- fs/ext4/inline.c | 4 +++- 2 files changed, 12 insertions(+), 12 deletions(-)
fs/ext4/dir.c +9 -11
@@ -74,7 +74,7 @@ int __ext4_check_dir_entry(const char *felse if (unlikely (rlen <EXT4_DIR_REC_LEN (de->name_len))) error_msg ="rec_len is too small for name_len" ;else if (unlikely (((char *) de - buf) + rlen > size)) - error_msg ="directory entry across range" ; + error_msg ="directory entry overrun" ;else if (unlikely (le32_to_cpu (de->inode) >le32_to_cpu (EXT4_SB (dir->i_sb)->s_es->s_inodes_count))) error_msg ="inode out of bounds" ;
@@ -83,18 +83,16 @@ int __ext4_check_dir_entry(const char *fif (filp)ext4_error_file (filp, function, line, bh->b_blocknr, -"bad entry in directory: %s - offset=%u(%u), " -"inode=%u, rec_len=%d, name_len=%d" , - error_msg, (unsigned ) (offset % size), - offset,le32_to_cpu (de->inode), - rlen, de->name_len); +"bad entry in directory: %s - offset=%u, " +"inode=%u, rec_len=%d, name_len=%d, size=%d" , + error_msg, offset,le32_to_cpu (de->inode), + rlen, de->name_len, size);else ext4_error_inode (dir, function, line, bh->b_blocknr, -"bad entry in directory: %s - offset=%u(%u), " -"inode=%u, rec_len=%d, name_len=%d" , - error_msg, (unsigned ) (offset % size), - offset,le32_to_cpu (de->inode), - rlen, de->name_len); +"bad entry in directory: %s - offset=%u, " +"inode=%u, rec_len=%d, name_len=%d, size=%d" , + error_msg, offset,le32_to_cpu (de->inode), + rlen, de->name_len, size);return 1 ; }
fs/ext4/inline.c +3 -1
@@ -1754,6 +1754,7 @@ bool empty_inline_dir(struct inode *dir, {int err, inline_size;struct ext4_iloc iloc; +size_t inline_len;void *inline_pos;unsigned int offset;struct ext4_dir_entry_2 *de;
@@ -1781,8 +1782,9 @@ bool empty_inline_dir(struct inode *dir, goto out; } + inline_len =ext4_get_inline_size (dir); offset =EXT4_INLINE_DOTDOT_SIZE ; -while (offset < dir->i_size) { +while (offset < inline_len) { de =ext4_get_inline_entry (dir, &iloc, offset, &inline_pos, &inline_size); if (ext4_check_dir_entry(dir, NULL, de,
Greg Kroah-Hartman
maintainerPATCH 25/44 scsi: target: iscsi: Use hex2bin instead of a re-implementation
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vincent Pelletier <[email protected]>
commit 1816494330a83f2a064499d8ed2797045641f92c upstream.
This change has the following effects, in order of descreasing importance:
1) Prevent a stack buffer overflow
2) Do not append an unnecessary NULL to an anyway binary buffer, which is writing one byte past client_digest when caller is:
chap_string_to_hex(client_digest, chap_r, strlen(chap_r));
The latter was found by KASAN (see below) when input value hes expected size (32 hex chars), and further analysis revealed a stack buffer overflow can happen when network-received value is longer, allowing an unauthenticated remote attacker to smash up to 17 bytes after destination buffer (16 bytes attacker-controlled and one null). As switching to hex2bin requires specifying destination buffer length, and does not internally append any null, it solves both issues.
This addresses CVE-2018-14633.
Beyond this:
- Validate received value length and check hex2bin accepted the input, to log this rejection reason instead of just failing authentication.
- Only log received CHAP_R and CHAP_C values once they passed sanity checks.
==================================================================
BUG: KASAN: stack-out-of-bounds in chap_string_to_hex+0x32/0x60 [iscsi_target_mod]
Write of size 1 at addr ffff8801090ef7c8 by task kworker/0:0/1021
CPU: 0 PID: 1021 Comm: kworker/0:0 Tainted: G O 4.17.8kasan.sess.connops+ #2
Hardware name: To be filled by O.E.M. To be filled by O.E.M./Aptio CRB, BIOS 5.6.5 05/19/2014
Workqueue: events iscsi_target_do_login_rx [iscsi_target_mod]
Call Trace:
dump_stack+0x71/0xac
print_address_description+0x65/0x22e
? chap_string_to_hex+0x32/0x60 [iscsi_target_mod]
kasan_report.cold.6+0x241/0x2fd
chap_string_to_hex+0x32/0x60 [iscsi_target_mod]
chap_server_compute_md5.isra.2+0x2cb/0x860 [iscsi_target_mod]
? chap_binaryhex_to_asciihex.constprop.5+0x50/0x50 [iscsi_target_mod]
? ftrace_caller_op_ptr+0xe/0xe
? __orc_find+0x6f/0xc0
? unwind_next_frame+0x231/0x850
? kthread+0x1a0/0x1c0
? ret_from_fork+0x35/0x40
? ret_from_fork+0x35/0x40
? iscsi_target_do_login_rx+0x3bc/0x4c0 [iscsi_target_mod]
? deref_stack_reg+0xd0/0xd0
? iscsi_target_do_login_rx+0x3bc/0x4c0 [iscsi_target_mod]
? is_module_text_address+0xa/0x11
? kernel_text_address+0x4c/0x110
? __save_stack_trace+0x82/0x100
? ret_from_fork+0x35/0x40
? save_stack+0x8c/0xb0
? 0xffffffffc1660000
? iscsi_target_do_login+0x155/0x8d0 [iscsi_target_mod]
? iscsi_target_do_login_rx+0x3bc/0x4c0 [iscsi_target_mod]
? process_one_work+0x35c/0x640
? worker_thread+0x66/0x5d0
? kthread+0x1a0/0x1c0
? ret_from_fork+0x35/0x40
? iscsi_update_param_value+0x80/0x80 [iscsi_target_mod]
? iscsit_release_cmd+0x170/0x170 [iscsi_target_mod]
chap_main_loop+0x172/0x570 [iscsi_target_mod]
? chap_server_compute_md5.isra.2+0x860/0x860 [iscsi_target_mod]
? rx_data+0xd6/0x120 [iscsi_target_mod]
? iscsit_print_session_params+0xd0/0xd0 [iscsi_target_mod]
? cyc2ns_read_begin.part.2+0x90/0x90
? _raw_spin_lock_irqsave+0x25/0x50
? memcmp+0x45/0x70
iscsi_target_do_login+0x875/0x8d0 [iscsi_target_mod]
? iscsi_target_check_first_request.isra.5+0x1a0/0x1a0 [iscsi_target_mod]
? del_timer+0xe0/0xe0
? memset+0x1f/0x40
? flush_sigqueue+0x29/0xd0
iscsi_target_do_login_rx+0x3bc/0x4c0 [iscsi_target_mod]
? iscsi_target_nego_release+0x80/0x80 [iscsi_target_mod]
? iscsi_target_restore_sock_callbacks+0x130/0x130 [iscsi_target_mod]
process_one_work+0x35c/0x640
worker_thread+0x66/0x5d0
? flush_rcu_work+0x40/0x40
kthread+0x1a0/0x1c0
? kthread_bind+0x30/0x30
ret_from_fork+0x35/0x40
The buggy address belongs to the page:
page:ffffea0004243bc0 count:0 mapcount:0 mapping:0000000000000000 index:0x0
flags: 0x17fffc000000000()
raw: 017fffc000000000 0000000000000000 0000000000000000 00000000ffffffff
raw: ffffea0004243c20 ffffea0004243ba0 0000000000000000 0000000000000000
page dumped because: kasan: bad access detected
Memory state around the buggy address:
ffff8801090ef680: f2 f2 f2 f2 f2 f2 f2 01 f2 f2 f2 f2 f2 f2 f2 00
ffff8801090ef700: f2 f2 f2 f2 f2 f2 f2 00 02 f2 f2 f2 f2 f2 f2 00
>ffff8801090ef780: 00 f2 f2 f2 f2 f2 f2 00 00 f2 f2 f2 f2 f2 f2 00
^
ffff8801090ef800: 00 f2 f2 f2 f2 f2 f2 00 00 00 00 02 f2 f2 f2 f2
ffff8801090ef880: f2 f2 f2 00 00 00 00 00 00 00 00 f2 f2 f2 f2 00
==================================================================--- drivers/target/iscsi/iscsi_target_auth.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-)
drivers/target/iscsi/iscsi_target_auth.c +14 -16
@@ -26,18 +26,6 @@#include "iscsi_target_nego.h" #include "iscsi_target_auth.h" -static int chap_string_to_hex (unsigned char *dst,unsigned char *src,int len) -{ -int j =DIV_ROUND_UP (len,2 ), rc; - - rc =hex2bin (dst, src, j); -if (rc <0 ) -pr_debug ("CHAP string contains non hex digit symbols\n" ); - - dst[j] ='\0' ; -return j; -} -static void chap_binaryhex_to_asciihex (char *dst,char *src,int src_len) {int i;
@@ -240,9 +228,16 @@ static int chap_server_compute_md5(pr_err ("Could not find CHAP_R.\n" ); goto out; } +if (strlen (chap_r) !=MD5_SIGNATURE_SIZE *2 ) { +pr_err ("Malformed CHAP_R\n" ); + goto out; + } +if (hex2bin (client_digest, chap_r,MD5_SIGNATURE_SIZE ) <0 ) { +pr_err ("Malformed CHAP_R\n" ); + goto out; + }pr_debug ("[server] Got CHAP_R=%s\n" , chap_r); -chap_string_to_hex (client_digest, chap_r,strlen (chap_r)); tfm =crypto_alloc_shash ("md5" ,0 ,0 );if (IS_ERR (tfm)) {
@@ -341,9 +336,7 @@ static int chap_server_compute_md5(pr_err ("Could not find CHAP_C.\n" ); goto out; } -pr_debug ("[server] Got CHAP_C=%s\n" , challenge); - challenge_len =chap_string_to_hex (challenge_binhex, challenge, -strlen (challenge)); + challenge_len =DIV_ROUND_UP (strlen (challenge),2 );if (!challenge_len) {pr_err ("Unable to convert incoming challenge\n" ); goto out;
@@ -352,6 +345,11 @@ static int chap_server_compute_md5(pr_err ("CHAP_C exceeds maximum binary size of 1024 bytes\n" ); goto out; } +if (hex2bin (challenge_binhex, challenge, challenge_len) <0 ) { +pr_err ("Malformed CHAP_C\n" ); + goto out; + } +pr_debug ("[server] Got CHAP_C=%s\n" , challenge);/* * During mutual authentication, the CHAP_C generated by the * initiator must not match the original CHAP_C generated by
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.130 release. There are 44 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 Sat Sep 29 09:00:54 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.9.130-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
Merged, compiled with -Werror, and installed onto my OnePlus 6.
No initial issues noticed in dmesg or general usage.
Thanks!
Nathan
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.130 release. There are 44 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 Sat Sep 29 09:00:54 UTC 2018. 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.130-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.
Summary
------------------------------------------------------------------------
kernel: 4.9.130-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.9.y
git commit: e633007977505b13dcf86601b4f41ee941035089
git describe: v4.9.129-45-ge63300797750
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.9-oe/build/v4.9.129-45-ge63300797750
No regressions (compared to build v4.9.128-108-g6ceccdf5ca9e)
Ran 21276 total tests in the following environments and test suites.
Environments
--------------
- dragonboard-410c - arm64
- hi6220-hikey - arm64
- i386
- juno-r2 - arm64
- qemu_arm
- qemu_arm64
- qemu_i386
- qemu_x86_64
- x15 - arm
- x86_64
Test Suites
-----------
* boot
* kselftest
* libhugetlbfs
* ltp-cap_bounds-tests
* ltp-containers-tests
* ltp-cve-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-timers-tests
* ltp-open-posix-tests
* kselftest-vsyscall-mode-native
* kselftest-vsyscall-mode-none
Signature · 2 lines
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.130 release. There are 44 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 Sat Sep 29 09:00:54 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.9.130-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
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.130 release. There are 44 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 Sat Sep 29 09:00:54 UTC 2018. Anything received after that time might be too late.
Build results:
total: 151 pass: 151 fail: 0 Qemu test results: total: 308 pass: 306 fail: 2 Failed tests: powerpc:g3beige:ppc_book3s_defconfig:nosmp:ide:rootfs i386:pc:EPYC:defconfig:smp:efi32:scsi[MEGASAS]:rootfs
powerpc:g3beige is the known problem. Patch should be available upstream in the near future.
The i386 failure is spurious.
Details are available at https://kerneltests.org/builders/.
Guenter