From 05326911fc027dc23de28cdc3647a9a9df42a55a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sun, 8 Apr 2012 23:33:15 +0200 Subject: [PATCH] ntfs: fixed coverity resource leaks. * CID 5723, 5724, 5725, 5726, 5728, 5736, 5737 --- src/add-ons/kernel/file_systems/ntfs/fs_func.c | 8 ++++++-- src/add-ons/kernel/file_systems/ntfs/ntfsdir.c | 3 ++- src/add-ons/kernel/file_systems/ntfs/utils.c | 7 +++++-- src/add-ons/kernel/file_systems/ntfs/volume_util.c | 1 + 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/add-ons/kernel/file_systems/ntfs/fs_func.c b/src/add-ons/kernel/file_systems/ntfs/fs_func.c index 166fbbc88d..4d1ddd267b 100644 --- a/src/add-ons/kernel/file_systems/ntfs/fs_func.c +++ b/src/add-ons/kernel/file_systems/ntfs/fs_func.c @@ -271,7 +271,8 @@ fs_mount(fs_volume *_vol, const char *device, ulong flags, const char *args, ntfs_calc_free_space(ns); } } - } + } else + free(ns); exit: ERROR("fs_mount - EXIT, result code is %s\n", strerror(result)); @@ -978,6 +979,7 @@ exit: ntfs_inode_close(ni); if (bi) ntfs_inode_close(bi); + free(uname); TRACE("fs_create - EXIT, result is %s\n", strerror(result)); @@ -1384,6 +1386,8 @@ exit: ntfs_inode_close(sym); if (bi) ntfs_inode_close(bi); + free(utarget); + free(uname); TRACE("fs_symlink - EXIT, result is %s\n", strerror(result)); @@ -1444,7 +1448,6 @@ fs_mkdir(fs_volume *_vol, fs_vnode *_dir, const char *name, int perms) newNode = (vnode*)ntfs_calloc(sizeof(vnode)); if (newNode == NULL) { result = ENOMEM; - ntfs_inode_close(ni); goto exit; } @@ -1469,6 +1472,7 @@ exit: ntfs_inode_close(ni); if (bi) ntfs_inode_close(bi); + free(uname); TRACE("fs_mkdir - EXIT, result is %s\n", strerror(result)); diff --git a/src/add-ons/kernel/file_systems/ntfs/ntfsdir.c b/src/add-ons/kernel/file_systems/ntfs/ntfsdir.c index 70e5bf12fc..e222434897 100644 --- a/src/add-ons/kernel/file_systems/ntfs/ntfsdir.c +++ b/src/add-ons/kernel/file_systems/ntfs/ntfsdir.c @@ -92,7 +92,7 @@ fs_opendir(fs_volume *_vol, fs_vnode *_node, void** _cookie) { nspace *ns = (nspace*)_vol->private_volume; vnode *node = (vnode*)_node->private_node; - dircookie *cookie = (dircookie*)ntfs_calloc(sizeof(dircookie)); + dircookie *cookie = NULL; int result = B_NO_ERROR; ntfs_inode *ni = NULL; @@ -111,6 +111,7 @@ fs_opendir(fs_volume *_vol, fs_vnode *_node, void** _cookie) goto exit; } + cookie = (dircookie*)ntfs_calloc(sizeof(dircookie)); if (cookie != NULL) { cookie->pos = 0; cookie->ino = 0; diff --git a/src/add-ons/kernel/file_systems/ntfs/utils.c b/src/add-ons/kernel/file_systems/ntfs/utils.c index f4f28aa566..c284d28db0 100644 --- a/src/add-ons/kernel/file_systems/ntfs/utils.c +++ b/src/add-ons/kernel/file_systems/ntfs/utils.c @@ -578,7 +578,7 @@ int utils_attr_get_name(ntfs_volume *vol, ATTR_RECORD *attr, char *buffer, int b attrdef = ntfs_attr_find_in_attrdef(vol, attr->type); if (attrdef) { - name = NULL; + name = NULL; namelen = ntfs_ucsnlen(attrdef->name, sizeof(attrdef->name)); if (ntfs_ucstombs(attrdef->name, namelen, &name, 0) < 0) { ntfs_log_error("Couldn't translate attribute type to current locale.\n"); @@ -593,17 +593,20 @@ int utils_attr_get_name(ntfs_volume *vol, ATTR_RECORD *attr, char *buffer, int b if (len >= bufsize) { ntfs_log_error("Attribute type was truncated.\n"); + free(name); return 0; } if (!attr->name_length) { + free(name); return 0; } buffer += len; bufsize -= len; - name = NULL; + free(name); + name = NULL; namelen = attr->name_length; if (ntfs_ucstombs((ntfschar *)((char *)attr + attr->name_offset), namelen, &name, 0) < 0) { diff --git a/src/add-ons/kernel/file_systems/ntfs/volume_util.c b/src/add-ons/kernel/file_systems/ntfs/volume_util.c index b43653da8d..1c1b38eeca 100644 --- a/src/add-ons/kernel/file_systems/ntfs/volume_util.c +++ b/src/add-ons/kernel/file_systems/ntfs/volume_util.c @@ -216,6 +216,7 @@ int ntfs_change_label(ntfs_volume *vol, char *label) } result = 0; err_out: + ntfs_attr_put_search_ctx(ctx); free(new_label); return result; }