Commit 39dafea4 authored by Marcin Spiewak's avatar Marcin Spiewak Committed by Konrad Sztyber
Browse files

module/fsdev/aio: fixed couple of errors



Fixed issues detected by Coverity.
1) close(fd) could be called for already closed fd. Now it is not
  possible
2) A file descriptor was checked instead of fhandle that was
  returned from file_handle_create(fobject, fd)
3) A fsdev_io was checked instead of fsdev_io->u_in.symlink.target
  when checking if strdup() succeeded

Change-Id: Ic679629bb6a6e63f4a087c826ed3ec73fe57bdb7
Signed-off-by: default avatarMarcin Spiewak <marcin.spiewak@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/24646


Reviewed-by: default avatarChangpeng Liu <changpeliu@tencent.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent 56e509c8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -235,7 +235,7 @@ spdk_fsdev_symlink(struct spdk_fsdev_desc *desc, struct spdk_io_channel *ch, uin
	}

	fsdev_io->u_in.symlink.target = strdup(target);
	if (!fsdev_io) {
	if (!fsdev_io->u_in.symlink.target) {
		fsdev_io_free(fsdev_io);
		return -ENOMEM;
	}
+5 −2
Original line number Diff line number Diff line
@@ -402,7 +402,7 @@ lo_opendir(struct spdk_io_channel *ch, struct spdk_fsdev_io *fsdev_io)
	}

	fhandle = file_handle_create(fobject, fd);
	if (fd == -1) {
	if (fhandle == NULL) {
		error = -ENOMEM;
		SPDK_ERRLOG("file_handle_create failed for " FOBJECT_FMT " (err=%d)\n", FOBJECT_ARGS(fobject),
			    error);
@@ -496,6 +496,7 @@ lo_do_lookup(struct aio_fsdev *vfsdev, struct spdk_fsdev_file_object *parent_fob
	fobject = lo_find_leaf_unsafe(parent_fobject, stat.st_ino, stat.st_dev);
	if (fobject) {
		close(newfd);
		newfd = -1;
		file_object_ref(fobject); /* reference by a lo_do_lookup caller */
	} else {
		fobject = file_object_create_unsafe(parent_fobject, newfd, stat.st_ino, stat.st_dev, stat.st_mode);
@@ -513,7 +514,9 @@ lo_do_lookup(struct aio_fsdev *vfsdev, struct spdk_fsdev_file_object *parent_fob
		if (res) {
			SPDK_ERRLOG("fill_attr(%s) failed with %d\n", name, res);
			file_object_unref(fobject, 1);
			if (newfd != -1) {
				close(newfd);
			}
			return res;
		}
	}