From: Alan T. DeKok Date: Wed, 31 Jan 2018 15:48:55 +0000 (-0500) Subject: be more accepting of boundary values X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=195a55232ccfb23f61d98433db1aa4565f29c7ec;p=thirdparty%2Ffreeradius-server.git be more accepting of boundary values --- diff --git a/src/lib/io/message.c b/src/lib/io/message.c index 4cf477ada79..4818ec5275f 100644 --- a/src/lib/io/message.c +++ b/src/lib/io/message.c @@ -151,7 +151,6 @@ fr_message_set_t *fr_message_set_create(TALLOC_CTX *ctx, int num_messages, size_ ms = talloc_zero(ctx, fr_message_set_t); if (!ms) { - nomem: fr_strerror_printf("Failed allocating memory"); return NULL; } @@ -163,14 +162,14 @@ fr_message_set_t *fr_message_set_create(TALLOC_CTX *ctx, int num_messages, size_ ms->rb_array[0] = fr_ring_buffer_create(ms, ring_buffer_size); if (!ms->rb_array[0]) { talloc_free(ms); - goto nomem; + return NULL; } ms->rb_max = 0; ms->mr_array[0] = fr_ring_buffer_create(ms, num_messages * message_size); if (!ms->mr_array[0]) { talloc_free(ms); - goto nomem; + return NULL; } ms->max_allocation = ring_buffer_size / 2; diff --git a/src/lib/io/network.c b/src/lib/io/network.c index d62014a9c40..4efc85e32a4 100644 --- a/src/lib/io/network.c +++ b/src/lib/io/network.c @@ -731,6 +731,7 @@ static void fr_network_socket_callback(void *ctx, void const *data, size_t data_ */ static void fr_network_directory_callback(void *ctx, void const *data, size_t data_size, UNUSED fr_time_t now) { + int num_messages; fr_network_t *nr = ctx; fr_network_socket_t *s; fr_app_io_t const *app_io; @@ -752,11 +753,14 @@ static void fr_network_directory_callback(void *ctx, void const *data, size_t da /* * Allocate the ring buffer for messages and packets. */ - s->ms = fr_message_set_create(s, s->listen->num_messages, + num_messages = s->listen->num_messages; + if (num_messages < 8) num_messages = 8; + + s->ms = fr_message_set_create(s, num_messages, sizeof(fr_channel_data_t), s->listen->default_message_size * s->listen->num_messages); if (!s->ms) { - fr_log(nr->log, L_ERR, "Failed creating message buffers for directory IO. Closing socket."); + fr_log(nr->log, L_ERR, "Failed creating message buffers for directory IO: %s", fr_strerror()); talloc_free(s); return; } diff --git a/src/lib/io/ring_buffer.c b/src/lib/io/ring_buffer.c index 5d890407a85..8e8648e6104 100644 --- a/src/lib/io/ring_buffer.c +++ b/src/lib/io/ring_buffer.c @@ -72,10 +72,7 @@ fr_ring_buffer_t *fr_ring_buffer_create(TALLOC_CTX *ctx, size_t size) return NULL; } - if (size < 1024) { - fr_strerror_printf("Ring buffer size must be at least 1024"); - return NULL; - } + if (size < 1024) size = 1024; if (size > (1 << 30)) { fr_strerror_printf("Ring buffer size must be no more than (1 << 30)");