Always initialise PRNG.
authorbodea <bodea>
Tue, 14 Jun 2005 03:36:16 +0000 (03:36 +0000)
committerbodea <bodea>
Tue, 14 Jun 2005 03:36:16 +0000 (03:36 +0000)
Sanity check length of random_vector.

Changes
l2tpns.c
l2tpns.spec

diff --git a/Changes b/Changes
index e1b5edf..9c790f7 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,4 +1,4 @@
-* Sun Jun 12 2005 Brendan O'Dea <bod@optusnet.com.au> 2.1.1
+* Tue Jun 14 2005 Brendan O'Dea <bod@optusnet.com.au> 2.1.1
 - Add missing newline to backtrace macro.
 - Don't send CDN for each session when shutting down tunnels (this is
   implicit).
 - Add missing newline to backtrace macro.
 - Don't send CDN for each session when shutting down tunnels (this is
   implicit).
@@ -6,6 +6,8 @@
   still_busy().  Reject new tunnels/sessions while in the process of
   shutting down.
 - Clarify usage of shutdown signals in documentation.
   still_busy().  Reject new tunnels/sessions while in the process of
   shutting down.
 - Clarify usage of shutdown signals in documentation.
+- Always initialise PRNG.
+- Sanity check length of random_vector.
 
 * Sun Jun 5 2005 Brendan O'Dea <bod@optusnet.com.au> 2.1.0
 - Add IPv6 support from Jonathan McDowell.
 
 * Sun Jun 5 2005 Brendan O'Dea <bod@optusnet.com.au> 2.1.0
 - Add IPv6 support from Jonathan McDowell.
index 22187e1..bd255a3 100644 (file)
--- a/l2tpns.c
+++ b/l2tpns.c
@@ -4,7 +4,7 @@
 // Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
 // vim: sw=8 ts=8
 
 // Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
 // vim: sw=8 ts=8
 
-char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.109 2005/06/12 06:10:29 bodea Exp $";
+char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.110 2005/06/14 03:36:23 bodea Exp $";
 
 #include <arpa/inet.h>
 #include <assert.h>
 
 #include <arpa/inet.h>
 #include <assert.h>
@@ -326,7 +326,8 @@ static void initrandom(char *source)
                return;
 
        // close previous source, if any
                return;
 
        // close previous source, if any
-       if (rand_fd >= 0) close(rand_fd);
+       if (rand_fd >= 0)
+               close(rand_fd);
 
        rand_fd = -1;
 
 
        rand_fd = -1;
 
@@ -343,13 +344,6 @@ static void initrandom(char *source)
                                        path, strerror(errno));
                }
        }
                                        path, strerror(errno));
                }
        }
-
-       // no source: seed prng
-       {
-               unsigned seed = time_now ^ getpid();
-               LOG(4, 0, 0, "Seeding the pseudo random generator: %u\n", seed);
-               srand(seed);
-       }
 }
 
 // fill buffer with random data
 }
 
 // fill buffer with random data
@@ -370,7 +364,7 @@ void random_data(uint8_t *buf, int len)
                                        strerror(errno));
 
                                // fall back to rand()
                                        strerror(errno));
 
                                // fall back to rand()
-                               initrandom(0);
+                               initrandom(NULL);
                        }
 
                        n = 0;
                        }
 
                        n = 0;
@@ -2274,6 +2268,8 @@ void processudp(uint8_t * buf, int len, struct sockaddr_in *addr)
                                case 36:    // Random Vector
                                        LOG(4, s, t, "   Random Vector received.  Enabled AVP Hiding.\n");
                                        memset(session[s].random_vector, 0, sizeof(session[s].random_vector));
                                case 36:    // Random Vector
                                        LOG(4, s, t, "   Random Vector received.  Enabled AVP Hiding.\n");
                                        memset(session[s].random_vector, 0, sizeof(session[s].random_vector));
+                                       if (n > sizeof(session[s].random_vector))
+                                               n = sizeof(session[s].random_vector);
                                        memcpy(session[s].random_vector, b, n);
                                        session[s].random_vector_length = n;
                                        break;
                                        memcpy(session[s].random_vector, b, n);
                                        session[s].random_vector_length = n;
                                        break;
@@ -3929,6 +3925,13 @@ int main(int argc, char *argv[])
        initrad();
        initippool();
 
        initrad();
        initippool();
 
+       // seed prng
+       {
+               unsigned seed = time_now ^ getpid();
+               LOG(4, 0, 0, "Seeding the pseudo random generator: %u\n", seed);
+               srand(seed);
+       }
+
        signal(SIGHUP,  sighup_handler);
        signal(SIGCHLD, sigchild_handler);
        signal(SIGTERM, shutdown_handler);
        signal(SIGHUP,  sighup_handler);
        signal(SIGCHLD, sigchild_handler);
        signal(SIGTERM, shutdown_handler);
index 032f899..9902367 100644 (file)
@@ -43,5 +43,5 @@ rm -rf %{buildroot}
 %attr(644,root,root) /usr/share/man/man[58]/*
 
 %changelog
 %attr(644,root,root) /usr/share/man/man[58]/*
 
 %changelog
-* Sun Jun 12 2005 Brendan O'Dea <bod@optusnet.com.au> 2.1.1-1
+* Tue Jun 14 2005 Brendan O'Dea <bod@optusnet.com.au> 2.1.1-1
 - 2.1.1 release, see /usr/share/doc/l2tpns-2.1.1/Changes
 - 2.1.1 release, see /usr/share/doc/l2tpns-2.1.1/Changes