2013-03-21 2 views
1

내 커널 모듈이 과부하 상태에서 일부 스매싱을 수행하는 것처럼 보입니다. 커널 모듈에 대해 -fstack-check 컴파일 옵션을 사용할 수 있습니까? 컴파일 옵션으로 인해 컴파일러에서 추가 코드를 내보내지만 라이브러리 나 런타임에 연결하지 않는 것처럼 보입니다. 그 맞습니까?내 Ubuntu 10.04 커널 모듈을 컴파일 할 때 -fstack-check을 사용할 수 있습니까?

필자는 커널을 매우 단순화 시켰습니다. 그 단순한 커널을 slub 디버깅이 가능하거나 불가능하게로드 할 수 있으며, 컴파일시에 -fstack-check을 사용하거나 사용하지 않고로드 할 수 있습니다. 모듈 테스트를 시작할 때 -fstack-check 컴파일 옵션을 사용하면 충돌이 발생하지만 slub 디버깅으로는 오류가 발생하지 않습니다.

다른 질문 (How does the gcc option -fstack-check exactly work?)이 일부 정보를 제공했지만 커널 모듈 컴파일에서 -fstack-check 옵션을 사용하는 사람들의 예제를 찾을 수 없었습니다.

답변

0

리눅스 커널 내부의 스택 공간은 이며, 심각하게는입니다. 괜찮은 빗으로 코드를 살펴보고 로컬 변수에서 너무 많이 사용하는 경로가 없는지 확인하십시오. alloca()은 허용되지 않습니다. 은 모두입니다. 그 외에도 커널 환경은 가혹합니다. 신중하게 논리를 확인하십시오. 가능하면 범위를 벗어나는 데이터에 대한 테스트를 추가하고, 데이터가 어디에서 왔는지를 추적하고 항상 믿는대로 확인하십시오. 사용자 지역의 데이터는 입니다. 항상으로 추가 편집증의 원인이됩니다.