Add additional check for threads supgid pointers
authorTomasz Swierczek <t.swierczek@samsung.com>
Mon, 10 Jun 2019 10:18:51 +0000 (12:18 +0200)
committerTomasz Swierczek <t.swierczek@samsung.com>
Tue, 11 Jun 2019 04:48:47 +0000 (06:48 +0200)
According to implementation of readtask (proc/readproc.c),
the pointers could be NULL in specific implementations.

Change-Id: If1e8308c517ddbfbd500f7c5822c80dd3225df0c

src/client/check-proper-drop.cpp

index da006385ec32cc0dc1a4c59ec10432f9d2fbbdb7..33c74a9cd7aab57ccb81f1a6539423608513f9b6 100644 (file)
@@ -108,18 +108,24 @@ bool CheckProperDrop::checkThreads()
             REPORT_THREAD_ERROR(thread->tid, "Smack label",
                 smackProc, smackThread);
 
-        if (strcmp(m_proc->supgid, thread->supgid))
-            REPORT_THREAD_ERROR(thread->tid, "Supplementary groups",
-                m_proc->supgid, thread->supgid);
-
-            CHECK_THREAD_CRED_FIELD(m_proc, thread, euid);
-            CHECK_THREAD_CRED_FIELD(m_proc, thread, egid);
-            CHECK_THREAD_CRED_FIELD(m_proc, thread, ruid);
-            CHECK_THREAD_CRED_FIELD(m_proc, thread, rgid);
-            CHECK_THREAD_CRED_FIELD(m_proc, thread, suid);
-            CHECK_THREAD_CRED_FIELD(m_proc, thread, sgid);
-            CHECK_THREAD_CRED_FIELD(m_proc, thread, fuid);
-            CHECK_THREAD_CRED_FIELD(m_proc, thread, fgid);
+        if (m_proc->supgid && thread->supgid) {
+            if (strcmp(m_proc->supgid, thread->supgid))
+                REPORT_THREAD_ERROR(thread->tid, "Supplementary groups",
+                    m_proc->supgid, thread->supgid);
+        } else {
+            if (m_proc->supgid != thread->supgid)
+                REPORT_THREAD_ERROR(thread->tid, "Supplementary groups",
+                m_proc->supgid ? m_proc->supgid : "<NULL>",
+                thread->supgid ? thread->supgid : "<NULL>");
+        }
+        CHECK_THREAD_CRED_FIELD(m_proc, thread, euid);
+        CHECK_THREAD_CRED_FIELD(m_proc, thread, egid);
+        CHECK_THREAD_CRED_FIELD(m_proc, thread, ruid);
+        CHECK_THREAD_CRED_FIELD(m_proc, thread, rgid);
+        CHECK_THREAD_CRED_FIELD(m_proc, thread, suid);
+        CHECK_THREAD_CRED_FIELD(m_proc, thread, sgid);
+        CHECK_THREAD_CRED_FIELD(m_proc, thread, fuid);
+        CHECK_THREAD_CRED_FIELD(m_proc, thread, fgid);
     }
 
     return true;