From db753e2cfb2051ebf20dc089f87c5b1297cc2cff Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 19 Dec 2010 16:00:59 -0500 Subject: More accurate computatin of reclen in readdir_r. Alignment issue can increase the reclen limit. Make sure Linux 64-bit readdir_r also accounts for 64-bit alignment in getdents. --- sysdeps/unix/readdir_r.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'sysdeps/unix/readdir_r.c') diff --git a/sysdeps/unix/readdir_r.c b/sysdeps/unix/readdir_r.c index 9372791..e166174 100644 --- a/sysdeps/unix/readdir_r.c +++ b/sysdeps/unix/readdir_r.c @@ -117,7 +117,8 @@ __READDIR_R (DIR *dirp, DIRENT_TYPE *entry, DIRENT_TYPE **result) #ifdef GETDENTS_64BIT_ALIGNED /* The d_reclen value might include padding which is not part of the DIRENT_TYPE data structure. */ - reclen = MIN (reclen, sizeof (DIRENT_TYPE)); + reclen = MIN (reclen, + offsetof (DIRENT_TYPE, d_name) + sizeof (dp->d_name)); #endif *result = memcpy (entry, dp, reclen); #ifdef GETDENTS_64BIT_ALIGNED -- cgit v1.1