【问题标题】:Pointer conversion between 64 bit kernel and 32 bit userspace64位内核和32位用户空间之间的指针转换
【发布时间】:2017-10-04 17:55:06
【问题描述】:

我有一个 32 位用户空间软件和一个 64 位内核。 US 部分通过 netlink 和 ioctls 与内核部分通信。我在将指针从 64 位转换为 32 位并在 netlink 中转换回 64 位时遇到问题。

我只需要保持指针大小和相关转换相同的假设是否正确?还有更多吗?我可以使用内核或 OSS 源代码中的任何内容作为示例吗?

在您建议之前 - 不,我无法使用 64 位工具链重新编译 US 部分,其中涉及二进制文件。

【问题讨论】:

  • 内核不能信任用户空间提供的指针无论如何,所以它必须使用一些(检查过的)映射。

标签: linux-kernel arm 64-bit


【解决方案1】:

所以最后我将内核指针交换为数字(转换为 uint64_t),并在返回内核空间时将它们转换回指针。 这是一个非常(!)糟糕的解决方案,因为最初的设计很糟糕。

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 2011-05-15
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2012-01-21
    • 2011-07-10
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多