- UID
- 556
- 积分
- 3260
- 回帖
- 0
- 贡献
-
- 金钱
-
- 注册时间
- 2012-7-25
- 最后登录
- 1970-1-1
- 在线时间
- 小时
TA的每日心情 | 奋斗 2021-3-1 17:39 |
---|
签到天数: 234 天 连续签到: 1 天 [LV.7]雪女
|
struct group_info init_groups = { .usage = ATOMIC_INIT(2) };
struct group_info *groups_alloc(int gidsetsize){
struct group_info *group_info;
int nblocks;
int i;
nblocks = (gidsetsize + NGROUPS_PER_BLOCK - 1) / NGROUPS_PER_BLOCK;
/* Make sure we always allocate at least one indirect block pointer */
nblocks = nblocks ? : 1;
group_info = kmalloc(sizeof(*group_info) + nblocks*sizeof(gid_t *), GFP_USER);
if (!group_info)
return NULL;
group_info->ngroups = gidsetsize;
group_info->nblocks = nblocks;
atomic_set(&group_info->usage, 1);
if (gidsetsize <= NGROUPS_SMALL)
group_info->blocks[0] = group_info->small_block;
else {
for (i = 0; i < nblocks; i++) {
gid_t *b;
b = (void *)__get_free_page(GFP_USER);
if (!b)
goto out_undo_partial_alloc;
group_info->blocks = b;
}
}
return group_info;
out_undo_partial_alloc:
while (--i >= 0) {
free_page((unsigned long)group_info->blocks);
}
kfree(group_info);
return NULL;
}
EXPORT_SYMBOL(groups_alloc);
void groups_free(struct group_info *group_info)
{
if (group_info->blocks[0] != group_info->small_block) {
int i;
for (i = 0; i < group_info->nblocks; i++)
free_page((unsigned long)group_info->blocks);
}
kfree(group_info);
}
EXPORT_SYMBOL(groups_free);
/* export the group_info to a user-space array */
static int groups_to_user(gid_t __user *grouplist,
const struct group_info *group_info)
这代码你看得懂吗?
(其实我也看不懂,也许老大看得懂)
这是个奇葩的网站,只要你在键盘上随便敲,就会打出真的C代码。
传送门:http://hackertyper.net/
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?创建账号
×
评分
-
查看全部评分
|