注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

瘋人院

lunatic asylum

 
 
 

日志

 
 

android paranoid 网络  

2011-04-08 00:39:30|  分类: android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
android paranoid 网络是一个对linux内核网络部分的改动,通过这个改动增加了网络的认证机制。这个特性通过宏ANDROID_PARANOID_NETWORK来进行使能。
主要影响了linux源代码中的下面这些文件:
net/ipv4/af_inet.c: IPV4的协议文件
net/ipv6/af_inet6.c: IPV6的协议文件
net/bluetooth/af_bluetooth.c: 蓝牙的协议文件
security/commoncap.c: 安全性的文件

事实上,af_inet.c,af_inet6.c和af_bluetooth.c是3种不同的网络协议中处理协议方面的文件,它们在逻辑上是并列的。
android的头文件include/linux/android_aid.h中定义了关于网络的部分AID,这个内容和标准的linux有所区别,如:
#ifndef _LINUX_ANDROID_AID_H
#define _LINUX_ANDROID_AID_H
#define AID_NET_BT_ADMIN 3001
#define AID_NET_BT 3002
#define AID_INET 3003
#define AID_NET_RAW 3004
#define AID_NET_ADMIN 3005
#endif

在net/ipv4/af_inet.c中,相关的内容如:
#ifdef CONFIG_ANDROID_PARANOID_NETWORK
#include <linux/android_aid.h>
static inline int current_has_network(void)
{
return in_egroup_p(AID_INET) || capable(CAP_NET_RAW);
}
#else
static inline int current_has_network(void)
{
return 1;
}
#endif

在这个地方,进一步检查了AID,如果符合才返回1,如果没有附加这个特性,则直接返回1。

在安全性的文件security/commoncap.c中,相关的内容如:
int cap_capable(struct task_struct *tsk,const struct cred *cred,int cap,int audit)
{
#ifdef CONFIG_ANDROID_PARANOID_NETWORK
if(cap == CAP_NET_RAW && in_egroup_p(AND_NET_RAW))
return 0;
if(cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))
return 0;
#endif
return cap_raised(cred->cap_effective,cap)? 0 : -EPERM;
}
这里是检查能力方面,增加了对AID的判断。如果AID符合,则直接返回0,不再使用cap_raised()函数进行处理。
  评论这张
 
阅读(889)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017