C数据类型引发的安全隐患
来源:互联网 发布:淘宝店铺链接怎么弄 编辑:程序博客网 时间:2024/05/04 09:12
来自于对《深入理解操作系统》的笔记整理
2002年从事FreeBSD的开源操作系统的getpeername函数简化后如下:
void *memcpy(void*user_dest,void*src,size_t n);#define KSIZE 1024char kbuf[KSIZE];int copy_from_kernel(void*user_dest,int maxlen){ int len=KSIZE<maxlen?KSIZE:maxlen; memcpy(user_dest,kbuf,len); return len;}
copy_from_kernel函数是要将一些操作系统内核维护的数据复制到
指定的用户可以访问的存储区域。对于用户来说,大多数内核维护的数据结构是不可以读的
因为这些数据结构可能包含其他用户和系统上运行的其他作业的敏感信息,但是kbuf的区域是用户
可以读的。参数maxlen给出的是分配给用户的缓冲区的长度,这个缓冲区是用参数user_dest指示的
”int len=KSIZE<maxlen?KSIZE:maxlen;“该语句确保复制的字节数据不会超出源或者目标缓冲区可用范围。
不过,假设有些怀有恶意的程序员在调用copy_from_kernel的代码的时候对maxlen使用了负数值
,那么,”int len=KSIZE<maxlen?KSIZE:maxlen;“该语句最小值计算会把这个值给len,然后len作为参数
n被传递给memcpy,不过参数n是size_t,在stdio.h中通过typedef定义的,典型的在32位的机器上被定义为unsigned
int 既然n是无符号的,那么memcpy会把这个数当成一个非常大整数。虽然赋值了那么多字节,至少2^31个实际不会完成
因为程序会遇到进程中的非法地址错误,但是程序还是能够读到没有被授权的内核存储器的区域
可以看到,这个问题是由于数据类型不匹配造成的,在一个地方长度参数是有符号的,在另一个地方是无符号的
这样不匹配会造成缺陷,甚至导致安全漏洞。
这是我再一次感到数据类型重要性,警醒。
0 0
- C数据类型引发的安全隐患
- printf数据类型引发的血案
- 图像数据类型引发的思考
- 迅驰WI-FI漏洞引发个人安全隐患
- 关于浏览器的安全隐患
- 应用程序快捷方式的安全隐患
- 招聘网站的安全隐患
- Weblogic的几个安全隐患
- Html的安全隐患
- open_basedir的安全隐患
- 多线程的安全隐患
- 多线程的安全隐患
- 多线程的安全隐患
- 【C++】指针引发的bug
- 数据类型强制转换引发的一些意想不到的错误
- 一道面试题引发的对数据类型转换的思考
- Html标签带来的安全隐患
- 7.2 Email服务的安全隐患
- Valid Parentheses
- 探索tinyxml的编译
- Text Reverse hdoj 1062
- error:structure required on left side of . or .*
- 【DP】 HDOJ 4939 Stupid Tower Defense
- C数据类型引发的安全隐患
- 程序员既要写好代码,又要写好文档
- 余弦曲线
- sublime text2使用教程
- Python学习系列(六)(模块)
- 毛泽东十大军事原则
- HDU1695(欧拉+容斥)
- hdu2010 水仙花数20140812.cpp
- HTML 在 输入框右边加入图标