]> Zhao Yanbai Git Server - minix.git/commitdiff
Message type for PM_GROUPS
authorLionel Sambuc <lionel@minix3.org>
Tue, 13 May 2014 12:14:49 +0000 (14:14 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:36 +0000 (17:05 +0200)
Change-Id: I9e3b784143dd0294a8aad27e3cc588e5b57dabfc

include/minix/callnr.h
include/minix/ipc.h
lib/libc/sys-minix/getgroups.c
lib/libc/sys-minix/setgroups.c
servers/pm/getset.c

index e8bd7a8d63fec54d16ecc37a7ffe00e3a7951de3..51c9103c9b4d080ee87058faeb6707f5ca63854e 100644 (file)
 /* Field names for the setsid(2) call. */
 #define PM_GETSID_PID          m1_i1   /* pid_t */
 
-/* Field names for the setgroups(2)/setgroups(2) calls. */
-#define PM_GROUPS_NUM          m1_i1   /* int */
-#define PM_GROUPS_PTR          m1_p1   /* gid_t * */
-
 /* Field names for the getmcontext(2)/setmcontext(2) calls. */
 #define PM_MCONTEXT_CTX                m1_p1   /* mcontext_t * */
 
index 421380efb7e966b3a97765bbf2ca67a1f995f8c9..77c854a6d2d10964d1d13d71f9c83896397727f6 100644 (file)
@@ -145,6 +145,14 @@ typedef struct {
 } mess_sigcalls;
 _ASSERT_MSG_SIZE(mess_sigcalls);
 
+typedef struct {
+       int num;
+       vir_bytes ptr;          /* gid_t * */
+
+       uint8_t padding[48];
+} mess_lc_pm_groups;
+_ASSERT_MSG_SIZE(mess_lc_pm_groups);
+
 typedef struct {
        int which;
        vir_bytes value;        /* const struct itimerval * */
@@ -1000,6 +1008,7 @@ typedef struct {
                mess_fs_vfs_readsuper   m_fs_vfs_readsuper;
                mess_fs_vfs_readwrite   m_fs_vfs_readwrite;
 
+               mess_lc_pm_groups       m_lc_pm_groups;
                mess_lc_pm_itimer       m_lc_pm_itimer;
                mess_lc_pm_priority     m_lc_pm_priority;
                mess_lc_pm_ptrace       m_lc_pm_ptrace;
index edda7e08e90290f8c5f781e3c6a62263ea1d4eb9..e1c6f5e81762b60c91a507398eb00442f1f6e345 100644 (file)
@@ -14,8 +14,8 @@ int getgroups(int ngroups, gid_t *arr)
   message m;
 
   memset(&m, 0, sizeof(m));
-  m.PM_GROUPS_NUM = ngroups;
-  m.PM_GROUPS_PTR = (char *) arr;
+  m.m_lc_pm_groups.num = ngroups;
+  m.m_lc_pm_groups.ptr = (vir_bytes)arr;
 
   return(_syscall(PM_PROC_NR, PM_GETGROUPS, &m));
 }
index c5aab68c4c491d01393602d1c0483a6c140b3516..ed5ac47d0561f8a18779742d451d197bf48c22f1 100644 (file)
@@ -10,8 +10,8 @@ int setgroups(int ngroups, const gid_t *gidset)
   message m;
 
   memset(&m, 0, sizeof(m));
-  m.PM_GROUPS_PTR = (char *) __UNCONST(gidset);
-  m.PM_GROUPS_NUM = ngroups;
+  m.m_lc_pm_groups.ptr = (vir_bytes)gidset;
+  m.m_lc_pm_groups.num = ngroups;
 
   return(_syscall(PM_PROC_NR, PM_SETGROUPS, &m));
 }
index 347213ebcb4f45c88b8ca0efeba11ddb0665fc42..b6a21e0fc374a2bd3bc20818d3e49579c58cc966 100644 (file)
@@ -26,7 +26,7 @@ int do_get()
 
   switch(call_nr) {
        case PM_GETGROUPS:
-               ngroups = m_in.PM_GROUPS_NUM;
+               ngroups = m_in.m_lc_pm_groups.num;
                if (ngroups > NGROUPS_MAX || ngroups < 0)
                        return(EINVAL);
 
@@ -40,8 +40,7 @@ int do_get()
                        return(EINVAL);
 
                r = sys_datacopy(SELF, (vir_bytes) rmp->mp_sgroups, who_e,
-                       (vir_bytes) m_in.PM_GROUPS_PTR,
-                       ngroups * sizeof(gid_t));
+                       m_in.m_lc_pm_groups.ptr, ngroups * sizeof(gid_t));
 
                if (r != OK)
                        return(r);
@@ -140,15 +139,15 @@ int do_set()
                if (rmp->mp_effuid != SUPER_USER)
                        return(EPERM);
 
-               ngroups = m_in.PM_GROUPS_NUM;
+               ngroups = m_in.m_lc_pm_groups.num;
 
                if (ngroups > NGROUPS_MAX || ngroups < 0) 
                        return(EINVAL);
 
-               if (ngroups > 0 && m_in.PM_GROUPS_PTR == NULL)
+               if (ngroups > 0 && m_in.m_lc_pm_groups.ptr == 0)
                        return(EFAULT);
 
-               r = sys_datacopy(who_e, (vir_bytes) m_in.PM_GROUPS_PTR, SELF,
+               r = sys_datacopy(who_e, m_in.m_lc_pm_groups.ptr, SELF,
                             (vir_bytes) rmp->mp_sgroups,
                             ngroups * sizeof(gid_t));
                if (r != OK)