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

nil pointer dereference in pathfs.go:506 #101

Closed
rfjakob opened this issue Feb 27, 2016 · 1 comment
Closed

nil pointer dereference in pathfs.go:506 #101

rfjakob opened this issue Feb 27, 2016 · 1 comment

Comments

@rfjakob
Copy link
Contributor

rfjakob commented Feb 27, 2016

I managed to reproduce the nil pointer dereference that I mentioned in #99 with latest master.

loopback example output:

/tmp$ ~/src/github.com/hanwen/go-fuse/example/loopback/loopback b a
Mounted!
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x38 pc=0x4ce100]

goroutine 6062 [running]:
github.com/hanwen/go-fuse/fuse/pathfs.(*pathInode).Rename(0xc82055a280, 0xc820199aa0, 0x4, 0x7fe4b9f8f688, 0xc82055a680, 0xc820199ab0, 0x4, 0xc8200e1820, 0x0)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/pathfs/pathfs.go:506 +0x310
github.com/hanwen/go-fuse/fuse/nodefs.(*rawBridge).Rename(0xc82000a810, 0xc8200e1808, 0xc820199aa0, 0x4, 0xc820199ab0, 0x4, 0x0)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/nodefs/fsops.go:314 +0x156
github.com/hanwen/go-fuse/fuse.doRename(0xc820088000, 0xc8200e1680)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/opcode.go:346 +0xb0
github.com/hanwen/go-fuse/fuse.(*Server).handleRequest(0xc820088000, 0xc8200e1680)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:358 +0x305
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc820088000, 0x52e401)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:337 +0xe2
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:265 +0x60e

goroutine 1 [semacquire, 8 minutes]:
sync.runtime_Semacquire(0xc8200880e0)
    /usr/lib/golang/src/runtime/sema.go:43 +0x26
sync.(*WaitGroup).Wait(0xc8200880d4)
    /usr/lib/golang/src/sync/waitgroup.go:126 +0xb4
github.com/hanwen/go-fuse/fuse.(*Server).Serve(0xc820088000)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:307 +0x71
main.main()
    /home/jakob/src/github.com/hanwen/go-fuse/example/loopback/main.go:87 +0xfd6

goroutine 6041 [syscall]:
syscall.Syscall(0x0, 0x5, 0xc8204b6000, 0x11000, 0x4faf58, 0xc8204b4188, 0x22ffffffff)
    /usr/lib/golang/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x5, 0xc8204b6000, 0x11000, 0x11000, 0x4fb67f, 0x0, 0x0)
    /usr/lib/golang/src/syscall/zsyscall_linux_amd64.go:783 +0x5f
syscall.Read(0x5, 0xc8204b6000, 0x11000, 0x11000, 0xc820199630, 0x0, 0x0)
    /usr/lib/golang/src/syscall/syscall_unix.go:160 +0x4d
github.com/hanwen/go-fuse/fuse.(*Server).readRequest.func1(0x0, 0x0)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:240 +0x64
github.com/hanwen/go-fuse/fuse.handleEINTR(0xc8203dbf08, 0x0, 0x0)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:216 +0x2b
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc820088000, 0xc8200e0d01, 0xc8200e0d80, 0x0)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:238 +0x1fa
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc820088000, 0x52e401)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:318 +0x7a
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:265 +0x60e

goroutine 6053 [syscall]:
syscall.Syscall(0x0, 0x5, 0xc820520000, 0x11000, 0xc8203dfd38, 0xc82055d360, 0x52e400)
    /usr/lib/golang/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x5, 0xc820520000, 0x11000, 0x11000, 0x4fb6a8, 0x0, 0x0)
    /usr/lib/golang/src/syscall/zsyscall_linux_amd64.go:783 +0x5f
syscall.Read(0x5, 0xc820520000, 0x11000, 0x11000, 0xc820088078, 0x0, 0x0)
    /usr/lib/golang/src/syscall/syscall_unix.go:160 +0x4d
github.com/hanwen/go-fuse/fuse.(*Server).readRequest.func1(0x0, 0x0)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:240 +0x64
github.com/hanwen/go-fuse/fuse.handleEINTR(0xc8203dff08, 0x0, 0x0)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:216 +0x2b
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc820088000, 0xc8200e0601, 0xc8200e06c0, 0x0)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:238 +0x1fa
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc820088000, 0x52e401)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:318 +0x7a
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:265 +0x60e

goroutine 6025 [syscall]:
syscall.Syscall(0x0, 0x5, 0xc820462000, 0x11000, 0x2, 0xc820019110, 0x4b26cc)
    /usr/lib/golang/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.read(0x5, 0xc820462000, 0x11000, 0x11000, 0x4b79b0, 0x0, 0x0)
    /usr/lib/golang/src/syscall/zsyscall_linux_amd64.go:783 +0x5f
syscall.Read(0x5, 0xc820462000, 0x11000, 0x11000, 0xc820088078, 0x0, 0x0)
    /usr/lib/golang/src/syscall/syscall_unix.go:160 +0x4d
github.com/hanwen/go-fuse/fuse.(*Server).readRequest.func1(0x0, 0x0)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:240 +0x64
github.com/hanwen/go-fuse/fuse.handleEINTR(0xc8204d3f08, 0x0, 0x0)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:216 +0x2b
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc820088000, 0xc8200e1d01, 0xc8200e1d40, 0x7fe400000000)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:238 +0x1fa
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc820088000, 0x52e401)
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:318 +0x7a
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
    /home/jakob/src/github.com/hanwen/go-fuse/fuse/server.go:265 +0x60e

Test loop output:

( set -e; while true; do ~/src/fuse-xfstests/ltp/fsstress -p 1 -z -f rmdir=10 -f link=10 -f creat=10 -f mkdir=10 -f rename=30 -f stat=30 -f unlink=30 -f truncate=20 -m 8 -n 1000 -d /tmp/b; rm -R /tmp/b/*; sleep 1; done )
seed = 1457036032
seed = 1457193343
[400 lines more...]
seed = 1456698305
seed = 1456838337
rm: cannot remove ‘/tmp/b/*’: Transport endpoint is not connected
@rfjakob
Copy link
Contributor Author

rfjakob commented Apr 24, 2016

Fixed through #106 patchset.

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

No branches or pull requests

1 participant