编译内核后kernel panic,求助!
改写了security下的Root_plug.c 然后向想将其编译入内核,以前编译成功过。这次想改进一下,改进之后编译内核时可以通过,但是reboot之后就会报错: 有没有哪位遇到过类似情况的?请教如何解决?
无标题.jpg (138.04 KB, 下载次数: 17)
kernel panic
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
等答案! 改的啥!
回复 2# taojie2000
char* getfullpath(struct dentry *dentry)
{
char *path=NULL, *start=NULL;
char *fullpath=NULL;
const struct path *ppath = NULL;
struct fs_struct *fs = current->fs;
fullpath = kmalloc(PATH_MAX,GFP_KERNEL);
if(!fullpath) goto OUT;
memset(fullpath,0,PATH_MAX);
path = kmalloc(PATH_MAX,GFP_KERNEL);
if(!path) {
kfree(fullpath);
goto OUT;
}
//get the dentry and vfsmnt
read_lock(&fs->lock);
ppath =&fs->pwd;
read_unlock(&fs->lock);
//get the path
start = d_path(ppath,path,PATH_MAX);
strcat(fullpath,start);
kfree(path);
OUT:
return fullpath;
}
改之后
char* getfullpath(struct dentry *dentry)
{
char *path=NULL, *start=NULL;
char *fullpath=NULL;
const struct path *ppath = NULL;
const unsigned char *name=dentry->d_name.name;//新增
struct fs_struct *fs = current->fs;
char *name2=(char *)name;//新增
fullpath = kmalloc(PATH_MAX,GFP_KERNEL);
if(!fullpath) goto OUT;
memset(fullpath,0,PATH_MAX);
path = kmalloc(PATH_MAX,GFP_KERNEL);
if(!path) {
kfree(fullpath);
goto OUT;
}
//get the dentry and vfsmnt
read_lock(&fs->lock);
ppath =&fs->pwd;
read_unlock(&fs->lock);
//get the path
start = d_path(ppath,path,PATH_MAX);
strcat(fullpath,start);
strcat(fullpath,"/");//新增
strcat(fullpath,name2);//新增
kfree(path);
OUT:
return fullpath;
}
这个函数的作用是获得当前DENTRY 的绝对路径,原来那个就没有用到参数dentry,而只用CURRENT提取。提取出来的是dentry所在的目录并不包含dentry对应的文件名,所以我就想从传递来的dentry结构里提取出名字后加在路径的最后,我在想是不是 name和name2都没有kmalloc引起的。
自己顶 希望大家都来看看
自己顶 不要沉
没有前因后果,不知道怎么帮你分析
从 OOPS 信息上看,问题出在 dongyu_delete 函数偏移 0x0e 的指令位置
本帖最后由 1jjk 于 2011-06-14 11:07 编辑
分析分析
Can you post here output of disassemble of getfullpath? You can get
that by running gdb on vmlinux and then doing 'disass getfullpath'.
回复 6# platinum
以下是我这个root_plug的源码:
复制代码
本帖最后由 1jjk 于 2011-06-14 13:19 编辑
复制代码很明显,你没有check find的return,
不过最好还是把disassable后的打出来,分析一下
应该就是楼上说的原因,以前返回值说不定就是空的,只是没人用,所以不报错。