Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Unified Diff: src/tcs/tcs_evlog_imaem.c

Issue 3581012: Upgrade from trousers 0.3.3 to 0.3.6 and from testsuite 0.2 to 0.3. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/trousers.git
Patch Set: git cl push Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/tcs/tcs_evlog_biosem.c ('k') | src/tcs/tcs_pbg.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/tcs/tcs_evlog_imaem.c
diff --git a/src/tcs/tcs_evlog_imaem.c b/src/tcs/tcs_evlog_imaem.c
index b617d571955d58bdf113fedee5a091101ee7457d..fbdd29aae8215813096c3ed398ee84f33f538c59 100644
--- a/src/tcs/tcs_evlog_imaem.c
+++ b/src/tcs/tcs_evlog_imaem.c
@@ -83,11 +83,9 @@ ima_get_entries_by_pcr(FILE *handle, UINT32 pcr_index, UINT32 first,
struct event_wrapper *list = calloc(1, sizeof(struct event_wrapper));
struct event_wrapper *cur = list;
TSS_RESULT result = TCSERR(TSS_E_INTERNAL_ERROR);
-
-/* Changes for kernel IMA */
-FILE *fp = (FILE *) handle;
-int len;
-char name[255];
+ FILE *fp = (FILE *) handle;
+ uint len;
+ char name[255];
if (list == NULL) {
LogError("malloc of %zd bytes failed.", sizeof(struct event_wrapper));
@@ -129,14 +127,30 @@ char name[255];
{
char digest[20];
- fread(&len, sizeof len, 1, fp);
+ if (fread(&len, 1, sizeof(len), fp) != (sizeof(len))) {
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto free_list;
+ }
+
memset(name, 0, sizeof name);
- fread(name, len, 1, fp);
-
- fread(digest, sizeof digest, 1, fp);
+ if (fread(name, 1, len, fp) != len) {
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto free_list;
+ }
+ if (fread(digest, 1, sizeof digest, fp) != (sizeof(digest))) {
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto free_list;
+ }
}
/* Get the template data namelen and data */
- fread(&cur->event.ulEventLength, sizeof(int), 1, fp);
+ if (fread(&cur->event.ulEventLength, 1, sizeof(int), fp) != sizeof(int)) {
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto free_list;
+ }
cur->event.rgbEvent = malloc(cur->event.ulEventLength + 1);
if (cur->event.rgbEvent == NULL) {
free(cur->event.rgbPcrValue);
@@ -146,7 +160,12 @@ char name[255];
goto free_list;
}
memset(cur->event.rgbEvent, 0, cur->event.ulEventLength);
- fread(cur->event.rgbEvent, cur->event.ulEventLength, 1, fp);
+ if (fread(cur->event.rgbEvent, 1, cur->event.ulEventLength, fp) != cur->event.ulEventLength) {
+ free(cur->event.rgbPcrValue);
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto free_list;
+ }
copied_events++;
printf("%d %s ", copied_events, name);
@@ -206,15 +225,14 @@ free_list:
TSS_RESULT
ima_get_entry(FILE *handle, UINT32 pcr_index, UINT32 *num, TSS_PCR_EVENT **ppEvent)
{
- int pcr_value, ptr = 0, len;
+ int pcr_value, ptr = 0;
+ uint len;
char page[IMA_READ_SIZE];
UINT32 seen_indices = 0;
TSS_RESULT result = TCSERR(TSS_E_INTERNAL_ERROR);
- TSS_PCR_EVENT *event;
+ TSS_PCR_EVENT *event = NULL;
FILE *fp = (FILE *) handle;
char name[255];
-printf("ima_get_entry \n");
-fflush(stdout);
rewind(fp);
while (fread(page, 24, 1, fp)) {
@@ -222,8 +240,6 @@ fflush(stdout);
ptr = 0;
memcpy(&pcr_value, &page[ptr], sizeof(int));
-printf("pcr_index %u\n", (UINT32)pcr_value);
-fflush(stdout);
if (pcr_index == (UINT32)pcr_value) {
event = calloc(1, sizeof(TSS_PCR_EVENT));
event->ulPcrIndex = pcr_value;
@@ -237,6 +253,7 @@ fflush(stdout);
event->rgbPcrValue = malloc(event->ulPcrValueLength);
if (event->rgbPcrValue == NULL) {
LogError("malloc of %d bytes failed.", 20);
+ free(event);
result = TCSERR(TSS_E_OUTOFMEMORY);
goto done;
}
@@ -249,39 +266,76 @@ fflush(stdout);
{
char digest[20];
- fread(&len, sizeof len, 1, fp);
+ if (fread(&len, 1, sizeof(len), fp) != sizeof(len)) {
+ free(event);
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto done;
+ }
memset(name, 0, sizeof name);
- fread(name, len, 1, fp);
- fread(digest, sizeof digest, 1, fp);
+ if (fread(name, 1, len, fp) != len) {
+ free(event);
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto done;
+ }
+ if (fread(digest, 1, sizeof(digest), fp) != sizeof(digest)) {
+ free(event);
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto done;
+ }
}
/* Get the template data namelen and data */
- fread(&event->ulEventLength, sizeof(int), 1, fp);
+ if (fread(&event->ulEventLength, 1, sizeof(int), fp) != sizeof(int)) {
+ free(event);
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto done;
+ }
event->rgbEvent = malloc(event->ulEventLength + 1);
if (event->rgbEvent == NULL) {
free(event->rgbPcrValue);
+ free(event);
LogError("malloc of %u bytes failed.",
event->ulEventLength);
result = TCSERR(TSS_E_OUTOFMEMORY);
- free(event->rgbPcrValue);
- event->rgbPcrValue = NULL;
goto done;
}
memset(event->rgbEvent, 0, event->ulEventLength);
- fread(event->rgbEvent, event->ulEventLength, 1, fp);
+ if (fread(event->rgbEvent, 1, event->ulEventLength, fp) != event->ulEventLength ) {
+ free(event->rgbPcrValue);
+ free(event);
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto done;
+ }
+
*ppEvent = event;
result = TSS_SUCCESS;
break;
}
}
- fread(&len, sizeof len, 1, fp);
+ if (fread(&len, 1, sizeof(len), fp) != sizeof(len)) {
+ free(event->rgbPcrValue);
+ free(event);
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto done;
+ }
fseek(fp, len + 20, SEEK_CUR);
- fread(&len, sizeof len, 1, fp);
+ if (fread(&len, 1, sizeof(len), fp) != sizeof(len)) {
+ free(event->rgbPcrValue);
+ free(event);
+ LogError("Failed to read event log file");
+ result = TCSERR(TSS_E_INTERNAL_ERROR);
+ goto done;
+ }
fseek(fp, len, SEEK_CUR);
seen_indices++;
printf("%d - index\n", seen_indices);
}
done:
-fflush(stdout);
if (ppEvent == NULL)
*num = seen_indices;
« no previous file with comments | « src/tcs/tcs_evlog_biosem.c ('k') | src/tcs/tcs_pbg.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698