Android定制权限重名引起的问题

Android允许开发者在manifest文件里声明和使用权限(permission)。声明的权限可以在不同的app里使用。如果不同的app声明了同名的权限,就可能会发生一些与预期不符的现象,并产生一些安全隐患。

在官方文档里,并没有找到Android如何裁定同名权限声明的资料。按照网上的一些说法以及实际发生的情况来看,第一个安装并声明权限的app,决定了这个权限的所有属性。后续安装app的权限声明将被忽略。

权限属性中比较重要的一个,保护级别(protectionLevel),决定了一个权限能否被使用。如果保护级别设为签名级别,那么只有第一个声明权限的应用可以使用这个权限,其他声明同名权限但签名不同的应用,会因为被第一个声明所覆盖,签名不符,而无法使用该权限。

更危险的是,如果一个关键app声明了签名权限,另外一个间谍软件声明了同名的正常权限,间谍软件先安装的话,会导致关键app的权限降级,间谍软件也就可以取得本该关键app才可取得的权限了。

Android 5.0对这种情况进行了一些修正。系统只允许签名相同的app,声明同名权限。后安装的,签名不同的app,会报INSTALL_FAILED_DUPLICATE_PERMISSION,应用无法安装。

参考资料:https://github.com/commonsguy/cwac-security/blob/master/PERMS.md(分析非常全面的一篇文章)

### VIPT 缓存中的重名问题解决方案 VIPT(Virtually Indexed Physically Tagged)缓存设计通过结合虚拟索引和物理标签来提高性能并减少 TLB 查找开销。然而,在某些情况下可能会出现所谓的“重名问题”,即不同的虚拟地址可能映射到相同的物理地址,从而导致缓存中存储的数据不一致。 #### 1. L1 Cache 中的 TAG 设计规避重名问题 在多核处理器架构中,L1 缓存通常采用 VIPT 方案,并在其 TAG 部分记录完整的物理地址范围 `physical address[39:12]`[^1]。这种设计确保即使多个虚拟地址映射到同一个物理地址,也可以通过精确匹配物理地址部分来区分不同条目。因此,只要 TAG 比较机制正常工作,就不会因虚拟地址的不同而引发数据冲突或歧义。 #### 2. VA 和 PA 映射的一致性保障 针对是否存在 `va[12] == pa[12]` 的疑问以及其对转换过程的影响,实际实现中已明确规定了这一关系。具体来说,由于页偏移量固定为 12 位 (对应于 4KB 页面大小),所以在同一页面内的任何访问都不会改变低 12 位的值[^4]。这进一步减少了潜在的干扰可能性。 #### 3. 别名管理策略 尽管如此,当 cache size 较大时仍可能出现别名现象——即相同物理位置被多次加载至缓存中。为了避免这种情况带来的负面影响,现代 CPU 往往采取如下措施: - **强制替换算法优化**: 当检测到新请求涉及已有项所代表之同一物理区域时,优先淘汰后者而非简单新增副本。 - **全局唯一标识符引入**: 对每笔进入高速缓冲区的信息附加额外标志字段(如时间戳),以便后续判断哪些版本更接近最新状态,进而决定保留哪个实例. 以下是伪代码展示如何处理上述逻辑: ```python def handle_cache_access(virtual_address): physical_tag = translate_virtual_to_physical(virtual_address)[39:12] index = calculate_index_from_vaddr(virtual_address) cached_entry = get_cached_entry(index) if cached_entry and cached_entry.physical_tag == physical_tag: return cached_entry.data # If not found or mismatched tags... evicted_data = replace_policy.select_for_replacement() store_new_data(evicted_data.index, virtual_address, physical_tag) ``` 此方法有效解决了由 VIPT 架构引起的重复命名难题,同时兼顾效率与准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值