|
|
05c763 |
From 6bc66384084a018724b0c94ed30088dff5130e16 Mon Sep 17 00:00:00 2001
|
|
|
05c763 |
From: Peter Jones <pjones@redhat.com>
|
|
|
05c763 |
Date: Fri, 2 Jun 2017 12:32:49 -0400
|
|
|
05c763 |
Subject: [PATCH 09/22] Check for fseek errors everywhere.
|
|
|
05c763 |
|
|
|
05c763 |
covscan noticed these aren't checked.
|
|
|
05c763 |
|
|
|
05c763 |
Signed-off-by: Peter Jones <pjones@redhat.com>
|
|
|
05c763 |
---
|
|
|
05c763 |
src/libsmbios_c/smi/smi_linux.c | 5 ++++-
|
|
|
05c763 |
src/libsmbios_c/smi/smi_solaris.c | 6 +++++-
|
|
|
05c763 |
src/libsmbios_c++/smi/SmiImpl.h | 4 +++-
|
|
|
05c763 |
src/libsmbios_c++/cmos/CmosRW.cpp | 16 ++++++++++++++--
|
|
|
05c763 |
src/libsmbios_c++/smi/Smi_Linux.cpp | 22 ++++++++++++++++++----
|
|
|
05c763 |
src/libsmbios_c++/smi/Smi_Solaris.cpp | 23 ++++++++++++++++++-----
|
|
|
05c763 |
6 files changed, 62 insertions(+), 14 deletions(-)
|
|
|
05c763 |
|
|
|
05c763 |
diff --git a/src/libsmbios_c/smi/smi_linux.c b/src/libsmbios_c/smi/smi_linux.c
|
|
|
05c763 |
index c97489fed42..f810b43e699 100644
|
|
|
05c763 |
--- a/src/libsmbios_c/smi/smi_linux.c
|
|
|
05c763 |
+++ b/src/libsmbios_c/smi/smi_linux.c
|
|
|
05c763 |
@@ -59,6 +59,7 @@ u32 __hidden get_phys_buf_addr()
|
|
|
05c763 |
FILE *fd = 0;
|
|
|
05c763 |
u32 physaddr = 0;
|
|
|
05c763 |
char linebuf[bufsize] = {0,};
|
|
|
05c763 |
+ int ret;
|
|
|
05c763 |
|
|
|
05c763 |
fnprintf("\n");
|
|
|
05c763 |
|
|
|
05c763 |
@@ -68,7 +69,9 @@ u32 __hidden get_phys_buf_addr()
|
|
|
05c763 |
if (!fd)
|
|
|
05c763 |
goto out;
|
|
|
05c763 |
|
|
|
05c763 |
- fseek(fd, 0L, 0);
|
|
|
05c763 |
+ ret = fseek(fd, 0L, 0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ goto out_close;
|
|
|
05c763 |
size_t numBytes = fread(linebuf, 1, bufsize, fd);
|
|
|
05c763 |
if (!numBytes)
|
|
|
05c763 |
goto out_close;
|
|
|
05c763 |
diff --git a/src/libsmbios_c/smi/smi_solaris.c b/src/libsmbios_c/smi/smi_solaris.c
|
|
|
05c763 |
index bb407750ba1..d190305c8f8 100644
|
|
|
05c763 |
--- a/src/libsmbios_c/smi/smi_solaris.c
|
|
|
05c763 |
+++ b/src/libsmbios_c/smi/smi_solaris.c
|
|
|
05c763 |
@@ -59,6 +59,7 @@ u32 __internal get_phys_buf_addr()
|
|
|
05c763 |
FILE *fd = 0;
|
|
|
05c763 |
u32 physaddr = 0;
|
|
|
05c763 |
char linebuf[bufsize] = {0,};
|
|
|
05c763 |
+ int ret;
|
|
|
05c763 |
|
|
|
05c763 |
fnprintf("\n");
|
|
|
05c763 |
|
|
|
05c763 |
@@ -68,7 +69,10 @@ u32 __internal get_phys_buf_addr()
|
|
|
05c763 |
if (!fd)
|
|
|
05c763 |
goto out;
|
|
|
05c763 |
|
|
|
05c763 |
- fseek(fd, 0L, 0);
|
|
|
05c763 |
+ ret = fseek(fd, 0L, 0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ goto out_close;
|
|
|
05c763 |
+
|
|
|
05c763 |
size_t numBytes = fread(linebuf, 1, bufsize, fd);
|
|
|
05c763 |
if (!numBytes)
|
|
|
05c763 |
goto out_close;
|
|
|
05c763 |
diff --git a/src/libsmbios_c++/smi/SmiImpl.h b/src/libsmbios_c++/smi/SmiImpl.h
|
|
|
05c763 |
index 6373d79d0ca..b448e5d8087 100644
|
|
|
05c763 |
--- a/src/libsmbios_c++/smi/SmiImpl.h
|
|
|
05c763 |
+++ b/src/libsmbios_c++/smi/SmiImpl.h
|
|
|
05c763 |
@@ -84,7 +84,9 @@ namespace smi
|
|
|
05c763 |
};
|
|
|
05c763 |
virtual void execute()
|
|
|
05c763 |
{
|
|
|
05c763 |
- fseek(fh,0,0);
|
|
|
05c763 |
+ int ret = fseek(fh,0,0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
};
|
|
|
05c763 |
virtual void getResultBuffer(u8 *buffer, size_t size)
|
|
|
05c763 |
{
|
|
|
05c763 |
diff --git a/src/libsmbios_c++/cmos/CmosRW.cpp b/src/libsmbios_c++/cmos/CmosRW.cpp
|
|
|
05c763 |
index 32642228176..c4274d4b2f7 100644
|
|
|
05c763 |
--- a/src/libsmbios_c++/cmos/CmosRW.cpp
|
|
|
05c763 |
+++ b/src/libsmbios_c++/cmos/CmosRW.cpp
|
|
|
05c763 |
@@ -118,6 +118,7 @@ namespace cmos
|
|
|
05c763 |
//
|
|
|
05c763 |
u8 CmosRWFile::readByte (u32 indexPort, u32 dataPort, u32 offset) const
|
|
|
05c763 |
{
|
|
|
05c763 |
+ int ret;
|
|
|
05c763 |
u8 retval = 0xFF;
|
|
|
05c763 |
u32 realOffset = indexPort * 256 + offset;
|
|
|
05c763 |
(void) dataPort; // unused
|
|
|
05c763 |
@@ -127,7 +128,12 @@ namespace cmos
|
|
|
05c763 |
if( !fh )
|
|
|
05c763 |
throw smbios::InternalErrorImpl(errMessage + strerror(errno));
|
|
|
05c763 |
|
|
|
05c763 |
- fseek (fh, static_cast<long>(realOffset), SEEK_SET);
|
|
|
05c763 |
+ ret = fseek (fh, static_cast<long>(realOffset), SEEK_SET);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ {
|
|
|
05c763 |
+ fclose (fh);
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
+ }
|
|
|
05c763 |
size_t numRecs = fread (&retval, sizeof (retval), 1, fh); // only used in unit tests, so isnt critical
|
|
|
05c763 |
fclose (fh);
|
|
|
05c763 |
if (numRecs != 1)
|
|
|
05c763 |
@@ -141,6 +147,7 @@ namespace cmos
|
|
|
05c763 |
void CmosRWFile::writeByte (u32 indexPort, u32 dataPort, u32 offset, u8 byte) const
|
|
|
05c763 |
{
|
|
|
05c763 |
//cout << "w(" << offset << ")";
|
|
|
05c763 |
+ int ret;
|
|
|
05c763 |
u32 realOffset = indexPort * 256 + offset;
|
|
|
05c763 |
(void) dataPort; // unused
|
|
|
05c763 |
string errMessage("Could not open CMOS file(" + fileName + ") for writing: ");
|
|
|
05c763 |
@@ -149,7 +156,12 @@ namespace cmos
|
|
|
05c763 |
if( !fh )
|
|
|
05c763 |
throw smbios::InternalErrorImpl(errMessage + strerror(errno));
|
|
|
05c763 |
|
|
|
05c763 |
- fseek (fh, static_cast<long>(realOffset), SEEK_SET);
|
|
|
05c763 |
+ ret = fseek (fh, static_cast<long>(realOffset), SEEK_SET);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ {
|
|
|
05c763 |
+ fclose (fh);
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
+ }
|
|
|
05c763 |
size_t recs = fwrite (&byte, sizeof (byte), 1, fh);
|
|
|
05c763 |
fclose (fh);
|
|
|
05c763 |
fflush(NULL);
|
|
|
05c763 |
diff --git a/src/libsmbios_c++/smi/Smi_Linux.cpp b/src/libsmbios_c++/smi/Smi_Linux.cpp
|
|
|
05c763 |
index 3107d892296..5f3ecc31017 100644
|
|
|
05c763 |
--- a/src/libsmbios_c++/smi/Smi_Linux.cpp
|
|
|
05c763 |
+++ b/src/libsmbios_c++/smi/Smi_Linux.cpp
|
|
|
05c763 |
@@ -76,6 +76,7 @@ namespace smi
|
|
|
05c763 |
|
|
|
05c763 |
void SmiArchStrategy::lock()
|
|
|
05c763 |
{
|
|
|
05c763 |
+ int ret;
|
|
|
05c763 |
smiLinuxPrivateData *tmpPrivPtr = reinterpret_cast<smiLinuxPrivateData *>(privateData);
|
|
|
05c763 |
|
|
|
05c763 |
|
|
|
05c763 |
@@ -89,9 +90,13 @@ namespace smi
|
|
|
05c763 |
|
|
|
05c763 |
flock( fileno(tmpPrivPtr->fh_data), LOCK_EX );
|
|
|
05c763 |
|
|
|
05c763 |
- fseek(tmpPrivPtr->fh_doReq, 0L, 0);
|
|
|
05c763 |
+ ret = fseek(tmpPrivPtr->fh_doReq, 0L, 0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
FWRITE("0", 1, 1, tmpPrivPtr->fh_doReq);
|
|
|
05c763 |
- fseek(tmpPrivPtr->fh_doReq, 0L, 0);
|
|
|
05c763 |
+ ret = fseek(tmpPrivPtr->fh_doReq, 0L, 0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
}
|
|
|
05c763 |
|
|
|
05c763 |
size_t SmiArchStrategy::getPhysicalBufferBaseAddress()
|
|
|
05c763 |
@@ -99,6 +104,7 @@ namespace smi
|
|
|
05c763 |
const int bufSize=63;
|
|
|
05c763 |
char tmpBuf[bufSize+1] = {0,};
|
|
|
05c763 |
size_t retval = 0;
|
|
|
05c763 |
+ int ret;
|
|
|
05c763 |
|
|
|
05c763 |
fflush(NULL);
|
|
|
05c763 |
|
|
|
05c763 |
@@ -106,7 +112,12 @@ namespace smi
|
|
|
05c763 |
if( ! fh )
|
|
|
05c763 |
throw smbios::InternalErrorImpl("Could not open file " SMI_PHYS_ADDR_FILE ". Check that dcdbas driver is properly loaded.");
|
|
|
05c763 |
|
|
|
05c763 |
- fseek(fh, 0L, 0);
|
|
|
05c763 |
+ ret = fseek(fh, 0L, 0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ {
|
|
|
05c763 |
+ fclose(fh);
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
+ }
|
|
|
05c763 |
size_t numBytes = fread(tmpBuf, 1, bufSize, fh);
|
|
|
05c763 |
fclose(fh);
|
|
|
05c763 |
fh=0;
|
|
|
05c763 |
@@ -155,11 +166,14 @@ namespace smi
|
|
|
05c763 |
|
|
|
05c763 |
void SmiArchStrategy::execute()
|
|
|
05c763 |
{
|
|
|
05c763 |
+ int ret;
|
|
|
05c763 |
smiLinuxPrivateData *tmpPrivPtr = reinterpret_cast<smiLinuxPrivateData *>(privateData);
|
|
|
05c763 |
fflush(NULL);
|
|
|
05c763 |
FWRITE("1", 1, 1, tmpPrivPtr->fh_doReq);
|
|
|
05c763 |
fflush(NULL);
|
|
|
05c763 |
- fseek(tmpPrivPtr->fh_data, 0L, 0);
|
|
|
05c763 |
+ ret = fseek(tmpPrivPtr->fh_data, 0L, 0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
}
|
|
|
05c763 |
|
|
|
05c763 |
void SmiArchStrategy::finish()
|
|
|
05c763 |
diff --git a/src/libsmbios_c++/smi/Smi_Solaris.cpp b/src/libsmbios_c++/smi/Smi_Solaris.cpp
|
|
|
05c763 |
index d2190eea479..7ffce233e34 100644
|
|
|
05c763 |
--- a/src/libsmbios_c++/smi/Smi_Solaris.cpp
|
|
|
05c763 |
+++ b/src/libsmbios_c++/smi/Smi_Solaris.cpp
|
|
|
05c763 |
@@ -79,7 +79,7 @@ namespace smi
|
|
|
05c763 |
void SmiArchStrategy::lock()
|
|
|
05c763 |
{
|
|
|
05c763 |
smiSolarisPrivateData *tmpPrivPtr = reinterpret_cast<smiSolarisPrivateData *>(privateData);
|
|
|
05c763 |
-
|
|
|
05c763 |
+ int ret;
|
|
|
05c763 |
|
|
|
05c763 |
tmpPrivPtr->fh_data = fopen(SMI_DATA_FILE, "r+b");
|
|
|
05c763 |
if( ! tmpPrivPtr->fh_data )
|
|
|
05c763 |
@@ -89,9 +89,13 @@ namespace smi
|
|
|
05c763 |
if( ! tmpPrivPtr->fh_doReq)
|
|
|
05c763 |
throw smbios::InternalErrorImpl("Could not open file " SMI_DO_REQUEST_FILE ". Check that dcdbas driver is properly loaded.");
|
|
|
05c763 |
|
|
|
05c763 |
- fseek(tmpPrivPtr->fh_doReq, 0L, 0);
|
|
|
05c763 |
+ ret = fseek(tmpPrivPtr->fh_doReq, 0L, 0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
FWRITE("0", 1, 1, tmpPrivPtr->fh_doReq);
|
|
|
05c763 |
- fseek(tmpPrivPtr->fh_doReq, 0L, 0);
|
|
|
05c763 |
+ ret = fseek(tmpPrivPtr->fh_doReq, 0L, 0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
}
|
|
|
05c763 |
|
|
|
05c763 |
size_t SmiArchStrategy::getPhysicalBufferBaseAddress()
|
|
|
05c763 |
@@ -99,6 +103,7 @@ namespace smi
|
|
|
05c763 |
const int bufSize=63;
|
|
|
05c763 |
char tmpBuf[bufSize+1] = {0,};
|
|
|
05c763 |
size_t retval = 0;
|
|
|
05c763 |
+ int ret;
|
|
|
05c763 |
|
|
|
05c763 |
fflush(NULL);
|
|
|
05c763 |
|
|
|
05c763 |
@@ -106,7 +111,12 @@ namespace smi
|
|
|
05c763 |
if( ! fh )
|
|
|
05c763 |
throw smbios::InternalErrorImpl("Could not open file " SMI_PHYS_ADDR_FILE ". Check that dcdbas driver is properly loaded.");
|
|
|
05c763 |
|
|
|
05c763 |
- fseek(fh, 0L, 0);
|
|
|
05c763 |
+ ret = fseek(fh, 0L, 0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ {
|
|
|
05c763 |
+ fclose(fh);
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
+ }
|
|
|
05c763 |
size_t numBytes = fread(tmpBuf, 1, bufSize, fh);
|
|
|
05c763 |
fclose(fh);
|
|
|
05c763 |
fh=0;
|
|
|
05c763 |
@@ -155,11 +165,14 @@ namespace smi
|
|
|
05c763 |
|
|
|
05c763 |
void SmiArchStrategy::execute()
|
|
|
05c763 |
{
|
|
|
05c763 |
+ int ret;
|
|
|
05c763 |
smiSolarisPrivateData *tmpPrivPtr = reinterpret_cast<smiSolarisPrivateData *>(privateData);
|
|
|
05c763 |
fflush(NULL);
|
|
|
05c763 |
FWRITE("1", 1, 1, tmpPrivPtr->fh_doReq);
|
|
|
05c763 |
fflush(NULL);
|
|
|
05c763 |
- fseek(tmpPrivPtr->fh_data, 0L, 0);
|
|
|
05c763 |
+ ret = fseek(tmpPrivPtr->fh_data, 0L, 0);
|
|
|
05c763 |
+ if (ret < 0)
|
|
|
05c763 |
+ throw std::exception();
|
|
|
05c763 |
}
|
|
|
05c763 |
|
|
|
05c763 |
void SmiArchStrategy::finish()
|
|
|
05c763 |
--
|
|
|
05c763 |
2.14.3
|
|
|
05c763 |
|