android 限制adb的访问目录

来源:互联网 发布:免费的视频剪辑软件 编辑:程序博客网 时间:2024/06/10 21:15

最近有个特殊的要求,engneer版本既要可以adb访问,且adb有的目录不能访问 如/data/目录。

用传统的chmod chgrp等无法满足客户需求,只能修改内核文件系统部分。 添加函数,检查路径的合法性

主要是修改内核函数do_path_lookup (namei.c):

 

static  int is_valid_path(char * pathname, char * pname){     int plength = strlen(pname);     int pathlength = strlen(pathname);     int errorno=-1;     int i=0;      char buf[6][50]={"","/","./","../","../../","../../../"};     if (pathlength >  plength)     {         printk(" pathlength >  pname\n");          return 0;     }     for (i=0;i<6;i++)     {                   printk("i is %d \n",i);            strcat(buf[i],pathname);            char * buftemp=buf[i];    printk("shit buftemp is %s \n",buftemp);            int buftemplength=strlen(buftemp);    if ( buftemplength !=  plength)           {                 continue;           }            if(!strcmp(buftemp,pname))            {                  return  errorno;            }     }     return 0;}/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */static int do_path_lookup(int dfd, const char *name,unsigned int flags, struct nameidata *nd){       int retval = 0;        int errorno=-1;       if (strcmp("sh", current->comm)) //当前进程的名字{      goto normal;}         if (strcmp("adbd", current->real_parent->comm)) // 进程父亲的名字{           goto normal;}       // white list  adb 要支持运行需要这些库的支持,故直接跳过       if(!strncmp("/system/lib",name,strlen("/system/lib")))       {              goto  normal;       }             // 这里只是限制/data 和 /system 目录,直接返回错误             // 应用层则认为找不到这个目录或文件       if (is_valid_path("data",name)){    return errorno;}if (is_valid_path("system",name)){    return errorno;}        normal:retval = path_init(dfd, name, flags, nd);if (!retval)retval = path_walk(name, nd);if (unlikely(!retval && !audit_dummy_context() && nd->path.dentry &&nd->path.dentry->d_inode))audit_inode(name, nd->path.dentry);if (nd->root.mnt) {path_put(&nd->root);nd->root.mnt = NULL;}return retval;}

原创粉丝点击