• 某些机root也不能访问dma-buf


    从4.3后,回顾《从surfaceflinger历史变更谈截屏》,只能通过生产消费者队列向surfaceflinger服务申请显示缓冲,这个缓冲就是dma-buf映射的共享内存。

    binder服务受selinux安全服务管制,root权限的程序也必须受selinux策略限制,所以必须放行。

    程序顺利通过surfaceflinger服务取出一帧显示缓冲,但是缓冲内容却无法访问。

    通过查看进程的内存映射有

    上面的那就是dma-buf,用于显示的帧缓冲都是通过共享映射访问dma-buf。上面的 's' 标记指明了映射区间为共享share,相对于私有 'p'。但是问题来了,就是Cannot access memory at address,不能访问dma-buf映射过来的内存,尽管映射的权限为rw-s。

    即使通过gdb重定义内存区间的属性,也无效

    内存区间被重定义了,其它区间是不可访问

    2018.04.12

    补充: 在gdb调试中,不能通过ptrace,对进程的 io-map 地址进行访问。在 stackflow上找到两条相关的 thread,才恍然觉悟。

    https://stackoverflow.com/questions/3640095/gdb-cant-access-mmapd-kernel-allocated-memory

    https://stackoverflow.com/questions/654393/examining-mmaped-addresses-using-gdb

  • 相关阅读:
    Hyperledger Fabric笔记3--BYFN启动流程分析
    Hyperledger Fabric笔记2--运行fabric测试网络
    uva1639 Candy
    uva12230Crossing Rivers
    uva1638Pole Arrangement
    uva12034Race
    uva580Critical Mass
    uva1637Double Patience
    uva11181Probability|Given
    uva1262Password
  • 原文地址:https://www.cnblogs.com/bbqzsl/p/8624146.html
Copyright © 2020-2023  润新知