1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-02 01:18:26 +03:00

Fix resource leak of file handle

Introduces when added dm_device_get_name.
Close file handle in all error paths.
This commit is contained in:
Zdenek Kabelac 2012-01-25 21:47:18 +00:00
parent e6771e50a9
commit 0e6cacbbb6

View File

@ -1189,7 +1189,8 @@ const char *dm_uuid_prefix(void)
static int _sysfs_get_dm_name(uint32_t major, uint32_t minor, char *buf, size_t buf_size) static int _sysfs_get_dm_name(uint32_t major, uint32_t minor, char *buf, size_t buf_size)
{ {
char *sysfs_path, *temp_buf; char *sysfs_path, *temp_buf;
FILE *fp; FILE *fp = NULL;
int r = 0;
if (!(sysfs_path = dm_malloc(PATH_MAX)) || if (!(sysfs_path = dm_malloc(PATH_MAX)) ||
!(temp_buf = dm_malloc(PATH_MAX))) { !(temp_buf = dm_malloc(PATH_MAX))) {
@ -1219,23 +1220,21 @@ static int _sysfs_get_dm_name(uint32_t major, uint32_t minor, char *buf, size_t
} }
temp_buf[strlen(temp_buf) - 1] = '\0'; temp_buf[strlen(temp_buf) - 1] = '\0';
if (fclose(fp))
log_sys_error("fclose", sysfs_path);
if (buf_size < strlen(temp_buf) + 1) { if (buf_size < strlen(temp_buf) + 1) {
log_error("_sysfs_get_dm_name: supplied buffer too small"); log_error("_sysfs_get_dm_name: supplied buffer too small");
goto error; goto error;
} }
strncpy(buf, temp_buf, buf_size); strncpy(buf, temp_buf, buf_size);
dm_free(sysfs_path); r = 1;
dm_free(temp_buf);
return 1;
error: error:
if (fp && fclose(fp))
log_sys_error("fclose", sysfs_path);
dm_free(sysfs_path); dm_free(sysfs_path);
dm_free(temp_buf); dm_free(temp_buf);
return 0;
return r;
} }
static int _sysfs_get_kernel_name(uint32_t major, uint32_t minor, char *buf, size_t buf_size) static int _sysfs_get_kernel_name(uint32_t major, uint32_t minor, char *buf, size_t buf_size)