Hi,
On Fri, May 5, 2017 at 2:46 PM, David Sommerseth <dav...@openvpn.net> wrote:
> The provides plug-ins with a safe and secure way to santize sensitive
> information such as passwords, by re-using the secure_memzero()
> implementation in OpenVPN.
>
> Signed-off-by: David Sommerseth <dav...@openvpn.net>
> ---
> include/openvpn-plugin.h.in | 25 ++++++++++++++++++++++---
> src/openvpn/plugin.c | 3 ++-
> 2 files changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/include/openvpn-plugin.h.in b/include/openvpn-plugin.h.in
> index 0b303520..ec83f3a6 100644
> --- a/include/openvpn-plugin.h.in
> +++ b/include/openvpn-plugin.h.in
> @@ -199,7 +199,8 @@ struct openvpn_plugin_string_list
>
> /* openvpn_plugin_{open,func}_v3() related structs */
>
> -/* Defines version of the v3 plugin argument structs
> +/**
> + * Defines version of the v3 plugin argument structs
> *
> * Whenever one or more of these structs are modified, this constant
> * must be updated. A changelog should be appended in this comment
> @@ -218,8 +219,10 @@ struct openvpn_plugin_string_list
> * 3 Added ovpn_version, ovpn_version_major, ovpn_version_minor
> * and ovpn_version_patch to provide the runtime version of
> * OpenVPN to plug-ins.
> + *
> + * 4 Exported secure_memzero() as plugin_secure_memzero()
> */
> -#define OPENVPN_PLUGINv3_STRUCTVER 3
> +#define OPENVPN_PLUGINv3_STRUCTVER 4
>
> /**
> * Definitions needed for the plug-in callback functions.
> @@ -255,10 +258,19 @@ typedef void (*plugin_vlog_t)(openvpn_plugin_log_flags_t
> flags,
> const char *plugin_name,
> const char *format,
> va_list arglist) _ovpn_chk_fmt (3, 0);
> -
> #undef _ovpn_chk_fmt
>
> /**
> + * Export of secure_memzero() to be used inside plug-ins
> + *
> + * @param data Pointer to data to zeroise
> + * @param len Length of data, in bytes
> + *
> + */
> +typedef void (*plugin_secure_memzero_t)(void *data, size_t len);
> +
> +
> +/**
> * Used by the openvpn_plugin_open_v3() function to pass callback
> * function pointers to the plug-in.
> *
> @@ -267,11 +279,18 @@ typedef void (*plugin_vlog_t)(openvpn_plugin_log_flags_t
> flags,
> * Messages will only be displayed if the plugin_name
> parameter
> * is set. PLOG_DEBUG messages will only be displayed with
> plug-in
> * debug log verbosity (at the time of writing that's verb
> >= 7).
> + *
> + * plugin_secure_memzero
> + * : Use this function to securely wipe sensitive information
> from
> + * memory. This function is declared in a way that the
> compiler
> + * will not remove these function calls during the compiler
> + * optimization phase.
> */
> struct openvpn_plugin_callbacks
> {
> plugin_log_t plugin_log;
> plugin_vlog_t plugin_vlog;
> + plugin_secure_memzero_t plugin_secure_memzero;
> };
>
> /**
> diff --git a/src/openvpn/plugin.c b/src/openvpn/plugin.c
> index 05cbae3e..a652d528 100644
> --- a/src/openvpn/plugin.c
> +++ b/src/openvpn/plugin.c
> @@ -410,7 +410,8 @@ plugin_log(openvpn_plugin_log_flags_t flags, const
> char *name, const char *forma
>
> static struct openvpn_plugin_callbacks callbacks = {
> plugin_log,
> - plugin_vlog
> + plugin_vlog,
> + secure_memzero /* plugin_secure_memzero */
> };
This avoids code duplication in the plugin and works as expected.
ACK.
Selva
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel