July 2011 Archives

最近改一个用到 OpenSSL 的程序,顺手用 valgrind 抓了一下,发现很多"Conditional jump or move depends on uninitialised value(s)"的错误。发现 OpenSSL 的 FAQ 提到,在生成随机数时会将输入缓冲区(未初始化)的内容直接混入 entropy pool,使用 valgrind 时便会导致警告。

如果这种警告对调试产生困扰,则可以定义 PURIFY 来消除(从代码来看,PURIFY一共影响三处代码:crypto/rand/md_rand.c中,定义PURIFY会去掉将未初始化缓冲区作为输入参数追加到摘要中的过程;crypto/rand/randfile.c中一处在定义了 PURIFY 时会对 stat(2) 结构先进行清零初始化【这个对 FreeBSD 不是问题,FreeBSD的 stat(2) 覆盖整个返回缓冲区】,另一处则是不用缓冲区中未初始化的部分参与摘要追加。

理论上,定义了PURIFY会降低随机数生成过程的随机性,但会消除事先通过特定输入来影响某些内存内容导致对随机数发生结果的影响;不过因为有其他输入,因此这种影响导致的结果应该并不严重。不过,原则上安全程序应该尽量使用更多的 entropy 输入,而不是依赖这种不确定性吧?

.svn目录

| 3 Comments | No TrackBacks

今天同事跑来问我为什么没办法checkout一个子目录,发现svn提示说某个目录已有既有的、未有版本的副本(这是一个新的checkout)。

删除重新checkout,问题依旧。

检查之前的commit log,发现另外有人 svn rm 掉了 .svn 目录(看起来那个目录的内容是从其它地方复制过来)。

因为没有 svn 库本身的操作权限,也没有联系到事主(正规的做法是想办法干掉这个revision),所以尝试了下面的方法:

  1. 用 svn export (path)@revision 导出那个revision的那个子目录;
  2. 用 svn rm 直接删去有问题的子目录,commit
  3. 重新从副本添加那个目录

这样一来就可以checkout和正常操作了。不过,为什么 svn 会允许导入或删除 .svn 目录呢?哪位大牛帮忙解释一下?

嚷一嗓子

| No Comments | No TrackBacks

intron 因任满卸任,现水木社区的 FreeBSD 版需要一名版主。哪位去申请一下?

长久不做 SA,所以有些事情变得没有以前那么敏感。昨天终于还是出事了,不过幸亏不是商业系统,如果是的话,我觉得绝对够得上是重大事故。记一笔,留个教训。

简而言之,我自己的一个有邮件服务的域名,在通过 GoDaddy 的系统修改授权域名服务器的时候出了问题。这个问题应该是 GoDaddy 的 bug 导致的,但结果很严重,那个域名的 glue 记录被全部清空了。事后检查 whois 记录看到的状态如此:

Domain ID:D104XXXXXX-LROR
Domain Name:XXXXXXXXXX
Created On:XX-XX-XXXX XX:XX:XX UTC
Last Updated On:07-Jul-2011 XX:XX:XX UTC
Expiration Date:XX-XXX-XXXX XX:XX:XX UTC
Sponsoring Registrar:GoDaddy.com, Inc. (R91-LROR)
Status:CLIENT DELETE PROHIBITED
Status:CLIENT RENEW PROHIBITED
Status:CLIENT TRANSFER PROHIBITED
Status:CLIENT UPDATE PROHIBITED
Registrant ID:CR29XXXXX
Registrant Name:Xin LI
[...]
Tech FAX:
Tech FAX Ext.:
Tech Email:XXXXXXXXXXXXXXXXXXX
Name Server:
Name Server:
Name Server:
Name Server:
Name Server:
Name Server:
Name Server:
Name Server:
Name Server:
Name Server:
Name Server:
Name Server:
Name Server:
DNSSEC:Unsigned

对邮件系统来说,发生这种情况的后果是极其严重的。根据 RFC 5321,邮件系统对于停机问题的容忍时间至少是数个小时,然而当域名解析出现问题时,通常系统有理由立即以 4yz 回应来拒绝未进入邮件队列的邮件。所幸的是这个问题持续的时间不算太久,而且这个域名只是一个备用的邮件域名。

几点教训:

  1. 在修改域名配置之后要仔细检查其结果,对于这个问题,应在确认根 zone 更新之后检查域名的 glue 记录是否正常;
  2. 修改注册商处的域名配置时应确保前一操作已经完成后再进行下一步操作;
  3. 需要对域名服务进行监控。

在 /etc/sysctl.conf 中加入:

kern.sched.preempt_thresh=224

然后用 /etc/rc.d/sysctl start 或重启系统令其生效。

系统默认的值是 80,表示只有新优先级 < 80 时才允许抢占;224 表示非空闲线程均可以进行抢占。这样做的结果是系统会产生更多的切换,从而改善响应时间(牺牲吞吐量)。对桌面系统来说,这种设置是很有用的。

Monthly Archives

Pages

OpenID accepted here Learn more about OpenID
Powered by Movable Type 5.2.3