最近有同学在Android S(12)
上遇到了一个奇怪的网络问题,说自己的audio HAL
服务尝试通过以太网创建socket
与其他局域网的节点通讯时,总是提示Operation Not Permitted
。原先怀疑是Selinux
的问题,但是目前在开发版本中selinux
是完全关闭的;从问题发生的现象看,只有属于audioserver
这个UID
的进程才有问题,其他的如system/root
的进程则没有问题。
据此,我们可以推断,audioserver
这个UID
的进程没有相关权限,所以导致无法使用局域网的网络。记得在早前的Android
版本中,很多网络系统调用会通过netd
代理进行权限检查,比如socket/connect/bind
等系统调用都会先通过netdClient
这个库的接口进行权限检查,而后才真正进行系统调用。