Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb63ffb70 (LWP 23305)]
0x4bd7d265 in fread () from /lib/libc.so.6
(gdb) where
#0 0x4bd7d265 in fread () from /lib/libc.so.6
#1 0x08049a72 in getcallername() ()
#2 0x08049c21 in loggedfs_log(char const*, char const*, int, char const*, ...) ()
#3 0x0804a2ff in loggedFS_unlink(char const*) ()
#4 0x4c0b87c7 in fuse_fs_unlink () from /lib/libfuse.so.2
#5 0x4c0b88b1 in ?? () from /lib/libfuse.so.2
#6 0x4c0b8a1e in ?? () from /lib/libfuse.so.2
#7 0x4c0beeb7 in ?? () from /lib/libfuse.so.2
#8 0x4c0bdd6b in ?? () from /lib/libfuse.so.2
#9 0x4c0c1e88 in fuse_session_process () from /lib/libfuse.so.2
#10 0x4c0bccd5 in ?? () from /lib/libfuse.so.2
#11 0x4beb7a2e in start_thread () from /lib/libpthread.so.0
#12 0x4bdf634e in clone () from /lib/libc.so.6
Running on Fedora 15, 32 bit, built from source. Fuse 2.8.5.
I was assuming that the open file in getcallername failed, so trying with the following change:
diff -Naur loggedfs-0.5/src/loggedfs.cpp loggedfs/src/loggedfs.cpp
--- loggedfs-0.5/src/loggedfs.cpp 2008-09-03 19:58:57.000000000 +0000
+++ loggedfs/src/loggedfs.cpp 2011-09-03 16:54:54.261865952 +0000
@@ -114,14 +114,19 @@
sprintf(filename,"/proc/%d/cmdline",fuse_get_context()->pid);
FILE * proc=fopen(filename,"rt");
char cmdline[256]="";
- fread(cmdline,sizeof(cmdline),1,proc);
- fclose(proc);
+ if (proc != NULL) {
+ fread(cmdline,sizeof(cmdline),1,proc);
+ fclose(proc);
+ }
+ else {
+ sprintf(cmdline, "Failed to open %s: No caller name", filename);
+ }
return strdup(cmdline);
}
static void loggedfs_log(const char* path,const char* action,const int returncode,const char *format,...)
{
This shows some interesting:
unlink /export/home/dennis/Maildir/.Teknik.Glusterfs/.fuse_hidden0000021800000005 {SUCCESS} [ pid = 0 Failed to open /proc/0/cmdline: No caller name uid = 0 ]
No longer crashes.