Restrict fortified stdio test hook to glibc

This commit is contained in:
evgeny committed 2026-10-22 13:35:25 +02:00
1 parent 0d55c98add
commit 64519c41a7
1 file changed
+4
+4
View File
@@ -27,7 +27,9 @@ static pthread_barrier_t *post_barrier;
extern FILE *__real_fopen(const char*, const char*);
extern FILE *__real_fdopen(int, const char*);
extern size_t __real_fread(void*, size_t, size_t, FILE*);
#ifdef __GLIBC__
extern size_t __real___fread_chk(void*, size_t, size_t, size_t, FILE*);
#endif
extern size_t __real_fwrite(const void*, size_t, size_t, FILE*);
extern int __real_ferror(FILE*), __real_fflush(FILE*), __real_fclose(FILE*);
extern int __real_rename(const char*, const char*), __real_RAND_bytes(unsigned char*, int);
@@ -59,10 +61,12 @@ size_t __wrap_fread(void *data, size_t size, size_t count, FILE *file) {
return __real_fread(data, size, count, file);
}
/* _FORTIFY_SOURCE при -Og вызывает checked-вариант; ошибка должна внедряться и в sanitizer-сборке. */
#ifdef __GLIBC__
size_t __wrap___fread_chk(void *data, size_t capacity, size_t size, size_t count, FILE *file) {
if (file == input_file && inject(READ)) { read_failed = 1; return 0; }
return __real___fread_chk(data, capacity, size, count, file);
}
#endif
int __wrap_ferror(FILE *file) { return file == input_file && read_failed ? 1 : __real_ferror(file); }
size_t __wrap_fwrite(const void *data, size_t size, size_t count, FILE *file) {
return file == output_file && inject(WRITE) ? 0 : __real_fwrite(data, size, count, file);