0
0
mirror of https://github.com/OpenVPN/openvpn.git synced 2024-09-20 12:02:28 +02:00

Fixed a couple issues in sample plugins auth-pam.c and down-root.c:

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
This commit is contained in:
james 2009-12-10 23:50:03 +00:00
parent 1852709cd5
commit 5bb8bfea43
2 changed files with 6 additions and 2 deletions

View File

@ -305,6 +305,8 @@ openvpn_plugin_open_v1 (unsigned int *type_mask, const char *argv[], const char
* Allocate our context * Allocate our context
*/ */
context = (struct auth_pam_context *) calloc (1, sizeof (struct auth_pam_context)); context = (struct auth_pam_context *) calloc (1, sizeof (struct auth_pam_context));
if (!context)
goto error;
context->foreground_fd = -1; 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; struct auth_pam_context *context = (struct auth_pam_context *) handle;
/* tell background process to exit */ /* tell background process to exit */
if (context->foreground_fd >= 0) if (context && context->foreground_fd >= 0)
{ {
send_control (context->foreground_fd, COMMAND_EXIT); send_control (context->foreground_fd, COMMAND_EXIT);
close (context->foreground_fd); close (context->foreground_fd);

View File

@ -274,6 +274,8 @@ openvpn_plugin_open_v1 (unsigned int *type_mask, const char *argv[], const char
* Allocate our context * Allocate our context
*/ */
context = (struct down_root_context *) calloc (1, sizeof (struct down_root_context)); context = (struct down_root_context *) calloc (1, sizeof (struct down_root_context));
if (!context)
goto error;
context->foreground_fd = -1; 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; 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 */ /* tell background process to exit */
send_control (context->foreground_fd, COMMAND_EXIT); send_control (context->foreground_fd, COMMAND_EXIT);