gpt4 book ai didi

c - sizeof 取消引用的指针未确定?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:51 27 4
gpt4 key购买 nike

Linux内核中的代码(可能是驱动):

https://us.codeaurora.org/cgit/quic/la/kernel/msm/tree/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c?id=38110df3021daf7740018f4b5cc61423c7382aac

检查 *data_ptr 的大小

sizeof(*data_ptr)

像这样:

uint32_t *data_ptr = cfg_data +
reg_cfg_cmd->u.rw_info.cmd_data_offset/4;

if ((UINT_MAX - sizeof(*data_ptr) <
reg_cfg_cmd->u.rw_info.reg_offset) ||
(resource_size(vfe_dev->vfe_mem) <
reg_cfg_cmd->u.rw_info.reg_offset +
sizeof(*data_ptr))) {
pr_err("%s: VFE_WRITE_MB: Invalid length\n", __func__);
return -EINVAL;
}

是尺寸

uint32_t *data_ptr

不确定?看起来应该总是4字节。


更新:

如果是,是什么意思

UINT_MAX - sizeof(*data_ptr)

?

其实是安全检查,这里出现漏洞。代码稍后被修补:

https://us.codeaurora.org/cgit/quic/la//kernel/msm/commit/?id=8ad163e831a2b2c30551edb360f168a604cdb0bb

最佳答案

不,它可能不是四个字节。标准(即 ISO)C 中的一个字节不一定是八位。标准在提到具体的 8 位项目时通常会使用术语“八位位组”。

一个字节是最小大小的自然数据元素。如果这是 16 位数据类型,则 int32_t 的大小将为 2 而不是 4。

鉴于运行 Linux 及其同类产品的架构种类繁多,您可能应该考虑到诸如此类的变化。鉴于 C 代码经常会进入完全不同的系统的可能性,如果可能的话,最好拥有可移植代码(尤其是如果它不花你任何钱的话)。

关于c - sizeof 取消引用的指针未确定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37338253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com