[PATCH 1/5] xfsprogs: libxcmd: don't clobber fs_table on realloc()
Alex Elder
aelder at sgi.com
Wed Sep 28 05:57:08 CDT 2011
In fs_table_insert(), realloc() is called to resize the global
fs_table. If it fails, it overwrites a previously valid fs_table
pointer with NULL.
Instead, assign the return value to a local temporary and overwrite
fs_table only if the realloc() call succeeds. The only defined
errno value for a realloc() failure is ENOMEM, so return that
explicitly in the event it fails.
Signed-off-by: Alex Elder <aelder at sgi.com>
---
libxcmd/paths.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/libxcmd/paths.c b/libxcmd/paths.c
index 1dbe0be..0e02eb7 100644
--- a/libxcmd/paths.c
+++ b/libxcmd/paths.c
@@ -102,6 +102,7 @@ fs_table_insert(
char *fsrt)
{
dev_t datadev, logdev, rtdev;
+ struct fs_path *tmp_fs_table;
if (!dir || !fsname)
return EINVAL;
@@ -114,9 +115,10 @@ fs_table_insert(
if (fsrt && (fsrt = fs_device_number(fsrt, &rtdev, 1)) == NULL)
return errno;
- fs_table = realloc(fs_table, sizeof(fs_path_t) * (fs_count + 1));
- if (!fs_table)
- return errno;
+ tmp_fs_table = realloc(fs_table, sizeof(fs_path_t) * (fs_count + 1));
+ if (!tmp_fs_table)
+ return ENOMEM;
+ fs_table = tmp_fs_table;
fs_path = &fs_table[fs_count];
fs_path->fs_dir = dir;
--
1.7.6.2
More information about the xfs
mailing list