xref: /freebsd/crypto/openssh/openbsd-compat/kludge-fd_set.c (revision d9b9dae1a954c5a277eada994d268f88eb5f3f20)
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ørgrav void 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ørgrav int 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