Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当rootfs为只读且/tmp为noexec时,Python ctypes分段错误_Python_Python 2.7_Segmentation Fault_Ctypes_Cpython - Fatal编程技术网

当rootfs为只读且/tmp为noexec时,Python ctypes分段错误

当rootfs为只读且/tmp为noexec时,Python ctypes分段错误,python,python-2.7,segmentation-fault,ctypes,cpython,Python,Python 2.7,Segmentation Fault,Ctypes,Cpython,我正在尝试在运行Linux的Arm处理器上(从X86/Linux交叉编译的CPython 2.7.3)使用Python实现嵌入式应用程序。在我开始保护设备以防止篡改之前,它工作得非常好。首先,我将rootfs设置为只读,既可以防止在突然断电时rootfs损坏,也可以防止未经授权的用户修改我们的主代码。尽管如此,python和我们的ctypes库仍然正常工作。/tmp目录被映射到tmpfs(ramdrive)。强化的另一个步骤是在tmpfs分区上设置noexec标志,以防止用户以某种方式上传可能导

我正在尝试在运行Linux的Arm处理器上(从X86/Linux交叉编译的CPython 2.7.3)使用Python实现嵌入式应用程序。在我开始保护设备以防止篡改之前,它工作得非常好。首先,我将rootfs设置为只读,既可以防止在突然断电时rootfs损坏,也可以防止未经授权的用户修改我们的主代码。尽管如此,python和我们的ctypes库仍然正常工作。/tmp目录被映射到tmpfs(ramdrive)。强化的另一个步骤是在tmpfs分区上设置noexec标志,以防止用户以某种方式上传可能导致本地根攻击的任何代码。设置了这两个选项后,导入ctypes会立即产生segfault:

root@ATX4:~# python                                 
Python 2.7.3 (default, Jul 16 2013, 17:15:57) 
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
Segmentation fault
有趣的是,下面的任何更改都允许ctypes正常工作:

  • 以读写方式重新安装rootfs
  • 在没有noexec的情况下重新安装tmpfs
  • 在没有noexec的情况下重新安装/dev/shm

  • 知道是什么引起的吗?现在,我已经在没有noexec的情况下安装了/dev/shm,并且只将其限制在尽可能少的用户中。

    我无法用Python 2.7.6复制这一点

    我怀疑这可能是一个有效的错误

    考虑到ctypes可能需要创建一个唯一的回调(一个可执行的C级函数)。它将
    mmap
    execute位设置为匿名(ok)或共享文件(not ok)


    内存错误处理总是很难,开发人员很容易逃脱。

    导入ctypes调用,这会创建回调。跳过,调用libffi
    ffi\u closure\u alloc
    。请看。您是否在
    ffi\u closure\u alloc
    dlmmap
    dlmmap\u locked
    上设置了断点?我想你最终会遇到后者,它会遍历选项数组。你还能重现这个问题吗?如果是,请在发生崩溃的配置中,将
    /proc/mounts
    的内容发布到您的设备上?ctypes/libffi解析该文件,因此可能会在那里崩溃。遗憾的是,我不再参与该项目,也无法访问硬件来获取该信息。这在Python 2.7.7遇到这个问题(或类似问题)时得到了跟踪(似乎已经解决)