Linux内核分配缓存以消除const警告



我的目标是在内核模块中编写一个允许获得根访问权限的函数。在初始时间,我得到了这个:

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缓存)

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的原因是你不应该改变或替换它,因此内核恐慌

相关内容

最新更新