[Bug 205465] [xfstests generic/475]: general protection fault: 0000 [#1] SMP KASAN PTI, RIP: 0010:iter_file_splice_write+0x63f/0xa90

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

 



https://bugzilla.kernel.org/show_bug.cgi?id=205465

--- Comment #4 from Zorro Lang (zlang@xxxxxxxxxx) ---
(In reply to Zorro Lang from comment #3)
> (In reply to Darrick J. Wong from comment #2)
> > Could you please post the source line translations of the relevant
> > functions?  I don't have your kernel build.
> 
> I already removed this testing kernel build, and merged lots of new patches.
> But good news is I still can reproduce this issue[1] (by g/461 this time).
> I'll build the new kernel and post the source line translations of the
> relevant functions later.
> 
> 
> [ 4693.175856] run fstests generic/461 at 2019-12-04 21:46:00 
> [ 4693.694096] XFS (sda5): Mounting V5 Filesystem 
> [ 4693.703963] XFS (sda5): Ending clean mount 
> [ 4693.710992] xfs filesystem being mounted at /mnt/xfstests/mnt2 supports
> timestamps until 2038 (0x7fffffff) 
> [ 4693.726744] XFS (sda5): User initiated shutdown received. Shutting down
> filesystem 
> [ 4693.740549] XFS (sda5): Unmounting Filesystem 
> [ 4693.895876] XFS (sda5): Mounting V5 Filesystem 
> [ 4693.905492] XFS (sda5): Ending clean mount 
> [ 4693.912655] xfs filesystem being mounted at /mnt/xfstests/mnt2 supports
> timestamps until 2038 (0x7fffffff) 
> [ 4702.015718] restraintd[1391]: *** Current Time: Wed Dec 04 21:46:11 2019
> Localwatchdog at: Fri Dec 06 20:32:11 2019 
> [ 4708.950866] XFS (sda5): User initiated shutdown received. Shutting down
> filesystem 
> [ 4708.972833] kasan: CONFIG_KASAN_INLINE enabled 
> [ 4708.977801] kasan: GPF could be caused by NULL-ptr deref or user memory
> access 
> [ 4708.985889] general protection fault: 0000 [#1] SMP KASAN PTI 
> [ 4708.992294] CPU: 0 PID: 19412 Comm: fsstress Not tainted 5.4.0+ #1 
> [ 4708.999190] Hardware name: Dell Inc. PowerEdge R630/0CNCJW, BIOS 1.2.10
> 03/09/2015 
> [ 4709.007655] RIP: 0010:iter_file_splice_write+0x668/0xa00 


# ./scripts/faddr2line vmlinux iter_file_splice_write+0x668
iter_file_splice_write+0x668/0xa00:
pipe_buf_release at include/linux/pipe_fs_i.h:187
(inlined by) iter_file_splice_write at fs/splice.c:773

    691 ssize_t
    692 iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
    693                           loff_t *ppos, size_t len, unsigned int flags)
    694 {
    695         struct splice_desc sd = {
    696                 .total_len = len,
    697                 .flags = flags,
    698                 .pos = *ppos,
    699                 .u.file = out,
    700         };
    701         int nbufs = pipe->max_usage;
    702         struct bio_vec *array = kcalloc(nbufs, sizeof(struct bio_vec),
    703                                         GFP_KERNEL);
    704         ssize_t ret;
    705 
    706         if (unlikely(!array))
    707                 return -ENOMEM;
    708 
    709         pipe_lock(pipe);
    710 
    711         splice_from_pipe_begin(&sd);
    712         while (sd.total_len) {
    713                 struct iov_iter from;
    714                 unsigned int head = pipe->head;
    715                 unsigned int tail = pipe->tail;
    716                 unsigned int mask = pipe->ring_size - 1;
    717                 size_t left;
    718                 int n;
    719 
    720                 ret = splice_from_pipe_next(pipe, &sd);
    721                 if (ret <= 0)
    722                         break;
    723 
    724                 if (unlikely(nbufs < pipe->max_usage)) {
    725                         kfree(array);
    726                         nbufs = pipe->max_usage;
    727                         array = kcalloc(nbufs, sizeof(struct bio_vec),
    728                                         GFP_KERNEL);
    729                         if (!array) {
    730                                 ret = -ENOMEM;
    731                                 break;
    732                         }
    733                 }
    734 
    735                 /* build the vector */
    736                 left = sd.total_len;
    737                 for (n = 0; !pipe_empty(head, tail) && left && n <
nbufs; tail++, n++) {
    738                         struct pipe_buffer *buf = &pipe->bufs[tail &
mask];
    739                         size_t this_len = buf->len;
    740 
    741                         if (this_len > left)
    742                                 this_len = left;
    743 
    744                         ret = pipe_buf_confirm(pipe, buf);
    745                         if (unlikely(ret)) {
    746                                 if (ret == -ENODATA)
    747                                         ret = 0;
    748                                 goto done;
    749                         }
    750 
    751                         array[n].bv_page = buf->page;
    752                         array[n].bv_len = this_len;
    753                         array[n].bv_offset = buf->offset;
    754                         left -= this_len;
    755                 }
    756 
    757                 iov_iter_bvec(&from, WRITE, array, n, sd.total_len -
left);
    758                 ret = vfs_iter_write(out, &from, &sd.pos, 0);
    759                 if (ret <= 0)
    760                         break;
    761 
    762                 sd.num_spliced += ret;
    763                 sd.total_len -= ret;
    764                 *ppos = sd.pos;
    765 
    766                 /* dismiss the fully eaten buffers, adjust the partial
one */
    767                 tail = pipe->tail;
    768                 while (ret) {
    769                         struct pipe_buffer *buf = &pipe->bufs[tail &
mask];
    770                         if (ret >= buf->len) {
    771                                 ret -= buf->len;
    772                                 buf->len = 0;
    773                                 pipe_buf_release(pipe, buf);
    774                                 tail++;
    775                                 pipe->tail = tail;
    776                                 if (pipe->files)
    777                                         sd.need_wakeup = true;
    778                         } else {
    779                                 buf->offset += ret;
    780                                 buf->len -= ret;
    781                                 ret = 0;
    782                         }
    783                 }
    784         }
    785 done:
    786         kfree(array);
    787         splice_from_pipe_end(pipe, &sd);
    788 
    789         pipe_unlock(pipe);
    790 
    791         if (sd.num_spliced)
    792                 ret = sd.num_spliced;
    793 
    794         return ret;
    795 }

And

    181 static inline void pipe_buf_release(struct pipe_inode_info *pipe,
    182                                     struct pipe_buffer *buf)
    183 {
    184         const struct pipe_buf_operations *ops = buf->ops;
    185 
    186         buf->ops = NULL;
    187         ops->release(pipe, buf);
    188 }



> [ 4709.013584] Code: 00 00 48 89 fa 48 c1 ea 03 80 3c 1a 00 0f 85 97 02 00
> 00 48 8b 56 10 48 c7 46 10 00 00 00 00 48 8d 7a 08 49 89 f8 49 c1 e8 03 <41>
> 80 3c 18 00 0f 85 96 02 00 00 48 8b 52 08 4c 89 e7 41 83 c6 01 
> [ 4709.034540] RSP: 0018:ffff8887ca8bf8d8 EFLAGS: 00010202 
> [ 4709.040373] RAX: 0000000000000000 RBX: dffffc0000000000 RCX:
> ffffffff93c2f280 
> [ 4709.048336] RDX: 0000000000000000 RSI: ffff8887fcd05000 RDI:
> 0000000000000008 
> [ 4709.056299] RBP: ffffed1102ae1ca7 R08: 0000000000000001 R09:
> fffff94000397e8f 
> [ 4709.064262] R10: fffff94000397e8e R11: ffffea0001cbf477 R12:
> ffff88881570e400 
> [ 4709.072225] R13: 0000000000003000 R14: 0000000000000010 R15:
> ffffed1102ae1c9f 
> [ 4709.080188] FS:  00007f89493b6b80(0000) GS:ffff888827a00000(0000)
> knlGS:0000000000000000 
> [ 4709.089217] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033 
> [ 4709.095628] CR2: 00007f89493b5000 CR3: 00000007ce162004 CR4:
> 00000000001606f0 
> [ 4709.103590] Call Trace: 
> [ 4709.106327]  ? __x64_sys_tee+0x220/0x220 
> [ 4709.110704]  ? generic_file_splice_read+0x4f5/0x6c0 
> [ 4709.116148]  ? add_to_pipe+0x370/0x370 
> [ 4709.120330]  ? _cond_resched+0x15/0x30 
> [ 4709.124518]  direct_splice_actor+0x107/0x1d0 
> [ 4709.129284]  splice_direct_to_actor+0x32d/0x8a0 
> [ 4709.134342]  ? wakeup_pipe_readers+0x80/0x80 
> [ 4709.139099]  ? do_splice_to+0x140/0x140 
> [ 4709.143381]  ? security_file_permission+0x53/0x2b0 
> [ 4709.148738]  do_splice_direct+0x158/0x250 
> [ 4709.153212]  ? splice_direct_to_actor+0x8a0/0x8a0 
> [ 4709.158464]  ? __sb_start_write+0x1c4/0x310 
> [ 4709.163125]  vfs_copy_file_range+0x39c/0xa40 
> [ 4709.167890]  ? __x64_sys_sendfile+0x1d0/0x1d0 
> [ 4709.172753]  ? lockdep_hardirqs_on+0x590/0x590 
> [ 4709.177706]  ? lock_downgrade+0x6d0/0x6d0 
> [ 4709.182180]  ? lock_acquire+0x15a/0x3d0 
> [ 4709.186459]  ? __might_fault+0xc4/0x1a0 
> [ 4709.190754]  __x64_sys_copy_file_range+0x1e8/0x460 
> [ 4709.196101]  ? __ia32_sys_copy_file_range+0x460/0x460 
> [ 4709.201749]  ? __audit_syscall_exit+0x796/0xab0 
> [ 4709.206810]  do_syscall_64+0x9f/0x4f0 
> [ 4709.210897]  entry_SYSCALL_64_after_hwframe+0x49/0xbe 
> [ 4709.216534] RIP: 0033:0x7f89488a96fd 
> [ 4709.220523] Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48
> 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48>
> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 5b 57 2c 00 f7 d8 64 89 01 48 
> [ 4709.241479] RSP: 002b:00007fff83524e98 EFLAGS: 00000246 ORIG_RAX:
> 0000000000000146 
> [ 4709.249928] RAX: ffffffffffffffda RBX: 00007fff83524ee8 RCX:
> 00007f89488a96fd 
> [ 4709.257891] RDX: 0000000000000004 RSI: 00007fff83524ee0 RDI:
> 0000000000000003 
> [ 4709.265854] RBP: 0000000000010fcc R08: 0000000000010fcc R09:
> 0000000000000000 
> [ 4709.273817] R10: 00007fff83524ee8 R11: 0000000000000246 R12:
> 00007fff83524ee0 
> [ 4709.281779] R13: 0000000000000003 R14: 0000000000000004 R15:
> 0000000000214da7 
> [ 4709.289746] Modules linked in: intel_rapl_msr intel_rapl_common iTCO_wdt
> iTCO_vendor_support sb_edac x86_pkg_temp_thermal intel_powerclamp dcdbas
> coretemp kvm_intel kvm irqbypass crct10dif_pclmul crc32_pclmul
> ghash_clmulni_intel intel_cstate intel_uncore intel_rapl_perf
> dax_pmem_compat device_dax nd_pmem dax_pmem_core pcspkr mei_me ipmi_ssif mei
> lpc_ich sg ipmi_si ipmi_devintf ipmi_msghandler rfkill sunrpc
> acpi_power_meter ip_tables xfs libcrc32c sd_mod mgag200 drm_kms_helper
> syscopyarea sysfillrect sysimgblt fb_sys_fops drm_vram_helper lpfc
> drm_ttm_helper ttm nvmet_fc nvmet drm nvme_fc crc32c_intel nvme_fabrics ahci
> igb libahci nvme_core libata scsi_transport_fc megaraid_sas dca i2c_algo_bit
> wmi 
> [ 4709.358683] ---[ end trace 2d7c5824fba18cef ]--- 
> [ 4709.432470] RIP: 0010:iter_file_splice_write+0x668/0xa00 
> [ 4709.438415] Code: 00 00 48 89 fa 48 c1 ea 03 80 3c 1a 00 0f 85 97 02 00
> 00 48 8b 56 10 48 c7 46 10 00 00 00 00 48 8d 7a 08 49 89 f8 49 c1 e8 03 <41>
> 80 3c 18 00 0f 85 96 02 00 00 48 8b 52 08 4c 89 e7 41 83 c6 01 
> [ 4709.459386] RSP: 0018:ffff8887ca8bf8d8 EFLAGS: 00010202 
> [ 4709.465230] RAX: 0000000000000000 RBX: dffffc0000000000 RCX:
> ffffffff93c2f280 
> [ 4709.473196] RDX: 0000000000000000 RSI: ffff8887fcd05000 RDI:
> 0000000000000008 
> [ 4709.481161] RBP: ffffed1102ae1ca7 R08: 0000000000000001 R09:
> fffff94000397e8f 
> [ 4709.489138] R10: fffff94000397e8e R11: ffffea0001cbf477 R12:
> ffff88881570e400 
> [ 4709.497112] R13: 0000000000003000 R14: 0000000000000010 R15:
> ffffed1102ae1c9f 
> [ 4709.505079] FS:  00007f89493b6b80(0000) GS:ffff888827a00000(0000)
> knlGS:0000000000000000 
> [ 4709.514110] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033 
> [ 4709.520534] CR2: 00007f89493b5000 CR3: 00000007ce162004 CR4:
> 00000000001606f0 
> [ 4715.584506] XFS (sda5): Unmounting Filesystem

-- 
You are receiving this mail because:
You are watching the assignee of the bug.



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux