2017-09-19 3 views
2

32 비트 사용자 공간 소프트웨어와 64 비트 커널이 있습니다. US 부분은 netlink 및 ioctls를 통해 커널 부분과 통신합니다. 64 비트에서 32 비트로 포인터를 변환하고 넷 링크에서 64 비트로 변환하는 문제가 있습니다.64 비트 커널과 32 비트 사용자 공간 간의 포인터 변환

포인터 크기와 관련 캐스트를 동일하게 유지해야한다는 가정하에 올바른지 확인하십시오. 더 많은 것이 있습니까? 커널이나 OSS 소스에서 예제로 사용할 수있는 것은 무엇입니까?

의견을 말하기 전에 - 아니요, 64 비트 툴체인으로 미국 부품을 다시 컴파일 할 수는 없습니다. 관련 바이너리가 있습니다.

+3

커널은 사용자 공간 제공 포인터 *를 어쨌든 * 신뢰할 수 없으므로 일부 (확인 된) 매핑을 사용해야합니다. – EOF

답변

0

결국 결국 커널 포인터를 숫자 (uint64_t에 캐스트)로 바꾼 다음 커널 공간에 다시 포인터를 캐스팅했습니다. 이것은 초기 디자인이 좋지 않아서 매우 좋지 않은 (!) 나쁜 해결책입니다.

관련 문제