Use secure_getenv when available to fix untrusted source issue 75/318475/2 accepted/tizen_9.0_unified accepted/tizen_unified_toolchain tizen_9.0 accepted/tizen/9.0/unified/20241030.233714 accepted/tizen/unified/20241004.041901 accepted/tizen/unified/toolchain/20241022.122404 accepted/tizen/unified/toolchain/20241022.122846 accepted/tizen/unified/x/20241006.082059 accepted/tizen/unified/x/asan/20241013.235817 tizen_9.0_m2_release
authorduna.oh <duna.oh@samsung.com>
Mon, 30 Sep 2024 09:00:19 +0000 (18:00 +0900)
committerduna.oh <duna.oh@samsung.com>
Mon, 30 Sep 2024 09:08:25 +0000 (18:08 +0900)
Change-Id: I8c0fb08450eee9a0895fbf2437c2dd525075ef2f

meson.build
src/evdev.c
src/libinput-private.h
src/libinput.c

index 242921e2fda637cba107876a012959a7995cd97c..a5c41885806fef7858dc18f3622adb34abea6f3d 100644 (file)
@@ -181,6 +181,16 @@ if cc.has_function('input_set_default_property', dependencies : dep_udev)
        config_h.set10('HAVE_INPUT_SET_DEFAULT_PROPERTY', 1)
 endif
 
+############ check setcure_getenv function  ############
+
+if cc.has_header_symbol('stdlib.h', 'secure_getenv', prefix: prefix)
+       config_h.set('HAVE_SECURE_GETENV', 1)
+elif cc.has_header_symbol('stdlib.h', '__secure_getenv', prefix: prefix)
+       config_h.set('HAVE___SECURE_GETENV', 1)
+else
+       message('C library does not support secure_getenv, using getenv instead')
+endif
+
 ############ udev bits ############
 
 if get_option('udev-enable')
index 7a8944720f25114b3456e365056e374e1bf29326..5f4c4aab5dab3381b9e0d9c4baf93c9573b84608 100644 (file)
@@ -2059,7 +2059,7 @@ evdev_configure_device(struct evdev_device *device)
        }
 
        if (udev_tags & EVDEV_UDEV_TAG_JOYSTICK) {
-               env = getenv("LIBINPUT_IGNORE_JOYSTICK");
+               env = secure_getenv("LIBINPUT_IGNORE_JOYSTICK");
                if (env && atoi(env) == 1) {
                        evdev_log_info(device,
                                 "input device '%s' have joystick, ignoring\n",
@@ -2454,7 +2454,7 @@ udev_device_should_be_ignored(struct udev_device *udev_device)
        if (value && !streq(value, "0")) return true;
 
        // for TIZEN, add checking if joystick should be ignored or not.
-       env = getenv("LIBINPUT_IGNORE_JOYSTICK");
+       env = secure_getenv("LIBINPUT_IGNORE_JOYSTICK");
        if (env && atoi(env) == 1) {
                value = udev_device_get_property_value(udev_device,
                                                       "ID_INPUT_JOYSTICK");
index f85a2b457c5ff75e5483012f25139a14f68ce04c..55542ffc07b922ceb379a253060ee62732020631 100644 (file)
 #define TRACE_INPUT_END()
 #endif
 
+#if defined(HAVE_SECURE_GETENV)
+# define secure_getenv secure_getenv
+#elif defined(HAVE___SECURE_GETENV)
+# define secure_getenv __secure_getenv
+#else
+# define secure_getenv getenv
+#endif
+
 struct libinput_source;
 
 /* A coordinate pair in device coordinates */
index 2ee23ee6c8d2c853f9f9f0066086744324859ff2..96fb99ef15295a5b0c647b10a74e6e7844b82c40 100644 (file)
@@ -2354,7 +2354,7 @@ close_restricted(struct libinput *libinput, int fd)
 bool
 ignore_litest_test_suite_device(struct udev_device *device)
 {
-       if (!getenv("LIBINPUT_RUNNING_TEST_SUITE") &&
+       if (!secure_getenv("LIBINPUT_RUNNING_TEST_SUITE") &&
            udev_device_get_property_value(device, "LIBINPUT_TEST_DEVICE"))
                return true;