Fix: Use negative value for error code of lttng_ust_ctl_duplicate_ust_object_data
authortakeshi.iwanari <takeshi.iwanari@tier4.jp>
Fri, 24 Jun 2022 13:17:39 +0000 (22:17 +0900)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 27 Jun 2022 14:38:25 +0000 (10:38 -0400)
[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 <takeshi.iwanari@tier4.jp>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Iccb01930413ecd5a8c58ad267e9c4eca53694dc7

liblttng-ust-ctl/ustctl.c

index 39860ebf011870e7a9601f72d8f3b996c3e4cdc1..2dbac411876bbaabefdacfafad896daf06e70363 100644 (file)
@@ -915,7 +915,7 @@ int ustctl_duplicate_ust_object_data(struct lttng_ust_object_data **dest,
                        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 {
@@ -951,7 +951,7 @@ int ustctl_duplicate_ust_object_data(struct lttng_ust_object_data **dest,
                        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 {
@@ -963,7 +963,7 @@ int ustctl_duplicate_ust_object_data(struct lttng_ust_object_data **dest,
                        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 {
This page took 0.028617 seconds and 4 git commands to generate.