24 Mar, 2020

3 commits


22 Mar, 2020

5 commits

  • In bfq_pd_offline(), the function bfq_flush_idle_tree() is invoked to
    flush the rb tree that contains all idle entities belonging to the pd
    (cgroup) being destroyed. In particular, bfq_flush_idle_tree() is
    invoked before bfq_reparent_active_queues(). Yet the latter may happen
    to add some entities to the idle tree. It happens if, in some of the
    calls to bfq_bfqq_move() performed by bfq_reparent_active_queues(),
    the queue to move is empty and gets expired.

    This commit simply reverses the invocation order between
    bfq_flush_idle_tree() and bfq_reparent_active_queues().

    Tested-by: cki-project@redhat.com
    Signed-off-by: Paolo Valente
    Signed-off-by: Jens Axboe

    Paolo Valente
     
  • bfq_reparent_leaf_entity() reparents the input leaf entity (a leaf
    entity represents just a bfq_queue in an entity tree). Yet, the input
    entity is guaranteed to always be a leaf entity only in two-level
    entity trees. In this respect, because of the error fixed by
    commit 14afc5936197 ("block, bfq: fix overwrite of bfq_group pointer
    in bfq_find_set_group()"), all (wrongly collapsed) entity trees happened
    to actually have only two levels. After the latter commit, this does not
    hold any longer.

    This commit fixes this problem by modifying
    bfq_reparent_leaf_entity(), so that it searches an active leaf entity
    down the path that stems from the input entity. Such a leaf entity is
    guaranteed to exist when bfq_reparent_leaf_entity() is invoked.

    Tested-by: cki-project@redhat.com
    Signed-off-by: Paolo Valente
    Signed-off-by: Jens Axboe

    Paolo Valente
     
  • A bfq_put_queue() may be invoked in __bfq_bic_change_cgroup(). The
    goal of this put is to release a process reference to a bfq_queue. But
    process-reference releases may trigger also some extra operation, and,
    to this goal, are handled through bfq_release_process_ref(). So, turn
    the invocation of bfq_put_queue() into an invocation of
    bfq_release_process_ref().

    Tested-by: cki-project@redhat.com
    Signed-off-by: Paolo Valente
    Signed-off-by: Jens Axboe

    Paolo Valente
     
  • Commit ecedd3d7e199 ("block, bfq: get extra ref to prevent a queue
    from being freed during a group move") gets an extra reference to a
    bfq_queue before possibly deactivating it (temporarily), in
    bfq_bfqq_move(). This prevents the bfq_queue from disappearing before
    being reactivated in its new group.

    Yet, the bfq_queue may also be expired (i.e., its service may be
    stopped) before the bfq_queue is deactivated. And also an expiration
    may lead to a premature freeing. This commit fixes this issue by
    simply moving forward the getting of the extra reference already
    introduced by commit ecedd3d7e199 ("block, bfq: get extra ref to
    prevent a queue from being freed during a group move").

    Reported-by: cki-project@redhat.com
    Tested-by: cki-project@redhat.com
    Signed-off-by: Paolo Valente
    Signed-off-by: Jens Axboe

    Paolo Valente
     
  • In bfq_idle_slice_timer func, bfqq = bfqd->in_service_queue is
    not in bfqd-lock critical section. The bfqq, which is not
    equal to NULL in bfq_idle_slice_timer, may be freed after passing
    to bfq_idle_slice_timer_body. So we will access the freed memory.

    In addition, considering the bfqq may be in race, we should
    firstly check whether bfqq is in service before doing something
    on it in bfq_idle_slice_timer_body func. If the bfqq in race is
    not in service, it means the bfqq has been expired through
    __bfq_bfqq_expire func, and wait_request flags has been cleared in
    __bfq_bfqd_reset_in_service func. So we do not need to re-clear the
    wait_request of bfqq which is not in service.

    KASAN log is given as follows:
    [13058.354613] ==================================================================
    [13058.354640] BUG: KASAN: use-after-free in bfq_idle_slice_timer+0xac/0x290
    [13058.354644] Read of size 8 at addr ffffa02cf3e63f78 by task fork13/19767
    [13058.354646]
    [13058.354655] CPU: 96 PID: 19767 Comm: fork13
    [13058.354661] Call trace:
    [13058.354667] dump_backtrace+0x0/0x310
    [13058.354672] show_stack+0x28/0x38
    [13058.354681] dump_stack+0xd8/0x108
    [13058.354687] print_address_description+0x68/0x2d0
    [13058.354690] kasan_report+0x124/0x2e0
    [13058.354697] __asan_load8+0x88/0xb0
    [13058.354702] bfq_idle_slice_timer+0xac/0x290
    [13058.354707] __hrtimer_run_queues+0x298/0x8b8
    [13058.354710] hrtimer_interrupt+0x1b8/0x678
    [13058.354716] arch_timer_handler_phys+0x4c/0x78
    [13058.354722] handle_percpu_devid_irq+0xf0/0x558
    [13058.354731] generic_handle_irq+0x50/0x70
    [13058.354735] __handle_domain_irq+0x94/0x110
    [13058.354739] gic_handle_irq+0x8c/0x1b0
    [13058.354742] el1_irq+0xb8/0x140
    [13058.354748] do_wp_page+0x260/0xe28
    [13058.354752] __handle_mm_fault+0x8ec/0x9b0
    [13058.354756] handle_mm_fault+0x280/0x460
    [13058.354762] do_page_fault+0x3ec/0x890
    [13058.354765] do_mem_abort+0xc0/0x1b0
    [13058.354768] el0_da+0x24/0x28
    [13058.354770]
    [13058.354773] Allocated by task 19731:
    [13058.354780] kasan_kmalloc+0xe0/0x190
    [13058.354784] kasan_slab_alloc+0x14/0x20
    [13058.354788] kmem_cache_alloc_node+0x130/0x440
    [13058.354793] bfq_get_queue+0x138/0x858
    [13058.354797] bfq_get_bfqq_handle_split+0xd4/0x328
    [13058.354801] bfq_init_rq+0x1f4/0x1180
    [13058.354806] bfq_insert_requests+0x264/0x1c98
    [13058.354811] blk_mq_sched_insert_requests+0x1c4/0x488
    [13058.354818] blk_mq_flush_plug_list+0x2d4/0x6e0
    [13058.354826] blk_flush_plug_list+0x230/0x548
    [13058.354830] blk_finish_plug+0x60/0x80
    [13058.354838] read_pages+0xec/0x2c0
    [13058.354842] __do_page_cache_readahead+0x374/0x438
    [13058.354846] ondemand_readahead+0x24c/0x6b0
    [13058.354851] page_cache_sync_readahead+0x17c/0x2f8
    [13058.354858] generic_file_buffered_read+0x588/0xc58
    [13058.354862] generic_file_read_iter+0x1b4/0x278
    [13058.354965] ext4_file_read_iter+0xa8/0x1d8 [ext4]
    [13058.354972] __vfs_read+0x238/0x320
    [13058.354976] vfs_read+0xbc/0x1c0
    [13058.354980] ksys_read+0xdc/0x1b8
    [13058.354984] __arm64_sys_read+0x50/0x60
    [13058.354990] el0_svc_common+0xb4/0x1d8
    [13058.354994] el0_svc_handler+0x50/0xa8
    [13058.354998] el0_svc+0x8/0xc
    [13058.354999]
    [13058.355001] Freed by task 19731:
    [13058.355007] __kasan_slab_free+0x120/0x228
    [13058.355010] kasan_slab_free+0x10/0x18
    [13058.355014] kmem_cache_free+0x288/0x3f0
    [13058.355018] bfq_put_queue+0x134/0x208
    [13058.355022] bfq_exit_icq_bfqq+0x164/0x348
    [13058.355026] bfq_exit_icq+0x28/0x40
    [13058.355030] ioc_exit_icq+0xa0/0x150
    [13058.355035] put_io_context_active+0x250/0x438
    [13058.355038] exit_io_context+0xd0/0x138
    [13058.355045] do_exit+0x734/0xc58
    [13058.355050] do_group_exit+0x78/0x220
    [13058.355054] __wake_up_parent+0x0/0x50
    [13058.355058] el0_svc_common+0xb4/0x1d8
    [13058.355062] el0_svc_handler+0x50/0xa8
    [13058.355066] el0_svc+0x8/0xc
    [13058.355067]
    [13058.355071] The buggy address belongs to the object at ffffa02cf3e63e70#012 which belongs to the cache bfq_queue of size 464
    [13058.355075] The buggy address is located 264 bytes inside of#012 464-byte region [ffffa02cf3e63e70, ffffa02cf3e64040)
    [13058.355077] The buggy address belongs to the page:
    [13058.355083] page:ffff7e80b3cf9800 count:1 mapcount:0 mapping:ffff802db5c90780 index:0xffffa02cf3e606f0 compound_mapcount: 0
    [13058.366175] flags: 0x2ffffe0000008100(slab|head)
    [13058.370781] raw: 2ffffe0000008100 ffff7e80b53b1408 ffffa02d730c1c90 ffff802db5c90780
    [13058.370787] raw: ffffa02cf3e606f0 0000000000370023 00000001ffffffff 0000000000000000
    [13058.370789] page dumped because: kasan: bad access detected
    [13058.370791]
    [13058.370792] Memory state around the buggy address:
    [13058.370797] ffffa02cf3e63e00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fb fb
    [13058.370801] ffffa02cf3e63e80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [13058.370805] >ffffa02cf3e63f00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [13058.370808] ^
    [13058.370811] ffffa02cf3e63f80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [13058.370815] ffffa02cf3e64000: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
    [13058.370817] ==================================================================
    [13058.370820] Disabling lock debugging due to kernel taint

    Here, we directly pass the bfqd to bfq_idle_slice_timer_body func.
    --
    V2->V3: rewrite the comment as suggested by Paolo Valente
    V1->V2: add one comment, and add Fixes and Reported-by tag.

    Fixes: aee69d78d ("block, bfq: introduce the BFQ-v0 I/O scheduler as an extra scheduler")
    Acked-by: Paolo Valente
    Reported-by: Wang Wang
    Signed-off-by: Zhiqiang Liu
    Signed-off-by: Feilong Lin
    Signed-off-by: Jens Axboe

    Zhiqiang Liu
     

19 Mar, 2020

5 commits


18 Mar, 2020

2 commits

  • submit_bio_wait() can be called from ioctl(BLKSECDISCARD), which
    may take long time to complete, as Salman mentioned, 4K BLKSECDISCARD
    takes up to 100 second on some devices. Also any block I/O operation
    that occurs after the BLKSECDISCARD is submitted will also potentially
    be affected by the hung task timeouts.

    Another report is that task hang can be observed when running mkfs
    over raid10 which takes a small max discard sectors limit because
    of chunk size.

    So prevent hung_check from firing by taking same approach used
    in blk_execute_rq(), and the wake-up interval is set as half the
    hung_check timer period, which keeps overhead low enough.

    Cc: Salman Qazi
    Cc: Jesse Barnes
    Cc: Bart Van Assche
    Link: https://lkml.org/lkml/2020/2/12/1193
    Reported-by: Salman Qazi
    Reviewed-by: Jesse Barnes
    Reviewed-by: Salman Qazi
    Signed-off-by: Ming Lei
    Signed-off-by: Jens Axboe

    Ming Lei
     
  • Historically we only set the capacity to zero for devices that support
    partitions (independ of actually having partitions created). Doing that
    is rather inconsistent, but changing it broke legacy udisks polling for
    legacy ide-cdrom devices. Use the crude a crude check for devices that
    either are non-removable or partitionable to get the sane behavior for
    most device while not breaking userspace for this particular setup.

    Fixes: a1548b674403 ("block: move rescan_partitions to fs/block_dev.c")
    Reported-by: He Zhe
    Signed-off-by: Christoph Hellwig
    Tested-by: He Zhe
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     

12 Mar, 2020

11 commits

  • Check for overflow in addition before checking for end-of-block-device.

    Steps to reproduce:

    #define _GNU_SOURCE 1
    #include
    #include
    #include
    #include

    typedef unsigned long long __u64;

    struct blk_zone_range {
    __u64 sector;
    __u64 nr_sectors;
    };

    #define BLKRESETZONE _IOW(0x12, 131, struct blk_zone_range)

    int main(void)
    {
    int fd = open("/dev/nullb0", O_RDWR|O_DIRECT);
    struct blk_zone_range zr = {4096, 0xfffffffffffff000ULL};
    ioctl(fd, BLKRESETZONE, &zr);
    return 0;
    }

    BUG: KASAN: null-ptr-deref in submit_bio_wait+0x74/0xe0
    Write of size 8 at addr 0000000000000040 by task a.out/1590

    CPU: 8 PID: 1590 Comm: a.out Not tainted 5.6.0-rc1-00019-g359c92c02bfa #2
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ?-20190711_202441-buildvm-armv7-10.arm.fedoraproject.org-2.fc31 04/01/2014
    Call Trace:
    dump_stack+0x76/0xa0
    __kasan_report.cold+0x5/0x3e
    kasan_report+0xe/0x20
    submit_bio_wait+0x74/0xe0
    blkdev_zone_mgmt+0x26f/0x2a0
    blkdev_zone_mgmt_ioctl+0x14b/0x1b0
    blkdev_ioctl+0xb28/0xe60
    block_ioctl+0x69/0x80
    ksys_ioctl+0x3af/0xa50

    Reviewed-by: Christoph Hellwig
    Signed-off-by: Alexey Dobriyan (SK hynix)
    Signed-off-by: Jens Axboe

    Alexey Dobriyan
     
  • Acked-by: Tejun Heo
    Signed-off-by: Weiping Zhang
    Signed-off-by: Jens Axboe

    Weiping Zhang
     
  • This patch changes the check condition for the validity/authentication
    of the session.

    1. The Host Session Number(HSN) in the response should match the HSN for
    the session.
    2. The TPER Session Number(TSN) can never be less than 4096 for a regular
    session.

    Reference:
    Section 3.2.2.1 of https://trustedcomputinggroup.org/wp-content/uploads/TCG_Storage_Opal_SSC_Application_Note_1-00_1-00-Final.pdf
    Section 3.3.7.1.1 of https://trustedcomputinggroup.org/wp-content/uploads/TCG_Storage_Architecture_Core_Spec_v2.01_r1.00.pdf

    Co-developed-by: Andrzej Jakowski
    Signed-off-by: Andrzej Jakowski
    Signed-off-by: Revanth Rajashekar
    Signed-off-by: Jens Axboe

    Revanth Rajashekar
     
  • The kernel documentation includes a brief section about genhd
    capabilities, but it turns out that the only documented
    capability (GENHD_FL_MEDIA_CHANGE_NOTIFY) isn't used any more.

    This patch removes that flag, and documents the rest, based on my
    understanding of the current uses of these flags in the kernel. The
    documentation is kept in the header file, alongside the declarations,
    in the hope that it will be kept up-to-date in future; the kernel
    documentation is changed to include the documentation generated from
    the header file.

    Because the ultimate goal is to provide some end-user
    documentation (or end-administrator documentation), the comments are
    perhaps more user-oriented than might be expected. Since the values
    are shown to users in hexadecimal, the documentation lists them in
    hexadecimal, and the constant declarations are adjusted to match.

    Reviewed-by: Matthew Wilcox (Oracle)
    Signed-off-by: Stephen Kitt
    Signed-off-by: Jens Axboe

    Stephen Kitt
     
  • Remove the comment about return value, since it is not valid after
    commit 404b8f5a03d84 ("block: cleanup kick/queued handling").

    Signed-off-by: Guoqing Jiang
    Reviewed-by: Nikolay Borisov
    Reviewed-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: Jens Axboe

    Guoqing Jiang
     
  • Remove 'q' from arguments since it is not used anymore after
    commit 7e992f847a08e ("block: remove non mq parts from the
    flush code").

    Signed-off-by: Guoqing Jiang
    Reviewed-by: Nikolay Borisov
    Reviewed-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: Jens Axboe

    Guoqing Jiang
     
  • Both cmd and sense had been moved to scsi_request, so remove
    the related comments to avoid confusion.

    And as Bart suggested, move _blk_rq_prep_clone into the only
    caller (blk_rq_prep_clone).

    Signed-off-by: Guoqing Jiang
    Signed-off-by: Jens Axboe

    Guoqing Jiang
     
  • Previously, blk_cleanup_queue has called blk_set_queue_dying to set the
    flag, no need to do it again.

    Signed-off-by: Guoqing Jiang
    Reviewed-by: Nikolay Borisov
    Reviewed-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: Jens Axboe

    Guoqing Jiang
     
  • Use the two functions to simplify code.

    Signed-off-by: Guoqing Jiang
    Reviewed-by: Nikolay Borisov
    Reviewed-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: Jens Axboe

    Guoqing Jiang
     
  • Since the later description mentioned "checked against the new queue
    limits", so make the change to avoid confusion.

    Signed-off-by: Guoqing Jiang
    Reviewed-by: Chaitanya Kulkarni
    Reviewed-by: Bart Van Assche
    Signed-off-by: Jens Axboe

    Guoqing Jiang
     
  • There is a potential race between ioc_release_fn() and
    ioc_clear_queue() as shown below, due to which below kernel
    crash is observed. It also can result into use-after-free
    issue.

    context#1: context#2:
    ioc_release_fn() __ioc_clear_queue() gets the same icq
    ->spin_lock(&ioc->lock); ->spin_lock(&ioc->lock);
    ->ioc_destroy_icq(icq);
    ->list_del_init(&icq->q_node);
    ->call_rcu(&icq->__rcu_head,
    icq_free_icq_rcu);
    ->spin_unlock(&ioc->lock);
    ->ioc_destroy_icq(icq);
    ->hlist_del_init(&icq->ioc_node);
    This results into below crash as this memory
    is now used by icq->__rcu_head in context#1.
    There is a chance that icq could be free'd
    as well.

    22150.386550: Unable to handle kernel write to read-only memory
    at virtual address ffffffaa8d31ca50
    ...
    Call trace:
    22150.607350: ioc_destroy_icq+0x44/0x110
    22150.611202: ioc_clear_queue+0xac/0x148
    22150.615056: blk_cleanup_queue+0x11c/0x1a0
    22150.619174: __scsi_remove_device+0xdc/0x128
    22150.623465: scsi_forget_host+0x2c/0x78
    22150.627315: scsi_remove_host+0x7c/0x2a0
    22150.631257: usb_stor_disconnect+0x74/0xc8
    22150.635371: usb_unbind_interface+0xc8/0x278
    22150.639665: device_release_driver_internal+0x198/0x250
    22150.644897: device_release_driver+0x24/0x30
    22150.649176: bus_remove_device+0xec/0x140
    22150.653204: device_del+0x270/0x460
    22150.656712: usb_disable_device+0x120/0x390
    22150.660918: usb_disconnect+0xf4/0x2e0
    22150.664684: hub_event+0xd70/0x17e8
    22150.668197: process_one_work+0x210/0x480
    22150.672222: worker_thread+0x32c/0x4c8

    Fix this by adding a new ICQ_DESTROYED flag in ioc_destroy_icq() to
    indicate this icq is once marked as destroyed. Also, ensure
    __ioc_clear_queue() is accessing icq within rcu_read_lock/unlock so
    that icq doesn't get free'd up while it is still using it.

    Signed-off-by: Sahitya Tummala
    Co-developed-by: Pradeep P V K
    Signed-off-by: Pradeep P V K
    Signed-off-by: Jens Axboe

    Sahitya Tummala
     

10 Mar, 2020

8 commits

  • This makes it possible to test the error path in blk_mq_realloc_hw_ctxs()
    and also several error paths in null_blk.

    Signed-off-by: Bart Van Assche
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • If null_add_dev() fails then null_del_dev() is called with a NULL argument.
    Make null_del_dev() handle this scenario correctly. This patch fixes the
    following KASAN complaint:

    null-ptr-deref in null_del_dev+0x28/0x280 [null_blk]
    Read of size 8 at addr 0000000000000000 by task find/1062

    Call Trace:
    dump_stack+0xa5/0xe6
    __kasan_report.cold+0x65/0x99
    kasan_report+0x16/0x20
    __asan_load8+0x58/0x90
    null_del_dev+0x28/0x280 [null_blk]
    nullb_group_drop_item+0x7e/0xa0 [null_blk]
    client_drop_item+0x53/0x80 [configfs]
    configfs_rmdir+0x395/0x4e0 [configfs]
    vfs_rmdir+0xb6/0x220
    do_rmdir+0x238/0x2c0
    __x64_sys_unlinkat+0x75/0x90
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Signed-off-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • If null_add_dev() fails, clear dev->nullb.

    This patch fixes the following KASAN complaint:

    BUG: KASAN: use-after-free in nullb_device_submit_queues_store+0xcf/0x160 [null_blk]
    Read of size 8 at addr ffff88803280fc30 by task check/8409

    Call Trace:
    dump_stack+0xa5/0xe6
    print_address_description.constprop.0+0x26/0x260
    __kasan_report.cold+0x7b/0x99
    kasan_report+0x16/0x20
    __asan_load8+0x58/0x90
    nullb_device_submit_queues_store+0xcf/0x160 [null_blk]
    configfs_write_file+0x1c4/0x250 [configfs]
    __vfs_write+0x4c/0x90
    vfs_write+0x145/0x2c0
    ksys_write+0xd7/0x180
    __x64_sys_write+0x47/0x50
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe
    RIP: 0033:0x7ff370926317
    Code: 64 89 02 48 c7 c0 ff ff ff ff eb bb 0f 1f 80 00 00 00 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 01 00 00 00 0f 05 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 48 89 54 24 18 48 89 74 24
    RSP: 002b:00007fff2dd2da48 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 0000000000000002 RCX: 00007ff370926317
    RDX: 0000000000000002 RSI: 0000559437ef23f0 RDI: 0000000000000001
    RBP: 0000559437ef23f0 R08: 000000000000000a R09: 0000000000000001
    R10: 0000559436703471 R11: 0000000000000246 R12: 0000000000000002
    R13: 00007ff370a006a0 R14: 00007ff370a014a0 R15: 00007ff370a008a0

    Allocated by task 8409:
    save_stack+0x23/0x90
    __kasan_kmalloc.constprop.0+0xcf/0xe0
    kasan_kmalloc+0xd/0x10
    kmem_cache_alloc_node_trace+0x129/0x4c0
    null_add_dev+0x24a/0xe90 [null_blk]
    nullb_device_power_store+0x1b6/0x270 [null_blk]
    configfs_write_file+0x1c4/0x250 [configfs]
    __vfs_write+0x4c/0x90
    vfs_write+0x145/0x2c0
    ksys_write+0xd7/0x180
    __x64_sys_write+0x47/0x50
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Freed by task 8409:
    save_stack+0x23/0x90
    __kasan_slab_free+0x112/0x160
    kasan_slab_free+0x12/0x20
    kfree+0xdf/0x250
    null_add_dev+0xaf3/0xe90 [null_blk]
    nullb_device_power_store+0x1b6/0x270 [null_blk]
    configfs_write_file+0x1c4/0x250 [configfs]
    __vfs_write+0x4c/0x90
    vfs_write+0x145/0x2c0
    ksys_write+0xd7/0x180
    __x64_sys_write+0x47/0x50
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Fixes: 2984c8684f96 ("nullb: factor disk parameters")
    Signed-off-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • Instead of initializing null_blk hardware queues explicitly after the
    request queue has been created, provide .init_hctx() and .exit_hctx()
    callback functions. The latter functions are not only called during
    request queue allocation but also when the number of hardware queues
    changes. Allocate nr_cpu_ids queues during initialization to support
    increasing the number of hardware queues above the initial hardware
    queue count.

    This change fixes increasing the number of hardware queues above the
    initial number of hardware queues and also keeps nullb->nr_queues in
    sync with the number of hardware queues.

    Fixes: 45919fbfe1c4 ("null_blk: Enable modifying 'submit_queues' after an instance has been configured")
    Signed-off-by: Bart Van Assche
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • Although it is not clear to me why UBSAN complains when 'memory_backed'
    is set, this patch suppresses the UBSAN complaint that is triggered when
    setting that configfs attribute.

    UBSAN: Undefined behaviour in drivers/block/null_blk_main.c:327:1
    load of value 16 is not a valid value for type '_Bool'
    CPU: 2 PID: 8396 Comm: check Not tainted 5.6.0-rc1-dbg+ #14
    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    Call Trace:
    dump_stack+0xa5/0xe6
    ubsan_epilogue+0x9/0x26
    __ubsan_handle_load_invalid_value+0x6d/0x76
    nullb_device_memory_backed_store.cold+0x2c/0x38 [null_blk]
    configfs_write_file+0x1c4/0x250 [configfs]
    __vfs_write+0x4c/0x90
    vfs_write+0x145/0x2c0
    ksys_write+0xd7/0x180
    __x64_sys_write+0x47/0x50
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Signed-off-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • q->nr_hw_queues must only be updated once it is known that
    blk_mq_realloc_hw_ctxs() has succeeded. Otherwise it can happen that
    reallocation fails and that q->nr_hw_queues is larger than the number of
    allocated hardware queues. This patch fixes the following crash if
    increasing the number of hardware queues fails:

    BUG: KASAN: null-ptr-deref in blk_mq_map_swqueue+0x775/0x810
    Write of size 8 at addr 0000000000000118 by task check/977

    CPU: 3 PID: 977 Comm: check Not tainted 5.6.0-rc1-dbg+ #8
    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    Call Trace:
    dump_stack+0xa5/0xe6
    __kasan_report.cold+0x65/0x99
    kasan_report+0x16/0x20
    check_memory_region+0x140/0x1b0
    memset+0x28/0x40
    blk_mq_map_swqueue+0x775/0x810
    blk_mq_update_nr_hw_queues+0x468/0x710
    nullb_device_submit_queues_store+0xf7/0x1a0 [null_blk]
    configfs_write_file+0x1c4/0x250 [configfs]
    __vfs_write+0x4c/0x90
    vfs_write+0x145/0x2c0
    ksys_write+0xd7/0x180
    __x64_sys_write+0x47/0x50
    do_syscall_64+0x6f/0x2f0
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Fixes: ac0d6b926e74 ("block: Reduce the amount of memory required per request queue")
    Signed-off-by: Bart Van Assche
    Reviewed-by: Ming Lei
    Cc: Keith Busch
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • blk_mq_map_queues() and multiple .map_queues() implementations expect that
    set->map[HCTX_TYPE_DEFAULT].nr_queues is set to the number of hardware
    queues. Hence set .nr_queues before calling these functions. This patch
    fixes the following kernel warning:

    WARNING: CPU: 0 PID: 2501 at include/linux/cpumask.h:137
    Call Trace:
    blk_mq_run_hw_queue+0x19d/0x350 block/blk-mq.c:1508
    blk_mq_run_hw_queues+0x112/0x1a0 block/blk-mq.c:1525
    blk_mq_requeue_work+0x502/0x780 block/blk-mq.c:775
    process_one_work+0x9af/0x1740 kernel/workqueue.c:2269
    worker_thread+0x98/0xe40 kernel/workqueue.c:2415
    kthread+0x361/0x430 kernel/kthread.c:255

    Fixes: ed76e329d74a ("blk-mq: abstract out queue map") # v5.0
    Reported-by: syzbot+d44e1b26ce5c3e77458d@syzkaller.appspotmail.com
    Signed-off-by: Bart Van Assche
    Reviewed-by: Ming Lei
    Reviewed-by: Chaitanya Kulkarni
    Cc: Johannes Thumshirn
    Cc: Hannes Reinecke
    Cc: Ming Lei
    Cc: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Bart Van Assche
     
  • The 'hctx_list' member of struct blk_mq_hw_ctx is not a list head but
    instead an entry in q->unused_hctx_list. Fix the comment above this
    struct member.

    Fixes: d386732bc142 ("blk-mq: fill header with kernel-doc")
    Signed-off-by: Bart Van Assche
    Reviewed-by: Chaitanya Kulkarni
    Cc: André Almeida
    Signed-off-by: Jens Axboe

    Bart Van Assche
     

09 Mar, 2020

3 commits

  • Linus Torvalds
     
  • Pull ARM SoC fixes from Olof Johansson:
    "We've been accruing these for a couple of weeks, so the batch is a bit
    bigger than usual.

    Largest delta is due to a led-bl driver that is added -- there was a
    miscommunication before the merge window and the driver didn't make it
    in. Due to this, the platforms needing it regressed. At this point, it
    seemed easier to add the new driver than unwind the changes.

    Besides that, there are a handful of various fixes:

    - AMD tee memory leak fix

    - A handful of fixlets for i.MX SCU communication

    - A few maintainers woke up and realized DEBUG_FS had been missing
    for a while, so a few updates of that.

    ... and the usual collection of smaller fixes to various platforms"

    * tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (37 commits)
    ARM: socfpga_defconfig: Add back DEBUG_FS
    arm64: dts: socfpga: agilex: Fix gmac compatible
    ARM: bcm2835_defconfig: Explicitly restore CONFIG_DEBUG_FS
    arm64: dts: meson: fix gxm-khadas-vim2 wifi
    arm64: dts: meson-sm1-sei610: add missing interrupt-names
    ARM: meson: Drop unneeded select of COMMON_CLK
    ARM: dts: bcm2711: Add pcie0 alias
    ARM: dts: bcm283x: Add missing properties to the PWR LED
    tee: amdtee: fix memory leak in amdtee_open_session()
    ARM: OMAP2+: Fix compile if CONFIG_HAVE_ARM_SMCCC is not set
    arm: dts: dra76x: Fix mmc3 max-frequency
    ARM: dts: dra7: Add "dma-ranges" property to PCIe RC DT nodes
    bus: ti-sysc: Fix 1-wire reset quirk
    ARM: dts: r8a7779: Remove deprecated "renesas, rcar-sata" compatible value
    soc: imx-scu: Align imx sc msg structs to 4
    firmware: imx: Align imx_sc_msg_req_cpu_start to 4
    firmware: imx: scu-pd: Align imx sc msg structs to 4
    firmware: imx: misc: Align imx sc msg structs to 4
    firmware: imx: scu: Ensure sequential TX
    ARM: dts: imx7-colibri: Fix frequency for sd/mmc
    ...

    Linus Torvalds
     
  • Pull EDAC fix from Borislav Petkov:
    "Error reporting fix for synopsys_edac: do not overwrite partial
    decoded error message (Sherry Sun)"

    * tag 'edac_urgent-2020-03-08' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras:
    EDAC/synopsys: Do not print an error with back-to-back snprintf() calls

    Linus Torvalds
     

08 Mar, 2020

3 commits

  • Pull char/misc fixes from Greg KH:
    "Here are four small char/misc driver fixes for reported issues for
    5.6-rc5.

    These fixes are:

    - binder fix for a potential use-after-free problem found (took two
    tries to get it right)

    - interconnect core fix

    - altera-stapl driver fix

    All four of these have been in linux-next for a while with no reported
    issues"

    * tag 'char-misc-5.6-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
    binder: prevent UAF for binderfs devices II
    interconnect: Handle memory allocation errors
    altera-stapl: altera_get_note: prevent write beyond end of 'key'
    binder: prevent UAF for binderfs devices

    Linus Torvalds
     
  • Pull driver core and debugfs fixes from Greg KH:
    "Here are four small driver core / debugfs patches for 5.6-rc3:

    - debugfs api cleanup now that all debugfs_create_regset32() callers
    have been fixed up. This was waiting until after the -rc1 merge as
    these fixes came in through different trees

    - driver core sync state fixes based on reports of minor issues found
    in the feature

    All of these have been in linux-next with no reported issues"

    * tag 'driver-core-5.6-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core:
    driver core: Skip unnecessary work when device doesn't have sync_state()
    driver core: Add dev_has_sync_state()
    driver core: Call sync_state() even if supplier has no consumers
    debugfs: remove return value of debugfs_create_regset32()

    Linus Torvalds
     
  • Pull tty/serial fixes from Greg KH:
    "Here are some small tty/serial fixes for 5.6-rc5

    Just some small serial driver fixes, and a vt core fixup, full details
    are:

    - vt fixes for issues found by syzbot

    - serdev fix for Apple boxes

    - fsl_lpuart serial driver fixes

    - MAINTAINER update for incorrect serial files

    - new device ids for 8250_exar driver

    - mvebu-uart fix

    All of these have been in linux-next with no reported issues"

    * tag 'tty-5.6-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
    tty: serial: fsl_lpuart: free IDs allocated by IDA
    Revert "tty: serial: fsl_lpuart: drop EARLYCON_DECLARE"
    serdev: Fix detection of UART devices on Apple machines.
    MAINTAINERS: Add missed files related to Synopsys DesignWare UART
    serial: 8250_exar: add support for ACCES cards
    tty:serial:mvebu-uart:fix a wrong return
    vt: selection, push sel_lock up
    vt: selection, push console lock down

    Linus Torvalds