]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Fixed a couple issues in sample plugins auth-pam.c and down-root.c:
authorjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Thu, 10 Dec 2009 23:50:03 +0000 (23:50 +0000)
committerjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>
Thu, 10 Dec 2009 23:50:03 +0000 (23:50 +0000)
1. Fail gracefully rather than segfault if calloc returns NULL.

2. The openvpn_plugin_abort_v1 function can potentially be called
   with handle == NULL.  Add code to detect this case, and if
   so, avoid dereferencing pointers derived from handle.

(Thanks to David Sommerseth for finding this bug).

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

plugin/auth-pam/auth-pam.c
plugin/down-root/down-root.c

index 52c62db4220405b57983ef7e27b2d13d04959c62..b029f85cb4882b0c5696de49d464ad44300cf174 100644 (file)
@@ -305,6 +305,8 @@ openvpn_plugin_open_v1 (unsigned int *type_mask, const char *argv[], const char
    * Allocate our context
    */
   context = (struct auth_pam_context *) calloc (1, sizeof (struct auth_pam_context));
+  if (!context)
+    goto error;
   context->foreground_fd = -1;
 
   /*
@@ -492,7 +494,7 @@ openvpn_plugin_abort_v1 (openvpn_plugin_handle_t handle)
   struct auth_pam_context *context = (struct auth_pam_context *) handle;
 
   /* tell background process to exit */
-  if (context->foreground_fd >= 0)
+  if (context && context->foreground_fd >= 0)
     {
       send_control (context->foreground_fd, COMMAND_EXIT);
       close (context->foreground_fd);
index 5e0c002eb324c9e468570be98b174241b5ea6d47..7cf8f181a0099c6a0e4342985ec6e22efe75a06c 100644 (file)
@@ -274,6 +274,8 @@ openvpn_plugin_open_v1 (unsigned int *type_mask, const char *argv[], const char
    * Allocate our context
    */
   context = (struct down_root_context *) calloc (1, sizeof (struct down_root_context));
+  if (!context)
+    goto error;
   context->foreground_fd = -1;
 
   /*
@@ -434,7 +436,7 @@ openvpn_plugin_abort_v1 (openvpn_plugin_handle_t handle)
 {
   struct down_root_context *context = (struct down_root_context *) handle;
 
-  if (context->foreground_fd >= 0)
+  if (context && context->foreground_fd >= 0)
     {
       /* tell background process to exit */
       send_control (context->foreground_fd, COMMAND_EXIT);