Fix: run_as_mkdirat returns value of errno
[lttng-tools.git] / src / common / runas.c
index c77f198c4d4061adade2b550846d38efbd387cf8..ef169d3207903367d6e38e9625b656b210f98d02 100644 (file)
@@ -199,6 +199,8 @@ int _mkdirat_recursive(struct run_as_data *data, struct run_as_ret *ret_value)
        mode = data->u.mkdirat.mode;
 
        (void) lttng_directory_handle_init_from_dirfd(&handle, data->fd);
+       /* Ownership of dirfd is transferred to the handle. */
+       data->fd = -1;
        /* Safe to call as we have transitioned to the requested uid/gid. */
        ret_value->u.mkdirat.ret =
                        lttng_directory_handle_create_subdirectory_recursive(
@@ -220,6 +222,8 @@ int _mkdirat(struct run_as_data *data, struct run_as_ret *ret_value)
        mode = data->u.mkdirat.mode;
 
        (void) lttng_directory_handle_init_from_dirfd(&handle, data->fd);
+       /* Ownership of dirfd is transferred to the handle. */
+       data->fd = -1;
        /* Safe to call as we have transitioned to the requested uid/gid. */
        ret_value->u.mkdirat.ret =
                        lttng_directory_handle_create_subdirectory(
@@ -1211,7 +1215,7 @@ int run_as_mkdirat(int dirfd, const char *path, mode_t mode,
        run_as(dirfd == AT_FDCWD ? RUN_AS_MKDIR : RUN_AS_MKDIRAT,
                        &data, &run_as_ret, uid, gid);
        errno = run_as_ret._errno;
-       ret = run_as_ret._errno;
+       ret = run_as_ret.u.mkdirat.ret;
 error:
        return ret;
 }
This page took 0.024978 seconds and 5 git commands to generate.