SHA256
1
0
forked from pool/ipmitool
ipmitool/increase_possible_fw_file_size.patch
OBS User autobuild 576167f497 Accepting request 34171 from systemsmanagement:wbem
Copy from systemsmanagement:wbem/ipmitool based on submit request 34171 from user coolo

OBS-URL: https://build.opensuse.org/request/show/34171
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ipmitool?expand=0&rev=10
2010-03-05 15:31:33 +00:00

169 lines
4.1 KiB
Diff

Increase possible file size for FW upgrades and avoid segfaults if still too big
Also close a file descriptor which gets opened, but never closed, compare with:
https://bugzilla.novell.com/show_bug.cgi?id=534909
Signed-off-by: Thomas Renninger <trenn@suse.de>
---
lib/ipmi_fwum.c | 86 ++++++++++++++++++++++++++++++--------------------------
1 file changed, 47 insertions(+), 39 deletions(-)
Index: ipmitool-1.8.11/lib/ipmi_fwum.c
===================================================================
--- ipmitool-1.8.11.orig/lib/ipmi_fwum.c
+++ ipmitool-1.8.11/lib/ipmi_fwum.c
@@ -141,7 +141,8 @@ typedef struct sKFWUM_SaveFirmwareInfo
extern int verbose;
static unsigned char fileName[512];
-static unsigned char firmBuf[1024*512];
+#define MAX_FW_FILE_SIZE 1024*512
+static unsigned char firmBuf[MAX_FW_FILE_SIZE];
static tKFWUM_SaveFirmwareInfo saveFirmwareInfo;
static void KfwumOutputHelp(void);
@@ -508,6 +509,12 @@ static tKFWUM_Status KfwumSetupBuffersFr
tKFWUM_Status status = KFWUM_STATUS_OK;
FILE * pFileHandle;
+ if(fileSize >= MAX_FW_FILE_SIZE)
+ {
+ printf("Error: Firmware file size exceeds %dK\n", MAX_FW_FILE_SIZE / 1024);
+ return KFWUM_STATUS_ERROR;
+ }
+
pFileHandle = fopen((const char *)pFileName, "rb");
if(pFileHandle)
@@ -538,6 +545,7 @@ static tKFWUM_Status KfwumSetupBuffersFr
{
KfwumShowProgress((const unsigned char *)"Reading Firmware from File", 100, 100);
}
+ fclose(pFileHandle);
}
return(status);
}
@@ -986,9 +994,9 @@ static tKFWUM_Status KfwumManualRollback
return status;
}
-#ifdef PRAGMA_PACK
-#pramga pack(1)
-#endif
+#ifdef PRAGMA_PACK
+#pramga pack(1)
+#endif
struct KfwumStartFirmwareDownloadReq{
unsigned char lengthLSB;
unsigned char lengthMid;
@@ -996,20 +1004,20 @@ struct KfwumStartFirmwareDownloadReq{
unsigned char paddingLSB;
unsigned char paddingMSB;
unsigned char useSequence;
-} ATTRIBUTE_PACKING;
-#ifdef PRAGMA_PACK
-#pramga pack(0)
-#endif
-
-#ifdef PRAGMA_PACK
-#pramga pack(1)
-#endif
+} ATTRIBUTE_PACKING;
+#ifdef PRAGMA_PACK
+#pramga pack(0)
+#endif
+
+#ifdef PRAGMA_PACK
+#pramga pack(1)
+#endif
struct KfwumStartFirmwareDownloadResp {
unsigned char bank;
-} ATTRIBUTE_PACKING;
-#ifdef PRAGMA_PACK
-#pramga pack(0)
-#endif
+} ATTRIBUTE_PACKING;
+#ifdef PRAGMA_PACK
+#pramga pack(0)
+#endif
static tKFWUM_Status KfwumStartFirmwareImage(struct ipmi_intf * intf,
unsigned long length,unsigned short padding)
@@ -1065,9 +1073,9 @@ static tKFWUM_Status KfwumStartFirmwareI
return status;
}
-#ifdef PRAGMA_PACK
-#pramga pack(1)
-#endif
+#ifdef PRAGMA_PACK
+#pramga pack(1)
+#endif
struct KfwumSaveFirmwareAddressReq
{
unsigned char addressLSB;
@@ -1075,22 +1083,22 @@ struct KfwumSaveFirmwareAddressReq
unsigned char addressMSB;
unsigned char numBytes;
unsigned char txBuf[KFWUM_SMALL_BUFFER-KFWUM_OLD_CMD_OVERHEAD];
-} ATTRIBUTE_PACKING;
-#ifdef PRAGMA_PACK
-#pramga pack(0)
-#endif
-
-#ifdef PRAGMA_PACK
-#pramga pack(1)
-#endif
+} ATTRIBUTE_PACKING;
+#ifdef PRAGMA_PACK
+#pramga pack(0)
+#endif
+
+#ifdef PRAGMA_PACK
+#pramga pack(1)
+#endif
struct KfwumSaveFirmwareSequenceReq
{
unsigned char sequenceNumber;
unsigned char txBuf[KFWUM_BIG_BUFFER];
-} ATTRIBUTE_PACKING;
-#ifdef PRAGMA_PACK
-#pramga pack(0)
-#endif
+} ATTRIBUTE_PACKING;
+#ifdef PRAGMA_PACK
+#pramga pack(0)
+#endif
#define FWUM_SAVE_FIRMWARE_NO_RESPONSE_LIMIT ((unsigned char)6)
@@ -1234,19 +1242,19 @@ static tKFWUM_Status KfwumSaveFirmwareIm
return status;
}
-#ifdef PRAGMA_PACK
-#pramga pack(1)
-#endif
+#ifdef PRAGMA_PACK
+#pramga pack(1)
+#endif
struct KfwumFinishFirmwareDownloadReq{
unsigned char versionMaj;
unsigned char versionMinSub;
unsigned char versionSdr;
unsigned char reserved;
-} ATTRIBUTE_PACKING;
-#ifdef PRAGMA_PACK
-#pramga pack(0)
-#endif
-
+} ATTRIBUTE_PACKING;
+#ifdef PRAGMA_PACK
+#pramga pack(0)
+#endif
+
static tKFWUM_Status KfwumFinishFirmwareImage(struct ipmi_intf * intf,
tKFWUM_InFirmwareInfo firmInfo)
{