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:
parent
1852709cd5
commit
5bb8bfea43
@ -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);
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user