Browse code

Added SOCKET_SND_RCV_BUF_MAX constant (set to 1000000) to limit the maximum size passed to setsockopt SNDBUF/RCVBUF.

git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@3062 e7ae566f-a301-0410-adde-c780ea21d3b5

james authored on 2008/07/17 08:11:29
Showing 2 changed files
... ...
@@ -292,9 +292,12 @@ static void
292 292
 socket_set_sndbuf (int sd, int size)
293 293
 {
294 294
 #if defined(HAVE_SETSOCKOPT) && defined(SOL_SOCKET) && defined(SO_SNDBUF)
295
-  if (setsockopt (sd, SOL_SOCKET, SO_SNDBUF, (void *) &size, sizeof (size)) != 0)
295
+  if (size > 0 && size < SOCKET_SND_RCV_BUF_MAX)
296 296
     {
297
-      msg (M_WARN, "NOTE: setsockopt SO_SNDBUF=%d failed", size);
297
+      if (setsockopt (sd, SOL_SOCKET, SO_SNDBUF, (void *) &size, sizeof (size)) != 0)
298
+	{
299
+	  msg (M_WARN, "NOTE: setsockopt SO_SNDBUF=%d failed", size);
300
+	}
298 301
     }
299 302
 #endif
300 303
 }
... ...
@@ -318,10 +321,13 @@ static bool
318 318
 socket_set_rcvbuf (int sd, int size)
319 319
 {
320 320
 #if defined(HAVE_SETSOCKOPT) && defined(SOL_SOCKET) && defined(SO_RCVBUF)
321
-  if (setsockopt (sd, SOL_SOCKET, SO_RCVBUF, (void *) &size, sizeof (size)) != 0)
321
+  if (size > 0 && size < SOCKET_SND_RCV_BUF_MAX)
322 322
     {
323
-      msg (M_WARN, "NOTE: setsockopt SO_RCVBUF=%d failed", size);
324
-      return false;
323
+      if (setsockopt (sd, SOL_SOCKET, SO_RCVBUF, (void *) &size, sizeof (size)) != 0)
324
+	{
325
+	  msg (M_WARN, "NOTE: setsockopt SO_RCVBUF=%d failed", size);
326
+	  return false;
327
+	}
325 328
     }
326 329
   return true;
327 330
 #endif
... ...
@@ -42,6 +42,11 @@
42 42
 #define OPENVPN_PORT 1194
43 43
 
44 44
 /*
45
+ * Maximum size passed passed to setsockopt SNDBUF/RCVBUF
46
+ */
47
+#define SOCKET_SND_RCV_BUF_MAX 1000000
48
+
49
+/*
45 50
  * Number of seconds that "resolv-retry infinite"
46 51
  * represents.
47 52
  */