]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
be more accepting of boundary values
authorAlan T. DeKok <aland@freeradius.org>
Wed, 31 Jan 2018 15:48:55 +0000 (10:48 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 31 Jan 2018 15:50:21 +0000 (10:50 -0500)
src/lib/io/message.c
src/lib/io/network.c
src/lib/io/ring_buffer.c

index 4cf477ada79b099af94b739042dbd70e7d9a4ae6..4818ec5275f419758b9e9a1a1d300b6946b6766c 100644 (file)
@@ -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;
index d62014a9c40733a5f83c66edfa1a8776f7cd94d1..4efc85e32a4b1316638dab5dd990dd619f5c9bcc 100644 (file)
@@ -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;
        }
index 5d890407a8555a11e1e19976b1732de52c870342..8e8648e6104ea194cc59b501b9cfa40d83e29e12 100644 (file)
@@ -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)");