1
안녕하십니까 SO-커널 모듈에서 kfree 사용
kmallocs 및 kfrees를 처음 사용하면서 오류가 발생했습니다.
struct module* mod;
const struct kernel_symbol* ksymbol;
ksymbol = kmalloc(sizeof(struct kernel_symbol), GFP_KERNEL);
if(!sym | !dst | (dst_sz <= 0)) return -EFAULT;
mutex_lock(&module_mutex);
mod = (struct module*)kmalloc(sizeof(struct module), GFP_KERNEL);
ksymbol = find_symbol(sym, &mod, NULL, true, false);
if(!mod){
for(i = 0; i < dst_sz; i++) dst[i] = '\0';
mutex_unlock(&module_mutex);
kfree(ksymbol);
kfree(mod);
return SUCCESS;
}
나는 (MOD 모듈이 커널에 내장 할 때입니다!) 다른 경우가있어,하지만 왜이 오류를 생산? 처음에는 ...
kfree(ksymbol);
kfree(mod);
mutex_unlock(&module_mutex);
return SUCCESS;
그리고 segfaults가 발생했습니다. 아마도 잠금을 해제하기 전에 해제 할 수 없기 때문에 아마도 생각 했었습니다. 그래서 더 큰 코드 섹션에 표시된 것과 같이 뮤텍스 잠금을 맨 위에 놓았습니다. 그냥 "살해"라고 말합니다. 내가 뭘 잘못하고 있니?
성취하고자하는 바가 무엇인지 설명해 주시겠습니까? 나는'struct module' 인스턴스를 수동으로 생성 할 필요가 없다고 생각합니다. 그렇다고하더라도 새로 할당되고 아직 초기화되지 않은'struct module'에서'find_symbol()'을 호출하면 커널이 최상의 결과를 낼 수 있습니다. 아마, 당신이 보았던 것일 수도 있습니다 (사용자 공간 프로세스에 대해 "Killed", 시스템 로그에 oops 보고서가 있어야합니다). – Eugene