我的目标是在内核模块中编写一个允许获得根访问权限的函数。
在最初的时间我得到了这个:
struct task_struct *cur_task;
struct cred *credz;
/*obtain root access*/
cur_task=current;
credz=cur_task->cred;
credz->uid=0;
credz->gid=0;
credz->suid=0;
credz->sgid=0;
credz->euid=0;
credz->egid=0;
它可以工作,但我试图删除关于const变量的警告。
所以我试着用内存拷贝来绕过它。但我有一个核心恐慌。
我认为我的错误是内存分配(kmem cache)
static struct kmem_cache *cred_jar; //global
char func(void){
struct task_struct *cur_task;
const struct cred *old;
struct cred *credz;
cred_jar = kmem_cache_create("cred_jar", sizeof(struct cred), 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
credz = kmem_cache_alloc(cred_jar, GFP_KERNEL);
if (!credz){
return 0;
}
/* obtain root access in shell*/
cur_task=current;
/**/
old = cur_task->cred;
/* remove warning const */
memcpy(credz, old, sizeof(struct cred));
credz->uid=0;
credz->gid=0;
credz->suid=0;
credz->sgid=0;
credz->euid=0;
credz->egid=0;
cur_task->cred=credz;
kfree(old);
}
如果你有什么想法可以改正的话,我很感兴趣。
最佳答案
我认为它被标记为const
的原因是您不应该更改或替换它,因此内核恐慌