设为首页 加入收藏

TOP

C语言中数据类型不一致导致安全性漏洞-memcpy()的参数 int 与 unsigned
2014-11-24 08:10:21 来源: 作者: 【 】 浏览:0
Tags:言中 数据 类型 一致 导致 安全性 漏洞 -memcpy 参数 int unsigned

//库函数memcpy()的声明
void *memcpy(void *dest, void *src, size_t n);


//核心内存区域,拥有用户可访问的数据
#define KSIZE 1024
char kbuf[KSIZE];


//最多可以从核心内存中向用户内存区复制maxlen字节的数据
int copy_from_kernel(void *user_dest, int maxlen){
//所复制的字节数是缓冲区大小与maxlen中的较小者。
int len = KSIZE < maxlen KSIZE : maxlen;
memcpy(user_dest, kbuf, len);
return len;
}


copy_from_kernel() 与 memcpy()的长度参数类型不一致,一个int 型,另一个是size_t(实际上是unsigned int)。如果有恶意程序员在调用copy_from_kernel()时将长度参数设置为负数,那么memcpy()会把它当成一个很大的正数。虽然等复制这么多(至少231个) 实际上不会完成,因为程序会遇到进程中非法地址的错误,但是程序还是能读到没有被授权的内核存储器区域。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇标准C语言<string.h>中的st.. 下一篇C语言判断两个整数相加会不会溢出

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)