Fix static analysis issues 38/226038/5
authorTomasz Swierczek <t.swierczek@samsung.com>
Wed, 26 Feb 2020 07:57:20 +0000 (08:57 +0100)
committerTomasz Swierczek <t.swierczek@samsung.com>
Fri, 28 Feb 2020 13:28:31 +0000 (14:28 +0100)
Change-Id: I202fff30f54d5ebab946f73d4e8fa827b49b3e35

src/client/client-security-manager.cpp

index 64a593aaea39204c13242c11c3641560b21e60a1..005af57ede734b6a26ea08df66cfff9c6fac968b 100644 (file)
@@ -665,9 +665,17 @@ static int security_manager_set_process_groups_internal(const std::vector<gid_t>
     size_t fi = 0, ai = 0, size = 0;
     gid_t forbg = -1, allog = -1;
     int ret;
-    gid_t grp[NGROUPS_MAX+1];
+    gid_t *grp = static_cast<gid_t*>(malloc(sizeof(gid_t) * (NGROUPS_MAX + 1)));
 
-    ret = getgroups(sizeof grp / sizeof *grp, grp);
+    if (!grp) {
+        LogError("Unable to allocate memory for supplementary groups");
+        return SECURITY_MANAGER_ERROR_MEMORY;
+    }
+
+       auto deleter = [&](gid_t* ptr){free(ptr);};
+    std::unique_ptr<gid_t, decltype(deleter)> scopedGidBuffer(grp, deleter);
+
+    ret = getgroups(NGROUPS_MAX + 1, grp);
     if (ret < 0) {
         LogError("Unable to get list of current supplementary groups: " <<
             GetErrnoString(errno));