diff options
Diffstat (limited to 'src/shared')
| -rw-r--r-- | src/shared/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/shared/sockhelper.c | 16 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/shared/CMakeLists.txt b/src/shared/CMakeLists.txt index a1bd49a..ce129af 100644 --- a/src/shared/CMakeLists.txt +++ b/src/shared/CMakeLists.txt @@ -11,6 +11,11 @@ find_package(Libatomic REQUIRED) # add compile option to get POLLRDHUP support for signals add_definitions(-D_GNU_SOURCE) +if(DNBD3_SERVER_AFL) + message(STATUS "Building dnbd3-shared with AFL support") + add_definitions(-DDNBD3_SERVER_AFL) +endif(DNBD3_SERVER_AFL) + set(DNBD3_SHARED_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/crc32.c ${CMAKE_CURRENT_SOURCE_DIR}/fdsignal.c ${CMAKE_CURRENT_SOURCE_DIR}/log.c diff --git a/src/shared/sockhelper.c b/src/shared/sockhelper.c index 5096320..b3f479a 100644 --- a/src/shared/sockhelper.c +++ b/src/shared/sockhelper.c @@ -13,6 +13,8 @@ #define MAXLISTEN 20 +#include <dnbd3/afl.h> + struct _poll_list { int count; struct pollfd entry[MAXLISTEN]; @@ -435,6 +437,18 @@ ssize_t sock_recv(const int sock, void *buffer, const size_t len) done += ret; } if ( done == 0 ) return ret; - return done; + return (ssize_t)done; } +bool sock_sendPadding(const int fd, size_t bytes) +{ + static char nullbytes[512] = {0}; + + while ( bytes >= sizeof(nullbytes) ) { + ssize_t ret = sock_sendAll( fd, nullbytes, sizeof(nullbytes), 2 ); + if ( ret <= 0 ) + return false; + bytes -= (uint32_t)ret; + } + return sock_sendAll( fd, nullbytes, bytes, 2 ) == (ssize_t)bytes; +}
\ No newline at end of file |
