From: Zubin Mithra <zubin.mit...@gmail.com> * file.c (sys_getdents): Add d_reclen check. (sys_getdents64): Add d_reclen check.
Signed-off-by: Zubin Mithra <zubin.mit...@gmail.com> --- file.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/file.c b/file.c index a92a7dc..d739df6 100644 --- a/file.c +++ b/file.c @@ -2041,7 +2041,8 @@ sys_readdir(struct tcb *tcp) int sys_getdents(struct tcb *tcp) { - int i, len, dents = 0; + unsigned int i; + int len, dents = 0; char *buf; if (entering(tcp)) { @@ -2076,6 +2077,10 @@ sys_getdents(struct tcb *tcp) i ? " " : "", d->d_ino, d->d_off); tprintf("d_reclen=%u, d_name=\"%s\", d_type=", d->d_reclen, d->d_name); + if (i + d->d_reclen >= len) { + tprints("}"); + break; + } printxval(direnttypes, buf[i + d->d_reclen - 1], "DT_???"); tprints("}"); } @@ -2098,7 +2103,8 @@ sys_getdents(struct tcb *tcp) int sys_getdents64(struct tcb *tcp) { - int i, len, dents = 0; + unsigned int i; + int len, dents = 0; char *buf; if (entering(tcp)) { @@ -2140,6 +2146,8 @@ sys_getdents64(struct tcb *tcp) tprints(", "); tprintf("d_reclen=%u, d_name=\"%s\"}", d->d_reclen, d->d_name); + if (i + d->d_reclen >= len) + break; } if (!d->d_reclen) { tprints("/* d_reclen == 0, problem here */"); -- 1.8.4 ------------------------------------------------------------------------------ Open source business process management suite built on Java and Eclipse Turn processes into business applications with Bonita BPM Community Edition Quickly connect people, data, and systems into organized workflows Winner of BOSSIE, CODIE, OW2 and Gartner awards http://p.sf.net/sfu/Bonitasoft _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel