delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

08 Jan 2006

一个不太明显的安全问题

在内核里面,程序的结构大概是这样:

函数开始……
struct bar foo;

某些处理(没动foo),然后……
strlcpy(foo.field, k->field, sizeof(k->field));

其他对foo其他字段的赋值处理……

最后
error = copyout(&foo, someaddress, sizeof(foo));

现在问题来了,上面这些东西的问题是什么?应该如何解决?

答案:上述代码引入了一个安全问题,这个安全问题可能导致内核某些敏感数据的泄露。

注意,foo是在栈上分配的,但是,编译器没有责任对其进行清零操作。由于使用了strlcpy,缓冲区可能包含某些不希望用户看到的内容。(最多泄露长度-1字节的内核内存)。