OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 252|回复: 0

linux spi驱动可能存在的数组越界问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2024-1-15
在线时间
2 小时
发表于 2024-7-28 13:44:39 | 显示全部楼层 |阅读模式
9金钱
imx6ull的spi驱动有这样一段函数:

/*
* @description        : 从icm20608读取多个寄存器数据
* @param - dev:  icm20608设备
* @param - reg:  要读取的寄存器首地址
* @param - val:  读取到的数据
* @param - len:  要读取的数据长度
* @return                 : 操作结果
*/
static int icm20608_read_regs(struct icm20608_dev *dev, u8 reg, void *buf, int len)
{

        int ret = -1;
        unsigned char txdata[1];
        unsigned char * rxdata;
        struct spi_message m;
        struct spi_transfer *t;
        struct spi_device *spi = (struct spi_device *)dev->private_data;

        t = kzalloc(sizeof(struct spi_transfer), GFP_KERNEL);        /* 申请内存 */
        if(!t) {
                return -ENOMEM;
        }

        rxdata = kzalloc(sizeof(char) * len, GFP_KERNEL);        /* 申请内存 */
        if(!rxdata) {
                goto out1;
        }

        /* 一共发送len+1个字节的数据,第一个字节为
        寄存器首地址,一共要读取len个字节长度的数据,*/
        txdata[0] = reg | 0x80;                /* 写数据的时候首寄存器地址bit8要置1 */                       
        t->tx_buf = txdata;                        /* 要发送的数据 */
    t->rx_buf = rxdata;                        /* 要读取的数据 */
        t->len = len+1;                                /* t->len=发送的长度+读取的长度 */
        spi_message_init(&m);                /* 初始化spi_message */
        spi_message_add_tail(t, &m);/* 将spi_transfer添加到spi_message队列 */
        ret = spi_sync(spi, &m);        /* 同步发送 */
        if(ret) {
                goto out2;
        }
       
    memcpy(buf , rxdata+1, len);  /* 只需要读取的数据 */

out2:
        kfree(rxdata);                                        /* 释放内存 */
out1:       
        kfree(t);                                                /* 释放内存 */
       
        return ret;
}


这里的rxdata = kzalloc(sizeof(char) * len, GFP_KERNEL);申请了len长度的char数组,为什么memcpy(buf , rxdata+1, len);可以复制到rxdata+len地址的数据?这样不会数组越界吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 12:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表