slab-out-of-bounds access in bio_integrity_alloc()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

It's been a while since I ran blktests. If I run it against Jens' for-next
branch (39916d4054e7 ("Merge branch 'for-5.15/io_uring' into for-next")) a
slab-out-of-bounds access complaint appears. Is anyone already looking into
this?

Thanks,

Bart.

root[18522]: run blktests srp/001
kernel: null_blk: module loaded
multipathd[18578]: --------start up--------
multipathd[18578]: read /etc/multipath.conf
kernel: rdma_rxe: loaded
multipathd[18578]: failed to increase buffer size
multipathd[18578]: path checkers start up
kernel: enp1s0 speed is unknown, defaulting to 1000
kernel: enp1s0 speed is unknown, defaulting to 1000
kernel: enp1s0 speed is unknown, defaulting to 1000
kernel: infiniband enp1s0_rxe: set active
kernel: enp1s0 speed is unknown, defaulting to 1000
kernel: infiniband enp1s0_rxe: added enp1s0
systemd[1]: Created slice Slice /system/rdma-load-modules.
systemd[1]: Starting Load RDMA modules from /etc/rdma/modules/rdma.conf...
kernel: scsi_debug:sdebug_add_store: dif_storep 524288 bytes @ ffffc900009fc000
kernel: scsi_debug:sdebug_driver_probe: scsi_debug: trim poll_queues to 0. poll_q/nr_hw = (0/1)
kernel: scsi_debug:sdebug_driver_probe: host protection DIF3 DIX3
kernel: scsi host6: scsi_debug: version 0190 [20200710]
                                      dev_size_mb=32, opts=0x0, submit_queues=1, statistics=0
kernel: scsi 6:0:0:0: Direct-Access     Linux    scsi_debug       0190 PQ: 0 ANSI: 7
kernel: sd 6:0:0:0: Power-on or device reset occurred
kernel: sd 6:0:0:0: Attached scsi generic sg1 type 0
kernel: sd 6:0:0:0: [sda] Enabling DIF Type 3 protection
kernel: sd 6:0:0:0: [sda] 65536 512-byte logical blocks: (33.6 MB/32.0 MiB)
kernel: Loading iSCSI transport class v2.0-870.
kernel: sd 6:0:0:0: [sda] Write Protect is off
kernel: sd 6:0:0:0: [sda] Mode Sense: 73 00 10 08
kernel: sd 6:0:0:0: [sda] Write cache: enabled, read cache: enabled, supports DPO and FUA
kernel: sd 6:0:0:0: [sda] Optimal transfer size 524288 bytes
systemd-modules-load[18598]: Inserted module 'ib_iser'
kernel: iscsi: registered transport (iser)
systemd-modules-load[18598]: Inserted module 'rdma_ucm'
systemd-modules-load[18598]: Failed to find module 'xprtrdma'
systemd-modules-load[18598]: Failed to find module 'svcrdma'
systemd[1]: Finished Load RDMA modules from /etc/rdma/modules/rdma.conf.
systemd[1]: Reached target RDMA Hardware.
kernel: sd 6:0:0:0: [sda] Enabling DIX T10-DIF-TYPE3-CRC protection
kernel: sd 6:0:0:0: [sda] DIF application tag size 6
kernel: sd 6:0:0:0: [sda] Attached SCSI disk
kernel: enp1s0 speed is unknown, defaulting to 1000
kernel: Rounding down aligned max_sectors from 4294967295 to 4294967288
kernel: ib_srpt:srpt_add_one: ib_srpt device = 000000001ddc3fdc
kernel: ib_srpt:srpt_use_srq: ib_srpt srpt_use_srq(enp1s0_rxe): use_srq = 0; ret = 0
kernel: ib_srpt:srpt_add_one: ib_srpt Target login info: id_ext=505400fffe867464,ioc_guid=505400fffe867464,pkey=ffff,service_id=505400fffe867464
kernel: enp1s0 speed is unknown, defaulting to 1000
kernel: ib_srpt:srpt_add_one: ib_srpt added enp1s0_rxe.
kernel: ==================================================================
kernel: BUG: KASAN: slab-out-of-bounds in bio_integrity_alloc+0x53/0x1c0
kernel: Read of size 8 at addr ffff8881a9dcf8c0 by task dd/18670
kernel:
kernel: CPU: 14 PID: 18670 Comm: dd Tainted: G            E     5.14.0-rc5-dbg+ #25
kernel: Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.14.0-2 04/01/2014
kernel: Call Trace:
kernel:  show_stack+0x52/0x58
kernel:  dump_stack_lvl+0x49/0x5e
kernel:  print_address_description.constprop.0+0x24/0x150
kernel:  ? bio_integrity_alloc+0x53/0x1c0
kernel:  kasan_report.cold+0x82/0xdb
kernel:  ? bio_integrity_alloc+0x53/0x1c0
kernel:  __asan_load8+0x69/0x90
kernel:  bio_integrity_alloc+0x53/0x1c0
kernel:  bio_integrity_prep+0x1a4/0x3e0
kernel:  ? __lock_release+0x142/0x270
kernel:  blk_mq_submit_bio+0x151/0xa80
kernel:  ? blk_queue_enter+0x62a/0x720
kernel:  ? blk_mq_try_issue_list_directly+0x4b0/0x4b0
kernel:  ? blk_queue_enter+0x642/0x720
kernel:  ? bio_release_pages+0x40/0x40
kernel:  submit_bio_noacct+0x236/0x310
kernel:  ? __submit_bio_noacct+0x5d0/0x5d0
kernel:  ? __this_cpu_preempt_check+0x13/0x20
kernel:  submit_bio+0x9c/0x210
kernel:  ? submit_bio_noacct+0x310/0x310
kernel:  ? lock_release+0xbd/0x1e0
kernel:  __blkdev_direct_IO_simple+0x307/0x4d0
kernel:  ? blkdev_bio_end_io+0x1e0/0x1e0
kernel:  ? ktime_get_coarse_real_ts64+0xf7/0x100
kernel:  ? __this_cpu_preempt_check+0x13/0x20
kernel:  ? __this_cpu_preempt_check+0x13/0x20
kernel:  ? blkdev_get_whole+0x130/0x130
kernel:  ? __kasan_check_read+0x11/0x20
kernel:  blkdev_direct_IO+0xa4/0xb0
kernel:  generic_file_direct_write+0x10d/0x2a0
kernel:  __generic_file_write_iter+0x120/0x2b0
kernel:  blkdev_write_iter+0x172/0x280
kernel:  ? block_ioctl+0xa0/0xa0
kernel:  ? __this_cpu_preempt_check+0x13/0x20
kernel:  ? iov_iter_init+0x70/0x90
kernel:  new_sync_write+0x287/0x390
kernel:  ? new_sync_read+0x380/0x380
kernel:  ? __fsnotify_parent+0x3a9/0x4c0
kernel:  ? rw_verify_area+0x9e/0x140
kernel:  vfs_write+0x3b1/0x4f0
kernel:  ksys_write+0xbd/0x150
kernel:  ? __ia32_sys_read+0x50/0x50
kernel:  ? __this_cpu_preempt_check+0x13/0x20
kernel:  ? lockdep_hardirqs_on+0x7e/0x100
kernel:  ? syscall_enter_from_user_mode+0x25/0x80
kernel:  __x64_sys_write+0x42/0x50
kernel:  do_syscall_64+0x35/0xb0
kernel:  entry_SYSCALL_64_after_hwframe+0x44/0xae
kernel: RIP: 0033:0x7f3cd07d1367
kernel: Code: 0d 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b7 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 48 89 54 24 18 48 89 74 24
kernel: RSP: 002b:00007ffe6dde70b8 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
kernel: RAX: ffffffffffffffda RBX: 0000000000100000 RCX: 00007f3cd07d1367
kernel: RDX: 0000000000100000 RSI: 00007f3cd0306000 RDI: 0000000000000001
kernel: RBP: 00007f3cd0306000 R08: 00007f3cd0306000 R09: 0000000000000000
kernel: R10: 00007f3cd06f5138 R11: 0000000000000246 R12: 0000000000000000
kernel: R13: 0000000000000000 R14: 0000000000000020 R15: 00007f3cd0306000
kernel:
kernel: Allocated by task 5444:
kernel:  kasan_save_stack+0x23/0x50
kernel:  __kasan_slab_alloc+0x68/0x80
kernel:  kmem_cache_alloc+0x144/0x380
kernel:  bdev_alloc_inode+0x1a/0x40
kernel:  alloc_inode+0x34/0x100
kernel:  new_inode+0x22/0x160
kernel:  bdev_alloc+0x22/0x160
kernel:  __alloc_disk_node+0x8a/0x2a0
kernel:  sd_probe+0xb3/0x6b0
kernel:  really_probe+0x32d/0x5f0
kernel:  __driver_probe_device+0x145/0x1e0
kernel:  driver_probe_device+0x4e/0x110
kernel:  __device_attach_driver+0xf6/0x160
kernel:  bus_for_each_drv+0xe6/0x130
kernel:  __device_attach_async_helper+0xf5/0x120
kernel:  async_run_entry_fn+0x63/0x240
kernel:  process_one_work+0x56a/0xab0
kernel:  worker_thread+0x2e7/0x700
kernel:  kthread+0x1f6/0x220
kernel:  ret_from_fork+0x1f/0x30
kernel:
kernel: The buggy address belongs to the object at ffff8881a9dcef00
                                     which belongs to the cache bdev_cache of size 2184
kernel: The buggy address is located 312 bytes to the right of
                                     2184-byte region [ffff8881a9dcef00, ffff8881a9dcf788)
kernel: The buggy address belongs to the page:
kernel: page:00000000c0f25dd8 refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff8881a9dcd340 pfn:0x1a9dc8
kernel: head:00000000c0f25dd8 order:3 compound_mapcount:0 compound_pincount:0
kernel: memcg:ffff888190302401
kernel: flags: 0x1000000000010200(slab|head|node=0|zone=2)
kernel: raw: 1000000000010200 0000000000000000 dead000000000122 ffff888100053340
kernel: raw: ffff8881a9dcd340 00000000800d0003 00000001ffffffff ffff888190302401
kernel: page dumped because: kasan: bad access detected
kernel:
kernel: Memory state around the buggy address:
kernel:  ffff8881a9dcf780: 00 fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
kernel:  ffff8881a9dcf800: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
kernel: >ffff8881a9dcf880: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
kernel:                                            ^
kernel:  ffff8881a9dcf900: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
kernel:  ffff8881a9dcf980: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
kernel: ==================================================================


(gdb) disas /s bio_integrity_alloc
Dump of assembler code for function bio_integrity_alloc:
block/bio-integrity.c:
51      {
   0xffffffff81833170 <+0>:     call   0xffffffff810a1630 <__fentry__>

52              struct bio_integrity_payload *bip;
53              struct bio_set *bs = bio->bi_pool;
   0xffffffff81833175 <+5>:     push   %rbp
   0xffffffff81833176 <+6>:     mov    %rsp,%rbp
   0xffffffff81833179 <+9>:     push   %r15
   0xffffffff8183317b <+11>:    mov    %esi,%r15d
   0xffffffff8183317e <+14>:    push   %r14
   0xffffffff81833180 <+16>:    push   %r13
   0xffffffff81833182 <+18>:    mov    %edx,%r13d
   0xffffffff81833185 <+21>:    push   %r12
   0xffffffff81833187 <+23>:    push   %rbx
   0xffffffff81833188 <+24>:    mov    %rdi,%rbx
   0xffffffff8183318b <+27>:    add    $0x78,%rdi

51      {
   0xffffffff8183318f <+31>:    sub    $0x18,%rsp

52              struct bio_integrity_payload *bip;
53              struct bio_set *bs = bio->bi_pool;
   0xffffffff81833193 <+35>:    call   0xffffffff814ccdf0 <__asan_load8>
   0xffffffff81833198 <+40>:    mov    0x78(%rbx),%r14

54              unsigned inline_vecs;
55
56              if (WARN_ON_ONCE(bio_has_crypt_ctx(bio)))
57                      return ERR_PTR(-EOPNOTSUPP);
58
59              if (!bs || !mempool_initialized(&bs->bio_integrity_pool)) {
   0xffffffff8183319c <+44>:    test   %r14,%r14
   0xffffffff8183319f <+47>:    je     0xffffffff8183327b <bio_integrity_alloc+267>

./include/linux/mempool.h:
30              return pool->elements != NULL;
   0xffffffff818331a5 <+53>:    lea    0x1d0(%r14),%rax
   0xffffffff818331ac <+60>:    lea    0x188(%r14),%r12
   0xffffffff818331b3 <+67>:    mov    %rax,%rdi
   0xffffffff818331b6 <+70>:    mov    %rax,-0x30(%rbp)
   0xffffffff818331ba <+74>:    mov    %r12,-0x38(%rbp)
   0xffffffff818331be <+78>:    call   0xffffffff814ccdf0 <__asan_load8>

block/bio-integrity.c:
59              if (!bs || !mempool_initialized(&bs->bio_integrity_pool)) {
   0xffffffff818331c3 <+83>:    cmpq   $0x0,0x1d0(%r14)
   0xffffffff818331cb <+91>:    je     0xffffffff8183327b <bio_integrity_alloc+267>

60                      bip = kmalloc(struct_size(bip, bip_inline_vecs, nr_vecs), gfp_mask);
61                      inline_vecs = nr_vecs;
62              } else {
63                      bip = mempool_alloc(&bs->bio_integrity_pool, gfp_mask);
   0xffffffff818331d1 <+97>:    mov    %r12,%rdi
   0xffffffff818331d4 <+100>:   mov    %r15d,%esi
   0xffffffff818331d7 <+103>:   call   0xffffffff813db3f0 <mempool_alloc>

64                      inline_vecs = BIO_INLINE_VECS;
65              }
66
67              if (unlikely(!bip))
   0xffffffff818331dc <+108>:   test   %rax,%rax

63                      bip = mempool_alloc(&bs->bio_integrity_pool, gfp_mask);
   0xffffffff818331df <+111>:   mov    %rax,%r12

64                      inline_vecs = BIO_INLINE_VECS;
65              }
66



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux