Commit 436473bc authored by Ben Hutchings's avatar Ben Hutchings Committed by Greg Kroah-Hartman

tools/hv: Check for read/write errors

hv_kvp_daemon currently does not check whether fread() or fwrite()
succeed.  Add the necessary checks.  Also, remove the incorrect use of
feof() before fread().
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6bb22fea
...@@ -160,7 +160,12 @@ static void kvp_update_file(int pool) ...@@ -160,7 +160,12 @@ static void kvp_update_file(int pool)
sizeof(struct kvp_record), sizeof(struct kvp_record),
kvp_file_info[pool].num_records, filep); kvp_file_info[pool].num_records, filep);
fclose(filep); if (ferror(filep) || fclose(filep)) {
kvp_release_lock(pool);
syslog(LOG_ERR, "Failed to write file, pool: %d", pool);
exit(EXIT_FAILURE);
}
kvp_release_lock(pool); kvp_release_lock(pool);
} }
...@@ -181,12 +186,17 @@ static void kvp_update_mem_state(int pool) ...@@ -181,12 +186,17 @@ static void kvp_update_mem_state(int pool)
syslog(LOG_ERR, "Failed to open file, pool: %d", pool); syslog(LOG_ERR, "Failed to open file, pool: %d", pool);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
while (!feof(filep)) { for (;;) {
readp = &record[records_read]; readp = &record[records_read];
records_read += fread(readp, sizeof(struct kvp_record), records_read += fread(readp, sizeof(struct kvp_record),
ENTRIES_PER_BLOCK * num_blocks, ENTRIES_PER_BLOCK * num_blocks,
filep); filep);
if (ferror(filep)) {
syslog(LOG_ERR, "Failed to read file, pool: %d", pool);
exit(EXIT_FAILURE);
}
if (!feof(filep)) { if (!feof(filep)) {
/* /*
* We have more data to read. * We have more data to read.
...@@ -249,12 +259,18 @@ static int kvp_file_init(void) ...@@ -249,12 +259,18 @@ static int kvp_file_init(void)
fclose(filep); fclose(filep);
return 1; return 1;
} }
while (!feof(filep)) { for (;;) {
readp = &record[records_read]; readp = &record[records_read];
records_read += fread(readp, sizeof(struct kvp_record), records_read += fread(readp, sizeof(struct kvp_record),
ENTRIES_PER_BLOCK, ENTRIES_PER_BLOCK,
filep); filep);
if (ferror(filep)) {
syslog(LOG_ERR, "Failed to read file, pool: %d",
i);
exit(EXIT_FAILURE);
}
if (!feof(filep)) { if (!feof(filep)) {
/* /*
* We have more data to read. * We have more data to read.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment