vip-process: disable vip by boot parameter 59/262759/1 accepted/tizen/unified/20210824.123813 submit/tizen/20210819.082047
authorYoungjae Cho <y0.cho@samsung.com>
Thu, 19 Aug 2021 07:30:45 +0000 (16:30 +0900)
committerYoungjae Cho <y0.cho@samsung.com>
Thu, 19 Aug 2021 07:40:01 +0000 (16:40 +0900)
If boot parameter 'tizen.vip_reboot_disable' is given, disable
vip-process module.

Change-Id: I816bc60e8e7674d96fdf0ea0fd2f09fa3732b0e1
Signed-off-by: Youngjae Cho <y0.cho@samsung.com>
src/common/procfs.c
src/common/procfs.h
src/vip-agent/vip-process.c

index 9f22727..9402910 100644 (file)
@@ -70,7 +70,11 @@ int proc_get_cmdline(pid_t pid, char *cmdline, size_t maxcmdline)
        char *filename;
        FILE *fp;
 
-       snprintf(buf, sizeof(buf), "/proc/%d/cmdline", pid);
+       if (pid == 0)
+               snprintf(buf, sizeof(buf), "/proc/cmdline");
+       else
+               snprintf(buf, sizeof(buf), "/proc/%d/cmdline", pid);
+
        fp = fopen(buf, "r");
        if (fp == NULL)
                return RESOURCED_ERROR_FAIL;
index 0ebcb0d..2560ae8 100644 (file)
@@ -234,7 +234,8 @@ enum {
 
 
 /**
- * @desc get command line from /proc/{pid}/cmdline
+ * @desc get command line from /proc/{pid}/cmdline if pid is greater than 0
+ * it get /proc/cmdline if pid is 0
  * @return negative value if error
  */
 int proc_get_cmdline(pid_t pid, char *cmdline, size_t maxcmdline);
index 4743833..aa8435b 100644 (file)
 
 #define SYSTEMD_UNIT_ESCAPE_CHAR       ".-"
 
+#define BOOT_PARAM_VIP_DISABLED        "tizen.vip_reboot_disable"
+
 static char **arg_vip_proc_names = NULL;
 static char **arg_vip_systemd_services = NULL;
 
-
 /* print log on console */
 static void vip_print_console(const char *format, ...)
 {
@@ -81,6 +82,18 @@ static void vip_print_console(const char *format, ...)
        fclose(fp);
 }
 
+static bool vip_boot_param_reboot_disabled(void)
+{
+       char cmdline[1024];
+       int retval;
+
+       retval = proc_get_cmdline(0, cmdline, sizeof(cmdline));
+       if (retval != RESOURCED_ERROR_NONE)
+               return false;
+
+       return (strstr(cmdline, BOOT_PARAM_VIP_DISABLED) != NULL);
+}
+
 /* copy of libsyscommon/libsystemd.c: systemd_get_unit_dbus_path() */
 static int vip_get_escaped_name(const char *unit, char **escaped)
 {
@@ -369,6 +382,11 @@ static int resourced_vip_process_init(void *data)
        _cleanup_close_ int checkfd = -1;
        int r;
 
+       if (vip_boot_param_reboot_disabled()) {
+               vip_print_console("[VIP] Reboot has been disabled, boot param: %s", BOOT_PARAM_VIP_DISABLED);
+               return RESOURCED_ERROR_NONE;
+       }
+
        r = access(CHECK_RELEASE_PROGRESS, F_OK);
        if (r == 0) {
                r = unlink(CHECK_RELEASE_PROGRESS);
@@ -424,6 +442,9 @@ static int resourced_vip_process_init(void *data)
 
 static int resourced_vip_process_finalize(void *data)
 {
+       if (vip_boot_param_reboot_disabled())
+               return RESOURCED_ERROR_NONE;
+
        strv_free_full(&arg_vip_proc_names);
        strv_free_full(&arg_vip_systemd_services);