• Dmitry Monakhov's avatar
    bio-integrity: Do not allocate integrity context for bio w/o data · 3116a23b
    Dmitry Monakhov authored
    If bio has no data, such as ones from blkdev_issue_flush(),
    then we have nothing to protect.
    
    This patch prevent bugon like follows:
    
    kfree_debugcheck: out of range ptr ac1fa1d106742a5ah
    kernel BUG at mm/slab.c:2773!
    invalid opcode: 0000 [#1] SMP
    Modules linked in: bcache
    CPU: 0 PID: 4428 Comm: xfs_io Tainted: G        W       4.11.0-rc4-ext4-00041-g2ef0043-dirty #43
    Hardware name: Virtuozzo KVM, BIOS seabios-1.7.5-11.vz7.4 04/01/2014
    task: ffff880137786440 task.stack: ffffc90000ba8000
    RIP: 0010:kfree_debugcheck+0x25/0x2a
    RSP: 0018:ffffc90000babde0 EFLAGS: 00010082
    RAX: 0000000000000034 RBX: ac1fa1d106742a5a RCX: 0000000000000007
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff88013f3ccb40
    RBP: ffffc90000babde8 R08: 0000000000000000 R09: 0000000000000000
    R10: 00000000fcb76420 R11: 00000000725172ed R12: 0000000000000282
    R13: ffffffff8150e766 R14: ffff88013a145e00 R15: 0000000000000001
    FS:  00007fb09384bf40(0000) GS:ffff88013f200000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fd0172f9e40 CR3: 0000000137fa9000 CR4: 00000000000006f0
    Call Trace:
     kfree+0xc8/0x1b3
     bio_integrity_free+0xc3/0x16b
     bio_free+0x25/0x66
     bio_put+0x14/0x26
     blkdev_issue_flush+0x7a/0x85
     blkdev_fsync+0x35/0x42
     vfs_fsync_range+0x8e/0x9f
     vfs_fsync+0x1c/0x1e
     do_fsync+0x31/0x4a
     SyS_fsync+0x10/0x14
     entry_SYSCALL_64_fastpath+0x1f/0xc2
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
    Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: default avatarDmitry Monakhov <dmonakhov@openvz.org>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    3116a23b
bio-integrity.c 14.3 KB