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:34:16 +0000 (10:34 -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

src/lib/lttng-ust-ctl/ustctl.c

index 94d8484328dc03fa05a3a78b5bb2a6be908355e6..bcbd9c66c2a2b01da949e7f85a6a3628a34c49dc 100644 (file)
@@ -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;
                        }
                }
This page took 0.027448 seconds and 4 git commands to generate.