1*a0ee8cc6SDag-Erling Smørgrav /* Placed in the public domain. */ 2*a0ee8cc6SDag-Erling Smørgrav 3*a0ee8cc6SDag-Erling Smørgrav /* 4*a0ee8cc6SDag-Erling Smørgrav * _FORTIFY_SOURCE includes a misguided check for FD_SET(n)/FD_ISSET(b) 5*a0ee8cc6SDag-Erling Smørgrav * where n > FD_SETSIZE. This breaks OpenSSH and other programs that 6*a0ee8cc6SDag-Erling Smørgrav * explicitly allocate fd_sets. To avoid this, we wrap FD_SET in a 7*a0ee8cc6SDag-Erling Smørgrav * function compiled without _FORTIFY_SOURCE. 8*a0ee8cc6SDag-Erling Smørgrav */ 9*a0ee8cc6SDag-Erling Smørgrav 10*a0ee8cc6SDag-Erling Smørgrav #include "config.h" 11*a0ee8cc6SDag-Erling Smørgrav 12*a0ee8cc6SDag-Erling Smørgrav #if defined(HAVE_FEATURES_H) && defined(_FORTIFY_SOURCE) 13*a0ee8cc6SDag-Erling Smørgrav # include <features.h> 14*a0ee8cc6SDag-Erling Smørgrav # if defined(__GNU_LIBRARY__) && defined(__GLIBC_PREREQ) 15*a0ee8cc6SDag-Erling Smørgrav # if __GLIBC_PREREQ(2, 15) && (_FORTIFY_SOURCE > 0) 16*a0ee8cc6SDag-Erling Smørgrav # undef _FORTIFY_SOURCE 17*a0ee8cc6SDag-Erling Smørgrav # undef __USE_FORTIFY_LEVEL 18*a0ee8cc6SDag-Erling Smørgrav # include <sys/socket.h> kludge_FD_SET(int n,fd_set * set)19*a0ee8cc6SDag-Erling Smørgravvoid kludge_FD_SET(int n, fd_set *set) { 20*a0ee8cc6SDag-Erling Smørgrav FD_SET(n, set); 21*a0ee8cc6SDag-Erling Smørgrav } kludge_FD_ISSET(int n,fd_set * set)22*a0ee8cc6SDag-Erling Smørgravint kludge_FD_ISSET(int n, fd_set *set) { 23*a0ee8cc6SDag-Erling Smørgrav return FD_ISSET(n, set); 24*a0ee8cc6SDag-Erling Smørgrav } 25*a0ee8cc6SDag-Erling Smørgrav # endif /* __GLIBC_PREREQ(2, 15) && (_FORTIFY_SOURCE > 0) */ 26*a0ee8cc6SDag-Erling Smørgrav # endif /* __GNU_LIBRARY__ && __GLIBC_PREREQ */ 27*a0ee8cc6SDag-Erling Smørgrav #endif /* HAVE_FEATURES_H && _FORTIFY_SOURCE */ 28*a0ee8cc6SDag-Erling Smørgrav 29