Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

darling-dmg issue with Fedora 25 (findLeafNode() crashing when in debug mode) #45

Closed
jeanthom opened this issue Nov 24, 2017 · 1 comment
Assignees
Labels

Comments

@jeanthom
Copy link

Hi !

I've been trying to get darling-dmg working under Fedora 25. I currently run into two issue :

  • darling-dmg, when normally run (darling-dmg mydmg.dmg /mnt/mountpoint), ends abruplty
  • trying to sort things in debug mode, I ran darling-dmg in debug mode and got a SIGSEGV. I compiled it again with debug info and ran it in GDB :
(gdb) run testimg.dmg /tmp/atvos -d
Starting program: /home/jeanthomas/Applications/darling-dmg/darling-dmg testimg.dmg /tmp/atvos -d
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Skipping partition of type Apple_partition_map
Using partition #1 of type Apple_HFS
Everything looks OK, disk mounted
Detaching after fork from child process 27709.
FUSE library version: 2.9.7
nullpath_ok: 0
nopath: 0
utime_omit_ok: 0
unique: 1, opcode: INIT (26), nodeid: 0, insize: 56, pid: 0
INIT: 7.26
flags=0x001ffffb
max_readahead=0x00020000
   INIT: 7.19
   flags=0x00000011
   max_readahead=0x00020000
   max_write=0x00020000
   max_background=0
   congestion_threshold=0
   unique: 1, success, outsize: 40
unique: 2, opcode: ACCESS (34), nodeid: 1, insize: 48, pid: 1891
   unique: 2, error: -38 (Function not implemented), outsize: 16
unique: 3, opcode: LOOKUP (1), nodeid: 1, insize: 47, pid: 1891
LOOKUP /.Trash
getattr /.Trash
hfs_getattr(/.Trash)
File not found: /.Trash
   unique: 3, error: -2 (No such file or directory), outsize: 16
unique: 4, opcode: LOOKUP (1), nodeid: 1, insize: 52, pid: 1891
LOOKUP /.Trash-1000
getattr /.Trash-1000
hfs_getattr(/.Trash-1000)
File not found: /.Trash-1000
   unique: 4, error: -2 (No such file or directory), outsize: 16
unique: 5, opcode: GETATTR (3), nodeid: 1, insize: 56, pid: 27725
getattr /
hfs_getattr(/)
   unique: 5, success, outsize: 120
unique: 6, opcode: OPENDIR (27), nodeid: 1, insize: 48, pid: 27741
   unique: 6, success, outsize: 32
unique: 7, opcode: READDIR (28), nodeid: 1, insize: 80, pid: 27741
readdir[0] from 0
hfs_readdir(/)
   unique: 7, success, outsize: 888
unique: 8, opcode: LOOKUP (1), nodeid: 1, insize: 53, pid: 27741
LOOKUP /Applications
getattr /Applications
hfs_getattr(/Applications)
   NODEID: 2
   unique: 8, success, outsize: 144
unique: 9, opcode: LOOKUP (1), nodeid: 1, insize: 51, pid: 27741
LOOKUP /Desktop DB
getattr /Desktop DB
hfs_getattr(/Desktop DB)
   NODEID: 3
   unique: 9, success, outsize: 144
unique: 10, opcode: GETXATTR (22), nodeid: 3, insize: 68, pid: 27741
getxattr /Desktop DB security.capability 20
hfs_getxattr(/Desktop DB, security.capability)

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff795cc1b in HFSBTree::findLeafNode (this=0x0, indexKey=0x7fffffffd3e0, comp=0x7ffff7968cba <HFSAttributeBTree::cnidAttrComparator(HFSBTree::Key const*, HFSBTree::Key const*)>, 
    wildcard=false) at /home/jeanthomas/Applications/darling-dmg/src/HFSBTree.cpp:45
45		return traverseTree(be(m_header.rootNode), indexKey, comp, wildcard);
(gdb) bt
#0  0x00007ffff795cc1b in HFSBTree::findLeafNode (this=0x0, indexKey=0x7fffffffd3e0, comp=0x7ffff7968cba <HFSAttributeBTree::cnidAttrComparator(HFSBTree::Key const*, HFSBTree::Key const*)>, 
    wildcard=false) at /home/jeanthomas/Applications/darling-dmg/src/HFSBTree.cpp:45
#1  0x00007ffff7968a3a in HFSAttributeBTree::getattr (this=0x0, cnid=19192, attrName="security.capability", dataOut=std::vector of length 0, capacity 0)
    at /home/jeanthomas/Applications/darling-dmg/src/HFSAttributeBTree.cpp:63
#2  0x00007ffff797ac2e in HFSHighLevelVolume::getXattr (this=0x6ec450, path="/Desktop DB", name="security.capability")
    at /home/jeanthomas/Applications/darling-dmg/src/HFSHighLevelVolume.cpp:257
#3  0x000000000040ee67 in <lambda()>::operator()(void) const (__closure=0x7f8b20) at /home/jeanthomas/Applications/darling-dmg/src/main-fuse.cpp:276
#4  0x000000000040ffb3 in std::_Function_handler<int(), hfs_getxattr(char const*, char const*, char*, size_t)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...)
    at /usr/include/c++/6.4.1/functional:1717
#5  0x000000000041136c in std::function<int ()>::operator()() const (this=0x7fffffffd990) at /usr/include/c++/6.4.1/functional:2127
#6  0x000000000040e194 in handle_exceptions(std::function<int ()>) (func=...) at /home/jeanthomas/Applications/darling-dmg/src/main-fuse.cpp:141
#7  0x000000000040f061 in hfs_getxattr (path=0x6ace00 "/Desktop DB", name=0x797b60 "security.capability", value=0x77f9a0 "Hk\v\366\377\177", vlen=20)
    at /home/jeanthomas/Applications/darling-dmg/src/main-fuse.cpp:283
#8  0x00007ffff7ba9fee in common_getxattr () from /lib64/libfuse.so.2
#9  0x00007ffff7baa0d7 in fuse_lib_getxattr () from /lib64/libfuse.so.2
#10 0x00007ffff7bb04c1 in fuse_ll_process_buf () from /lib64/libfuse.so.2
#11 0x00007ffff7bac86c in fuse_session_loop () from /lib64/libfuse.so.2
#12 0x00007ffff7ba4c18 in fuse_loop () from /lib64/libfuse.so.2
#13 0x00007ffff7bb5247 in fuse_main_common () from /lib64/libfuse.so.2
#14 0x000000000040d978 in main (argc=4, argv=0x7fffffffe088) at /home/jeanthomas/Applications/darling-dmg/src/main-fuse.cpp:70
@LubosD LubosD self-assigned this Nov 24, 2017
@LubosD LubosD added the bug label Nov 24, 2017
@jeanthom
Copy link
Author

jeanthom commented Nov 24, 2017

I think I nailed the issue.

HFSHighLevelVolume::getXattr (this=0x64f120, path="/Desktop DB", name="security.capability") at /home/jeanthomas/Applications/darling-dmg/src/HFSHighLevelVolume.cpp:254
254			if (rv != 0)
(gdb) 
257			if (!m_volume->attributes()->getattr(ff.file.fileID, name, output))
(gdb) 

Program received signal SIGSEGV, Segmentation fault

Commenting if (!m_volume->attributes()->getattr(ff.file.fileID, name, output)) (HFSHighLevelVolume.cpp:254) solved my issue ! However that is definitively NOT a proper fix 😄

@LubosD LubosD closed this as completed in b49bd02 Nov 24, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants