INIT zero out sensitive data before its freed
The iscsi_url and iscsi_context might contain clear text login credentials for an iscsi target. As Linux zeroes on allocate this data might remain in memory for a long time.
This commit is contained in:
@@ -331,6 +331,7 @@ try_again:
|
||||
iscsi->frees+=old_iscsi->frees;
|
||||
|
||||
memcpy(old_iscsi, iscsi, sizeof(struct iscsi_context));
|
||||
memset(iscsi, 0, sizeof(struct iscsi_context));
|
||||
free(iscsi);
|
||||
|
||||
old_iscsi->is_reconnecting = 0;
|
||||
|
||||
@@ -267,6 +267,7 @@ iscsi_destroy_context(struct iscsi_context *iscsi)
|
||||
DPRINTF(iscsi,5,"memory is clean at iscsi_destroy_context() after %d mallocs and %d frees",iscsi->mallocs,iscsi->frees);
|
||||
}
|
||||
|
||||
memset(iscsi, 0, sizeof(struct iscsi_context));
|
||||
free(iscsi);
|
||||
|
||||
return 0;
|
||||
@@ -465,7 +466,9 @@ iscsi_parse_portal_url(struct iscsi_context *iscsi, const char *url)
|
||||
void
|
||||
iscsi_destroy_url(struct iscsi_url *iscsi_url)
|
||||
{
|
||||
if (iscsi_url->iscsi != NULL)
|
||||
struct iscsi_context *iscsi = iscsi_url->iscsi;
|
||||
memset(iscsi_url, 0, sizeof(struct iscsi_url));
|
||||
if (iscsi != NULL)
|
||||
iscsi_free(iscsi_url->iscsi, iscsi_url);
|
||||
else
|
||||
free(iscsi_url);
|
||||
|
||||
Reference in New Issue
Block a user