From 570d0c7751cd20bad2f29dcaa0de611b56634857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dag-Erling=20Sm=C3=B8rgrav?= Date: Sat, 24 May 2003 19:44:29 +0000 Subject: [PATCH] With one single exception (where the pointer is obviously being immediately overwritten), replace all use of free(3) with a macro that clears the pointer after freeing the memory it pointed to. Suggested by: Dmitry V. Levin git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@232 185d5e19-27fe-0310-9dcf-9bff6b9f3609 --- lib/openpam_borrow_cred.c | 6 +++--- lib/openpam_configure.c | 4 ++-- lib/openpam_dynamic.c | 8 ++++---- lib/openpam_free_data.c | 4 ++-- lib/openpam_impl.h | 4 +++- lib/openpam_load.c | 12 ++++++------ lib/openpam_log.c | 4 ++-- lib/openpam_set_option.c | 6 +++--- lib/openpam_ttyconv.c | 8 ++++---- lib/pam_end.c | 12 ++++++------ lib/pam_error.c | 6 ++++-- lib/pam_get_authtok.c | 10 +++++----- lib/pam_get_user.c | 4 ++-- lib/pam_getenvlist.c | 6 +++--- lib/pam_info.c | 6 ++++-- lib/pam_putenv.c | 4 ++-- lib/pam_set_data.c | 4 ++-- lib/pam_set_item.c | 4 ++-- lib/pam_setenv.c | 4 ++-- lib/pam_verror.c | 6 ++++-- lib/pam_vinfo.c | 6 ++++-- lib/pam_vprompt.c | 4 ++-- 22 files changed, 71 insertions(+), 61 deletions(-) diff --git a/lib/openpam_borrow_cred.c b/lib/openpam_borrow_cred.c index a320fdd..323ae3d 100644 --- a/lib/openpam_borrow_cred.c +++ b/lib/openpam_borrow_cred.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_borrow_cred.c#6 $ + * $P4: //depot/projects/openpam/lib/openpam_borrow_cred.c#7 $ */ #include @@ -77,13 +77,13 @@ openpam_borrow_cred(pam_handle_t *pamh, scred->egid = getegid(); r = getgroups(NGROUPS_MAX, scred->groups); if (r == -1) { - free(scred); + FREE(scred); RETURNC(PAM_SYSTEM_ERR); } scred->ngroups = r; r = pam_set_data(pamh, PAM_SAVED_CRED, scred, &openpam_free_data); if (r != PAM_SUCCESS) { - free(scred); + FREE(scred); RETURNC(r); } if (geteuid() == pwd->pw_uid) diff --git a/lib/openpam_configure.c b/lib/openpam_configure.c index 65844de..a6a36e3 100644 --- a/lib/openpam_configure.c +++ b/lib/openpam_configure.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_configure.c#6 $ + * $P4: //depot/projects/openpam/lib/openpam_configure.c#7 $ */ #include @@ -238,7 +238,7 @@ openpam_load_policy(pam_chain_t *policy[], strcat(filename, service); r = openpam_read_policy_file(policy, service, filename, PAM_D_STYLE); - free(filename); + FREE(filename); } else { r = openpam_read_policy_file(policy, service, *path, PAM_CONF_STYLE); diff --git a/lib/openpam_dynamic.c b/lib/openpam_dynamic.c index c077ed5..b566a35 100644 --- a/lib/openpam_dynamic.c +++ b/lib/openpam_dynamic.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_dynamic.c#9 $ + * $P4: //depot/projects/openpam/lib/openpam_dynamic.c#10 $ */ #include @@ -69,11 +69,11 @@ openpam_dynamic(const char *path) *strrchr(vpath, '.') = '\0'; if ((dlh = dlopen(vpath, RTLD_LAZY)) == NULL) { openpam_log(PAM_LOG_DEBUG, "%s: %s", vpath, dlerror()); - free(module); + FREE(module); return (NULL); } } - free(vpath); + FREE(vpath); if ((module->path = strdup(path)) == NULL) goto buf_err; module->dlh = dlh; @@ -88,7 +88,7 @@ openpam_dynamic(const char *path) openpam_log(PAM_LOG_ERROR, "%m"); if (dlh != NULL) dlclose(dlh); - free(module); + FREE(module); return (NULL); } diff --git a/lib/openpam_free_data.c b/lib/openpam_free_data.c index 03766b9..3626646 100644 --- a/lib/openpam_free_data.c +++ b/lib/openpam_free_data.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_free_data.c#3 $ + * $P4: //depot/projects/openpam/lib/openpam_free_data.c#4 $ */ #include @@ -54,7 +54,7 @@ openpam_free_data(pam_handle_t *pamh, void *data, int status) ENTER(); (void)pamh; (void)status; - free(data); + FREE(data); RETURNV(); } diff --git a/lib/openpam_impl.h b/lib/openpam_impl.h index 4ec9130..633f63a 100644 --- a/lib/openpam_impl.h +++ b/lib/openpam_impl.h @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_impl.h#22 $ + * $P4: //depot/projects/openpam/lib/openpam_impl.h#23 $ */ #ifndef _OPENPAM_IMPL_H_INCLUDED @@ -124,6 +124,8 @@ pam_module_t *openpam_static(const char *); #endif pam_module_t *openpam_dynamic(const char *); +#define FREE(p) do { free((p)); (p) = NULL; } while (0); + #ifdef DEBUG #define ENTER() openpam_log(PAM_LOG_DEBUG, "entering") #define ENTERI(i) do { \ diff --git a/lib/openpam_load.c b/lib/openpam_load.c index ef68309..911526a 100644 --- a/lib/openpam_load.c +++ b/lib/openpam_load.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_load.c#15 $ + * $P4: //depot/projects/openpam/lib/openpam_load.c#16 $ */ #include @@ -136,8 +136,8 @@ openpam_release_module(pam_module_t *module) if (module == modules) modules = module->next; openpam_log(PAM_LOG_DEBUG, "releasing %s", module->path); - free(module->path); - free(module); + FREE(module->path); + FREE(module); } @@ -154,10 +154,10 @@ openpam_destroy_chain(pam_chain_t *chain) openpam_destroy_chain(chain->next); chain->next = NULL; while (chain->optc--) - free(chain->optv[chain->optc]); - free(chain->optv); + FREE(chain->optv[chain->optc]); + FREE(chain->optv); openpam_release_module(chain->module); - free(chain); + FREE(chain); } /* diff --git a/lib/openpam_log.c b/lib/openpam_log.c index 5b74311..b152f21 100644 --- a/lib/openpam_log.c +++ b/lib/openpam_log.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_log.c#21 $ + * $P4: //depot/projects/openpam/lib/openpam_log.c#22 $ */ #include @@ -112,7 +112,7 @@ _openpam_log(int level, const char *func, const char *fmt, ...) va_start(ap, fmt); if (asprintf(&format, "in %s(): %s", func, fmt) > 0) { vsyslog(priority, format, ap); - free(format); + FREE(format); } else { vsyslog(priority, fmt, ap); } diff --git a/lib/openpam_set_option.c b/lib/openpam_set_option.c index 3a7bbce..b41c3f9 100644 --- a/lib/openpam_set_option.c +++ b/lib/openpam_set_option.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_set_option.c#9 $ + * $P4: //depot/projects/openpam/lib/openpam_set_option.c#10 $ */ #include @@ -89,7 +89,7 @@ openpam_set_option(pam_handle_t *pamh, /* add */ optv = realloc(cur->optv, sizeof(char *) * (cur->optc + 2)); if (optv == NULL) { - free(opt); + FREE(opt); RETURNC(PAM_BUF_ERR); } optv[i] = opt; @@ -98,7 +98,7 @@ openpam_set_option(pam_handle_t *pamh, ++cur->optc; } else { /* replace */ - free(cur->optv[i]); + FREE(cur->optv[i]); cur->optv[i] = opt; } RETURNC(PAM_SUCCESS); diff --git a/lib/openpam_ttyconv.c b/lib/openpam_ttyconv.c index 0b1057d..2c8dfd0 100644 --- a/lib/openpam_ttyconv.c +++ b/lib/openpam_ttyconv.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_ttyconv.c#17 $ + * $P4: //depot/projects/openpam/lib/openpam_ttyconv.c#18 $ */ #include @@ -179,8 +179,8 @@ openpam_ttyconv(int n, RETURNC(PAM_SUCCESS); fail: while (i) - free(resp[--i]); - free(*resp); + FREE(resp[--i]); + FREE(*resp); *resp = NULL; RETURNC(PAM_CONV_ERR); } @@ -199,7 +199,7 @@ openpam_ttyconv(int n, * of most text-based interactive programs. * * The =openpam_ttyconv function allows the application to specify a - * timeout for user input by setting the global variable + * timeout for user input by setting the global integer variable * :openpam_ttyconv_timeout to the length of the timeout in seconds. * * >openpam_nullconv diff --git a/lib/pam_end.c b/lib/pam_end.c index 5fb1fb6..605be06 100644 --- a/lib/pam_end.c +++ b/lib/pam_end.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_end.c#11 $ + * $P4: //depot/projects/openpam/lib/pam_end.c#12 $ */ #include @@ -63,14 +63,14 @@ pam_end(pam_handle_t *pamh, if (dp->cleanup) (dp->cleanup)(pamh, dp->data, status); pamh->module_data = dp->next; - free(dp->name); - free(dp); + FREE(dp->name); + FREE(dp); } /* clear environment */ while (pamh->env_count) - free(pamh->env[--pamh->env_count]); - free(pamh->env); + FREE(pamh->env[--pamh->env_count]); + FREE(pamh->env); /* clear chains */ openpam_clear_chains(pamh->chains); @@ -79,7 +79,7 @@ pam_end(pam_handle_t *pamh, for (i = 0; i < PAM_NUM_ITEMS; ++i) pam_set_item(pamh, i, NULL); - free(pamh); + FREE(pamh); RETURNC(PAM_SUCCESS); } diff --git a/lib/pam_error.c b/lib/pam_error.c index 4aac633..5a3f7a4 100644 --- a/lib/pam_error.c +++ b/lib/pam_error.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_error.c#8 $ + * $P4: //depot/projects/openpam/lib/pam_error.c#9 $ */ #include @@ -41,6 +41,8 @@ #include #include +#include "openpam_impl.h" + /* * OpenPAM extension * @@ -59,7 +61,7 @@ pam_error(pam_handle_t *pamh, va_start(ap, fmt); r = pam_vprompt(pamh, PAM_ERROR_MSG, &rsp, fmt, ap); va_end(ap); - free(rsp); /* ignore response */ + FREE(rsp); /* ignore response */ return (r); } diff --git a/lib/pam_get_authtok.c b/lib/pam_get_authtok.c index 6ce45a4..1d35d74 100644 --- a/lib/pam_get_authtok.c +++ b/lib/pam_get_authtok.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_get_authtok.c#22 $ + * $P4: //depot/projects/openpam/lib/pam_get_authtok.c#23 $ */ #include @@ -109,19 +109,19 @@ pam_get_authtok(pam_handle_t *pamh, if (twice) { r = pam_prompt(pamh, style, &resp2, "Retype %s", prompt); if (r != PAM_SUCCESS) { - free(resp); + FREE(resp); RETURNC(r); } if (strcmp(resp, resp2) != 0) { - free(resp); + FREE(resp); resp = NULL; } - free(resp2); + FREE(resp2); } if (resp == NULL) RETURNC(PAM_TRY_AGAIN); r = pam_set_item(pamh, item, resp); - free(resp); + FREE(resp); if (r != PAM_SUCCESS) RETURNC(r); r = pam_get_item(pamh, item, (const void **)authtok); diff --git a/lib/pam_get_user.c b/lib/pam_get_user.c index c10b877..e3380df 100644 --- a/lib/pam_get_user.c +++ b/lib/pam_get_user.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_get_user.c#15 $ + * $P4: //depot/projects/openpam/lib/pam_get_user.c#16 $ */ #include @@ -75,7 +75,7 @@ pam_get_user(pam_handle_t *pamh, if (r != PAM_SUCCESS) RETURNC(r); r = pam_set_item(pamh, PAM_USER, resp); - free(resp); + FREE(resp); if (r != PAM_SUCCESS) RETURNC(r); r = pam_get_item(pamh, PAM_USER, (const void **)user); diff --git a/lib/pam_getenvlist.c b/lib/pam_getenvlist.c index 7c63bce..05f6685 100644 --- a/lib/pam_getenvlist.c +++ b/lib/pam_getenvlist.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_getenvlist.c#10 $ + * $P4: //depot/projects/openpam/lib/pam_getenvlist.c#11 $ */ #include @@ -66,8 +66,8 @@ pam_getenvlist(pam_handle_t *pamh) for (i = 0; i < pamh->env_count; ++i) { if ((envlist[i] = strdup(pamh->env[i])) == NULL) { while (i) - free(envlist[--i]); - free(envlist); + FREE(envlist[--i]); + FREE(envlist); openpam_log(PAM_LOG_ERROR, "%s", pam_strerror(pamh, PAM_BUF_ERR)); RETURNP(NULL); diff --git a/lib/pam_info.c b/lib/pam_info.c index 6102e84..4fe0141 100644 --- a/lib/pam_info.c +++ b/lib/pam_info.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_info.c#7 $ + * $P4: //depot/projects/openpam/lib/pam_info.c#8 $ */ #include @@ -41,6 +41,8 @@ #include #include +#include "openpam_impl.h" + /* * OpenPAM extension * @@ -59,7 +61,7 @@ pam_info(pam_handle_t *pamh, va_start(ap, fmt); r = pam_vprompt(pamh, PAM_TEXT_INFO, &rsp, fmt, ap); va_end(ap); - free(rsp); /* ignore response */ + FREE(rsp); /* ignore response */ return (r); } diff --git a/lib/pam_putenv.c b/lib/pam_putenv.c index d3c220f..5ea53cc 100644 --- a/lib/pam_putenv.c +++ b/lib/pam_putenv.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_putenv.c#9 $ + * $P4: //depot/projects/openpam/lib/pam_putenv.c#10 $ */ #include @@ -67,7 +67,7 @@ pam_putenv(pam_handle_t *pamh, if ((i = openpam_findenv(pamh, namevalue, p - namevalue)) != -1) { if ((p = strdup(namevalue)) == NULL) RETURNC(PAM_BUF_ERR); - free(pamh->env[i]); + FREE(pamh->env[i]); pamh->env[i] = p; RETURNC(PAM_SUCCESS); } diff --git a/lib/pam_set_data.c b/lib/pam_set_data.c index 1b55d58..b5d985f 100644 --- a/lib/pam_set_data.c +++ b/lib/pam_set_data.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_set_data.c#13 $ + * $P4: //depot/projects/openpam/lib/pam_set_data.c#14 $ */ #include @@ -73,7 +73,7 @@ pam_set_data(pam_handle_t *pamh, if ((dp = malloc(sizeof *dp)) == NULL) RETURNC(PAM_BUF_ERR); if ((dp->name = strdup(module_data_name)) == NULL) { - free(dp); + FREE(dp); RETURNC(PAM_BUF_ERR); } dp->data = data; diff --git a/lib/pam_set_item.c b/lib/pam_set_item.c index 8cd9b5f..62f2edf 100644 --- a/lib/pam_set_item.c +++ b/lib/pam_set_item.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_set_item.c#19 $ + * $P4: //depot/projects/openpam/lib/pam_set_item.c#20 $ */ #include @@ -90,7 +90,7 @@ pam_set_item(pam_handle_t *pamh, } if (*slot != NULL) { memset(*slot, 0xd0, osize); - free(*slot); + FREE(*slot); } if (item != NULL) { if ((tmp = malloc(nsize)) == NULL) diff --git a/lib/pam_setenv.c b/lib/pam_setenv.c index f516a1b..1d47422 100644 --- a/lib/pam_setenv.c +++ b/lib/pam_setenv.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_setenv.c#8 $ + * $P4: //depot/projects/openpam/lib/pam_setenv.c#9 $ */ #include @@ -75,7 +75,7 @@ pam_setenv(pam_handle_t *pamh, RETURNC(PAM_BUF_ERR); sprintf(env, "%s=%s", name, value); r = pam_putenv(pamh, env); - free(env); + FREE(env); RETURNC(r); } diff --git a/lib/pam_verror.c b/lib/pam_verror.c index cfb6e0f..0e49d4b 100644 --- a/lib/pam_verror.c +++ b/lib/pam_verror.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_verror.c#6 $ + * $P4: //depot/projects/openpam/lib/pam_verror.c#7 $ */ #include @@ -40,6 +40,8 @@ #include #include +#include "openpam_impl.h" + /* * OpenPAM extension * @@ -55,7 +57,7 @@ pam_verror(pam_handle_t *pamh, int r; r = pam_vprompt(pamh, PAM_ERROR_MSG, &rsp, fmt, ap); - free(rsp); /* ignore response */ + FREE(rsp); /* ignore response */ return (r); } diff --git a/lib/pam_vinfo.c b/lib/pam_vinfo.c index 0c57ec5..82b5efc 100644 --- a/lib/pam_vinfo.c +++ b/lib/pam_vinfo.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_vinfo.c#6 $ + * $P4: //depot/projects/openpam/lib/pam_vinfo.c#7 $ */ #include @@ -40,6 +40,8 @@ #include #include +#include "openpam_impl.h" + /* * OpenPAM extension * @@ -55,7 +57,7 @@ pam_vinfo(pam_handle_t *pamh, int r; r = pam_vprompt(pamh, PAM_TEXT_INFO, &rsp, fmt, ap); - free(rsp); /* ignore response */ + FREE(rsp); /* ignore response */ return (r); } diff --git a/lib/pam_vprompt.c b/lib/pam_vprompt.c index 3275c4d..43cf509 100644 --- a/lib/pam_vprompt.c +++ b/lib/pam_vprompt.c @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_vprompt.c#10 $ + * $P4: //depot/projects/openpam/lib/pam_vprompt.c#11 $ */ #include @@ -77,7 +77,7 @@ pam_vprompt(pam_handle_t *pamh, rsp = NULL; r = (conv->conv)(1, &msgp, &rsp, conv->appdata_ptr); *resp = rsp == NULL ? NULL : rsp->resp; - free(rsp); + FREE(rsp); RETURNC(r); }