From 9341982a381ac4b0785e3fefe4b334f1c91f9385 Mon Sep 17 00:00:00 2001 From: Zdenek Styblik Date: Thu, 9 Jun 2016 11:48:29 +0200 Subject: [PATCH] ID:335 - Check return value of fseek(), prevent segfault Commit adds a check as a workaround for segfault reported in ID:335. However, the proper fix is to rewrite parts of lib/ipmi_hpmfwupg.c not to put whole firmware image into memory. Also, MD5 checksum part needs to be rewritten, because it won't work for large firmware images. --- lib/ipmi_hpmfwupg.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/ipmi_hpmfwupg.c b/lib/ipmi_hpmfwupg.c index 9cbd4ff..bbcffc0 100644 --- a/lib/ipmi_hpmfwupg.c +++ b/lib/ipmi_hpmfwupg.c @@ -1399,7 +1399,12 @@ HpmfwupgGetBufferFromFile(char *imageFilename, return HPMFWUPG_ERROR; } /* Get the raw data in file */ - fseek(pImageFile, 0, SEEK_END); + ret = fseek(pImageFile, 0, SEEK_END); + if (ret != 0) { + lprintf(LOG_ERR, "Failed to seek in the image file '%s'", + imageFilename); + return HPMFWUPG_ERROR; + } pFwupgCtx->imageSize = ftell(pImageFile); pFwupgCtx->pImageData = malloc(sizeof(unsigned char)*pFwupgCtx->imageSize); if (pFwupgCtx->pImageData == NULL) {