太原网站建设推广公司推荐,成都网站建设技术外包,锦州网站建设哪家好,worldpress做网站今天读着读着Linux代码#xff0c;竟然无意中发现Linux 0.11内核有个小bug#xff0c;呵呵#xff0c;人非圣贤孰能无过。// 在目录项数据块中搜索匹配指定文件名的目录项#xff0c;首先让de 指向数据块#xff0c;并在不超过目录中目录项数// 的条件下#xff0c;循环执…今天读着读着Linux代码竟然无意中发现Linux 0.11内核有个小bug呵呵人非圣贤孰能无过。// 在目录项数据块中搜索匹配指定文件名的目录项首先让de 指向数据块并在不超过目录中目录项数// 的条件下循环执行搜索。i 0;de (struct dir_entry *) bh-b_data;while (i entries)...{// 如果当前目录项数据块已经搜索完还没有找到匹配的目录项则释放当前目录项数据块。if ((char *)de BLOCK_SIZEbh-b_data)...{brelse(bh);bh NULL;// 在读入下一目录项数据块。若这块为空则只要还没有搜索完目录中的所有目录项就跳过该块// 继续读下一目录项数据块。若该块不空就让de 指向该目录项数据块继续搜索。if (!(block bmap(*dir,i/DIR_ENTRIES_PER_BLOCK)) || !(bh bread((*dir)-i_dev,block)))...{i DIR_ENTRIES_PER_BLOCK;continue;}de (struct dir_entry *) bh-b_data;}// 如果找到匹配的目录项的话则返回该目录项结构指针和该目录项数据块指针退出。if (match(namelen,name,de))...{*res_dir de;return bh;}// 否则继续在目录项数据块中比较下一个目录项。de;i;}其中 if (!(block bmap(*dir,i/DIR_ENTRIES_PER_BLOCK)) || !(bh bread((*dir)-i_dev,block))) 如果bh读取失败将跳出本次循环然而在下次循环时又会引用bh这个结构指针因为上次调用是失败的所以可能出现内存无效引用导致出现错误。不过听赵博说这个错误其实 很少发生或者几乎不会发生所以一直到Linux 1.00版这个bug才修正