summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/CMakeLists.txt19
-rw-r--r--src/server/altservers.c2
-rw-r--r--src/server/iscsi.c3
-rw-r--r--src/server/net.c18
-rw-r--r--src/server/rpc.c2
-rw-r--r--src/server/server.c6
-rw-r--r--src/shared/CMakeLists.txt5
-rw-r--r--src/shared/sockhelper.c2
8 files changed, 21 insertions, 36 deletions
diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt
index d53a778..34eb695 100644
--- a/src/server/CMakeLists.txt
+++ b/src/server/CMakeLists.txt
@@ -18,27 +18,8 @@ find_package(Libatomic REQUIRED)
add_definitions(-D_GNU_SOURCE)
if(DNBD3_SERVER_AFL)
- # check if DNBD3_RELEASE_HARDEN is disabled
- if(DNBD3_RELEASE_HARDEN)
- message(FATAL_ERROR "DNBD3_SERVER_AFL can only be enabled if DNBD3_RELEASE_HARDEN is disabled")
- endif(DNBD3_RELEASE_HARDEN)
-
- # build dnbd3-server with AFL support
message(STATUS "Building dnbd3-server with AFL support")
add_definitions(-DDNBD3_SERVER_AFL)
-
- # change compiler for dnbd3-server sources if AFL enabled
- include(CheckAFLCCompiler)
- check_afl_c_compiler(AFL_C_COMPILER AFL_C_COMPILER_NAME ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ID})
- if(AFL_C_COMPILER)
- message(STATUS "Check for working AFL C compiler: ${AFL_C_COMPILER} - done")
- # change C compiler to a corresponding AFL C compiler
- set(CMAKE_C_COMPILER "${AFL_C_COMPILER}")
- else(AFL_C_COMPILER)
- # no corresponding AFL C compiler found
- message(STATUS "Check for working AFL C compiler: ${AFL_C_COMPILER_NAME} - failed")
- message(FATAL_ERROR "No corresponding AFL C compiler ${AFL_C_COMPILER_NAME} was found for the C compiler ${CMAKE_C_COMPILER}!")
- endif(AFL_C_COMPILER)
endif(DNBD3_SERVER_AFL)
set(DNBD3_SERVER_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/altservers.c
diff --git a/src/server/altservers.c b/src/server/altservers.c
index 4413ca6..269fe28 100644
--- a/src/server/altservers.c
+++ b/src/server/altservers.c
@@ -14,6 +14,8 @@
#include <inttypes.h>
#include <jansson.h>
+#include <dnbd3/afl.h>
+
#define LOG(lvl, msg, ...) logadd(lvl, msg " (%s:%d)", __VA_ARGS__, PIMG(image))
#define LOG_GOTO(jumplabel, lvl, ...) do { LOG(lvl, __VA_ARGS__); goto jumplabel; } while (0);
#define ERROR_GOTO(jumplabel, ...) LOG_GOTO(jumplabel, LOG_ERROR, __VA_ARGS__)
diff --git a/src/server/iscsi.c b/src/server/iscsi.c
index 30cf312..60b738b 100644
--- a/src/server/iscsi.c
+++ b/src/server/iscsi.c
@@ -52,6 +52,8 @@
#define ISCSI_DEFAULT_DEVICE_ID 1
#define ISCSI_DEFAULT_QUEUE_DEPTH 16
+#include <dnbd3/afl.h>
+
/**
* @file iscsi.c
* @author Sebastian Vater
@@ -512,7 +514,6 @@ static int iscsi_task_xfer_scsi_data_in(iscsi_connection *conn, iscsi_task *task
res_cnt = (pos - xfer_len);
flags |= ISCSI_SCSI_DATA_IN_RESPONSE_FLAGS_RES_OVERFLOW;
}
- logadd( LOG_DEBUG1, "iscsi_task_xfer_scsi_data_in: pos=%lu, xfer_len=%lu, seg_len=%lu", pos, xfer_len, seg_len );
if ( xfer_len == 0UL )
return 0;
diff --git a/src/server/net.c b/src/server/net.c
index 7804100..f2f63b8 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -41,6 +41,8 @@
#include <stdatomic.h>
#include <signal.h>
+#include <dnbd3/afl.h>
+
static dnbd3_client_t *_clients[SERVER_MAX_CLIENTS];
static int _num_clients = 0;
static pthread_mutex_t _clients_lock;
@@ -56,9 +58,7 @@ static void uplinkCallback(void *data, uint64_t handle, uint64_t start, uint32_t
static inline bool recv_request_header(int sock, dnbd3_request_t *request)
{
ssize_t ret, fails = 0;
-#ifdef DNBD3_SERVER_AFL
- sock = 0;
-#endif
+
// Read request header from socket
while ( ( ret = recv( sock, request, sizeof(*request), MSG_WAITALL ) ) != sizeof(*request) ) {
if ( errno == EINTR && ++fails < 10 ) continue;
@@ -83,9 +83,6 @@ static inline bool recv_request_header(int sock, dnbd3_request_t *request)
static inline bool recv_request_payload(int sock, uint32_t size, serialized_buffer_t *payload)
{
-#ifdef DNBD3_SERVER_AFL
- sock = 0;
-#endif
if ( size == 0 ) {
logadd( LOG_ERROR, "Called recv_request_payload() to receive 0 bytes" );
return false;
@@ -94,8 +91,9 @@ static inline bool recv_request_payload(int sock, uint32_t size, serialized_buff
logadd( LOG_ERROR, "Called recv_request_payload() for more bytes than the passed buffer could hold!" );
return false;
}
- if ( sock_recv( sock, payload->buffer, size ) != (ssize_t)size ) {
- logadd( LOG_DEBUG1, "Could not receive request payload of length %d\n", (int)size );
+ const ssize_t ret = sock_recv( sock, payload->buffer, size );
+ if ( ret != (ssize_t)size ) {
+ logadd( LOG_DEBUG1, "Could not receive request payload of length %d (got %d, errno %d)\n", (int)size, (int)ret, errno );
return false;
}
// Prepare payload buffer for reading
@@ -179,11 +177,7 @@ void* net_handleNewConnection(void *clientPtr)
}
}
do {
-#ifdef DNBD3_SERVER_AFL
- const int ret = (int)recv( 0, &request, sizeof(request), MSG_WAITALL );
-#else
const int ret = (int)recv( client->sock, &request, sizeof(request), MSG_WAITALL );
-#endif
// It's expected to be a real dnbd3 client
// Check request for validity. This implicitly dictates that all HTTP requests are more than 24 bytes...
if ( ret != (int)sizeof(request) ) {
diff --git a/src/server/rpc.c b/src/server/rpc.c
index 119bbd5..528ae43 100644
--- a/src/server/rpc.c
+++ b/src/server/rpc.c
@@ -19,6 +19,8 @@
#include <fcntl.h>
#include <unistd.h>
+#include <dnbd3/afl.h>
+
#if JANSSON_VERSION_HEX < 0x020600
#define json_stringn_nocheck(a,b) json_string_nocheck(a)
#endif
diff --git a/src/server/server.c b/src/server/server.c
index b91e4ce..15a043d 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -314,10 +314,8 @@ int main(int argc, char *argv[])
exit( 3 );
}
{
- struct sockaddr_storage client;
- memset( &client, 0, sizeof client );
- client.ss_family = AF_INET;
- dnbd3_client_t *dnbd3_client = dnbd3_prepareClient( &client, 1 );
+ struct sockaddr_storage client = { .ss_family = AF_INET };
+ dnbd3_client_t *dnbd3_client = dnbd3_prepareClient( &client, 0 );
if ( dnbd3_client == NULL ) {
fprintf( stderr, "New client failed\n" );
exit( 1 );
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 0aad1a3..08d73fc 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];