2012-01-23 2 views
2

void * 포인터로받은 버퍼가 스택에서 왔는지 아니면 다른 메신저 (vmalloc, kmalloc, ...)와 함께 할당되었는지 확인할 수있는 방법이 있습니까? 즉커널 버퍼가 스택에서 오는 것인지 어떻게 알 수 있습니까?

, 어떤 API 또는 트릭은 버퍼가 스택에서 오는 알고, is_vmalloc_addr 유사, 거기?

+0

왜이 사실을 알아야합니까? 일반적으로 데이터를 가지고 있고, 할당 된 위치를 기반으로하지 않고 원하는 것을 수행해야합니다. 솔루션이 있더라도 휴대용이 될 수 있을지는 의문입니다. 투표를 종료했습니다. –

+1

버퍼를 자체 메모리 공간 (MMU 등)을 가진 다른 구성 요소에 전달하려고합니다. 현재 구현은 kmalloc, vmalloc, ...으로 할당 된 버퍼에서 작동하지만 스택의 버퍼는 사용하지 않습니다. 문제는 두 가지입니다. 임시 해결 방법으로 지원되지 않고 반환 할 수 있고이 동작을 디버그 할 수 있기를 원합니다. – jcorbier

+0

2 개의 구성 요소에 자체 메모리 주소가있는 경우'kmalloc()/vmalloc()'에서 할당 한 주소와 함께 작동하는 이유를 이해할 수 없습니까? 어떻게 가상 주소를 공유합니까? –

답변

1

include/linux/sched.h에서 object_is_on_stack()를 참조하십시오. 희망이 도움이됩니다.

+0

좋아 보인다. 나는 이것이 어떻게 그리울지 모르겠다. 나는 그것을 밖으로 시도 할 것이다. 감사! – jcorbier

관련 문제