From eee068778cb28ecf3c14e1bf843a95547d72c42d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 18:14:06 +0200 Subject: Adding upstream version 2.2.40. Signed-off-by: Daniel Baumann --- g13/g13-common.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 g13/g13-common.c (limited to 'g13/g13-common.c') diff --git a/g13/g13-common.c b/g13/g13-common.c new file mode 100644 index 0000000..35cb131 --- /dev/null +++ b/g13/g13-common.c @@ -0,0 +1,86 @@ +/* g13-common.c - Common code for G13 modules + * Copyright (C) 2009, 2015 Werner Koch + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + + +#include +#include +#include +#include +#include +#include +#include + +#include "g13-common.h" +#include +#include +#include "../common/i18n.h" +#include "../common/sysutils.h" + + + +/* Global variable to keep an error count. */ +int g13_errors_seen = 0; + + + +/* Note: This function is used by signal handlers!. */ +static void +emergency_cleanup (void) +{ + gcry_control (GCRYCTL_TERM_SECMEM); +} + + +/* Wrapper around gnupg_init_signals. */ +void +g13_init_signals (void) +{ + gnupg_init_signals (0, emergency_cleanup); +} + + +/* Install a regular exit handler to make real sure that the secure + memory gets wiped out. */ +void +g13_install_emergency_cleanup (void) +{ + if (atexit (emergency_cleanup)) + { + log_error ("atexit failed\n"); + g13_exit (2); + } +} + + +/* Use this function instead of exit() in all g13 modules. */ +void +g13_exit (int rc) +{ + gcry_control (GCRYCTL_UPDATE_RANDOM_SEED_FILE); + if (opt.debug & DBG_MEMSTAT_VALUE) + { + gcry_control( GCRYCTL_DUMP_MEMORY_STATS ); + gcry_control( GCRYCTL_DUMP_RANDOM_STATS ); + } + if (opt.debug) + gcry_control (GCRYCTL_DUMP_SECMEM_STATS ); + emergency_cleanup (); + rc = rc? rc : log_get_errorcount(0)? 2 : g13_errors_seen? 1 : 0; + exit (rc); +} -- cgit v1.2.3