Fetching /proc/<pid>/status entry after validation. 76/157576/1 accepted/tizen/4.0/unified/20171026.153011 submit/tizen_4.0/20171025.074110 tizen_4.0.IoT.p2_release tizen_4.0.m2_release
authorNishant Chaprana <n.chaprana@samsung.com>
Wed, 25 Oct 2017 05:46:07 +0000 (11:16 +0530)
committerhyunuktak <hyunuk.tak@samsung.com>
Wed, 25 Oct 2017 07:05:21 +0000 (16:05 +0900)
Description: This patch adds validation check before storing status
entries and assignes proper index for storing value.

In TM1 reference device kernel makes below entries in status file.
proc entry is like below:-
sh-3.2# cat /proc/373/status
Name:   stc-manager
State:  S (sleeping)
Tgid:   373
Pid:    373
PPid:   1
TracerPid:      0

However in Odroid reference device, kernel makes below entries in status.
sh-3.2# cat /proc/3404/status
Name:   stc-manager
State:  S (sleeping)
Tgid:   3404
Ngid:   0
Pid:    3404
PPid:   1
TracerPid:      0

Odroid kernel has an extra entry "Ngid" which breaks current extraction logic.
So added logic to match entry key before extracting value when reading status file.

Change-Id: I393ed476919fc8c101a8ce6a11ab835230a39021
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
Signed-off-by: hyunuktak <hyunuk.tak@samsung.com>
include/stc-manager-util.h
packaging/stc-manager.spec
src/helper/helper-procfs.c
src/monitor/stc-app-lifecycle.c

index d504cf3..2275b85 100755 (executable)
@@ -339,14 +339,23 @@ static inline bool strstart_with(const char *str, const char *with)
 
 #define PROC_BUF_MAX 64
 #define PROC_NAME_MAX 1024
-#define PROC_STATUS_CNT 6
+#define PROC_STATUS_CNT 7
 
 #define PROC_STATUS_NAME 0
 #define PROC_STATUS_STATE 1
 #define PROC_STATUS_TGID 2
-#define PROC_STATUS_PID 3
-#define PROC_STATUS_PPID 4
-#define PROC_STATUS_TRACERPID 5
+#define PROC_STATUS_NGID 3
+#define PROC_STATUS_PID 4
+#define PROC_STATUS_PPID 5
+#define PROC_STATUS_TRACERPID 6
+
+#define PROC_STATUS_NAME_STR "Name:"
+#define PROC_STATUS_STATE_STR "State:"
+#define PROC_STATUS_TGID_STR "Tgid:"
+#define PROC_STATUS_NGID_STR "Ngid:"
+#define PROC_STATUS_PID_STR "Pid:"
+#define PROC_STATUS_PPID_STR "PPid:"
+#define PROC_STATUS_TRACERPID_STR "TracerPid:"
 
 #define COMMA_DELIMETER ","
 
index 51f366d..b67e5ea 100644 (file)
@@ -1,6 +1,6 @@
 Name:       stc-manager
 Summary:    STC(Smart Traffic Control) manager
-Version:    0.0.40
+Version:    0.0.41
 Release:    0
 Group:      Network & Connectivity/Other
 License:    Apache-2.0
index 168c34a..8710fa2 100755 (executable)
@@ -177,8 +177,10 @@ int proc_get_raw_cmdline(pid_t pid, char *buf, int len)
 int proc_get_status(pid_t pid, char status[][PROC_BUF_MAX])
 {
        unsigned int i;
+       unsigned int index = 0;
        char path[PROC_BUF_MAX];
        char status_buf[PROC_BUF_MAX];
+       bool updated[PROC_STATUS_CNT] = {FALSE, };
        FILE *fp;
 
        snprintf(path, sizeof(path), "/proc/%d/status", pid);
@@ -195,13 +197,39 @@ int proc_get_status(pid_t pid, char status[][PROC_BUF_MAX])
                        return STC_ERROR_FAIL;
                }
 
+               if (!updated[PROC_STATUS_NAME] && strstr(status_buf,
+                                                        PROC_STATUS_NAME_STR))
+                       index = PROC_STATUS_NAME;
+               else if (!updated[PROC_STATUS_STATE] && strstr(status_buf,
+                                                              PROC_STATUS_STATE_STR))
+                       index = PROC_STATUS_STATE;
+               else if (!updated[PROC_STATUS_TGID] && strstr(status_buf,
+                                                             PROC_STATUS_TGID_STR))
+                       index = PROC_STATUS_TGID;
+               else if (!updated[PROC_STATUS_NGID] && strstr(status_buf,
+                                                             PROC_STATUS_NGID_STR))
+                       index = PROC_STATUS_NGID;
+               else if (!updated[PROC_STATUS_PID] && strstr(status_buf,
+                                                            PROC_STATUS_PID_STR))
+                       index = PROC_STATUS_PID;
+               else if (!updated[PROC_STATUS_PPID] && strstr(status_buf,
+                                                             PROC_STATUS_PPID_STR))
+                       index = PROC_STATUS_PPID;
+               else if (!updated[PROC_STATUS_TRACERPID] && strstr(status_buf,
+                                                                  PROC_STATUS_TRACERPID_STR))
+                       index = PROC_STATUS_TRACERPID;
+               else
+                       continue;
+
                token = strtok_r(status_buf, ":", &saveptr);
                if (token != NULL) {
                        token = strtok_r(NULL, "\n", &saveptr);
                        if (token != NULL) {
                                while (isspace((unsigned char)*token))
                                        token++;
-                               strncpy(status[i], token, sizeof(status[i]));
+                               strncpy(status[index], token,
+                                       sizeof(status[index]));
+                               updated[index] = TRUE;
                        }
                }
        }
index eb18816..1cd8e9d 100755 (executable)
@@ -395,6 +395,8 @@ static void __process_event_fork(int tgid, int pid)
        char cmdline[PROC_NAME_MAX] = {0, };
        char status[PROC_STATUS_CNT][PROC_BUF_MAX];
 
+       memset(status, 0x0, sizeof(status));
+
        if (STC_ERROR_NONE == proc_get_cmdline(pid, cmdline) &&
            STC_ERROR_NONE == proc_get_status(pid, status)) {
 
@@ -443,6 +445,8 @@ static void __process_event_exec(int tgid, int pid)
        char cmdline[PROC_NAME_MAX] = {0, };
        char status[PROC_STATUS_CNT][PROC_BUF_MAX];
 
+       memset(status, 0x0, sizeof(status));
+
        if (STC_ERROR_NONE == proc_get_cmdline(pid, cmdline) &&
            STC_ERROR_NONE == proc_get_status(pid, status)) {