20 Jan, 2021

40 commits

  • [ Upstream commit 8fc058597a283e9a37720abb0e8d68e342b9387d ]

    btrfs_discard_workfn() drops discard_ctl->lock just to take it again in
    a moment in btrfs_discard_schedule_work(). Avoid that and also reuse
    ktime.

    Reviewed-by: Josef Bacik
    Signed-off-by: Pavel Begunkov
    Reviewed-by: David Sterba
    Signed-off-by: David Sterba
    Signed-off-by: Sasha Levin

    Pavel Begunkov
     
  • [ Upstream commit ea9ed87c73e87e044b2c58d658eb4ba5216bc488 ]

    Might happen that bg->discard_eligible_time was changed without
    rescheduling, so btrfs_discard_workfn() wakes up earlier than that new
    time, peek_discard_list() returns NULL, and all work halts and goes to
    sleep without further rescheduling even there are block groups to
    discard.

    It happens pretty often, but not so visible from the userspace because
    after some time it usually will be kicked off anyway by someone else
    calling btrfs_discard_reschedule_work().

    Fix it by continue rescheduling if block group discard lists are not
    empty.

    Reviewed-by: Josef Bacik
    Signed-off-by: Pavel Begunkov
    Signed-off-by: David Sterba
    Signed-off-by: Sasha Levin

    Pavel Begunkov
     
  • [ Upstream commit f6f92968e1e5a7a9d211faaebefc26ebe408dad7 ]

    Not all firmware versions support allocating DMA memory in smaller blocks so
    first try to allocate big block of DMA memory for QMI. If the allocation fails,
    let firmware request multiple blocks of DMA memory with smaller size.

    This also fixes an unnecessary error message seen during ath11k probe on
    QCA6390:

    ath11k_pci 0000:06:00.0: Respond mem req failed, result: 1, err: 0
    ath11k_pci 0000:06:00.0: qmi failed to respond fw mem req:-22

    Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1

    Signed-off-by: Carl Huang
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/1608127593-15192-1-git-send-email-kvalo@codeaurora.org
    Signed-off-by: Sasha Levin

    Carl Huang
     
  • [ Upstream commit 2b33d6ffa9e38f344418976b06057e2fc2aa9e2a ]

    currently mtype_resize() can cause oops

    t = ip_set_alloc(htable_size(htable_bits));
    if (!t) {
    ret = -ENOMEM;
    goto out;
    }
    t->hregion = ip_set_alloc(ahash_sizeof_regions(htable_bits));

    Increased htable_bits can force htable_size() to return 0.
    In own turn ip_set_alloc(0) returns not 0 but ZERO_SIZE_PTR,
    so follwoing access to t->hregion should trigger an OOPS.

    Signed-off-by: Vasily Averin
    Acked-by: Jozsef Kadlecsik
    Signed-off-by: Pablo Neira Ayuso
    Signed-off-by: Sasha Levin

    Vasily Averin
     
  • [ Upstream commit 3597010630d0aa96f5778901e691c6068bb86318 ]

    During connect and disconnect stress test, crashed happened
    because ar->rx_channel is NULL. Fix it by checking whether
    ar->rx_channel is NULL.

    Crash stack is as below:
    RIP: 0010:ath11k_dp_rx_h_ppdu+0x110/0x230 [ath11k]
    [ 5028.808963] ath11k_dp_rx_wbm_err+0x14a/0x360 [ath11k]
    [ 5028.808970] ath11k_dp_rx_process_wbm_err+0x41c/0x520 [ath11k]
    [ 5028.808978] ath11k_dp_service_srng+0x25e/0x2d0 [ath11k]
    [ 5028.808982] ath11k_pci_ext_grp_napi_poll+0x23/0x80 [ath11k_pci]
    [ 5028.808986] net_rx_action+0x27e/0x400
    [ 5028.808990] __do_softirq+0xfd/0x2bb
    [ 5028.808993] irq_exit+0xa6/0xb0
    [ 5028.808995] do_IRQ+0x56/0xe0
    [ 5028.808997] common_interrupt+0xf/0xf

    Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1

    Signed-off-by: Carl Huang
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20201211055613.9310-1-cjhuang@codeaurora.org
    Signed-off-by: Sasha Levin

    Carl Huang
     
  • [ Upstream commit c0bc969c176b10598b31d5d1a5edf9a5261f0a9f ]

    xt875 comes up with a iva voltage of 1375000 and android runs at this too. fix
    maximum voltage to be consistent with this.

    Signed-off-by: Carl Philipp Klemm
    Signed-off-by: Tony Lindgren
    Signed-off-by: Sasha Levin

    Carl Philipp Klemm
     
  • [ Upstream commit c5e6ae563c802c4d828d42e134af64004db2e58c ]

    If you run 'make uImage uImage.gz' with the parallel option, uImage.gz
    will be created by two threads simultaneously.

    This is because arch/arc/Makefile does not specify the dependency
    between uImage and uImage.gz. Hence, GNU Make assumes they can be
    built in parallel. One thread descends into arch/arc/boot/ to create
    uImage, and another to create uImage.gz.

    Please notice the same log is displayed twice in the following steps:

    $ export CROSS_COMPILE=
    $ make -s ARCH=arc defconfig
    $ make -j$(nproc) ARCH=arc uImage uImage.gz
    [ snip ]
    LD vmlinux
    SORTTAB vmlinux
    SYSMAP System.map
    OBJCOPY arch/arc/boot/vmlinux.bin
    OBJCOPY arch/arc/boot/vmlinux.bin
    GZIP arch/arc/boot/vmlinux.bin.gz
    GZIP arch/arc/boot/vmlinux.bin.gz
    UIMAGE arch/arc/boot/uImage.gz
    UIMAGE arch/arc/boot/uImage.gz
    Image Name: Linux-5.10.0-rc4-00003-g62f23044
    Created: Sun Nov 22 02:52:26 2020
    Image Type: ARC Linux Kernel Image (gzip compressed)
    Data Size: 2109376 Bytes = 2059.94 KiB = 2.01 MiB
    Load Address: 80000000
    Entry Point: 80004000
    Image arch/arc/boot/uImage is ready
    Image Name: Linux-5.10.0-rc4-00003-g62f23044
    Created: Sun Nov 22 02:52:26 2020
    Image Type: ARC Linux Kernel Image (gzip compressed)
    Data Size: 2815455 Bytes = 2749.47 KiB = 2.69 MiB
    Load Address: 80000000
    Entry Point: 80004000

    This is a race between the two threads trying to write to the same file
    arch/arc/boot/uImage.gz. This is a potential problem that can generate
    a broken file.

    I fixed a similar problem for ARM by commit 3939f3345050 ("ARM: 8418/1:
    add boot image dependencies to not generate invalid images").

    I highly recommend to avoid such build rules that cause a race condition.

    Move the uImage rule to arch/arc/Makefile.

    Another strangeness is that arch/arc/boot/Makefile compares the
    timestamps between $(obj)/uImage and $(obj)/uImage.*:

    $(obj)/uImage: $(obj)/uImage.$(suffix-y)
    @ln -sf $(notdir $
    Signed-off-by: Vineet Gupta
    Signed-off-by: Sasha Levin

    Masahiro Yamada
     
  • [ Upstream commit 0cfccb3c04934cdef42ae26042139f16e805b5f7 ]

    The top-level boot_targets (uImage and uImage.*) should be phony
    targets. They just let Kbuild descend into arch/arc/boot/ and create
    files there.

    If a file exists in the top directory with the same name, the boot
    image will not be created.

    You can confirm it by the following steps:

    $ export CROSS_COMPILE=
    $ make -s ARCH=arc defconfig all # vmlinux will be built
    $ touch uImage.gz
    $ make ARCH=arc uImage.gz
    CALL scripts/atomic/check-atomics.sh
    CALL scripts/checksyscalls.sh
    CHK include/generated/compile.h
    # arch/arc/boot/uImage.gz is not created

    Specify the targets as PHONY to fix this.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Vineet Gupta
    Signed-off-by: Sasha Levin

    Masahiro Yamada
     
  • [ Upstream commit f2712ec76a5433e5ec9def2bd52a95df1f96d050 ]

    arch/arc/boot/Makefile supports uImage.lzma, but you cannot do
    'make uImage.lzma' because the corresponding target is missing
    in arch/arc/Makefile. Add it.

    I also changed the assignment operator '+=' to ':=' since this is the
    only place where we expect this variable to be set.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Vineet Gupta
    Signed-off-by: Sasha Levin

    Masahiro Yamada
     
  • [ Upstream commit 9836720911cfec25d3fbdead1c438bf87e0f2841 ]

    The deb-pkg builds for ARCH=arc fail.

    $ export CROSS_COMPILE=
    $ make -s ARCH=arc defconfig
    $ make ARCH=arc bindeb-pkg
    SORTTAB vmlinux
    SYSMAP System.map
    MODPOST Module.symvers
    make KERNELRELEASE=5.10.0-rc4 ARCH=arc KBUILD_BUILD_VERSION=2 -f ./Makefile intdeb-pkg
    sh ./scripts/package/builddeb
    cp: cannot stat 'arch/arc/boot/bootpImage': No such file or directory
    make[4]: *** [scripts/Makefile.package:87: intdeb-pkg] Error 1
    make[3]: *** [Makefile:1527: intdeb-pkg] Error 2
    make[2]: *** [debian/rules:13: binary-arch] Error 2
    dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
    make[1]: *** [scripts/Makefile.package:83: bindeb-pkg] Error 2
    make: *** [Makefile:1527: bindeb-pkg] Error 2

    The reason is obvious; arch/arc/Makefile sets $(boot)/bootpImage as
    the default image, but there is no rule to build it.

    Remove the meaningless KBUILD_IMAGE assignment so it will fallback
    to the default vmlinux. With this change, you can build the deb package.

    I removed the 'bootpImage' target as well. At best, it provides
    'make bootpImage' as an alias of 'make vmlinux', but I do not see
    much sense in doing so.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Vineet Gupta
    Signed-off-by: Sasha Levin

    Masahiro Yamada
     
  • [ Upstream commit d434ab6db524ab1efd0afad4ffa1ee65ca6ac097 ]

    __io_req_task_submit() run by task_work can set mm and files, but
    io_sq_thread() in some cases, and because __io_sq_thread_acquire_mm()
    and __io_sq_thread_acquire_files() do a simple current->mm/files check
    it may end up submitting IO with mm/files of another task.

    We also need to drop it after in the end to drop potentially grabbed
    references to them.

    Cc: stable@vger.kernel.org # 5.9+
    Signed-off-by: Pavel Begunkov
    Signed-off-by: Jens Axboe
    Signed-off-by: Sasha Levin

    Pavel Begunkov
     
  • [ Upstream commit 621fadc22365f3cf307bcd9048e3372e9ee9cdcc ]

    In rare cases a task may be exiting while io_ring_exit_work() trying to
    cancel/wait its requests. It's ok for __io_sq_thread_acquire_mm()
    because of SQPOLL check, but is not for __io_sq_thread_acquire_files().
    Play safe and fail for both of them.

    Cc: stable@vger.kernel.org # 5.5+
    Signed-off-by: Pavel Begunkov
    Signed-off-by: Jens Axboe
    Signed-off-by: Sasha Levin

    Pavel Begunkov
     
  • [ Upstream commit 5a3b590d4b2db187faa6f06adc9a53d6199fb1f9 ]

    When the first file is opened, ext4 samples the mountpoint of the
    filesystem in 64 bytes of the super block. It does so using
    strlcpy(), this means that the remaining bytes in the super block
    string buffer are untouched. If the mount point before had a longer
    path than the current one, it can be reconstructed.

    Consider the case where the fs was mounted to "/media/johnjdeveloper"
    and later to "/". The super block buffer then contains
    "/\x00edia/johnjdeveloper".

    This case was seen in the wild and caused confusion how the name
    of a developer ands up on the super block of a filesystem used
    in production...

    Fix this by using strncpy() instead of strlcpy(). The superblock
    field is defined to be a fixed-size char array, and it is already
    marked using __nonstring in fs/ext4/ext4.h. The consumer of the field
    in e2fsprogs already assumes that in the case of a 64+ byte mount
    path, that s_last_mounted will not be NUL terminated.

    Link: https://lore.kernel.org/r/X9ujIOJG/HqMr88R@mit.edu
    Reported-by: Richard Weinberger
    Signed-off-by: Theodore Ts'o
    Cc: stable@kernel.org
    Signed-off-by: Sasha Levin

    Theodore Ts'o
     
  • [ Upstream commit 347fb0cfc9bab5195c6701e62eda488310d7938f ]

    While mounting a crafted image provided by user, kernel panics due to
    the invalid chunk item whose end is less than start.

    [66.387422] loop: module loaded
    [66.389773] loop0: detected capacity change from 262144 to 0
    [66.427708] BTRFS: device fsid a62e00e8-e94e-4200-8217-12444de93c2e devid 1 transid 12 /dev/loop0 scanned by mount (613)
    [66.431061] BTRFS info (device loop0): disk space caching is enabled
    [66.431078] BTRFS info (device loop0): has skinny extents
    [66.437101] BTRFS error: insert state: end < start 29360127 37748736
    [66.437136] ------------[ cut here ]------------
    [66.437140] WARNING: CPU: 16 PID: 613 at fs/btrfs/extent_io.c:557 insert_state.cold+0x1a/0x46 [btrfs]
    [66.437369] CPU: 16 PID: 613 Comm: mount Tainted: G O 5.11.0-rc1-custom #45
    [66.437374] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ArchLinux 1.14.0-1 04/01/2014
    [66.437378] RIP: 0010:insert_state.cold+0x1a/0x46 [btrfs]
    [66.437420] RSP: 0018:ffff93e5414c3908 EFLAGS: 00010286
    [66.437427] RAX: 0000000000000000 RBX: 0000000001bfffff RCX: 0000000000000000
    [66.437431] RDX: 0000000000000000 RSI: ffffffffb90d4660 RDI: 00000000ffffffff
    [66.437434] RBP: ffff93e5414c3938 R08: 0000000000000001 R09: 0000000000000001
    [66.437438] R10: ffff93e5414c3658 R11: 0000000000000000 R12: ffff8ec782d72aa0
    [66.437441] R13: ffff8ec78bc71628 R14: 0000000000000000 R15: 0000000002400000
    [66.437447] FS: 00007f01386a8580(0000) GS:ffff8ec809000000(0000) knlGS:0000000000000000
    [66.437451] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [66.437455] CR2: 00007f01382fa000 CR3: 0000000109a34000 CR4: 0000000000750ee0
    [66.437460] PKRU: 55555554
    [66.437464] Call Trace:
    [66.437475] set_extent_bit+0x652/0x740 [btrfs]
    [66.437539] set_extent_bits_nowait+0x1d/0x20 [btrfs]
    [66.437576] add_extent_mapping+0x1e0/0x2f0 [btrfs]
    [66.437621] read_one_chunk+0x33c/0x420 [btrfs]
    [66.437674] btrfs_read_chunk_tree+0x6a4/0x870 [btrfs]
    [66.437708] ? kvm_sched_clock_read+0x18/0x40
    [66.437739] open_ctree+0xb32/0x1734 [btrfs]
    [66.437781] ? bdi_register_va+0x1b/0x20
    [66.437788] ? super_setup_bdi_name+0x79/0xd0
    [66.437810] btrfs_mount_root.cold+0x12/0xeb [btrfs]
    [66.437854] ? __kmalloc_track_caller+0x217/0x3b0
    [66.437873] legacy_get_tree+0x34/0x60
    [66.437880] vfs_get_tree+0x2d/0xc0
    [66.437888] vfs_kern_mount.part.0+0x78/0xc0
    [66.437897] vfs_kern_mount+0x13/0x20
    [66.437902] btrfs_mount+0x11f/0x3c0 [btrfs]
    [66.437940] ? kfree+0x5ff/0x670
    [66.437944] ? __kmalloc_track_caller+0x217/0x3b0
    [66.437962] legacy_get_tree+0x34/0x60
    [66.437974] vfs_get_tree+0x2d/0xc0
    [66.437983] path_mount+0x48c/0xd30
    [66.437998] __x64_sys_mount+0x108/0x140
    [66.438011] do_syscall_64+0x38/0x50
    [66.438018] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [66.438023] RIP: 0033:0x7f0138827f6e
    [66.438033] RSP: 002b:00007ffecd79edf8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
    [66.438040] RAX: ffffffffffffffda RBX: 00007f013894c264 RCX: 00007f0138827f6e
    [66.438044] RDX: 00005593a4a41360 RSI: 00005593a4a33690 RDI: 00005593a4a3a6c0
    [66.438047] RBP: 00005593a4a33440 R08: 0000000000000000 R09: 0000000000000001
    [66.438050] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    [66.438054] R13: 00005593a4a3a6c0 R14: 00005593a4a41360 R15: 00005593a4a33440
    [66.438078] irq event stamp: 18169
    [66.438082] hardirqs last enabled at (18175): [] console_unlock+0x4ff/0x5f0
    [66.438088] hardirqs last disabled at (18180): [] console_unlock+0x467/0x5f0
    [66.438092] softirqs last enabled at (16910): [] asm_call_irq_on_stack+0x12/0x20
    [66.438097] softirqs last disabled at (16905): [] asm_call_irq_on_stack+0x12/0x20
    [66.438103] ---[ end trace e114b111db64298b ]---
    [66.438107] BTRFS error: found node 12582912 29360127 on insert of 37748736 29360127
    [66.438127] BTRFS critical: panic in extent_io_tree_panic:679: locking error: extent tree was modified by another thread while locked (errno=-17 Object already exists)
    [66.441069] ------------[ cut here ]------------
    [66.441072] kernel BUG at fs/btrfs/extent_io.c:679!
    [66.442064] invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
    [66.443018] CPU: 16 PID: 613 Comm: mount Tainted: G W O 5.11.0-rc1-custom #45
    [66.444538] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ArchLinux 1.14.0-1 04/01/2014
    [66.446223] RIP: 0010:extent_io_tree_panic.isra.0+0x23/0x25 [btrfs]
    [66.450878] RSP: 0018:ffff93e5414c3948 EFLAGS: 00010246
    [66.451840] RAX: 0000000000000000 RBX: 0000000001bfffff RCX: 0000000000000000
    [66.453141] RDX: 0000000000000000 RSI: ffffffffb90d4660 RDI: 00000000ffffffff
    [66.454445] RBP: ffff93e5414c3948 R08: 0000000000000001 R09: 0000000000000001
    [66.455743] R10: ffff93e5414c3658 R11: 0000000000000000 R12: ffff8ec782d728c0
    [66.457055] R13: ffff8ec78bc71628 R14: ffff8ec782d72aa0 R15: 0000000002400000
    [66.458356] FS: 00007f01386a8580(0000) GS:ffff8ec809000000(0000) knlGS:0000000000000000
    [66.459841] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [66.460895] CR2: 00007f01382fa000 CR3: 0000000109a34000 CR4: 0000000000750ee0
    [66.462196] PKRU: 55555554
    [66.462692] Call Trace:
    [66.463139] set_extent_bit.cold+0x30/0x98 [btrfs]
    [66.464049] set_extent_bits_nowait+0x1d/0x20 [btrfs]
    [66.490466] add_extent_mapping+0x1e0/0x2f0 [btrfs]
    [66.514097] read_one_chunk+0x33c/0x420 [btrfs]
    [66.534976] btrfs_read_chunk_tree+0x6a4/0x870 [btrfs]
    [66.555718] ? kvm_sched_clock_read+0x18/0x40
    [66.575758] open_ctree+0xb32/0x1734 [btrfs]
    [66.595272] ? bdi_register_va+0x1b/0x20
    [66.614638] ? super_setup_bdi_name+0x79/0xd0
    [66.633809] btrfs_mount_root.cold+0x12/0xeb [btrfs]
    [66.652938] ? __kmalloc_track_caller+0x217/0x3b0
    [66.671925] legacy_get_tree+0x34/0x60
    [66.690300] vfs_get_tree+0x2d/0xc0
    [66.708221] vfs_kern_mount.part.0+0x78/0xc0
    [66.725808] vfs_kern_mount+0x13/0x20
    [66.742730] btrfs_mount+0x11f/0x3c0 [btrfs]
    [66.759350] ? kfree+0x5ff/0x670
    [66.775441] ? __kmalloc_track_caller+0x217/0x3b0
    [66.791750] legacy_get_tree+0x34/0x60
    [66.807494] vfs_get_tree+0x2d/0xc0
    [66.823349] path_mount+0x48c/0xd30
    [66.838753] __x64_sys_mount+0x108/0x140
    [66.854412] do_syscall_64+0x38/0x50
    [66.869673] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [66.885093] RIP: 0033:0x7f0138827f6e
    [66.945613] RSP: 002b:00007ffecd79edf8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
    [66.977214] RAX: ffffffffffffffda RBX: 00007f013894c264 RCX: 00007f0138827f6e
    [66.994266] RDX: 00005593a4a41360 RSI: 00005593a4a33690 RDI: 00005593a4a3a6c0
    [67.011544] RBP: 00005593a4a33440 R08: 0000000000000000 R09: 0000000000000001
    [67.028836] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    [67.045812] R13: 00005593a4a3a6c0 R14: 00005593a4a41360 R15: 00005593a4a33440
    [67.216138] ---[ end trace e114b111db64298c ]---
    [67.237089] RIP: 0010:extent_io_tree_panic.isra.0+0x23/0x25 [btrfs]
    [67.325317] RSP: 0018:ffff93e5414c3948 EFLAGS: 00010246
    [67.347946] RAX: 0000000000000000 RBX: 0000000001bfffff RCX: 0000000000000000
    [67.371343] RDX: 0000000000000000 RSI: ffffffffb90d4660 RDI: 00000000ffffffff
    [67.394757] RBP: ffff93e5414c3948 R08: 0000000000000001 R09: 0000000000000001
    [67.418409] R10: ffff93e5414c3658 R11: 0000000000000000 R12: ffff8ec782d728c0
    [67.441906] R13: ffff8ec78bc71628 R14: ffff8ec782d72aa0 R15: 0000000002400000
    [67.465436] FS: 00007f01386a8580(0000) GS:ffff8ec809000000(0000) knlGS:0000000000000000
    [67.511660] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [67.535047] CR2: 00007f01382fa000 CR3: 0000000109a34000 CR4: 0000000000750ee0
    [67.558449] PKRU: 55555554
    [67.581146] note: mount[613] exited with preempt_count 2

    The image has a chunk item which has a logical start 37748736 and length
    18446744073701163008 (-8M). The calculated end 29360127 overflows.
    EEXIST was caught by insert_state() because of the duplicate end and
    extent_io_tree_panic() was called.

    Add overflow check of chunk item end to tree checker so it can be
    detected early at mount time.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=208929
    CC: stable@vger.kernel.org # 4.19+
    Reviewed-by: Anand Jain
    Signed-off-by: Su Yue
    Reviewed-by: David Sterba
    Signed-off-by: David Sterba
    Signed-off-by: Sasha Levin

    Su Yue
     
  • commit cb82a54904a99df9e8f9e9d282046055dae5a730 upstream.

    This USB-C Hub (17ef:721e) based on the Realtek RTL8153B chip used to
    use the cdc_ether driver. However, using this driver, with the system
    suspended the device constantly sends pause-frames as soon as the
    receive buffer fills up. This causes issues with other devices, where
    some Ethernet switches stop forwarding packets altogether.

    Using the Realtek driver (r8152) fixes this issue. Pause frames are no
    longer sent while the host system is suspended.

    Signed-off-by: Leon Schuermann
    Tested-by: Leon Schuermann
    Link: https://lore.kernel.org/r/20210111190312.12589-2-leon@is.currently.online
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Leon Schuermann
     
  • commit bff6f1db91e330d7fba56f815cdbc412c75fe163 upstream.

    Set all EHL/TGL phy_addr to -1 so that the driver will automatically
    detect it at run-time by probing all the possible 32 addresses.

    Signed-off-by: Voon Weifeng
    Signed-off-by: Wong Vee Khee
    Link: https://lore.kernel.org/r/20201106094341.4241-1-vee.khee.wong@intel.com
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Greg Kroah-Hartman

    Voon Weifeng
     
  • commit c87a95dc28b1431c7e77e2c0c983cf37698089d2 upstream.

    On some specific hardware on early boot we occasionally get:

    [ 1193.920255][ T0] BUG: sleeping function called from invalid context at mm/mempool.c:381
    [ 1193.936616][ T0] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/69
    [ 1193.953233][ T0] no locks held by swapper/69/0.
    [ 1193.965871][ T0] irq event stamp: 575062
    [ 1193.977724][ T0] hardirqs last enabled at (575061): [] tick_nohz_idle_exit+0xe2/0x3e0
    [ 1194.002762][ T0] hardirqs last disabled at (575062): [] flush_smp_call_function_from_idle+0x4f/0x80
    [ 1194.029035][ T0] softirqs last enabled at (575050): [] asm_call_irq_on_stack+0x12/0x20
    [ 1194.054227][ T0] softirqs last disabled at (575043): [] asm_call_irq_on_stack+0x12/0x20
    [ 1194.079389][ T0] CPU: 69 PID: 0 Comm: swapper/69 Not tainted 5.10.6-cloudflare-kasan-2021.1.4-dev #1
    [ 1194.104103][ T0] Hardware name: NULL R162-Z12-CD/MZ12-HD4-CD, BIOS R10 06/04/2020
    [ 1194.119591][ T0] Call Trace:
    [ 1194.130233][ T0] dump_stack+0x9a/0xcc
    [ 1194.141617][ T0] ___might_sleep.cold+0x180/0x1b0
    [ 1194.153825][ T0] mempool_alloc+0x16b/0x300
    [ 1194.165313][ T0] ? remove_element+0x160/0x160
    [ 1194.176961][ T0] ? blk_mq_end_request+0x4b/0x490
    [ 1194.188778][ T0] crypt_convert+0x27f6/0x45f0 [dm_crypt]
    [ 1194.201024][ T0] ? rcu_read_lock_sched_held+0x3f/0x70
    [ 1194.212906][ T0] ? module_assert_mutex_or_preempt+0x3e/0x70
    [ 1194.225318][ T0] ? __module_address.part.0+0x1b/0x3a0
    [ 1194.237212][ T0] ? is_kernel_percpu_address+0x5b/0x190
    [ 1194.249238][ T0] ? crypt_iv_tcw_ctr+0x4a0/0x4a0 [dm_crypt]
    [ 1194.261593][ T0] ? is_module_address+0x25/0x40
    [ 1194.272905][ T0] ? static_obj+0x8a/0xc0
    [ 1194.283582][ T0] ? lockdep_init_map_waits+0x26a/0x700
    [ 1194.295570][ T0] ? __raw_spin_lock_init+0x39/0x110
    [ 1194.307330][ T0] kcryptd_crypt_read_convert+0x31c/0x560 [dm_crypt]
    [ 1194.320496][ T0] ? kcryptd_queue_crypt+0x1be/0x380 [dm_crypt]
    [ 1194.333203][ T0] blk_update_request+0x6d7/0x1500
    [ 1194.344841][ T0] ? blk_mq_trigger_softirq+0x190/0x190
    [ 1194.356831][ T0] blk_mq_end_request+0x4b/0x490
    [ 1194.367994][ T0] ? blk_mq_trigger_softirq+0x190/0x190
    [ 1194.379693][ T0] flush_smp_call_function_queue+0x24b/0x560
    [ 1194.391847][ T0] flush_smp_call_function_from_idle+0x59/0x80
    [ 1194.403969][ T0] do_idle+0x287/0x450
    [ 1194.413891][ T0] ? arch_cpu_idle_exit+0x40/0x40
    [ 1194.424716][ T0] ? lockdep_hardirqs_on_prepare+0x286/0x3f0
    [ 1194.436399][ T0] ? _raw_spin_unlock_irqrestore+0x39/0x40
    [ 1194.447759][ T0] cpu_startup_entry+0x19/0x20
    [ 1194.458038][ T0] secondary_startup_64_no_verify+0xb0/0xbb

    IO completion can be queued to a different CPU by the block subsystem as a "call
    single function/data". The CPU may run these routines from the idle task, but it
    does so with interrupts disabled.

    It is not a good idea to do decryption with irqs disabled even in an idle task
    context, so just defer it to a tasklet (as is done with requests from hard irqs).

    Fixes: 39d42fa96ba1 ("dm crypt: add flags to optionally bypass kcryptd workqueues")
    Cc: stable@vger.kernel.org # v5.9+
    Signed-off-by: Ignat Korchagin
    Signed-off-by: Mike Snitzer
    Signed-off-by: Greg Kroah-Hartman

    Ignat Korchagin
     
  • commit 8e14f610159d524cd7aac37982826d3ef75c09e8 upstream.

    Sometimes, when dm-crypt executes decryption in a tasklet, we may get
    "BUG: KASAN: use-after-free in tasklet_action_common.constprop..."
    with a kasan-enabled kernel.

    When the decryption fully completes in the tasklet, dm-crypt will call
    bio_endio(), which in turn will call clone_endio() from dm.c core code. That
    function frees the resources associated with the bio, including per bio private
    structures. For dm-crypt it will free the current struct dm_crypt_io, which
    contains our tasklet object, causing use-after-free, when the tasklet is being
    dequeued by the kernel.

    To avoid this, do not call bio_endio() from the current tasklet context, but
    delay its execution to the dm-crypt IO workqueue.

    Fixes: 39d42fa96ba1 ("dm crypt: add flags to optionally bypass kcryptd workqueues")
    Cc: # v5.9+
    Signed-off-by: Ignat Korchagin
    Signed-off-by: Mike Snitzer
    Signed-off-by: Greg Kroah-Hartman

    Ignat Korchagin
     
  • commit 8abec36d1274bbd5ae8f36f3658b9abb3db56c31 upstream.

    Commit 39d42fa96ba1 ("dm crypt: add flags to optionally bypass kcryptd
    workqueues") made it possible for some code paths in dm-crypt to be
    executed in softirq context, when the underlying driver processes IO
    requests in interrupt/softirq context.

    When Crypto API backlogs a crypto request, dm-crypt uses
    wait_for_completion to avoid sending further requests to an already
    overloaded crypto driver. However, if the code is executing in softirq
    context, we might get the following stacktrace:

    [ 210.235213][ C0] BUG: scheduling while atomic: fio/2602/0x00000102
    [ 210.236701][ C0] Modules linked in:
    [ 210.237566][ C0] CPU: 0 PID: 2602 Comm: fio Tainted: G W 5.10.0+ #50
    [ 210.239292][ C0] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015
    [ 210.241233][ C0] Call Trace:
    [ 210.241946][ C0]
    [ 210.242561][ C0] dump_stack+0x7d/0xa3
    [ 210.243466][ C0] __schedule_bug.cold+0xb3/0xc2
    [ 210.244539][ C0] __schedule+0x156f/0x20d0
    [ 210.245518][ C0] ? io_schedule_timeout+0x140/0x140
    [ 210.246660][ C0] schedule+0xd0/0x270
    [ 210.247541][ C0] schedule_timeout+0x1fb/0x280
    [ 210.248586][ C0] ? usleep_range+0x150/0x150
    [ 210.249624][ C0] ? unpoison_range+0x3a/0x60
    [ 210.250632][ C0] ? ____kasan_kmalloc.constprop.0+0x82/0xa0
    [ 210.251949][ C0] ? unpoison_range+0x3a/0x60
    [ 210.252958][ C0] ? __prepare_to_swait+0xa7/0x190
    [ 210.254067][ C0] do_wait_for_common+0x2ab/0x370
    [ 210.255158][ C0] ? usleep_range+0x150/0x150
    [ 210.256192][ C0] ? bit_wait_io_timeout+0x160/0x160
    [ 210.257358][ C0] ? blk_update_request+0x757/0x1150
    [ 210.258582][ C0] ? _raw_spin_lock_irq+0x82/0xd0
    [ 210.259674][ C0] ? _raw_read_unlock_irqrestore+0x30/0x30
    [ 210.260917][ C0] wait_for_completion+0x4c/0x90
    [ 210.261971][ C0] crypt_convert+0x19a6/0x4c00
    [ 210.263033][ C0] ? _raw_spin_lock_irqsave+0x87/0xe0
    [ 210.264193][ C0] ? kasan_set_track+0x1c/0x30
    [ 210.265191][ C0] ? crypt_iv_tcw_ctr+0x4a0/0x4a0
    [ 210.266283][ C0] ? kmem_cache_free+0x104/0x470
    [ 210.267363][ C0] ? crypt_endio+0x91/0x180
    [ 210.268327][ C0] kcryptd_crypt_read_convert+0x30e/0x420
    [ 210.269565][ C0] blk_update_request+0x757/0x1150
    [ 210.270563][ C0] blk_mq_end_request+0x4b/0x480
    [ 210.271680][ C0] blk_done_softirq+0x21d/0x340
    [ 210.272775][ C0] ? _raw_spin_lock+0x81/0xd0
    [ 210.273847][ C0] ? blk_mq_stop_hw_queue+0x30/0x30
    [ 210.275031][ C0] ? _raw_read_lock_irq+0x40/0x40
    [ 210.276182][ C0] __do_softirq+0x190/0x611
    [ 210.277203][ C0] ? handle_edge_irq+0x221/0xb60
    [ 210.278340][ C0] asm_call_irq_on_stack+0x12/0x20
    [ 210.279514][ C0]
    [ 210.280164][ C0] do_softirq_own_stack+0x37/0x40
    [ 210.281281][ C0] irq_exit_rcu+0x110/0x1b0
    [ 210.282286][ C0] common_interrupt+0x74/0x120
    [ 210.283376][ C0] asm_common_interrupt+0x1e/0x40
    [ 210.284496][ C0] RIP: 0010:_aesni_enc1+0x65/0xb0

    Fix this by making crypt_convert function reentrant from the point of
    a single bio and make dm-crypt defer further bio processing to a
    workqueue, if Crypto API backlogs a request in interrupt context.

    Fixes: 39d42fa96ba1 ("dm crypt: add flags to optionally bypass kcryptd workqueues")
    Cc: stable@vger.kernel.org # v5.9+
    Signed-off-by: Ignat Korchagin
    Acked-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer
    Signed-off-by: Greg Kroah-Hartman

    Ignat Korchagin
     
  • commit d68b29584c25dbacd01ed44a3e45abb35353f1de upstream.

    Commit 39d42fa96ba1 ("dm crypt: add flags to optionally bypass kcryptd
    workqueues") made it possible for some code paths in dm-crypt to be
    executed in softirq context, when the underlying driver processes IO
    requests in interrupt/softirq context.

    In this case sometimes when allocating a new crypto request we may get
    a stacktrace like below:

    [ 210.103008][ C0] BUG: sleeping function called from invalid context at mm/mempool.c:381
    [ 210.104746][ C0] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 2602, name: fio
    [ 210.106599][ C0] CPU: 0 PID: 2602 Comm: fio Tainted: G W 5.10.0+ #50
    [ 210.108331][ C0] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015
    [ 210.110212][ C0] Call Trace:
    [ 210.110921][ C0]
    [ 210.111527][ C0] dump_stack+0x7d/0xa3
    [ 210.112411][ C0] ___might_sleep.cold+0x122/0x151
    [ 210.113527][ C0] mempool_alloc+0x16b/0x2f0
    [ 210.114524][ C0] ? __queue_work+0x515/0xde0
    [ 210.115553][ C0] ? mempool_resize+0x700/0x700
    [ 210.116586][ C0] ? crypt_endio+0x91/0x180
    [ 210.117479][ C0] ? blk_update_request+0x757/0x1150
    [ 210.118513][ C0] ? blk_mq_end_request+0x4b/0x480
    [ 210.119572][ C0] ? blk_done_softirq+0x21d/0x340
    [ 210.120628][ C0] ? __do_softirq+0x190/0x611
    [ 210.121626][ C0] crypt_convert+0x29f9/0x4c00
    [ 210.122668][ C0] ? _raw_spin_lock_irqsave+0x87/0xe0
    [ 210.123824][ C0] ? kasan_set_track+0x1c/0x30
    [ 210.124858][ C0] ? crypt_iv_tcw_ctr+0x4a0/0x4a0
    [ 210.125930][ C0] ? kmem_cache_free+0x104/0x470
    [ 210.126973][ C0] ? crypt_endio+0x91/0x180
    [ 210.127947][ C0] kcryptd_crypt_read_convert+0x30e/0x420
    [ 210.129165][ C0] blk_update_request+0x757/0x1150
    [ 210.130231][ C0] blk_mq_end_request+0x4b/0x480
    [ 210.131294][ C0] blk_done_softirq+0x21d/0x340
    [ 210.132332][ C0] ? _raw_spin_lock+0x81/0xd0
    [ 210.133289][ C0] ? blk_mq_stop_hw_queue+0x30/0x30
    [ 210.134399][ C0] ? _raw_read_lock_irq+0x40/0x40
    [ 210.135458][ C0] __do_softirq+0x190/0x611
    [ 210.136409][ C0] ? handle_edge_irq+0x221/0xb60
    [ 210.137447][ C0] asm_call_irq_on_stack+0x12/0x20
    [ 210.138507][ C0]
    [ 210.139118][ C0] do_softirq_own_stack+0x37/0x40
    [ 210.140191][ C0] irq_exit_rcu+0x110/0x1b0
    [ 210.141151][ C0] common_interrupt+0x74/0x120
    [ 210.142171][ C0] asm_common_interrupt+0x1e/0x40

    Fix this by allocating crypto requests with GFP_ATOMIC mask in
    interrupt context.

    Fixes: 39d42fa96ba1 ("dm crypt: add flags to optionally bypass kcryptd workqueues")
    Cc: stable@vger.kernel.org # v5.9+
    Reported-by: Maciej S. Szmigiero
    Signed-off-by: Ignat Korchagin
    Acked-by: Mikulas Patocka
    Signed-off-by: Mike Snitzer
    Signed-off-by: Greg Kroah-Hartman

    Ignat Korchagin
     
  • commit 17ffc193cdc6dc7a613d00d8ad47fc1f801b9bf0 upstream.

    Advance the maximum number of arguments from 9 to 15 to account for
    all potential feature flags that may be supplied.

    Linux 4.19 added "meta_device"
    (356d9d52e1221ba0c9f10b8b38652f78a5298329) and "recalculate"
    (a3fcf7253139609bf9ff901fbf955fba047e75dd) flags.

    Commit 468dfca38b1a6fbdccd195d875599cb7c8875cd9 added
    "sectors_per_bit" and "bitmap_flush_interval".

    Commit 84597a44a9d86ac949900441cea7da0af0f2f473 added
    "allow_discards".

    And the commit d537858ac8aaf4311b51240893add2fc62003b97 added
    "fix_padding".

    Signed-off-by: Mikulas Patocka
    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Mike Snitzer
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     
  • commit 9b5948267adc9e689da609eb61cf7ed49cae5fa8 upstream.

    With external metadata device, flush requests are not passed down to the
    data device.

    Fix this by submitting the flush request in dm_integrity_flush_buffers. In
    order to not degrade performance, we overlap the data device flush with
    the metadata device flush.

    Reported-by: Lukas Straub
    Signed-off-by: Mikulas Patocka
    Cc: stable@vger.kernel.org
    Signed-off-by: Mike Snitzer
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     
  • commit fcc42338375a1e67b8568dbb558f8b784d0f3b01 upstream.

    If the origin device has a volatile write-back cache and the following
    events occur:

    1: After finishing merge operation of one set of exceptions,
    merge_callback() is invoked.
    2: Update the metadata in COW device tracking the merge completion.
    This update to COW device is flushed cleanly.
    3: System crashes and the origin device's cache where the recent
    merge was completed has not been flushed.

    During the next cycle when we read the metadata from the COW device,
    we will skip reading those metadata whose merge was completed in
    step (1). This will lead to data loss/corruption.

    To address this, flush the origin device post merge IO before
    updating the metadata.

    Cc: stable@vger.kernel.org
    Signed-off-by: Akilesh Kailash
    Signed-off-by: Mike Snitzer
    Signed-off-by: Greg Kroah-Hartman

    Akilesh Kailash
     
  • commit cc07d72bf350b77faeffee1c37bc52197171473f upstream.

    Block core warned that discard_granularity was 0 for dm-raid with
    personality of raid1. Reason is that raid_io_hints() was incorrectly
    special-casing raid1 rather than raid0.

    Fix raid_io_hints() by removing discard limits settings for
    raid1. Check for raid0 instead.

    Fixes: 61697a6abd24a ("dm: eliminate 'split_discard_bios' flag from DM target interface")
    Cc: stable@vger.kernel.org
    Reported-by: Zdenek Kabelac
    Reported-by: Mikulas Patocka
    Reported-by: Stephan Bärwolf
    Signed-off-by: Mike Snitzer
    Signed-off-by: Greg Kroah-Hartman

    Mike Snitzer
     
  • commit eb351d75ce1e75b4f793d609efac08426ca50acd upstream.

    Fix the build error:

    mm/process_vm_access.c:277:5: error: implicit declaration of function 'in_compat_syscall'; did you mean 'in_ia32_syscall'? [-Werror=implicit-function-declaration]

    Fixes: 38dc5079da7081e "Fix compat regression in process_vm_rw()"
    Reported-by: syzbot+5b0d0de84d6c65b8dd2b@syzkaller.appspotmail.com
    Cc: Kyle Huey
    Cc: Jens Axboe
    Cc: Al Viro
    Cc: Christoph Hellwig
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Andrew Morton
     
  • commit 0eb98f1588c2cc7a79816d84ab18a55d254f481c upstream.

    The huge page size is encoded for VM_FAULT_HWPOISON errors only. So if
    we return VM_FAULT_HWPOISON, huge page size would just be ignored.

    Link: https://lkml.kernel.org/r/20210107123449.38481-1-linmiaohe@huawei.com
    Fixes: aa50d3a7aa81 ("Encode huge page size for VM_FAULT_HWPOISON errors")
    Signed-off-by: Miaohe Lin
    Reviewed-by: Mike Kravetz
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Miaohe Lin
     
  • commit c22ee5284cf58017fa8c6d21d8f8c68159b6faab upstream.

    In VM_MAP_PUT_PAGES case, we should put pages and free array in vfree.
    But we missed to set area->nr_pages in vmap(). So we would fail to put
    pages in __vunmap() because area->nr_pages = 0.

    Link: https://lkml.kernel.org/r/20210107123541.39206-1-linmiaohe@huawei.com
    Fixes: b944afc9d64d ("mm: add a VM_MAP_PUT_PAGES flag for vmap")
    Signed-off-by: Shijie Luo
    Signed-off-by: Miaohe Lin
    Reviewed-by: Uladzislau Rezki (Sony)
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Miaohe Lin
     
  • commit dca5244d2f5b94f1809f0c02a549edf41ccd5493 upstream.

    GCC versions >= 4.9 and < 5.1 have been shown to emit memory references
    beyond the stack pointer, resulting in memory corruption if an interrupt
    is taken after the stack pointer has been adjusted but before the
    reference has been executed. This leads to subtle, infrequent data
    corruption such as the EXT4 problems reported by Russell King at the
    link below.

    Life is too short for buggy compilers, so raise the minimum GCC version
    required by arm64 to 5.1.

    Reported-by: Russell King
    Suggested-by: Arnd Bergmann
    Signed-off-by: Will Deacon
    Tested-by: Nathan Chancellor
    Reviewed-by: Nick Desaulniers
    Reviewed-by: Nathan Chancellor
    Acked-by: Linus Torvalds
    Cc:
    Cc: Theodore Ts'o
    Cc: Florian Weimer
    Cc: Peter Zijlstra
    Cc: Nick Desaulniers
    Link: https://lore.kernel.org/r/20210105154726.GD1551@shell.armlinux.org.uk
    Link: https://lore.kernel.org/r/20210112224832.10980-1-will@kernel.org
    Signed-off-by: Catalin Marinas
    Signed-off-by: Greg Kroah-Hartman

    Will Deacon
     
  • commit ef3a575baf53571dc405ee4028e26f50856898e7 upstream.

    Allow issuing an IOCTL_PRIVCMD_MMAP_RESOURCE ioctl with num = 0 and
    addr = 0 in order to fetch the size of a specific resource.

    Add a shortcut to the default map resource path, since fetching the
    size requires no address to be passed in, and thus no VMA to setup.

    This is missing from the initial implementation, and causes issues
    when mapping resources that don't have fixed or known sizes.

    Signed-off-by: Roger Pau Monné
    Reviewed-by: Juergen Gross
    Tested-by: Andrew Cooper
    Cc: stable@vger.kernel.org # >= 4.18
    Link: https://lore.kernel.org/r/20210112115358.23346-1-roger.pau@citrix.com
    Signed-off-by: Juergen Gross
    Signed-off-by: Greg Kroah-Hartman

    Roger Pau Monne
     
  • commit a58015d638cd4e4555297b04bec9b49028369075 upstream.

    Linux VM on Hyper-V crashes with the latest mainline:

    [ 4.069624] detected buffer overflow in strcpy
    [ 4.077733] kernel BUG at lib/string.c:1149!
    ..
    [ 4.085819] RIP: 0010:fortify_panic+0xf/0x11
    ...
    [ 4.085819] Call Trace:
    [ 4.085819] acpi_device_add.cold.15+0xf2/0xfb
    [ 4.085819] acpi_add_single_object+0x2a6/0x690
    [ 4.085819] acpi_bus_check_add+0xc6/0x280
    [ 4.085819] acpi_ns_walk_namespace+0xda/0x1aa
    [ 4.085819] acpi_walk_namespace+0x9a/0xc2
    [ 4.085819] acpi_bus_scan+0x78/0x90
    [ 4.085819] acpi_scan_init+0xfa/0x248
    [ 4.085819] acpi_init+0x2c1/0x321
    [ 4.085819] do_one_initcall+0x44/0x1d0
    [ 4.085819] kernel_init_freeable+0x1ab/0x1f4

    This is because of the recent buffer overflow detection in the
    commit 6a39e62abbaf ("lib: string.h: detect intra-object overflow in
    fortified string functions")

    Here acpi_device_bus_id->bus_id can only hold 14 characters, while the
    the acpi_device_hid(device) returns a 22-char string
    "HYPER_V_GEN_COUNTER_V1".

    Per ACPI Spec v6.2, Section 6.1.5 _HID (Hardware ID), if the ID is a
    string, it must be of the form AAA#### or NNNN####, i.e. 7 chars or 8
    chars.

    The field bus_id in struct acpi_device_bus_id was originally defined as
    char bus_id[9], and later was enlarged to char bus_id[15] in 2007 in the
    commit bb0958544f3c ("ACPI: use more understandable bus_id for ACPI
    devices")

    Fix the issue by changing the field bus_id to const char *, and use
    kstrdup_const() to initialize it.

    Signed-off-by: Dexuan Cui
    Tested-By: Jethro Beekman
    [ rjw: Subject change, whitespace adjustment ]
    Cc: All applicable
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    Dexuan Cui
     
  • commit f2bc3af6353cb2a33dfa9d270d999d839eef54cb upstream.

    In ocrdma_dealloc_ucontext_pd() uctx->cntxt_pd is assigned to the variable
    pd and then after uctx->cntxt_pd is freed, the variable pd is passed to
    function _ocrdma_dealloc_pd() which dereferences pd directly or through
    its call to ocrdma_mbx_dealloc_pd().

    Reorder the free using the variable pd.

    Cc: stable@vger.kernel.org
    Fixes: 21a428a019c9 ("RDMA: Handle PD allocations by IB/core")
    Link: https://lore.kernel.org/r/20201230024653.1516495-1-trix@redhat.com
    Signed-off-by: Tom Rix
    Reviewed-by: Leon Romanovsky
    Signed-off-by: Jason Gunthorpe
    Signed-off-by: Greg Kroah-Hartman

    Tom Rix
     
  • commit 69e976831cd53f9ba304fd20305b2025ecc78eab upstream.

    LLVM-built Linux triggered a boot hangup with KASLR enabled.

    arch/mips/kernel/relocate.c:get_random_boot() uses linux_banner,
    which is a string constant, as a random seed, but accesses it
    as an array of unsigned long (in rotate_xor()).
    When the address of linux_banner is not aligned to sizeof(long),
    such access emits unaligned access exception and hangs the kernel.

    Use PTR_ALIGN() to align input address to sizeof(long) and also
    align down the input length to prevent possible access-beyond-end.

    Fixes: 405bc8fd12f5 ("MIPS: Kernel: Implement KASLR using CONFIG_RELOCATABLE")
    Cc: stable@vger.kernel.org # 4.7+
    Signed-off-by: Alexander Lobakin
    Tested-by: Nathan Chancellor
    Reviewed-by: Kees Cook
    Signed-off-by: Thomas Bogendoerfer
    Signed-off-by: Greg Kroah-Hartman

    Alexander Lobakin
     
  • commit 698222457465ce343443be81c5512edda86e5914 upstream.

    Patches that introduced NT_FILE and NT_SIGINFO notes back in 2012
    had taken care of native (fs/binfmt_elf.c) and compat (fs/compat_binfmt_elf.c)
    coredumps; unfortunately, compat on mips (which does not go through the
    usual compat_binfmt_elf.c) had not been noticed.

    As the result, both N32 and O32 coredumps on 64bit mips kernels
    have those sections malformed enough to confuse the living hell out of
    all gdb and readelf versions (up to and including the tip of binutils-gdb.git).

    Longer term solution is to make both O32 and N32 compat use the
    regular compat_binfmt_elf.c, but that's too much for backports. The minimal
    solution is to do in arch/mips/kernel/binfmt_elf[on]32.c the same thing
    those patches have done in fs/compat_binfmt_elf.c

    Cc: stable@kernel.org # v3.7+
    Signed-off-by: Al Viro
    Signed-off-by: Thomas Bogendoerfer
    Signed-off-by: Greg Kroah-Hartman

    Al Viro
     
  • commit 4d4f9c1a17a3480f8fe523673f7232b254d724b7 upstream.

    The compressed payload is not necesarily 4-byte aligned, at least when
    compiling with Clang. In that case, the 4-byte value appended to the
    compressed payload that corresponds to the uncompressed kernel image
    size must be read using get_unaligned_le32().

    This fixes Clang-built kernels not booting on MIPS (tested on a Ingenic
    JZ4770 board).

    Fixes: b8f54f2cde78 ("MIPS: ZBOOT: copy appended dtb to the end of the kernel")
    Cc: # v4.7
    Signed-off-by: Paul Cercueil
    Reviewed-by: Nick Desaulniers
    Reviewed-by: Philippe Mathieu-Daudé
    Signed-off-by: Thomas Bogendoerfer
    Signed-off-by: Greg Kroah-Hartman

    Paul Cercueil
     
  • commit 5b058973d3205578aa6c9a71392e072a11ca44ef upstream.

    When building mips tinyconfig with clang the following warning show up:

    arch/mips/lib/uncached.c:45:6: warning: variable 'sp' is uninitialized when used here [-Wuninitialized]
    if (sp >= (long)CKSEG0 && sp < (long)CKSEG2)
    ^~
    arch/mips/lib/uncached.c:40:18: note: initialize the variable 'sp' to silence this warning
    register long sp __asm__("$sp");
    ^
    = 0
    1 warning generated.

    Rework to make an explicit inline move, instead of the non-standard use
    of specifying registers for local variables. This is what's written
    from the gcc-10 manual [1] about specifying registers for local
    variables:

    "6.47.5.2 Specifying Registers for Local Variables
    .................................................
    [...]

    "The only supported use for this feature is to specify registers for
    input and output operands when calling Extended 'asm' (*note Extended
    Asm::). [...]".

    [1] https://docs.w3cub.com/gcc~10/local-register-variables
    Signed-off-by: Anders Roxell
    Reported-by: Nathan Chancellor
    Reported-by: Naresh Kamboju
    Reviewed-by: Nick Desaulniers
    Signed-off-by: Thomas Bogendoerfer
    Signed-off-by: Greg Kroah-Hartman

    Anders Roxell
     
  • commit ad4fddef5f2345aa9214e979febe2f47639c10d9 upstream.

    When building mips tinyconfig with clang the following error show up:

    WARNING: modpost: vmlinux.o(.text+0x1940c): Section mismatch in reference from the function r4k_cache_init() to the function .init.text:loongson3_sc_init()
    The function r4k_cache_init() references
    the function __init loongson3_sc_init().
    This is often because r4k_cache_init lacks a __init
    annotation or the annotation of loongson3_sc_init is wrong.

    Remove marked __init from function loongson3_sc_init(),
    mips_sc_probe_cm3(), and mips_sc_probe().

    Signed-off-by: Anders Roxell
    Reviewed-by: Nick Desaulniers
    Signed-off-by: Thomas Bogendoerfer
    Signed-off-by: Greg Kroah-Hartman

    Anders Roxell
     
  • commit c25a053e15778f6b4d6553708673736e27a6c2cf upstream.

    Use virtual address instead of physical address when translating
    the address to shadow memory by kasan_mem_to_shadow().

    Signed-off-by: Nick Hu
    Signed-off-by: Nylon Chen
    Fixes: b10d6bca8720 ("arch, drivers: replace for_each_membock() with for_each_mem_range()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Palmer Dabbelt
    Signed-off-by: Greg Kroah-Hartman

    Nick Hu
     
  • commit 0aa2ec8a475fb505fd98d93bbcf4e03beeeebcb6 upstream.

    The patch fix commit: ad5d112 ("riscv: use vDSO common flow to
    reduce the latency of the time-related functions").

    The GENERIC_TIME_VSYSCALL should be CONFIG_GENERIC_TIME_VSYSCALL
    or vgettimeofday won't work.

    Signed-off-by: Guo Ren
    Reviewed-by: Pekka Enberg
    Fixes: ad5d1122b82f ("riscv: use vDSO common flow to reduce the latency of the time-related functions")
    Cc: stable@vger.kernel.org
    Signed-off-by: Palmer Dabbelt
    Signed-off-by: Greg Kroah-Hartman

    Guo Ren
     
  • commit cf7b2ae4d70432fa94ebba3fbaab825481ae7189 upstream.

    Properly return -ENOSYS for syscall -1 instead of leaving the return value
    uninitialized. This fixes the strace teststuite.

    Fixes: 5340627e3fe0 ("riscv: add support for SECCOMP and SECCOMP_FILTER")
    Cc: stable@vger.kernel.org
    Signed-off-by: Andreas Schwab
    Reviewed-by: Tycho Andersen
    Signed-off-by: Palmer Dabbelt
    Signed-off-by: Greg Kroah-Hartman

    Andreas Schwab
     
  • commit 0ea02c73775277001c651ad4a0e83781a9acf406 upstream.

    commit b91540d52a08 ("RISC-V: Add EFI runtime services") add
    a duplicated PAGE_KERNEL_EXEC, kill it.

    Signed-off-by: Kefeng Wang
    Reviewed-by: Pekka Enberg
    Reviewed-by: Atish Patra
    Fixes: b91540d52a08 ("RISC-V: Add EFI runtime services")
    Cc: stable@vger.kernel.org
    Signed-off-by: Palmer Dabbelt
    Signed-off-by: Greg Kroah-Hartman

    Kefeng Wang