From: takeshi.iwanari Date: Fri, 24 Jun 2022 13:17:39 +0000 (+0900) Subject: Fix: Use negative value for error code of lttng_ust_ctl_duplicate_ust_object_data X-Git-Url: http://git.lttng.org/?p=lttng-ust.git;a=commitdiff_plain;h=8449a229b6adf4ed87d34ef4d6f128e2177c3354 Fix: Use negative value for error code of lttng_ust_ctl_duplicate_ust_object_data [As is] - `lttng_ust_ctl_duplicate_ust_object_data` function is called by the following functions: - `event_notifier_error_accounting_register_app` (lttng-tools) - `duplicate_stream_object` (lttng-tools) - `duplicate_channel_object` (lttng-tools) - `lttng_ust_ctl_duplicate_ust_object_data` function returns positive value (= errno = 24 = EMFILE) when system call `dup` returns error - However, `duplicate_stream_object` and `duplicate_channel_object` functions expect negative value as error code - As a result, these functions cannot handle error and segmentation fault occurs when using `stream->handle` [Proposal] - Currently, `lttng_ust_ctl_duplicate_ust_object_data` function returns either positive or negative value when error happens - It looks convention is using negative value for error code (e.g. `-ENOMEM` ) - So, I propose to change `errno` to `-errno` Signed-off-by: takeshi.iwanari Signed-off-by: Mathieu Desnoyers Change-Id: Iccb01930413ecd5a8c58ad267e9c4eca53694dc7 --- diff --git a/src/lib/lttng-ust-ctl/ustctl.c b/src/lib/lttng-ust-ctl/ustctl.c index 94d84843..bcbd9c66 100644 --- a/src/lib/lttng-ust-ctl/ustctl.c +++ b/src/lib/lttng-ust-ctl/ustctl.c @@ -1257,7 +1257,7 @@ int lttng_ust_ctl_duplicate_ust_object_data(struct lttng_ust_abi_object_data **d obj->u.channel.wakeup_fd = dup(src->u.channel.wakeup_fd); if (obj->u.channel.wakeup_fd < 0) { - ret = errno; + ret = -errno; goto chan_error_wakeup_fd; } } else { @@ -1293,7 +1293,7 @@ int lttng_ust_ctl_duplicate_ust_object_data(struct lttng_ust_abi_object_data **d obj->u.stream.wakeup_fd = dup(src->u.stream.wakeup_fd); if (obj->u.stream.wakeup_fd < 0) { - ret = errno; + ret = -errno; goto stream_error_wakeup_fd; } } else { @@ -1305,7 +1305,7 @@ int lttng_ust_ctl_duplicate_ust_object_data(struct lttng_ust_abi_object_data **d obj->u.stream.shm_fd = dup(src->u.stream.shm_fd); if (obj->u.stream.shm_fd < 0) { - ret = errno; + ret = -errno; goto stream_error_shm_fd; } } else { @@ -1344,7 +1344,7 @@ int lttng_ust_ctl_duplicate_ust_object_data(struct lttng_ust_abi_object_data **d obj->u.counter_global.shm_fd = dup(src->u.counter_global.shm_fd); if (obj->u.counter_global.shm_fd < 0) { - ret = errno; + ret = -errno; goto error_type; } } @@ -1358,7 +1358,7 @@ int lttng_ust_ctl_duplicate_ust_object_data(struct lttng_ust_abi_object_data **d obj->u.counter_cpu.shm_fd = dup(src->u.counter_cpu.shm_fd); if (obj->u.counter_cpu.shm_fd < 0) { - ret = errno; + ret = -errno; goto error_type; } }