diff options
Diffstat (limited to 'newlib/libc/posix/readdir.c')
-rw-r--r-- | newlib/libc/posix/readdir.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/newlib/libc/posix/readdir.c b/newlib/libc/posix/readdir.c index d3187e603..da07d5c00 100644 --- a/newlib/libc/posix/readdir.c +++ b/newlib/libc/posix/readdir.c @@ -75,6 +75,12 @@ _DEFUN(readdir, (dirp), continue; } dp = (struct dirent *)(dirp->dd_buf + dirp->dd_loc); + if ((int)dp & 03) { /* bogus pointer check */ +#ifdef HAVE_DD_LOCK + __lock_release_recursive(dirp->dd_lock); +#endif + return NULL; + } if (dp->d_reclen <= 0 || dp->d_reclen > dirp->dd_len + 1 - dirp->dd_loc) { #ifdef HAVE_DD_LOCK |