diff options
author | Stefan Walter <stefw@src.gnome.org> | 2007-06-25 17:07:41 +0000 |
---|---|---|
committer | Stefan Walter <stefw@src.gnome.org> | 2007-06-25 17:07:41 +0000 |
commit | 920d3e8a4081b9717864916448551075f09a1d68 (patch) | |
tree | 04f50d0585dccebee0766dc10f308aa33d40567f | |
parent | f820acea09de70110d27fdbdbf2d69b3834f3877 (diff) |
Use gnome_keyring_free_password() to zero out passwords even when not
* daemon/gnome-keyring-daemon-ops.c:
* keyrings/gkr-keyring-item.c:
* keyrings/gkr-keyring.c:
* library/gnome-keyring-proto.c:
* library/gnome-keyring-utils.c:
* library/gnome-keyring.c:
* library/gnome-keyring.h:
* ui/gkr-ask-request.c: Use gnome_keyring_free_password() to zero out
passwords even when not using nonpageable memory.
svn path=/trunk/; revision=655
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | daemon/gnome-keyring-daemon-ops.c | 26 | ||||
-rw-r--r-- | keyrings/gkr-keyring-item.c | 2 | ||||
-rw-r--r-- | keyrings/gkr-keyring.c | 8 | ||||
-rw-r--r-- | library/gnome-keyring-memory.c | 6 | ||||
-rw-r--r-- | library/gnome-keyring-proto.c | 8 | ||||
-rw-r--r-- | library/gnome-keyring-utils.c | 28 | ||||
-rw-r--r-- | library/gnome-keyring.c | 4 | ||||
-rw-r--r-- | library/gnome-keyring.h | 2 | ||||
-rw-r--r-- | ui/gkr-ask-request.c | 8 |
10 files changed, 69 insertions, 38 deletions
@@ -1,5 +1,20 @@ 2007-06-25 Stef Walter <stef@memberwebs.com> + * daemon/gnome-keyring-daemon-ops.c: + * keyrings/gkr-keyring-item.c: + * keyrings/gkr-keyring.c: + * library/gnome-keyring-proto.c: + * library/gnome-keyring-utils.c: + * library/gnome-keyring.c: + * library/gnome-keyring.h: + * ui/gkr-ask-request.c: Use gnome_keyring_free_password() to zero out + passwords even when not using nonpageable memory. + * library/gnome-keyring-memory.c: Make warnings about memory be simple + messages, so that they don't abort the program even when running a + beta version of GNOME. Fixes bug #450953 + +2007-06-25 Stef Walter <stef@memberwebs.com> + * configure.in: * common/Makefile.am: * common/gkr-async.c: (from cryptoki branch) diff --git a/daemon/gnome-keyring-daemon-ops.c b/daemon/gnome-keyring-daemon-ops.c index d6f4c177..0bb1c45d 100644 --- a/daemon/gnome-keyring-daemon-ops.c +++ b/daemon/gnome-keyring-daemon-ops.c @@ -772,7 +772,7 @@ unlock_keyring (GkrKeyring *keyring, const char *password) keyring->password = gnome_keyring_memory_strdup (password); if (!gkr_keyring_update_from_disk (keyring, TRUE)) { - gnome_keyring_memory_free (keyring->password); + gnome_keyring_free_password (keyring->password); keyring->password = NULL; } if (keyring->locked) { @@ -797,7 +797,7 @@ lock_keyring (GkrKeyring *keyring) } g_assert (keyring->password != NULL); - gnome_keyring_memory_free (keyring->password); + gnome_keyring_free_password (keyring->password); keyring->password = NULL; if (!gkr_keyring_update_from_disk (keyring, TRUE)) { /* Failed to re-read, remove the keyring */ @@ -1025,7 +1025,7 @@ op_create_keyring_collect (GkrBuffer *packet, GkrKeyringRequest *req) out: g_free (keyring_name); - gnome_keyring_memory_free (password); + gnome_keyring_free_password (password); return TRUE; } @@ -1087,7 +1087,7 @@ op_create_keyring_execute (GkrBuffer *packet, out: g_free (keyring_name); - gnome_keyring_memory_free (password); + gnome_keyring_free_password (password); return TRUE; } @@ -1123,7 +1123,7 @@ op_unlock_keyring_execute (GkrBuffer *packet, } g_free (keyring_name); - gnome_keyring_memory_free (password); + gnome_keyring_free_password (password); return TRUE; } @@ -1199,8 +1199,8 @@ op_change_keyring_password_collect (GkrBuffer *packet, GkrKeyringRequest *req) } g_free (keyring_name); - gnome_keyring_memory_free (original); - gnome_keyring_memory_free (password); + gnome_keyring_free_password (original); + gnome_keyring_free_password (password); return TRUE; } @@ -1271,8 +1271,8 @@ op_change_keyring_password_execute (GkrBuffer *packet, out: g_free (keyring_name); - gnome_keyring_memory_free (original); - gnome_keyring_memory_free (password); + gnome_keyring_free_password (original); + gnome_keyring_free_password (password); return TRUE; } @@ -1505,7 +1505,7 @@ op_create_item_execute (GkrBuffer *packet, g_free (item->display_name); item->display_name = g_strdup (display_name); - gnome_keyring_memory_free (item->secret); + gnome_keyring_free_password (item->secret); item->secret = gnome_keyring_memory_strdup (secret); if (item->attributes != NULL) { gnome_keyring_attribute_list_free (item->attributes); @@ -1523,7 +1523,7 @@ op_create_item_execute (GkrBuffer *packet, bail: g_free (keyring_name); g_free (display_name); - gnome_keyring_memory_free (secret); + gnome_keyring_free_password (secret); gnome_keyring_attribute_list_free (attributes); gnome_keyring_proto_add_uint32 (result, res); @@ -1984,7 +1984,7 @@ op_set_item_info_execute (GkrBuffer *packet, item->display_name = g_strdup (item_name); } if (secret != NULL) { - gnome_keyring_memory_free (item->secret); + gnome_keyring_free_password (item->secret); item->secret = gnome_keyring_memory_strdup (secret); } @@ -1992,7 +1992,7 @@ out: g_free (keyring_name); g_free (item_name); - gnome_keyring_memory_free (secret); + gnome_keyring_free_password (secret); return TRUE; } diff --git a/keyrings/gkr-keyring-item.c b/keyrings/gkr-keyring-item.c index 9b9d7867..40637970 100644 --- a/keyrings/gkr-keyring-item.c +++ b/keyrings/gkr-keyring-item.c @@ -66,7 +66,7 @@ gkr_keyring_item_finalize (GObject *obj) if (item->acl != NULL) gnome_keyring_acl_free (item->acl); g_free (item->display_name); - gnome_keyring_memory_free (item->secret); + gnome_keyring_free_password (item->secret); G_OBJECT_CLASS (gkr_keyring_item_parent_class)->finalize (obj); } diff --git a/keyrings/gkr-keyring.c b/keyrings/gkr-keyring.c index ca91d8f9..357dcef2 100644 --- a/keyrings/gkr-keyring.c +++ b/keyrings/gkr-keyring.c @@ -635,7 +635,7 @@ update_keyring_from_data (GkrKeyring *keyring, GkrBuffer *buffer) goto bail; } if (!verify_decrypted_buffer (&to_decrypt)) { - gnome_keyring_memory_free (keyring->password); + gnome_keyring_free_password (keyring->password); keyring->password = NULL; } else { locked = FALSE; @@ -723,7 +723,7 @@ update_keyring_from_data (GkrKeyring *keyring, GkrBuffer *buffer) g_free (item->display_name); item->display_name = NULL; - gnome_keyring_memory_free (item->secret); + gnome_keyring_free_password (item->secret); item->secret = NULL; if (item->acl) { gnome_keyring_acl_free (item->acl); @@ -760,7 +760,7 @@ update_keyring_from_data (GkrKeyring *keyring, GkrBuffer *buffer) if (items != NULL) { for (i = 0; i < num_items; i++) { g_free (items[i].display_name); - gnome_keyring_memory_free (items[i].secret); + gnome_keyring_free_password (items[i].secret); gnome_keyring_attribute_list_free (items[i].hashed_attributes); gnome_keyring_attribute_list_free (items[i].attributes); gnome_keyring_acl_free (items[i].acl); @@ -862,7 +862,7 @@ gkr_keyring_dispose (GObject *obj) g_list_free (keyring->items); keyring->items = NULL; - gnome_keyring_memory_free (keyring->password); + gnome_keyring_free_password (keyring->password); keyring->password = NULL; G_OBJECT_CLASS (gkr_keyring_parent_class)->dispose (obj); diff --git a/library/gnome-keyring-memory.c b/library/gnome-keyring-memory.c index 036cf758..9f4c5b48 100644 --- a/library/gnome-keyring-memory.c +++ b/library/gnome-keyring-memory.c @@ -88,7 +88,7 @@ gnome_keyring_memory_alloc (gulong sz) } if (do_warning) { - g_warning (WARNING); + g_message (WARNING); do_warning = FALSE; } @@ -157,7 +157,7 @@ gnome_keyring_memory_realloc (gpointer p, gulong sz) } if (do_warning) { - g_warning (WARNING); + g_message (WARNING); do_warning = FALSE; } @@ -201,8 +201,6 @@ gnome_keyring_memory_try_realloc (gpointer p, gulong sz) return g_try_realloc (p, sz); } -gpointer gnome_keyring_memory_try_realloc (gpointer p, gulong sz); - /** * gnome_keyring_memory_free: * @p: The pointer to the beginning of the block of memory to free. diff --git a/library/gnome-keyring-proto.c b/library/gnome-keyring-proto.c index 0854de09..65d48187 100644 --- a/library/gnome-keyring-proto.c +++ b/library/gnome-keyring-proto.c @@ -662,7 +662,7 @@ gnome_keyring_proto_decode_create_item (GkrBuffer *buffer, g_free (*display_name); } if (secret != NULL) { - gnome_keyring_memory_free (*secret); + gnome_keyring_free_password (*secret); } return FALSE; @@ -1449,13 +1449,13 @@ gnome_keyring_proto_decode_get_item_info_reply (GkrBuffer *buff if (!gnome_keyring_proto_get_time (buffer, offset, &offset, &mtime)) { g_free (name); - gnome_keyring_memory_free (secret); + gnome_keyring_free_password (secret); return FALSE; } if (!gnome_keyring_proto_get_time (buffer, offset, &offset, &ctime)) { g_free (name); - gnome_keyring_memory_free (secret); + gnome_keyring_free_password (secret); return FALSE; } @@ -1577,7 +1577,7 @@ gnome_keyring_proto_decode_set_item_info (GkrBuffer *buffer, bail: g_free (*keyring); g_free (*display_name); - gnome_keyring_memory_free (*secret); + gnome_keyring_free_password (*secret); return FALSE; } diff --git a/library/gnome-keyring-utils.c b/library/gnome-keyring-utils.c index 3198273a..4c7a82dc 100644 --- a/library/gnome-keyring-utils.c +++ b/library/gnome-keyring-utils.c @@ -39,9 +39,28 @@ * secret information. */ void -gnome_keyring_free_password (char *str) +gnome_keyring_free_password (gchar *str) { - memset (str, 0, strlen (str)); + volatile char *vp; + size_t len; + + if (!str) + return; + + /* + * If we're using unpageable 'secure' memory, then the free call + * should zero out the memory, but because on certain platforms + * we may be using normal memory, zero it out here just in case. + */ + + vp = (volatile char*)str; + len = strlen (str); + while (len) { + *vp = 0xAA; + vp++; + len--; + } + gnome_keyring_memory_free (str); } @@ -58,7 +77,7 @@ void gnome_keyring_found_free (GnomeKeyringFound *found) { g_free (found->keyring); - gnome_keyring_memory_free (found->secret); + gnome_keyring_free_password (found->secret); gnome_keyring_attribute_list_free (found->attributes); g_free (found); } @@ -152,8 +171,7 @@ gnome_keyring_item_info_free (GnomeKeyringItemInfo *item_info) { if (item_info != NULL) { g_free (item_info->display_name); - if (item_info->secret != NULL) - gnome_keyring_memory_free (item_info->secret); + gnome_keyring_free_password (item_info->secret); g_free (item_info); } } diff --git a/library/gnome-keyring.c b/library/gnome-keyring.c index 1f055f8a..13b56491 100644 --- a/library/gnome-keyring.c +++ b/library/gnome-keyring.c @@ -2388,7 +2388,7 @@ void gnome_keyring_item_info_set_secret (GnomeKeyringItemInfo *item_info, const char *value) { - gnome_keyring_memory_free (item_info->secret); + gnome_keyring_free_password (item_info->secret); item_info->secret = gnome_keyring_memory_strdup (value); } @@ -2536,7 +2536,7 @@ gnome_keyring_network_password_free (GnomeKeyringNetworkPasswordData *data) g_free (data->authtype); g_free (data->user); g_free (data->domain); - gnome_keyring_memory_free (data->password); + gnome_keyring_free_password (data->password); g_free (data); } diff --git a/library/gnome-keyring.h b/library/gnome-keyring.h index e5d67dcb..299e09ed 100644 --- a/library/gnome-keyring.h +++ b/library/gnome-keyring.h @@ -138,7 +138,7 @@ GnomeKeyringAttributeList *gnome_keyring_attribute_list_copy (GnomeKeyr gboolean gnome_keyring_is_available (void); -void gnome_keyring_free_password (char *password); +void gnome_keyring_free_password (gchar *password); void gnome_keyring_found_free (GnomeKeyringFound *found); void gnome_keyring_found_list_free (GList *found_list); diff --git a/ui/gkr-ask-request.c b/ui/gkr-ask-request.c index 977eca6a..a79bca37 100644 --- a/ui/gkr-ask-request.c +++ b/ui/gkr-ask-request.c @@ -144,9 +144,9 @@ finish_ask_io (GkrAskRequest *ask, gboolean failed) pv->ask_pid = 0; /* Cleanup for response processing */ - gnome_keyring_memory_free (ask->typed_password); + gnome_keyring_free_password (ask->typed_password); ask->typed_password = NULL; - gnome_keyring_memory_free (ask->original_password); + gnome_keyring_free_password (ask->original_password); ask->original_password = NULL; /* A failed request */ @@ -371,10 +371,10 @@ gkr_ask_request_dispose (GObject *obj) cancel_ask_if_active (ask); g_assert (pv->ask_pid == 0); - gnome_keyring_memory_free (ask->original_password); + gnome_keyring_free_password (ask->original_password); ask->original_password = NULL; - gnome_keyring_memory_free (ask->typed_password); + gnome_keyring_free_password (ask->typed_password); ask->typed_password = NULL; G_OBJECT_CLASS(gkr_ask_request_parent_class)->dispose (obj); |