Le's profileSomething like a home pa...PhotosBlogListsMore ![]() | Help |
|
September 27 今天尝试做了两件事一件未完成,一件基本完成。 基本完成的是升级ps3上的gentoo的内核到2.6.30。 不过发现有个bug,现在git clone ps3的git tree,看看是否还有。还有的话,我的内核补丁又要多一个了。 未完成的是一个诡异的2f盒子上的bug。 如果单启动X,然后再起一个firefox/pidgin,X就会死掉。再起xterm没事。 本来以为是X的补丁的问题。 后来发现startx没事。 后来发现死的原因是X的main里的无限循环里一个循环结束了,又开始了一个新的循环。 又一次执行了InitOutput,这里面最终会再次映射sysfs里显卡的resource文件到X的地址空间。 但实际上已经映射过了,libpciaccess在这种情况下会返回错误EINVAL。 因为我对X的工作机制还不完全了解,所以目前无法断定问题在哪里。 现在先记录一下,有空再来看。 明天要上班,调休。 国庆放11天假,但有两天是“强制”放掉的年假,囧…… 中国特色…… September 19 深圳自由软件日归来今天! 今天是一个繁忙的日子! 首先是准备演讲稿。 然后华为找我问问题。 然后去找莫老师吃饭,但是因为华为的事情耽误了,我到了吃饭的地方已经吃完了。 然后wjj载我去深大参加自由软件日活动。 jx和莫老师同行,在深大照了像。然后莫老师就去赶飞机了。 真是不好意思,老人家好不容易来一趟,我却没赶上跟老头子吃顿饭。 然后就是自由软件日活动。 原来这次活动主要是Sun赞助的。 深大的java学会搞的。Szlug协助。 4个演讲: 1. JavaFX 2. 原计划是gentoo,临时改成一个讲根据哼唱搜索歌曲的(主讲人非我,其实本来我很期待的,因为有别人肯讲gentoo,说不定真有世外高人) 3. AlacrityVM http://groups.google.com/group/szlug/msg/9a7881a931f183ea 4. iRedMail http://groups.google.com/group/szlug/browse_thread/thread/e5cb65b4c62cb541 不是自买自夸,不过后两个才真正像自由软件日上应该出现的演讲。 前面两个几乎没有互动。后两个讲者和观众的互动很多,特别是张煌彬的演讲。 我们两个都在讲述技术之外,穿插了一些自由软件的相关名词,自由软件社区的价值取向,行事方法的介绍。 相信对于不甚熟悉此道的听众来说,还是有些启发意义的。 这才是自由软件日应该起到的作用。 Last but not least,要感谢深大能提供聚会的场地,感谢lug众兄弟的捧场,感谢sun的赞助,嘿嘿 September 17 This is where I live in shenzhenSeptember 13 公开我的配置文件 说明:这是我自用的,顺便供大家参考(如果有需要的话)。 请不要照搬,除非你了解里面每个选项的意义。否则出了事情,我不负任何责任,:) 首批加入的有screenrc和vimrc。 我发现在华为,没有这两个东西,我的效率大减。 http://www.gentoo-cn.org/gitweb/?p=rconf.git git clone git://www.gentoo-cn.org/var/git/rconf.git AlacrityVM昨天从美国来的CTO/VP Moiz Kohari那里知道AlacrityVM这么个东西,还是蛮振奋人心的。 http://developer.novell.com/wiki/index.php/AlacrityVM http://lwn.net/Articles/345296/ KVM和Xen虽然都不是Novell的,但Novell也有自己的东西,:) September 06 生于忧患,死于安乐舜发于畎亩之中,傅说举于版筑之中,胶鬲举于鱼盐之中,管夷吾举于士,孙叔敖举于海,百里奚举于市。 关于extern inline EDIT:更新了第四条 首先inline在任何gcc版本里应该都是有效的,只是要开优化 其次extern inline并不会导致函数不被inline,只是要开优化 第三extern inline和static inline是有区别的。引用Linus的解释: * "static inline" means "we have to have this function, if you use it but don't inline it, then make a static version of it in this compilation unit" * "extern inline" means "I actually _have_ an extern for this function, but if you want to inline it, here's the inline-version" 这意味着在使用extern inline的情况下,假如不inline该函数,则必须在其他编译单元里 定义该函数。否则就和函数未定义一样,undefined reference to ... 第四,gcc 4.3之后,应该使用__extern_inline(定义于<sys/cdefs.h>,非编译器关键字,仅适用于userland),否则在-std=c99或者gnu99的情况下,会出现函数多次定义。 参考: http://zhllg.spaces.live.com/blog/cns!956A48A2D7ED7265!231.entry http://zhllg.spaces.live.com/blog/cns!956A48A2D7ED7265!2816.entry 好好研究了一下前段时间那个Null pointer dereference漏洞 http://lwn.net/Articles/349999/ 所有的第一手资料都可以在上面的连接里找到。 简单分析一下: 首先,这个漏洞的起源在于部分协议的.sendpage函数指针没有初始化,为0。那么在sendpage系统调用到这个函数指针所指向的函数时,实际上就是跳转到0x0这个地址上去执行放在那里的代码了。只要能把你想执行的代码事先先放在那里,就行了。你想让你的代码做什么事情都可以。但最有吸引力的无疑是利用这段代码赋予当前进程root权限。直接赋予,因为是运行在内核态。这个漏洞利用的实质就是在用户态控制内核态将会执行的代码,这是核心所在。在2.6.23之前(不包括2.0)的内核里,实现起来没有任何险阻。但在2.6.23及其之后的内核上实现起来还要经历一个坎。 因为,就是为了防止此类问题的再次发生,2.6.23以后的内核有一个/proc/sys/vm/mmap_min_addr文件,里面定义了可以mmap的最小地址,默认是4096,也就是说0号页不可以mmap。那就没有办法往里面放东西了。 然而,如果有SELinux的话,在某些条件下,这个mmap_min_addr是不起效的,那样就可以映射0号页。或者如果没有SELinux,可以利用MMAP_PAGE_ZERO personality(这依赖于内核的另一个bug)。这需要一个可以以不exec一个独立程序的形式执行我们指定的代码setuid root程序。pulseaudio正是这样一个选择。具体过程如下:我们设定进程的personality,令其包含MMAP_PAGE_ZERO,然后再exec这个suid程序。因为有MMAP_PAGE_ZERO(bug即在此,suid程序执行前应清除这个personality),同时有root权限,所以需要且可以映射0号页。假如以exec独立程序的形式来执行我们执行代码,那么在映射0号页(因为有MMAP_PAGE_ZERO)的时候,因为root权限已经被丢弃(一般的安全常识,所以suid程序作者都会这样做),所以cap_file_mmap()函数就会失败,无法exec我们的程序。而pulseaudio可以通过-L选项来指定一个共享库来执行,无需exec,且pulseaudio进程本身已经映射了0号页。虽然只是只读,可执行,但我们可以重新映射为可写。 至于0x0处的代码的具体实现,在x86上就是jmp $8, 0x8处放置的就是我们指定的函数的地址。 总结一下这个漏洞利用程序的流程: 1. 假如是2.6.23或以后版本的内核,利用SELinux或者pulseaudio来映射0号页;2.6.23之前的内核直接映射。 2. 在0x0地址上放上我们的可以获取root权限的代码 3. 创建某个可被攻击的Domain的socket,并调用sendpage()(就是调用0x0处的代码)。此步之后即获得root权限。 4. exec /bin/sh 最后的话: 1. 这个漏洞仅仅是本地权限提升,且依赖SELinux和pulseaudio(当然不是只有pulseaudio,但应该很少) 2. SELinux还是有作用,SELinux里连接网络的进程无论如何不可以映射0号页。所以最危险的是没有启用SELinux同时装了pulseaudio的机器。 September 02 2009 中国深圳自由软件日 https://spreadsheets.google.com/viewform?key=tN-RDqTevYOG3oHEyERFb7A 什么是自由软件日? http://softwarefreedomday.org/about 这是一个全球性的节日,深圳站的活动是其中的组成部分。 香港也有 http://wiki.opensource.hk/index.php/Software_Freedom_Day_2009,_Hong_Kong 可惜我分身乏术,囧 最近陷入了一种状态 明知道有很多事情要做,但却又不想开始动手,哎。 最后两天自由的时光,要努力珍惜一下。 PS: 我加入了Novell,职位是驻华为的技术支持工程师,专门帮他们解决各种有关Linux的疑难杂症,当然是发生在SUSE Linux上的。当然我也会顺便推广一下自由软件。不过后面这个任务更加艰巨,他们的桌面都是xp,他们不知道gentoo,不怎么知道龙芯,当然不太了解我是谁。有点不太爽。不过他们迟早会明白的。 昨天去华为看了看,周五再过去一趟。下周一正式上班。 |
|
|