Fragmentation metadata checks incomplete in process_bmbt_reclist()

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

 



Hi all, 
 
there seems to be a problem with correctly rejecting invalid metadata when using the frag command. This was tested with xfsprogs-dev, the 5.2.1 tarball, and 4.190 as in CentOS8).  
 
xfsprogs-dev/db/xfs_db -c frag ../xfsprogs_xfs_db_c_frag_convert_extent_invalid_read.xfsfile
 
Metadata CRC error detected at 0x42c836, xfs_agf block 0x1/0x200
xfs_db: cannot init perag data (74). Continuing anyway.
Metadata CRC error detected at 0x457316, xfs_agi block 0x2/0x200
Metadata CRC error detected at 0x45e2ed, xfs_inobt block 0x18/0x1000
Metadata corruption detected at 0x429885, xfs_inode block 0x1b00/0x8000
 
Program received signal SIGSEGV, Segmentation fault.
convert_extent (rp=rp@entry=0x1537000, op=op@entry=0x7ffd95f7e020, sp=sp@entry=0x7ffd95f7e028, cp=cp@entry=0x7ffd95f7e018, 
    fp=fp@entry=0x7ffd95f7e014) at ../include/xfs_arch.h:249
 249 return (uint64_t)get_unaligned_be32(p) << 32 |
 250                            get_unaligned_be32(p + 4);
 251 }

(gdb) bt
#0  convert_extent (rp=rp@entry=0x1537000, op=op@entry=0x7ffd95f7e020, sp=sp@entry=0x7ffd95f7e028, 
    cp=cp@entry=0x7ffd95f7e018, fp=fp@entry=0x7ffd95f7e014) at ../include/xfs_arch.h:249
#1  0x0000000000416211 in process_bmbt_reclist (rp=0x1537000, numrecs=<optimized out>, extmapp=extmapp@entry=0x7ffd95f7e068)
    at frag.c:229
#2  0x0000000000416685 in process_btinode (whichfork=<optimized out>, extmapp=<optimized out>, dip=<optimized out>)
    at ../include/xfs_arch.h:145
#3  process_fork (dip=dip@entry=0x150e800, whichfork=whichfork@entry=0) at frag.c:287
#4  0x0000000000416a81 in process_inode (agf=0x1506a00, dip=0x150e800, agino=6913) at frag.c:337
#5  scanfunc_ino (block=0x1508200, level=level@entry=0, agf=agf@entry=0x1506a00) at frag.c:513
#6  0x0000000000416cc5 in scan_sbtree (agf=agf@entry=0x1506a00, root=3, nlevels=1, btype=TYP_INOBT, 
    func=0x416750 <scanfunc_ino>) at frag.c:416
#7  0x0000000000416f2d in scan_ag (agno=0) at ../include/xfs_arch.h:158
#8  frag_f (argc=<optimized out>, argv=<optimized out>) at frag.c:155
#9  0x00000000004029e0 in main (argc=<optimized out>, argv=<optimized out>) at init.c:195
(gdb) disass $pc,$pc+10
Dump of assembler code from 0x405210 to 0x40521a:
=> 0x0000000000405210 <convert_extent+0>: mov    rax,QWORD PTR [rdi]
   0x0000000000405213 <convert_extent+3>: mov    rdi,QWORD PTR [rdi+0x8]
   0x0000000000405217 <convert_extent+7>: bswap  rax
End of assembler dump.
(gdb) info registers rdi
rdi            0x1537000           22245376
(gdb) x/4 $rdi
0x1537000: Cannot access memory at address 0x1537000
 
If required I can provide an image that triggers the issue via pm. 
 
Regards
Marc Schoenefeld





[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