#include <linux/cred.h>
#include <linux/export.h>
#include <linux/slab.h>
#include <linux/security.h>
#include <linux/sort.h>
#include <linux/syscalls.h>
#include <linux/user_namespace.h>
#include <linux/vmalloc.h>
#include <linux/uaccess.h>
struct group_info *groups_alloc(int gidsetsize)
{ … }
EXPORT_SYMBOL(…);
void groups_free(struct group_info *group_info)
{ … }
EXPORT_SYMBOL(…);
static int groups_to_user(gid_t __user *grouplist,
const struct group_info *group_info)
{ … }
static int groups_from_user(struct group_info *group_info,
gid_t __user *grouplist)
{ … }
static int gid_cmp(const void *_a, const void *_b)
{ … }
void groups_sort(struct group_info *group_info)
{ … }
EXPORT_SYMBOL(…);
int groups_search(const struct group_info *group_info, kgid_t grp)
{ … }
void set_groups(struct cred *new, struct group_info *group_info)
{ … }
EXPORT_SYMBOL(…);
int set_current_groups(struct group_info *group_info)
{ … }
EXPORT_SYMBOL(…);
SYSCALL_DEFINE2(getgroups, int, gidsetsize, gid_t __user *, grouplist)
{ … }
bool may_setgroups(void)
{ … }
SYSCALL_DEFINE2(setgroups, int, gidsetsize, gid_t __user *, grouplist)
{ … }
int in_group_p(kgid_t grp)
{ … }
EXPORT_SYMBOL(…);
int in_egroup_p(kgid_t grp)
{ … }
EXPORT_SYMBOL(…);