@@ -3312,7 +3312,8 @@ INTERCEPTOR(__sanitizer_dirent *, readdir, void *dirp) {
33123312 // its metadata. See
33133313 // https://github.com/google/sanitizers/issues/321.
33143314 __sanitizer_dirent *res = REAL (readdir)(dirp);
3315- if (res) COMMON_INTERCEPTOR_WRITE_RANGE (ctx, res, res->d_reclen );
3315+ if (res)
3316+ COMMON_INTERCEPTOR_WRITE_RANGE (ctx, res, __sanitizer_dirsiz (res));
33163317 return res;
33173318}
33183319
@@ -3327,7 +3328,7 @@ INTERCEPTOR(int, readdir_r, void *dirp, __sanitizer_dirent *entry,
33273328 if (!res) {
33283329 COMMON_INTERCEPTOR_WRITE_RANGE (ctx, result, sizeof (*result));
33293330 if (*result)
3330- COMMON_INTERCEPTOR_WRITE_RANGE (ctx, *result, (*result)-> d_reclen );
3331+ COMMON_INTERCEPTOR_WRITE_RANGE (ctx, *result, __sanitizer_dirsiz (*result));
33313332 }
33323333 return res;
33333334}
@@ -3348,7 +3349,8 @@ INTERCEPTOR(__sanitizer_dirent64 *, readdir64, void *dirp) {
33483349 // its metadata. See
33493350 // https://github.com/google/sanitizers/issues/321.
33503351 __sanitizer_dirent64 *res = REAL (readdir64)(dirp);
3351- if (res) COMMON_INTERCEPTOR_WRITE_RANGE (ctx, res, res->d_reclen );
3352+ if (res)
3353+ COMMON_INTERCEPTOR_WRITE_RANGE (ctx, res, __sanitizer_dirsiz (res));
33523354 return res;
33533355}
33543356
@@ -3363,7 +3365,7 @@ INTERCEPTOR(int, readdir64_r, void *dirp, __sanitizer_dirent64 *entry,
33633365 if (!res) {
33643366 COMMON_INTERCEPTOR_WRITE_RANGE (ctx, result, sizeof (*result));
33653367 if (*result)
3366- COMMON_INTERCEPTOR_WRITE_RANGE (ctx, *result, (*result)-> d_reclen );
3368+ COMMON_INTERCEPTOR_WRITE_RANGE (ctx, *result, __sanitizer_dirsiz (*result));
33673369 }
33683370 return res;
33693371}
@@ -3935,17 +3937,17 @@ static THREADLOCAL scandir_compar_f scandir_compar;
39353937
39363938static int wrapped_scandir_filter (const struct __sanitizer_dirent *dir) {
39373939 COMMON_INTERCEPTOR_UNPOISON_PARAM (1 );
3938- COMMON_INTERCEPTOR_INITIALIZE_RANGE (dir, dir-> d_reclen );
3940+ COMMON_INTERCEPTOR_INITIALIZE_RANGE (dir, __sanitizer_dirsiz ( dir) );
39393941 return scandir_filter (dir);
39403942}
39413943
39423944static int wrapped_scandir_compar (const struct __sanitizer_dirent **a,
39433945 const struct __sanitizer_dirent **b) {
39443946 COMMON_INTERCEPTOR_UNPOISON_PARAM (2 );
39453947 COMMON_INTERCEPTOR_INITIALIZE_RANGE (a, sizeof (*a));
3946- COMMON_INTERCEPTOR_INITIALIZE_RANGE (*a, (*a)-> d_reclen );
3948+ COMMON_INTERCEPTOR_INITIALIZE_RANGE (*a, __sanitizer_dirsiz (*a));
39473949 COMMON_INTERCEPTOR_INITIALIZE_RANGE (b, sizeof (*b));
3948- COMMON_INTERCEPTOR_INITIALIZE_RANGE (*b, (*b)-> d_reclen );
3950+ COMMON_INTERCEPTOR_INITIALIZE_RANGE (*b, __sanitizer_dirsiz (*b));
39493951 return scandir_compar (a, b);
39503952}
39513953
@@ -3969,7 +3971,7 @@ INTERCEPTOR(int, scandir, char *dirp, __sanitizer_dirent ***namelist,
39693971 COMMON_INTERCEPTOR_WRITE_RANGE (ctx, *namelist, sizeof (**namelist) * res);
39703972 for (int i = 0 ; i < res; ++i)
39713973 COMMON_INTERCEPTOR_WRITE_RANGE (ctx, (*namelist)[i],
3972- ( *namelist)[i]-> d_reclen );
3974+ __sanitizer_dirsiz (( *namelist)[i]) );
39733975 }
39743976 return res;
39753977}
@@ -3988,17 +3990,17 @@ static THREADLOCAL scandir64_compar_f scandir64_compar;
39883990
39893991static int wrapped_scandir64_filter (const struct __sanitizer_dirent64 *dir) {
39903992 COMMON_INTERCEPTOR_UNPOISON_PARAM (1 );
3991- COMMON_INTERCEPTOR_INITIALIZE_RANGE (dir, dir-> d_reclen );
3993+ COMMON_INTERCEPTOR_INITIALIZE_RANGE (dir, __sanitizer_dirsiz ( dir) );
39923994 return scandir64_filter (dir);
39933995}
39943996
39953997static int wrapped_scandir64_compar (const struct __sanitizer_dirent64 **a,
39963998 const struct __sanitizer_dirent64 **b) {
39973999 COMMON_INTERCEPTOR_UNPOISON_PARAM (2 );
39984000 COMMON_INTERCEPTOR_INITIALIZE_RANGE (a, sizeof (*a));
3999- COMMON_INTERCEPTOR_INITIALIZE_RANGE (*a, (*a)-> d_reclen );
4001+ COMMON_INTERCEPTOR_INITIALIZE_RANGE (*a, __sanitizer_dirsiz (*a));
40004002 COMMON_INTERCEPTOR_INITIALIZE_RANGE (b, sizeof (*b));
4001- COMMON_INTERCEPTOR_INITIALIZE_RANGE (*b, (*b)-> d_reclen );
4003+ COMMON_INTERCEPTOR_INITIALIZE_RANGE (*b, __sanitizer_dirsiz (*b));
40024004 return scandir64_compar (a, b);
40034005}
40044006
@@ -4023,7 +4025,7 @@ INTERCEPTOR(int, scandir64, char *dirp, __sanitizer_dirent64 ***namelist,
40234025 COMMON_INTERCEPTOR_WRITE_RANGE (ctx, *namelist, sizeof (**namelist) * res);
40244026 for (int i = 0 ; i < res; ++i)
40254027 COMMON_INTERCEPTOR_WRITE_RANGE (ctx, (*namelist)[i],
4026- ( *namelist)[i]-> d_reclen );
4028+ __sanitizer_dirsiz (( *namelist)[i]) );
40274029 }
40284030 return res;
40294031}
0 commit comments