博文

目前显示的是 六月, 2013的博文

一个绝妙的 exploit

    Oen 通过 Google 阅读器发送给您的内容:     一个绝妙的 exploit 于 13-5-15 通过 A Geek's Page 作者:王 聪 最近 Linux 内核爆出了一个严重的安全漏洞,非root用户可以通过该 漏洞的 exploit 获取root权限。这并不罕见,值得一提的是这个补丁看起来如此平常以至于我们绝大多数人都不会以为这是安全问题。 先看这个问题的 补丁 ,就是下面这个: static int perf_swevent_init(struct perf_event *event) { - int event_id = event->attr.config; + u64 event_id = event->attr.config; if (event->attr.type != PERF_TYPE_SOFTWARE) return -ENOENT; 我们第一眼的感觉就是这大概只是修复了编译器报的一个小警告吧,怎么会引起如此严重的安全问题呢? 在没打补丁的代码中 event_id 是个 带符号 的整型,而且就在下面不远处的两行代码中只检查了其上界: PLAIN TEXT C: if ( event_id> = PERF_COUNT_SW_MAX )                 return - ENOENT; 而如果传递进来的 event->attr.config 值正好设置了符号位,那么 event_id 就会变成负值,而且能躲过上面的检查。 负值意味着什么呢?再继续看后面的代码: PLAIN TEXT C: if ( ! event - >parent ) {                 int err;                   err = swevent_hlist_get ( event ) ;                 if ( err ) ...

binary array search的几种写法(go)

图片
    Oen 通过 Google 阅读器发送给您的内容:     binary array search的几种写法(go) 于 13-6-3 通过 shenfeng's blog 儿童节那天, 对比了python内置的dict和binary array search查找的性能 ,dict大幅领先,有些出乎意料: dict虽然是O(1),binary search是O(log n)。当n为1M时,log n也仅有20,并且直观上log n前面的常数不大,理论上应该和O(1)差别不是很大 怀疑到python语言,binary array search是由手工python实现,而dict是C实现。python语言比C慢很多 所以,6月2日,用go语言来对比一下,也熟悉一下go语言。 binary search有几种写法: recusive : 递归 3-branch : 迭代,每次迭代进行2次判断 == , < (或者 > ),三个分支。找到后,立刻退出。最好情况为O(1) 2-branch : 迭代,每次迭代进行1次判断 < (或者 > ),二个分支。最好情况也为O(log n) library : go标准库 sort.Search ,它是3的通用版本,需要提供一个函数,用来提供 > 或 < 的依据 2-branch 3的想法比较有意思,它是先计算出对于要查找的数,如果放入这个已经排好序的数组array,下标是多少。如果在array里,有重复,返回的是则是第一个的下标。最后再对比一下数组里面的数,是否正是需要查找的key func binary_search2 ( arr [] int , key int ) int { lo , hi := 0 , len ( arr ) - 1 for lo < hi { mid := ( lo + hi ) / 2 if arr [ mid ] < key { lo = mid + 1...

公司这个利益组织

图片
    Oen 通过 Google 阅读器发送给您的内容:     公司这个利益组织 于 13-5-29 通过 扯氮集--上海魏武挥的博客 - 扯氮集--上海魏武挥的博客 作者:魏武挥 春秋吴越战争,勾践在范蠡和文种的帮助下,卧薪尝胆,终于把吴给灭了,成就霸业。范蠡决定跑路,勾践许诺"共分越国",范蠡回"君行其法,我行其意。"文种挽留,范蠡反过来劝说:"狡兔死,走狗烹;高鸟尽,良弓藏。越王为人,长颈鸟喙,可与共患难,不可与共荣乐,先生何不速速出走?"文种未听,后被赐剑而死。 范蠡说越王长相如何,由此而得"可共患难而不可共荣乐"。这话有点神神叨叨,论据不足。但范蠡说的是人性。大概率情况而言,的确人都是"可共患难不可共荣乐的",为了赌一个小概率结果,把阖家性命押上,非智者所为。 公司亦然。 互联网企业,绝大部分都实施股权制或期权制,公司以为重要的人都会安排股权期权激励。一方面,对于很多创业公司而言,工资不高但要吸引人才,只好用股权期权来画个大饼。成功的榜样不是没有(据说百度上市时楼下的4S店都卖空了),比较有说服力。股权期权制,大有一丝丝的"共分越国"之意。在这个制度下,创始人会反复宣传这种理念:这个公司不仅仅是我的,也是大家的。嗯,有点那么个意思。 这套说法,涉世不深的年轻人很容易被忽悠进去,我也被忽悠过。关键在于,我认为我们现在的历史教育充其量只是在说故事,学史要知兴替,知兴替要明白里面的因果。范蠡的故事,就是可以用来知兴替的。不然只是知道范蠡跑了文种死了,有何意义? 说这个说法是忽悠,不是说它在撒谎。忽悠的意思是有真有假,有合理之处,也有荒谬之处。因为它没有细分两样东西,而这两样东西其实是不能混在一起说的。...

在新 Thinkpad S3 上使用 bcache 作为 Linux 的根分区

    Oen 通过 Google 阅读器发送给您的内容:     在新 Thinkpad S3 上使用 bcache 作为 Linux 的根分区 于 13-6-1 通过 我有分寸 作者:gnawux 前两天采购了一台"全球首发"的 Thinkpad S3 超级本 ,激动之余,就把不会用的 Windows 8 给抹掉,装上 Linux 了。这台机器的配置如下 CPU i5-3337U 内存 8GB 芯片组 Intel HM77 显卡 CPU集成 + Radeon HD 8670M 硬盘 500GB SATA + 24GB mSATA SSD 嗯,其他先不说了,亮点基本就这些。新机器,一大堆支持得不好的东西,比如 suspend to ram 我到现在还没配好,先不说了,这次主要说硬盘。 基本思路 这台机器有一块过小的 SSD 和一块主硬盘,因为SSD太小了,以至于我不想把哪个分区整体放到上面,于是,想到了分级存储的策略——使用SSD作为缓存,让热数据缓存在SSD上,冷数据留在机械硬盘上,是的,这个和被广泛宣传的 Apple 的 Fusion Drive 很类似,当然,Apple 不是第一个开发这种技术的公司。 在 Linux 上,最广为传颂的这类技术就是 bcache 了,但有一个问题,bcache 直到 3.10 才进入 kernel,而 3.10 到目前为止还只是 -rc3。也就是说,如果要装 Debian、Ubuntu、Fedora 的话,你至少要等半年,才能找到一张支持 bcache 的启动盘。不过,我还是想用下这个个 Distro,于是,就采用了这样一个思路(思路抄袭自 这个 Arch 的 Wikipage ,有调整): 先在 SSD 上装一个临时的系统 升级内核,支持 bcache 在主硬盘上做一个分区,作为 bcache 的后端存储 把装好的系统迁移到上面的 bcache 分区 修改 grub 重新启动,引导到 bca...