Skip to content
  1. Dec 22, 2021
    • Letu Ren's avatar
      igbvf: fix double free in `igbvf_probe` · ffe1695b
      Letu Ren authored
      [ Upstream commit b6d335a6 ]
      
      In `igbvf_probe`, if register_netdev() fails, the program will go to
      label err_hw_init, and then to label err_ioremap. In free_netdev() which
      is just below label err_ioremap, there is `list_for_each_entry_safe` and
      `netif_napi_del` which aims to delete all entries in `dev->napi_list`.
      The program has added an entry `adapter->rx_ring->napi` which is added by
      `netif_napi_add` in igbvf_alloc_queues(). However, adapter->rx_ring has
      been freed below label err_hw_init. So this a UAF.
      
      In terms of how to patch the problem, we can refer to igbvf_remove() and
      delete the entry before `adapter->rx_ring`.
      
      The KASAN logs are as follows:
      
      [   35.126075] BUG: KASAN: use-after-free in free_netdev+0x1fd/0x450
      [   35.127170] Read of size 8 at addr ffff88810126d990 by task modprobe/366
      [   35.128360]
      [   35.128643] CPU: 1 PID: 366 Comm: modprobe Not tainted 5.15.0-rc2+ #14
      [   35.129789] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.12.0-59-gc9ba5276e321-prebuilt.qemu.org 04/01/2014
      [   35.131749] Call Trace:
      [   35.132199]  dump_stack_lvl+0x59/0x7b
      [   35.132865]  print_address_description+0x7c/0x3b0
      [   35.133707]  ? free_netdev+0x1fd/0x450
      [   35.134378]  __kasan_report+0x160/0x1c0
      [   35.135063]  ? free_netdev+0x1fd/0x450
      [   35.135738]  kasan_report+0x4b/0x70
      [   35.136367]  free_netdev+0x1fd/0x450
      [   35.137006]  igbvf_probe+0x121d/0x1a10 [igbvf]
      [   35.137808]  ? igbvf_vlan_rx_add_vid+0x100/0x100 [igbvf]
      [   35.138751]  local_pci_probe+0x13c/0x1f0
      [   35.139461]  pci_device_probe+0x37e/0x6c0
      [   35.165526]
      [   35.165806] Allocated by task 366:
      [   35.166414]  ____kasan_kmalloc+0xc4/0xf0
      [   35.167117]  foo_kmem_cache_alloc_trace+0x3c/0x50 [igbvf]
      [   35.168078]  igbvf_probe+0x9c5/0x1a10 [igbvf]
      [   35.168866]  local_pci_probe+0x13c/0x1f0
      [   35.169565]  pci_device_probe+0x37e/0x6c0
      [   35.179713]
      [   35.179993] Freed by task 366:
      [   35.180539]  kasan_set_track+0x4c/0x80
      [   35.181211]  kasan_set_free_info+0x1f/0x40
      [   35.181942]  ____kasan_slab_free+0x103/0x140
      [   35.182703]  kfree+0xe3/0x250
      [   35.183239]  igbvf_probe+0x1173/0x1a10 [igbvf]
      [   35.184040]  local_pci_probe+0x13c/0x1f0
      
      Fixes: d4e0fe01
      
       (igbvf: add new driver to support 82576 virtual functions)
      Reported-by: default avatarZheyu Ma <zheyuma97@gmail.com>
      Signed-off-by: default avatarLetu Ren <fantasquex@gmail.com>
      Tested-by: default avatarKonrad Jankowski <konrad0.jankowski@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ffe1695b
    • Nathan Chancellor's avatar
      soc/tegra: fuse: Fix bitwise vs. logical OR warning · 22feeef2
      Nathan Chancellor authored
      [ Upstream commit a7083763 ]
      
      A new warning in clang points out two instances where boolean
      expressions are being used with a bitwise OR instead of logical OR:
      
      drivers/soc/tegra/fuse/speedo-tegra20.c:72:9: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
                      reg = tegra_fuse_read_spare(i) |
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
                                                     ||
      drivers/soc/tegra/fuse/speedo-tegra20.c:72:9: note: cast one or both operands to int to silence this warning
      drivers/soc/tegra/fuse/speedo-tegra20.c:87:9: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
                      reg = tegra_fuse_read_spare(i) |
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
                                                     ||
      drivers/soc/tegra/fuse/speedo-tegra20.c:87:9: note: cast one or both operands to int to silence this warning
      2 warnings generated.
      
      The motivation for the warning is that logical operations short circuit
      while bitwise operations do not.
      
      In this instance, tegra_fuse_read_spare() is not semantically returning
      a boolean, it is returning a bit value. Use u32 for its return type so
      that it can be used with either bitwise or boolean operators without any
      warnings.
      
      Fixes: 25cd5a39
      
       ("ARM: tegra: Add speedo-based process identification")
      Link: https://github.com/ClangBuiltLinux/linux/issues/1488
      Suggested-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
      Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
      Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      22feeef2
    • J. Bruce Fields's avatar
      nfsd: fix use-after-free due to delegation race · 04a8d07f
      J. Bruce Fields authored
      commit 548ec080 upstream.
      
      A delegation break could arrive as soon as we've called vfs_setlease.  A
      delegation break runs a callback which immediately (in
      nfsd4_cb_recall_prepare) adds the delegation to del_recall_lru.  If we
      then exit nfs4_set_delegation without hashing the delegation, it will be
      freed as soon as the callback is done with it, without ever being
      removed from del_recall_lru.
      
      Symptoms show up later as use-after-free or list corruption warnings,
      usually in the laundromat thread.
      
      I suspect aba2072f
      
       "nfsd: grant read delegations to clients holding
      writes" made this bug easier to hit, but I looked as far back as v3.0
      and it looks to me it already had the same problem.  So I'm not sure
      where the bug was introduced; it may have been there from the beginning.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
      [Salvatore Bonaccorso: Backport for context changes to versions which do
      not have 20b7d86f
      
       ("nfsd: use boottime for lease expiry calculation")]
      Signed-off-by: default avatarSalvatore Bonaccorso <carnil@debian.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      04a8d07f
    • Joe Thornber's avatar
      dm btree remove: fix use after free in rebalance_children() · a48f6a2b
      Joe Thornber authored
      commit 1b8d2789
      
       upstream.
      
      Move dm_tm_unlock() after dm_tm_dec().
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarJoe Thornber <ejt@redhat.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a48f6a2b
    • Jerome Marchand's avatar
      recordmcount.pl: look for jgnop instruction as well as bcrl on s390 · 23760c59
      Jerome Marchand authored
      commit 85bf17b2
      
       upstream.
      
      On s390, recordmcount.pl is looking for "bcrl 0,<xxx>" instructions in
      the objdump -d outpout. However since binutils 2.37, objdump -d
      display "jgnop <xxx>" for the same instruction. Update the
      mcount_regex so that it accepts both.
      
      Signed-off-by: default avatarJerome Marchand <jmarchan@redhat.com>
      Reviewed-by: default avatarMiroslav Benes <mbenes@suse.cz>
      Acked-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20211210093827.1623286-1-jmarchan@redhat.com
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      23760c59
    • Felix Fietkau's avatar
      mac80211: send ADDBA requests using the tid/queue of the aggregation session · 6ff89cda
      Felix Fietkau authored
      commit 1fe98f56
      
       upstream.
      
      Sending them out on a different queue can cause a race condition where a
      number of packets in the queue may be discarded by the receiver, because
      the ADDBA request is sent too early.
      This affects any driver with software A-MPDU setup which does not allocate
      packet seqno in hardware on tx, regardless of whether iTXQ is used or not.
      The only driver I've seen that explicitly deals with this issue internally
      is mwl8k.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
      Link: https://lore.kernel.org/r/20211202124533.80388-1-nbd@nbd.name
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6ff89cda
    • Armin Wolf's avatar
      hwmon: (dell-smm) Fix warning on /proc/i8k creation error · d6a8a0fc
      Armin Wolf authored
      commit dbd3e6ea upstream.
      
      The removal function is called regardless of whether
      /proc/i8k was created successfully or not, the later
      causing a WARN() on module removal.
      Fix that by only registering the removal function
      if /proc/i8k was created successfully.
      
      Tested on a Inspiron 3505.
      
      Fixes: 039ae585
      
       ("hwmon: Allow to compile dell-smm-hwmon driver without /proc/i8k")
      Signed-off-by: default avatarArmin Wolf <W_Armin@gmx.de>
      Acked-by: default avatarPali Rohár <pali@kernel.org>
      Link: https://lore.kernel.org/r/20211112171440.59006-1-W_Armin@gmx.de
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d6a8a0fc
    • Harshit Mogalapalli's avatar
      net: netlink: af_netlink: Prevent empty skb by adding a check on len. · c54a60c8
      Harshit Mogalapalli authored
      [ Upstream commit f123cffd
      
       ]
      
      Adding a check on len parameter to avoid empty skb. This prevents a
      division error in netem_enqueue function which is caused when skb->len=0
      and skb->data_len=0 in the randomized corruption step as shown below.
      
      skb->data[prandom_u32() % skb_headlen(skb)] ^= 1<<(prandom_u32() % 8);
      
      Crash Report:
      [  343.170349] netdevsim netdevsim0 netdevsim3: set [1, 0] type 2 family
      0 port 6081 - 0
      [  343.216110] netem: version 1.3
      [  343.235841] divide error: 0000 [#1] PREEMPT SMP KASAN NOPTI
      [  343.236680] CPU: 3 PID: 4288 Comm: reproducer Not tainted 5.16.0-rc1+
      [  343.237569] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
      BIOS 1.11.0-2.el7 04/01/2014
      [  343.238707] RIP: 0010:netem_enqueue+0x1590/0x33c0 [sch_netem]
      [  343.239499] Code: 89 85 58 ff ff ff e8 5f 5d e9 d3 48 8b b5 48 ff ff
      ff 8b 8d 50 ff ff ff 8b 85 58 ff ff ff 48 8b bd 70 ff ff ff 31 d2 2b 4f
      74 <f7> f1 48 b8 00 00 00 00 00 fc ff df 49 01 d5 4c 89 e9 48 c1 e9 03
      [  343.241883] RSP: 0018:ffff88800bcd7368 EFLAGS: 00010246
      [  343.242589] RAX: 00000000ba7c0a9c RBX: 0000000000000001 RCX:
      0000000000000000
      [  343.243542] RDX: 0000000000000000 RSI: ffff88800f8edb10 RDI:
      ffff88800f8eda40
      [  343.244474] RBP: ffff88800bcd7458 R08: 0000000000000000 R09:
      ffffffff94fb8445
      [  343.245403] R10: ffffffff94fb8336 R11: ffffffff94fb8445 R12:
      0000000000000000
      [  343.246355] R13: ffff88800a5a7000 R14: ffff88800a5b5800 R15:
      0000000000000020
      [  343.247291] FS:  00007fdde2bd7700(0000) GS:ffff888109780000(0000)
      knlGS:0000000000000000
      [  343.248350] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  343.249120] CR2: 00000000200000c0 CR3: 000000000ef4c000 CR4:
      00000000000006e0
      [  343.250076] Call Trace:
      [  343.250423]  <TASK>
      [  343.250713]  ? memcpy+0x4d/0x60
      [  343.251162]  ? netem_init+0xa0/0xa0 [sch_netem]
      [  343.251795]  ? __sanitizer_cov_trace_pc+0x21/0x60
      [  343.252443]  netem_enqueue+0xe28/0x33c0 [sch_netem]
      [  343.253102]  ? stack_trace_save+0x87/0xb0
      [  343.253655]  ? filter_irq_stacks+0xb0/0xb0
      [  343.254220]  ? netem_init+0xa0/0xa0 [sch_netem]
      [  343.254837]  ? __kasan_check_write+0x14/0x20
      [  343.255418]  ? _raw_spin_lock+0x88/0xd6
      [  343.255953]  dev_qdisc_enqueue+0x50/0x180
      [  343.256508]  __dev_queue_xmit+0x1a7e/0x3090
      [  343.257083]  ? netdev_core_pick_tx+0x300/0x300
      [  343.257690]  ? check_kcov_mode+0x10/0x40
      [  343.258219]  ? _raw_spin_unlock_irqrestore+0x29/0x40
      [  343.258899]  ? __kasan_init_slab_obj+0x24/0x30
      [  343.259529]  ? setup_object.isra.71+0x23/0x90
      [  343.260121]  ? new_slab+0x26e/0x4b0
      [  343.260609]  ? kasan_poison+0x3a/0x50
      [  343.261118]  ? kasan_unpoison+0x28/0x50
      [  343.261637]  ? __kasan_slab_alloc+0x71/0x90
      [  343.262214]  ? memcpy+0x4d/0x60
      [  343.262674]  ? write_comp_data+0x2f/0x90
      [  343.263209]  ? __kasan_check_write+0x14/0x20
      [  343.263802]  ? __skb_clone+0x5d6/0x840
      [  343.264329]  ? __sanitizer_cov_trace_pc+0x21/0x60
      [  343.264958]  dev_queue_xmit+0x1c/0x20
      [  343.265470]  netlink_deliver_tap+0x652/0x9c0
      [  343.266067]  netlink_unicast+0x5a0/0x7f0
      [  343.266608]  ? netlink_attachskb+0x860/0x860
      [  343.267183]  ? __sanitizer_cov_trace_pc+0x21/0x60
      [  343.267820]  ? write_comp_data+0x2f/0x90
      [  343.268367]  netlink_sendmsg+0x922/0xe80
      [  343.268899]  ? netlink_unicast+0x7f0/0x7f0
      [  343.269472]  ? __sanitizer_cov_trace_pc+0x21/0x60
      [  343.270099]  ? write_comp_data+0x2f/0x90
      [  343.270644]  ? netlink_unicast+0x7f0/0x7f0
      [  343.271210]  sock_sendmsg+0x155/0x190
      [  343.271721]  ____sys_sendmsg+0x75f/0x8f0
      [  343.272262]  ? kernel_sendmsg+0x60/0x60
      [  343.272788]  ? write_comp_data+0x2f/0x90
      [  343.273332]  ? write_comp_data+0x2f/0x90
      [  343.273869]  ___sys_sendmsg+0x10f/0x190
      [  343.274405]  ? sendmsg_copy_msghdr+0x80/0x80
      [  343.274984]  ? slab_post_alloc_hook+0x70/0x230
      [  343.275597]  ? futex_wait_setup+0x240/0x240
      [  343.276175]  ? security_file_alloc+0x3e/0x170
      [  343.276779]  ? write_comp_data+0x2f/0x90
      [  343.277313]  ? __sanitizer_cov_trace_pc+0x21/0x60
      [  343.277969]  ? write_comp_data+0x2f/0x90
      [  343.278515]  ? __fget_files+0x1ad/0x260
      [  343.279048]  ? __sanitizer_cov_trace_pc+0x21/0x60
      [  343.279685]  ? write_comp_data+0x2f/0x90
      [  343.280234]  ? __sanitizer_cov_trace_pc+0x21/0x60
      [  343.280874]  ? sockfd_lookup_light+0xd1/0x190
      [  343.281481]  __sys_sendmsg+0x118/0x200
      [  343.281998]  ? __sys_sendmsg_sock+0x40/0x40
      [  343.282578]  ? alloc_fd+0x229/0x5e0
      [  343.283070]  ? write_comp_data+0x2f/0x90
      [  343.283610]  ? write_comp_data+0x2f/0x90
      [  343.284135]  ? __sanitizer_cov_trace_pc+0x21/0x60
      [  343.284776]  ? ktime_get_coarse_real_ts64+0xb8/0xf0
      [  343.285450]  __x64_sys_sendmsg+0x7d/0xc0
      [  343.285981]  ? syscall_enter_from_user_mode+0x4d/0x70
      [  343.286664]  do_syscall_64+0x3a/0x80
      [  343.287158]  entry_SYSCALL_64_after_hwframe+0x44/0xae
      [  343.287850] RIP: 0033:0x7fdde24cf289
      [  343.288344] Code: 01 00 48 81 c4 80 00 00 00 e9 f1 fe ff ff 0f 1f 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 8b 0d b7 db 2c 00 f7 d8 64 89 01 48
      [  343.290729] RSP: 002b:00007fdde2bd6d98 EFLAGS: 00000246 ORIG_RAX:
      000000000000002e
      [  343.291730] RAX: ffffffffffffffda RBX: 0000000000000000 RCX:
      00007fdde24cf289
      [  343.292673] RDX: 0000000000000000 RSI: 00000000200000c0 RDI:
      0000000000000004
      [  343.293618] RBP: 00007fdde2bd6e20 R08: 0000000100000001 R09:
      0000000000000000
      [  343.294557] R10: 0000000100000001 R11: 0000000000000246 R12:
      0000000000000000
      [  343.295493] R13: 0000000000021000 R14: 0000000000000000 R15:
      00007fdde2bd7700
      [  343.296432]  </TASK>
      [  343.296735] Modules linked in: sch_netem ip6_vti ip_vti ip_gre ipip
      sit ip_tunnel geneve macsec macvtap tap ipvlan macvlan 8021q garp mrp
      hsr wireguard libchacha20poly1305 chacha_x86_64 poly1305_x86_64
      ip6_udp_tunnel udp_tunnel libblake2s blake2s_x86_64 libblake2s_generic
      curve25519_x86_64 libcurve25519_generic libchacha xfrm_interface
      xfrm6_tunnel tunnel4 veth netdevsim psample batman_adv nlmon dummy team
      bonding tls vcan ip6_gre ip6_tunnel tunnel6 gre tun ip6t_rpfilter
      ipt_REJECT nf_reject_ipv4 ip6t_REJECT nf_reject_ipv6 xt_conntrack ip_set
      ebtable_nat ebtable_broute ip6table_nat ip6table_mangle
      ip6table_security ip6table_raw iptable_nat nf_nat nf_conntrack
      nf_defrag_ipv6 nf_defrag_ipv4 iptable_mangle iptable_security
      iptable_raw ebtable_filter ebtables rfkill ip6table_filter ip6_tables
      iptable_filter ppdev bochs drm_vram_helper drm_ttm_helper ttm
      drm_kms_helper cec parport_pc drm joydev floppy parport sg syscopyarea
      sysfillrect sysimgblt i2c_piix4 qemu_fw_cfg fb_sys_fops pcspkr
      [  343.297459]  ip_tables xfs virtio_net net_failover failover sd_mod
      sr_mod cdrom t10_pi ata_generic pata_acpi ata_piix libata virtio_pci
      virtio_pci_legacy_dev serio_raw virtio_pci_modern_dev dm_mirror
      dm_region_hash dm_log dm_mod
      [  343.311074] Dumping ftrace buffer:
      [  343.311532]    (ftrace buffer empty)
      [  343.312040] ---[ end trace a2e3db5a6ae05099 ]---
      [  343.312691] RIP: 0010:netem_enqueue+0x1590/0x33c0 [sch_netem]
      [  343.313481] Code: 89 85 58 ff ff ff e8 5f 5d e9 d3 48 8b b5 48 ff ff
      ff 8b 8d 50 ff ff ff 8b 85 58 ff ff ff 48 8b bd 70 ff ff ff 31 d2 2b 4f
      74 <f7> f1 48 b8 00 00 00 00 00 fc ff df 49 01 d5 4c 89 e9 48 c1 e9 03
      [  343.315893] RSP: 0018:ffff88800bcd7368 EFLAGS: 00010246
      [  343.316622] RAX: 00000000ba7c0a9c RBX: 0000000000000001 RCX:
      0000000000000000
      [  343.317585] RDX: 0000000000000000 RSI: ffff88800f8edb10 RDI:
      ffff88800f8eda40
      [  343.318549] RBP: ffff88800bcd7458 R08: 0000000000000000 R09:
      ffffffff94fb8445
      [  343.319503] R10: ffffffff94fb8336 R11: ffffffff94fb8445 R12:
      0000000000000000
      [  343.320455] R13: ffff88800a5a7000 R14: ffff88800a5b5800 R15:
      0000000000000020
      [  343.321414] FS:  00007fdde2bd7700(0000) GS:ffff888109780000(0000)
      knlGS:0000000000000000
      [  343.322489] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  343.323283] CR2: 00000000200000c0 CR3: 000000000ef4c000 CR4:
      00000000000006e0
      [  343.324264] Kernel panic - not syncing: Fatal exception in interrupt
      [  343.333717] Dumping ftrace buffer:
      [  343.334175]    (ftrace buffer empty)
      [  343.334653] Kernel Offset: 0x13600000 from 0xffffffff81000000
      (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
      [  343.336027] Rebooting in 86400 seconds..
      
      Reported-by: default avatarsyzkaller <syzkaller@googlegroups.com>
      Signed-off-by: default avatarHarshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
      Link: https://lore.kernel.org/r/20211129175328.55339-1-harshit.m.mogalapalli@oracle.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c54a60c8
    • Ondřej Jirman's avatar
      i2c: rk3x: Handle a spurious start completion interrupt flag · c69fa3b7
      Ondřej Jirman authored
      [ Upstream commit 02fe0fbd
      
       ]
      
      In a typical read transfer, start completion flag is being set after
      read finishes (notice ipd bit 4 being set):
      
      trasnfer poll=0
      i2c start
      rk3x-i2c fdd40000.i2c: IRQ: state 1, ipd: 10
      i2c read
      rk3x-i2c fdd40000.i2c: IRQ: state 2, ipd: 1b
      i2c stop
      rk3x-i2c fdd40000.i2c: IRQ: state 4, ipd: 33
      
      This causes I2C transfer being aborted in polled mode from a stop completion
      handler:
      
      trasnfer poll=1
      i2c start
      rk3x-i2c fdd40000.i2c: IRQ: state 1, ipd: 10
      i2c read
      rk3x-i2c fdd40000.i2c: IRQ: state 2, ipd: 0
      rk3x-i2c fdd40000.i2c: IRQ: state 2, ipd: 1b
      i2c stop
      rk3x-i2c fdd40000.i2c: IRQ: state 4, ipd: 13
      i2c stop
      rk3x-i2c fdd40000.i2c: unexpected irq in STOP: 0x10
      
      Clearing the START flag after read fixes the issue without any obvious
      side effects.
      
      This issue was dicovered on RK3566 when adding support for powering
      off the RK817 PMIC.
      
      Signed-off-by: default avatarOndrej Jirman <megous@megous.com>
      Reviewed-by: default avatarJohn Keeping <john@metanate.com>
      Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c69fa3b7
    • Helge Deller's avatar
      parisc/agp: Annotate parisc agp init functions with __init · 3125c97a
      Helge Deller authored
      [ Upstream commit 8d88382b
      
       ]
      
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3125c97a
    • Tadeusz Struk's avatar
      nfc: fix segfault in nfc_genl_dump_devices_done · ea55b379
      Tadeusz Struk authored
      commit fd79a0cb
      
       upstream.
      
      When kmalloc in nfc_genl_dump_devices() fails then
      nfc_genl_dump_devices_done() segfaults as below
      
      KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
      CPU: 0 PID: 25 Comm: kworker/0:1 Not tainted 5.16.0-rc4-01180-g2a987e65025e-dirty #5
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-6.fc35 04/01/2014
      Workqueue: events netlink_sock_destruct_work
      RIP: 0010:klist_iter_exit+0x26/0x80
      Call Trace:
      <TASK>
      class_dev_iter_exit+0x15/0x20
      nfc_genl_dump_devices_done+0x3b/0x50
      genl_lock_done+0x84/0xd0
      netlink_sock_destruct+0x8f/0x270
      __sk_destruct+0x64/0x3b0
      sk_destruct+0xa8/0xd0
      __sk_free+0x2e8/0x3d0
      sk_free+0x51/0x90
      netlink_sock_destruct_work+0x1c/0x20
      process_one_work+0x411/0x710
      worker_thread+0x6fd/0xa80
      
      Link: https://syzkaller.appspot.com/bug?id=fc0fa5a53db9edd261d56e74325419faf18bd0df
      Reported-by: default avatar <syzbot+f9f76f4a0766420b4a02@syzkaller.appspotmail.com>
      Signed-off-by: default avatarTadeusz Struk <tadeusz.struk@linaro.org>
      Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
      Link: https://lore.kernel.org/r/20211208182742.340542-1-tadeusz.struk@linaro.org
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ea55b379
  2. Dec 14, 2021
    • Greg Kroah-Hartman's avatar
      Linux 4.4.295 · 87ae08ae
      Greg Kroah-Hartman authored
      
      
      Link: https://lore.kernel.org/r/20211213092925.380184671@linuxfoundation.org
      Tested-by: default avatarPavel Machek (CIP) <pavel@denx.de>
      Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
      Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Tested-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      Tested-by: default avatarLinux Kernel Functional Testing <lkft@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      v4.4.295
      87ae08ae
    • Vladimir Murzin's avatar
      irqchip: nvic: Fix offset for Interrupt Priority Offsets · 77903bc2
      Vladimir Murzin authored
      commit c5e0cbe2 upstream.
      
      According to ARM(v7M) ARM Interrupt Priority Offsets located at
      0xE000E400-0xE000E5EC, while 0xE000E300-0xE000E33C covers read-only
      Interrupt Active Bit Registers
      
      Fixes: 292ec080
      
       ("irqchip: Add support for ARMv7-M NVIC")
      Signed-off-by: default avatarVladimir Murzin <vladimir.murzin@arm.com>
      Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
      Link: https://lore.kernel.org/r/20211201110259.84857-1-vladimir.murzin@arm.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      77903bc2
    • Wudi Wang's avatar
      irqchip/irq-gic-v3-its.c: Force synchronisation when issuing INVALL · ab416300
      Wudi Wang authored
      commit b383a42c
      
       upstream.
      
      INVALL CMD specifies that the ITS must ensure any caching associated with
      the interrupt collection defined by ICID is consistent with the LPI
      configuration tables held in memory for all Redistributors. SYNC is
      required to ensure that INVALL is executed.
      
      Currently, LPI configuration data may be inconsistent with that in the
      memory within a short period of time after the INVALL command is executed.
      
      Signed-off-by: default avatarWudi Wang <wangwudi@hisilicon.com>
      Signed-off-by: default avatarShaokun Zhang <zhangshaokun@hisilicon.com>
      Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
      Fixes: cc2d3216
      
       ("irqchip: GICv3: ITS command queue")
      Link: https://lore.kernel.org/r/20211208015429.5007-1-zhangshaokun@hisilicon.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ab416300
    • Yang Yingliang's avatar
      iio: accel: kxcjk-1013: Fix possible memory leak in probe and remove · 8c1d43f3
      Yang Yingliang authored
      commit 70c9774e
      
       upstream.
      
      When ACPI type is ACPI_SMO8500, the data->dready_trig will not be set, the
      memory allocated by iio_triggered_buffer_setup() will not be freed, and cause
      memory leak as follows:
      
      unreferenced object 0xffff888009551400 (size 512):
        comm "i2c-SMO8500-125", pid 911, jiffies 4294911787 (age 83.852s)
        hex dump (first 32 bytes):
          02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
          00 00 00 00 00 00 00 00 20 e2 e5 c0 ff ff ff ff  ........ .......
        backtrace:
          [<0000000041ce75ee>] kmem_cache_alloc_trace+0x16d/0x360
          [<000000000aeb17b0>] iio_kfifo_allocate+0x41/0x130 [kfifo_buf]
          [<000000004b40c1f5>] iio_triggered_buffer_setup_ext+0x2c/0x210 [industrialio_triggered_buffer]
          [<000000004375b15f>] kxcjk1013_probe+0x10c3/0x1d81 [kxcjk_1013]
      
      Fix it by remove data->dready_trig condition in probe and remove.
      
      Reported-by: default avatarHulk Robot <hulkci@huawei.com>
      Fixes: a25691c1
      
       ("iio: accel: kxcjk1013: allow using an external trigger")
      Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
      Cc: <Stable@vger.kernel.org>
      Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
      Link: https://lore.kernel.org/r/20211025124159.2700301-1-yangyingliang@huawei.com
      Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8c1d43f3
    • Lars-Peter Clausen's avatar
      iio: itg3200: Call iio_trigger_notify_done() on error · a7b89fc2
      Lars-Peter Clausen authored
      commit 67fe2958 upstream.
      
      IIO trigger handlers must call iio_trigger_notify_done() when done. This
      must be done even when an error occurred. Otherwise the trigger will be
      seen as busy indefinitely and the trigger handler will never be called
      again.
      
      The itg3200 driver neglects to call iio_trigger_notify_done() when there is
      an error reading the gyro data. Fix this by making sure that
      iio_trigger_notify_done() is included in the error exit path.
      
      Fixes: 9dbf091d
      
       ("iio: gyro: Add itg3200")
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Link: https://lore.kernel.org/r/20211101144055.13858-1-lars@metafoo.de
      Cc: <Stable@vger.kernel.org>
      Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a7b89fc2
    • Lars-Peter Clausen's avatar
      iio: ltr501: Don't return error code in trigger handler · 342eacc0
      Lars-Peter Clausen authored
      commit ef9d67fa upstream.
      
      IIO trigger handlers need to return one of the irqreturn_t values.
      Returning an error code is not supported.
      
      The ltr501 interrupt handler gets this right for most error paths, but
      there is one case where it returns the error code.
      
      In addition for this particular case the trigger handler does not call
      `iio_trigger_notify_done()`. Which when not done keeps the triggered
      disabled forever.
      
      Modify the code so that the function returns a valid irqreturn_t value as
      well as calling `iio_trigger_notify_done()` on all exit paths.
      
      Fixes: 2690be90
      
       ("iio: Add Lite-On ltr501 ambient light / proximity sensor driver")
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Link: https://lore.kernel.org/r/20211024171251.22896-1-lars@metafoo.de
      Cc: <Stable@vger.kernel.org>
      Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      342eacc0
    • Lars-Peter Clausen's avatar
      iio: mma8452: Fix trigger reference couting · 094d513b
      Lars-Peter Clausen authored
      commit cd008223 upstream.
      
      The mma8452 driver directly assigns a trigger to the struct iio_dev. The
      IIO core when done using this trigger will call `iio_trigger_put()` to drop
      the reference count by 1.
      
      Without the matching `iio_trigger_get()` in the driver the reference count
      can reach 0 too early, the trigger gets freed while still in use and a
      use-after-free occurs.
      
      Fix this by getting a reference to the trigger before assigning it to the
      IIO device.
      
      Fixes: ae6d9ce0
      
       ("iio: mma8452: Add support for interrupt driven triggers.")
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Link: https://lore.kernel.org/r/20211024092700.6844-1-lars@metafoo.de
      Cc: <Stable@vger.kernel.org>
      Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      094d513b
    • Lars-Peter Clausen's avatar
      iio: stk3310: Don't return error code in interrupt handler · e4ec12c2
      Lars-Peter Clausen authored
      commit 8e1eeca5 upstream.
      
      Interrupt handlers must return one of the irqreturn_t values. Returning a
      error code is not supported.
      
      The stk3310 event interrupt handler returns an error code when reading the
      flags register fails.
      
      Fix the implementation to always return an irqreturn_t value.
      
      Fixes: 3dd477ac
      
       ("iio: light: Add threshold interrupt support for STK3310")
      Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
      Link: https://lore.kernel.org/r/20211024171251.22896-3-lars@metafoo.de
      Cc: <Stable@vger.kernel.org>
      Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e4ec12c2
    • Pavel Hofman's avatar
      usb: core: config: fix validation of wMaxPacketValue entries · 2a11b9c2
      Pavel Hofman authored
      commit 1a3910c8 upstream.
      
      The checks performed by commit aed9d65a ("USB: validate
      wMaxPacketValue entries in endpoint descriptors") require that initial
      value of the maxp variable contains both maximum packet size bits
      (10..0) and multiple-transactions bits (12..11). However, the existing
      code assings only the maximum packet size bits. This patch assigns all
      bits of wMaxPacketSize to the variable.
      
      Fixes: aed9d65a
      
       ("USB: validate wMaxPacketValue entries in endpoint descriptors")
      Cc: stable <stable@vger.kernel.org>
      Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarPavel Hofman <pavel.hofman@ivitera.com>
      Link: https://lore.kernel.org/r/20211210085219.16796-1-pavel.hofman@ivitera.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2a11b9c2
    • Greg Kroah-Hartman's avatar
      USB: gadget: zero allocate endpoint 0 buffers · af21211c
      Greg Kroah-Hartman authored
      commit 86ebbc11
      
       upstream.
      
      Under some conditions, USB gadget devices can show allocated buffer
      contents to a host.  Fix this up by zero-allocating them so that any
      extra data will all just be zeros.
      
      Reported-by: default avatarSzymon Heidrich <szymon.heidrich@gmail.com>
      Tested-by: default avatarSzymon Heidrich <szymon.heidrich@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      af21211c
    • Greg Kroah-Hartman's avatar
      USB: gadget: detect too-big endpoint 0 requests · 93cd7100
      Greg Kroah-Hartman authored
      commit 153a2d7e
      
       upstream.
      
      Sometimes USB hosts can ask for buffers that are too large from endpoint
      0, which should not be allowed.  If this happens for OUT requests, stall
      the endpoint, but for IN requests, trim the request size to the endpoint
      buffer size.
      
      Co-developed-by: default avatarSzymon Heidrich <szymon.heidrich@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      93cd7100
    • Dan Carpenter's avatar
      net/qla3xxx: fix an error code in ql_adapter_up() · ac75d925
      Dan Carpenter authored
      commit d17b9737 upstream.
      
      The ql_wait_for_drvr_lock() fails and returns false, then this
      function should return an error code instead of returning success.
      
      The other problem is that the success path prints an error message
      netdev_err(ndev, "Releasing driver lock\n");  Delete that and
      re-order the code a little to make it more clear.
      
      Fixes: 5a4faa87
      
       ("[PATCH] qla3xxx NIC driver")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Link: https://lore.kernel.org/r/20211207082416.GA16110@kili
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ac75d925
    • Eric Dumazet's avatar
      net, neigh: clear whole pneigh_entry at alloc time · 1b6cf577
      Eric Dumazet authored
      commit e195e9b5 upstream.
      
      Commit 2c611ad9 ("net, neigh: Extend neigh->flags to 32 bit
      to allow for extensions") enables a new KMSAM warning [1]
      
      I think the bug is actually older, because the following intruction
      only occurred if ndm->ndm_flags had NTF_PROXY set.
      
      	pn->flags = ndm->ndm_flags;
      
      Let's clear all pneigh_entry fields at alloc time.
      
      [1]
      BUG: KMSAN: uninit-value in pneigh_fill_info+0x986/0xb30 net/core/neighbour.c:2593
       pneigh_fill_info+0x986/0xb30 net/core/neighbour.c:2593
       pneigh_dump_table net/core/neighbour.c:2715 [inline]
       neigh_dump_info+0x1e3f/0x2c60 net/core/neighbour.c:2832
       netlink_dump+0xaca/0x16a0 net/netlink/af_netlink.c:2265
       __netlink_dump_start+0xd1c/0xee0 net/netlink/af_netlink.c:2370
       netlink_dump_start include/linux/netlink.h:254 [inline]
       rtnetlink_rcv_msg+0x181b/0x18c0 net/core/rtnetlink.c:5534
       netlink_rcv_skb+0x447/0x800 net/netlink/af_netlink.c:2491
       rtnetlink_rcv+0x50/0x60 net/core/rtnetlink.c:5589
       netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline]
       netlink_unicast+0x1095/0x1360 net/netlink/af_netlink.c:1345
       netlink_sendmsg+0x16f3/0x1870 net/netlink/af_netlink.c:1916
       sock_sendmsg_nosec net/socket.c:704 [inline]
       sock_sendmsg net/socket.c:724 [inline]
       sock_write_iter+0x594/0x690 net/socket.c:1057
       call_write_iter include/linux/fs.h:2162 [inline]
       new_sync_write fs/read_write.c:503 [inline]
       vfs_write+0x1318/0x2030 fs/read_write.c:590
       ksys_write+0x28c/0x520 fs/read_write.c:643
       __do_sys_write fs/read_write.c:655 [inline]
       __se_sys_write fs/read_write.c:652 [inline]
       __x64_sys_write+0xdb/0x120 fs/read_write.c:652
       do_syscall_x64 arch/x86/entry/common.c:51 [inline]
       do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:82
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      Uninit was created at:
       slab_post_alloc_hook mm/slab.h:524 [inline]
       slab_alloc_node mm/slub.c:3251 [inline]
       slab_alloc mm/slub.c:3259 [inline]
       __kmalloc+0xc3c/0x12d0 mm/slub.c:4437
       kmalloc include/linux/slab.h:595 [inline]
       pneigh_lookup+0x60f/0xd70 net/core/neighbour.c:766
       arp_req_set_public net/ipv4/arp.c:1016 [inline]
       arp_req_set+0x430/0x10a0 net/ipv4/arp.c:1032
       arp_ioctl+0x8d4/0xb60 net/ipv4/arp.c:1232
       inet_ioctl+0x4ef/0x820 net/ipv4/af_inet.c:947
       sock_do_ioctl net/socket.c:1118 [inline]
       sock_ioctl+0xa3f/0x13e0 net/socket.c:1235
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:874 [inline]
       __se_sys_ioctl+0x2df/0x4a0 fs/ioctl.c:860
       __x64_sys_ioctl+0xd8/0x110 fs/ioctl.c:860
       do_syscall_x64 arch/x86/entry/common.c:51 [inline]
       do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:82
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      CPU: 1 PID: 20001 Comm: syz-executor.0 Not tainted 5.16.0-rc3-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      
      Fixes: 62dd9318
      
       ("[IPV6] NDISC: Set per-entry is_router flag in Proxy NA.")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Roopa Prabhu <roopa@nvidia.com>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Link: https://lore.kernel.org/r/20211206165329.1049835-1-eric.dumazet@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1b6cf577
    • Joakim Zhang's avatar
      net: fec: only clear interrupt of handling queue in fec_enet_rx_queue() · e55081c3
      Joakim Zhang authored
      commit b5bd95d1 upstream.
      
      Background:
      We have a customer is running a Profinet stack on the 8MM which receives and
      responds PNIO packets every 4ms and PNIO-CM packets every 40ms. However, from
      time to time the received PNIO-CM package is "stock" and is only handled when
      receiving a new PNIO-CM or DCERPC-Ping packet (tcpdump shows the PNIO-CM and
      the DCERPC-Ping packet at the same time but the PNIO-CM HW timestamp is from
      the expected 40 ms and not the 2s delay of the DCERPC-Ping).
      
      After debugging, we noticed PNIO, PNIO-CM and DCERPC-Ping packets would
      be handled by different RX queues.
      
      The root cause should be driver ack all queues' interrupt when handle a
      specific queue in fec_enet_rx_queue(). The blamed patch is introduced to
      receive as much packets as possible once to avoid interrupt flooding.
      But it's unreasonable to clear other queues'interrupt when handling one
      queue, this patch tries to fix it.
      
      Fixes: ed63f1dc
      
       (net: fec: clear receive interrupts before processing a packet)
      Cc: Russell King <rmk+kernel@arm.linux.org.uk>
      Reported-by: default avatarNicolas Diaz <nicolas.diaz@nxp.com>
      Signed-off-by: default avatarJoakim Zhang <qiangqing.zhang@nxp.com>
      Link: https://lore.kernel.org/r/20211206135457.15946-1-qiangqing.zhang@nxp.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e55081c3
    • Dan Carpenter's avatar
      net: altera: set a couple error code in probe() · 05fe3164
      Dan Carpenter authored
      commit badd7857 upstream.
      
      There are two error paths which accidentally return success instead of
      a negative error code.
      
      Fixes: bbd2190c
      
       ("Altera TSE: Add main and header file for Altera Ethernet Driver")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      05fe3164
    • Lee Jones's avatar
      net: cdc_ncm: Allow for dwNtbOutMaxSize to be unset or zero · 4fd96169
      Lee Jones authored
      commit 2be6d4d1 upstream.
      
      Currently, due to the sequential use of min_t() and clamp_t() macros,
      in cdc_ncm_check_tx_max(), if dwNtbOutMaxSize is not set, the logic
      sets tx_max to 0.  This is then used to allocate the data area of the
      SKB requested later in cdc_ncm_fill_tx_frame().
      
      This does not cause an issue presently because when memory is
      allocated during initialisation phase of SKB creation, more memory
      (512b) is allocated than is required for the SKB headers alone (320b),
      leaving some space (512b - 320b = 192b) for CDC data (172b).
      
      However, if more elements (for example 3 x u64 = [24b]) were added to
      one of the SKB header structs, say 'struct skb_shared_info',
      increasing its original size (320b [320b aligned]) to something larger
      (344b [384b aligned]), then suddenly the CDC data (172b) no longer
      fits in the spare SKB data area (512b - 384b = 128b).
      
      Consequently the SKB bounds checking semantics fails and panics:
      
        skbuff: skb_over_panic: text:ffffffff830a5b5f len:184 put:172   \
           head:ffff888119227c00 data:ffff888119227c00 tail:0xb8 end:0x80 dev:<NULL>
      
        ------------[ cut here ]------------
        kernel BUG at net/core/skbuff.c:110!
        RIP: 0010:skb_panic+0x14f/0x160 net/core/skbuff.c:106
        <snip>
        Call Trace:
         <IRQ>
         skb_over_panic+0x2c/0x30 net/core/skbuff.c:115
         skb_put+0x205/0x210 net/core/skbuff.c:1877
         skb_put_zero include/linux/skbuff.h:2270 [inline]
         cdc_ncm_ndp16 drivers/net/usb/cdc_ncm.c:1116 [inline]
         cdc_ncm_fill_tx_frame+0x127f/0x3d50 drivers/net/usb/cdc_ncm.c:1293
         cdc_ncm_tx_fixup+0x98/0xf0 drivers/net/usb/cdc_ncm.c:1514
      
      By overriding the max value with the default CDC_NCM_NTB_MAX_SIZE_TX
      when not offered through the system provided params, we ensure enough
      data space is allocated to handle the CDC data, meaning no crash will
      occur.
      
      Cc: Oliver Neukum <oliver@neukum.org>
      Fixes: 289507d3
      
       ("net: cdc_ncm: use sysfs for rx/tx aggregation tuning")
      Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
      Reviewed-by: default avatarBjørn Mork <bjorn@mork.no>
      Link: https://lore.kernel.org/r/20211202143437.1411410-1-lee.jones@linaro.org
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4fd96169
    • Davidlohr Bueso's avatar
      block: fix ioprio_get(IOPRIO_WHO_PGRP) vs setuid(2) · 06924431
      Davidlohr Bueso authored
      commit e6a59aac upstream.
      
      do_each_pid_thread(PIDTYPE_PGID) can race with a concurrent
      change_pid(PIDTYPE_PGID) that can move the task from one hlist
      to another while iterating. Serialize ioprio_get to take
      the tasklist_lock in this case, just like it's set counterpart.
      
      Fixes: d69b78ba
      
       (ioprio: grab rcu_read_lock in sys_ioprio_{set,get}())
      Acked-by: default avatarOleg Nesterov <oleg@redhat.com>
      Signed-off-by: default avatarDavidlohr Bueso <dbueso@suse.de>
      Link: https://lore.kernel.org/r/20211210182058.43417-1-dave@stgolabs.net
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      06924431
    • Steven Rostedt (VMware)'s avatar
      tracefs: Set all files to the same group ownership as the mount option · 43c06cf5
      Steven Rostedt (VMware) authored
      commit 48b27b6b
      
       upstream.
      
      As people have been asking to allow non-root processes to have access to
      the tracefs directory, it was considered best to only allow groups to have
      access to the directory, where it is easier to just set the tracefs file
      system to a specific group (as other would be too dangerous), and that way
      the admins could pick which processes would have access to tracefs.
      
      Unfortunately, this broke tooling on Android that expected the other bit
      to be set. For some special cases, for non-root tools to trace the system,
      tracefs would be mounted and change the permissions of the top level
      directory which gave access to all running tasks permission to the
      tracing directory. Even though this would be dangerous to do in a
      production environment, for testing environments this can be useful.
      
      Now with the new changes to not allow other (which is still the proper
      thing to do), it breaks the testing tooling. Now more code needs to be
      loaded on the system to change ownership of the tracing directory.
      
      The real solution is to have tracefs honor the gid=xxx option when
      mounting. That is,
      
      (tracing group tracing has value 1003)
      
       mount -t tracefs -o gid=1003 tracefs /sys/kernel/tracing
      
      should have it that all files in the tracing directory should be of the
      given group.
      
      Copy the logic from d_walk() from dcache.c and simplify it for the mount
      case of tracefs if gid is set. All the files in tracefs will be walked and
      their group will be set to the value passed in.
      
      Link: https://lkml.kernel.org/r/20211207171729.2a54e1b3@gandalf.local.home
      
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: linux-fsdevel@vger.kernel.org
      Cc: Al Viro <viro@ZenIV.linux.org.uk>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reported-by: default avatarKalesh Singh <kaleshsingh@google.com>
      Reported-by: default avatarYabin Cui <yabinc@google.com>
      Fixes: 49d67e44
      
       ("tracefs: Have tracefs directories not set OTH permission bits by default")
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      43c06cf5
    • Eric Biggers's avatar
      signalfd: use wake_up_pollfree() · 2c140477
      Eric Biggers authored
      commit 9537bae0
      
       upstream.
      
      wake_up_poll() uses nr_exclusive=1, so it's not guaranteed to wake up
      all exclusive waiters.  Yet, POLLFREE *must* wake up all waiters.  epoll
      and aio poll are fortunately not affected by this, but it's very
      fragile.  Thus, the new function wake_up_pollfree() has been introduced.
      
      Convert signalfd to use wake_up_pollfree().
      
      Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Fixes: d80e731e
      
       ("epoll: introduce POLLFREE to flush ->signalfd_wqh before kfree()")
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20211209010455.42744-4-ebiggers@kernel.org
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2c140477
    • Eric Biggers's avatar
      binder: use wake_up_pollfree() · 012a7411
      Eric Biggers authored
      commit a880b28a
      
       upstream.
      
      wake_up_poll() uses nr_exclusive=1, so it's not guaranteed to wake up
      all exclusive waiters.  Yet, POLLFREE *must* wake up all waiters.  epoll
      and aio poll are fortunately not affected by this, but it's very
      fragile.  Thus, the new function wake_up_pollfree() has been introduced.
      
      Convert binder to use wake_up_pollfree().
      
      Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Fixes: f5cb779b
      
       ("ANDROID: binder: remove waitqueue when thread exits.")
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20211209010455.42744-3-ebiggers@kernel.org
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      012a7411
    • Eric Biggers's avatar
      wait: add wake_up_pollfree() · d0ceebaa
      Eric Biggers authored
      commit 42288cb4
      
       upstream.
      
      Several ->poll() implementations are special in that they use a
      waitqueue whose lifetime is the current task, rather than the struct
      file as is normally the case.  This is okay for blocking polls, since a
      blocking poll occurs within one task; however, non-blocking polls
      require another solution.  This solution is for the queue to be cleared
      before it is freed, using 'wake_up_poll(wq, EPOLLHUP | POLLFREE);'.
      
      However, that has a bug: wake_up_poll() calls __wake_up() with
      nr_exclusive=1.  Therefore, if there are multiple "exclusive" waiters,
      and the wakeup function for the first one returns a positive value, only
      that one will be called.  That's *not* what's needed for POLLFREE;
      POLLFREE is special in that it really needs to wake up everyone.
      
      Considering the three non-blocking poll systems:
      
      - io_uring poll doesn't handle POLLFREE at all, so it is broken anyway.
      
      - aio poll is unaffected, since it doesn't support exclusive waits.
        However, that's fragile, as someone could add this feature later.
      
      - epoll doesn't appear to be broken by this, since its wakeup function
        returns 0 when it sees POLLFREE.  But this is fragile.
      
      Although there is a workaround (see epoll), it's better to define a
      function which always sends POLLFREE to all waiters.  Add such a
      function.  Also make it verify that the queue really becomes empty after
      all waiters have been woken up.
      
      Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20211209010455.42744-2-ebiggers@kernel.org
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d0ceebaa
    • Hannes Reinecke's avatar
      libata: add horkage for ASMedia 1092 · 0ab8312e
      Hannes Reinecke authored
      commit a66307d4
      
       upstream.
      
      The ASMedia 1092 has a configuration mode which will present a
      dummy device; sadly the implementation falsely claims to provide
      a device with 100M which doesn't actually exist.
      So disable this device to avoid errors during boot.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
      Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0ab8312e
    • Vincent Mailhol's avatar
      can: pch_can: pch_can_rx_normal: fix use after free · bafe343a
      Vincent Mailhol authored
      commit 94cddf1e upstream.
      
      After calling netif_receive_skb(skb), dereferencing skb is unsafe.
      Especially, the can_frame cf which aliases skb memory is dereferenced
      just after the call netif_receive_skb(skb).
      
      Reordering the lines solves the issue.
      
      Fixes: b21d18b5
      
       ("can: Topcliff: Add PCH_CAN driver.")
      Link: https://lore.kernel.org/all/20211123111654.621610-1-mailhol.vincent@wanadoo.fr
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarVincent Mailhol <mailhol.vincent@wanadoo.fr>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bafe343a
    • Steven Rostedt (VMware)'s avatar
      tracefs: Have new files inherit the ownership of their parent · 3ffc0c64
      Steven Rostedt (VMware) authored
      commit ee7f3666 upstream.
      
      If directories in tracefs have their ownership changed, then any new files
      and directories that are created under those directories should inherit
      the ownership of the director they are created in.
      
      Link: https://lkml.kernel.org/r/20211208075720.4855d180@gandalf.local.home
      
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Yabin Cui <yabinc@google.com>
      Cc: Christian Brauner <christian.brauner@ubuntu.com>
      Cc: stable@vger.kernel.org
      Fixes: 4282d606
      
       ("tracefs: Add new tracefs file system")
      Reported-by: default avatarKalesh Singh <kaleshsingh@google.com>
      Reported: https://lore.kernel.org/all/CAC_TJve8MMAv+H_NdLSJXZUSoxOEq2zB_pVaJ9p=7H6Bu3X76g@mail.gmail.com/
      Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3ffc0c64
    • Takashi Iwai's avatar
      ALSA: pcm: oss: Handle missing errors in snd_pcm_oss_change_params*() · a27f5406
      Takashi Iwai authored
      commit 6665bb30
      
       upstream.
      
      A couple of calls in snd_pcm_oss_change_params_locked() ignore the
      possible errors.  Catch those errors and abort the operation for
      avoiding further problems.
      
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20211201073606.11660-4-tiwai@suse.de
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a27f5406
    • Takashi Iwai's avatar
      ALSA: pcm: oss: Limit the period size to 16MB · d1bb703a
      Takashi Iwai authored
      commit 8839c8c0
      
       upstream.
      
      Set the practical limit to the period size (the fragment shift in OSS)
      instead of a full 31bit; a too large value could lead to the exhaust
      of memory as we allocate temporary buffers of the period size, too.
      
      As of this patch, we set to 16MB limit, which should cover all use
      cases.
      
      Reported-by: default avatar <syzbot+bb348e9f9a954d42746f@syzkaller.appspotmail.com>
      Reported-by: default avatarBixuan Cui <cuibixuan@linux.alibaba.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/1638270978-42412-1-git-send-email-cuibixuan@linux.alibaba.com
      Link: https://lore.kernel.org/r/20211201073606.11660-3-tiwai@suse.de
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d1bb703a
    • Takashi Iwai's avatar
      ALSA: pcm: oss: Fix negative period/buffer sizes · be8869d3
      Takashi Iwai authored
      commit 9d2479c9
      
       upstream.
      
      The period size calculation in OSS layer may receive a negative value
      as an error, but the code there assumes only the positive values and
      handle them with size_t.  Due to that, a too big value may be passed
      to the lower layers.
      
      This patch changes the code to handle with ssize_t and adds the proper
      error checks appropriately.
      
      Reported-by: default avatar <syzbot+bb348e9f9a954d42746f@syzkaller.appspotmail.com>
      Reported-by: default avatarBixuan Cui <cuibixuan@linux.alibaba.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/1638270978-42412-1-git-send-email-cuibixuan@linux.alibaba.com
      Link: https://lore.kernel.org/r/20211201073606.11660-2-tiwai@suse.de
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      be8869d3
    • Alan Young's avatar
      ALSA: ctl: Fix copy of updated id with element read/write · e35ddb1f
      Alan Young authored
      commit b6409dd6
      
       upstream.
      
      When control_compat.c:copy_ctl_value_to_user() is used, by
      ctl_elem_read_user() & ctl_elem_write_user(), it must also copy back the
      snd_ctl_elem_id value that may have been updated (filled in) by the call
      to snd_ctl_elem_read/snd_ctl_elem_write().
      
      This matches the functionality provided by snd_ctl_elem_read_user() and
      snd_ctl_elem_write_user(), via snd_ctl_build_ioff().
      
      Without this, and without making additional calls to snd_ctl_info()
      which are unnecessary when using the non-compat calls, a userspace
      application will not know the numid value for the element and
      consequently will not be able to use the poll/read interface on the
      control file to determine which elements have updates.
      
      Signed-off-by: default avatarAlan Young <consult.awy@gmail.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20211202150607.543389-1-consult.awy@gmail.com
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e35ddb1f
    • Manjong Lee's avatar
      mm: bdi: initialize bdi_min_ratio when bdi is unregistered · 386203c6
      Manjong Lee authored
      commit 3c376dfa
      
       upstream.
      
      Initialize min_ratio if it is set during bdi unregistration.  This can
      prevent problems that may occur a when bdi is removed without resetting
      min_ratio.
      
      For example.
      1) insert external sdcard
      2) set external sdcard's min_ratio 70
      3) remove external sdcard without setting min_ratio 0
      4) insert external sdcard
      5) set external sdcard's min_ratio 70 << error occur(can't set)
      
      Because when an sdcard is removed, the present bdi_min_ratio value will
      remain.  Currently, the only way to reset bdi_min_ratio is to reboot.
      
      [akpm@linux-foundation.org: tweak comment and coding style]
      
      Link: https://lkml.kernel.org/r/20211021161942.5983-1-mj0123.lee@samsung.com
      Signed-off-by: default avatarManjong Lee <mj0123.lee@samsung.com>
      Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: Changheun Lee <nanich.lee@samsung.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Christoph Hellwig <hch@infradead.org>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: <seunghwan.hyun@samsung.com>
      Cc: <sookwan7.kim@samsung.com>
      Cc: <yt0928.kim@samsung.com>
      Cc: <junho89.kim@samsung.com>
      Cc: <jisoo2146.oh@samsung.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      386203c6