if the getdents struct is corrupt, strace will loop forever --- strace/file.c +++ strace/file.c @@ -2414,6 +2414,10 @@ struct tcb *tcp; #endif /* SUNOS4 */ i += d->d_reclen; dents++; + if (!d->d_reclen) { + fprintf(stderr, "[error: d->d_reclen == 0] "); + break; + } } if (!abbrev(tcp)) tprintf("}"); @@ -2466,6 +2470,10 @@ struct tcb * tcp; } i += d->d_reclen; dents++; + if (!d->d_reclen) { + fprintf(stderr, "[error: d->d_reclen == 0] "); + break; + } } if (!abbrev(tcp)) tprintf("}");