VYPR
Unrated severityNVD Advisory· Published Jun 9, 2026

CVE-2026-52907

CVE-2026-52907

Description

Linux kernel's rkcif driver has an off-by-one vulnerability, potentially leading to out-of-bounds array access.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Linux kernel's rkcif driver has an off-by-one vulnerability, potentially leading to out-of-bounds array access.

Vulnerability

The media: rockchip: rkcif driver in the Linux kernel contains off-by-one vulnerabilities. These issues arise from incorrect comparisons (> instead of >=) which allow access one element beyond the end of arrays. The affected versions are not explicitly stated, but the fix is present in the kernel version associated with reference [1] and [2].

Exploitation

An attacker would need to trigger the vulnerable code path within the rkcif driver. The exact conditions or user interaction required to reach this code path are not detailed in the provided references. However, the vulnerability lies in array boundary checks.

Impact

Successful exploitation of these off-by-one bugs could lead to out-of-bounds array access. This may result in memory corruption, denial of service, or potentially information disclosure, depending on the specific context and data being processed by the driver.

Mitigation

The vulnerability has been resolved in the Linux kernel versions associated with references [1] and [2]. Users should update to a patched kernel version. No specific workaround is mentioned, and the EOL status or KEV listing is not disclosed in the available references.

AI Insight generated on Jun 9, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected products

1

Patches

4
73e119036b3a

media: rockchip: rkcif: fix off by one bugs

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gitDan CarpenterFeb 20, 2026Fixed in 7.0.4via kernel-cna
1 file changed · +5 6
  • drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c+5 6 modified
    diff --git a/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c b/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    index 1b81bcc067efd..9e67160a16e46 100644
    --- a/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    +++ b/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    @@ -489,8 +489,8 @@ static inline unsigned int rkcif_mipi_get_reg(struct rkcif_interface *interface,
     
     	block = interface->index - RKCIF_MIPI_BASE;
     
    -	if (WARN_ON_ONCE(block > RKCIF_MIPI_MAX - RKCIF_MIPI_BASE) ||
    -	    WARN_ON_ONCE(index > RKCIF_MIPI_REGISTER_MAX))
    +	if (WARN_ON_ONCE(block >= ARRAY_SIZE(rkcif->match_data->mipi->blocks)) ||
    +	    WARN_ON_ONCE(index >= ARRAY_SIZE(rkcif->match_data->mipi->regs)))
     		return RKCIF_REGISTER_NOTSUPPORTED;
     
     	offset = rkcif->match_data->mipi->blocks[block].offset;
    @@ -510,9 +510,9 @@ static inline unsigned int rkcif_mipi_id_get_reg(struct rkcif_stream *stream,
     	block = stream->interface->index - RKCIF_MIPI_BASE;
     	id = stream->id;
     
    -	if (WARN_ON_ONCE(block > RKCIF_MIPI_MAX - RKCIF_MIPI_BASE) ||
    -	    WARN_ON_ONCE(id > RKCIF_ID_MAX) ||
    -	    WARN_ON_ONCE(index > RKCIF_MIPI_ID_REGISTER_MAX))
    +	if (WARN_ON_ONCE(block >= ARRAY_SIZE(rkcif->match_data->mipi->blocks)) ||
    +	    WARN_ON_ONCE(id >= ARRAY_SIZE(rkcif->match_data->mipi->regs_id)) ||
    +	    WARN_ON_ONCE(index >= ARRAY_SIZE(rkcif->match_data->mipi->regs_id[id])))
     		return RKCIF_REGISTER_NOTSUPPORTED;
     
     	offset = rkcif->match_data->mipi->blocks[block].offset;
    -- 
    cgit 1.3-korg
    
    
    
e4056b84af0f

media: rockchip: rkcif: fix off by one bugs

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gitDan CarpenterFeb 20, 2026Fixed in 7.1-rc1via kernel-cna
1 file changed · +5 6
  • drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c+5 6 modified
    diff --git a/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c b/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    index 1b81bcc067efd..9e67160a16e46 100644
    --- a/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    +++ b/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    @@ -489,8 +489,8 @@ static inline unsigned int rkcif_mipi_get_reg(struct rkcif_interface *interface,
     
     	block = interface->index - RKCIF_MIPI_BASE;
     
    -	if (WARN_ON_ONCE(block > RKCIF_MIPI_MAX - RKCIF_MIPI_BASE) ||
    -	    WARN_ON_ONCE(index > RKCIF_MIPI_REGISTER_MAX))
    +	if (WARN_ON_ONCE(block >= ARRAY_SIZE(rkcif->match_data->mipi->blocks)) ||
    +	    WARN_ON_ONCE(index >= ARRAY_SIZE(rkcif->match_data->mipi->regs)))
     		return RKCIF_REGISTER_NOTSUPPORTED;
     
     	offset = rkcif->match_data->mipi->blocks[block].offset;
    @@ -510,9 +510,9 @@ static inline unsigned int rkcif_mipi_id_get_reg(struct rkcif_stream *stream,
     	block = stream->interface->index - RKCIF_MIPI_BASE;
     	id = stream->id;
     
    -	if (WARN_ON_ONCE(block > RKCIF_MIPI_MAX - RKCIF_MIPI_BASE) ||
    -	    WARN_ON_ONCE(id > RKCIF_ID_MAX) ||
    -	    WARN_ON_ONCE(index > RKCIF_MIPI_ID_REGISTER_MAX))
    +	if (WARN_ON_ONCE(block >= ARRAY_SIZE(rkcif->match_data->mipi->blocks)) ||
    +	    WARN_ON_ONCE(id >= ARRAY_SIZE(rkcif->match_data->mipi->regs_id)) ||
    +	    WARN_ON_ONCE(index >= ARRAY_SIZE(rkcif->match_data->mipi->regs_id[id])))
     		return RKCIF_REGISTER_NOTSUPPORTED;
     
     	offset = rkcif->match_data->mipi->blocks[block].offset;
    -- 
    cgit 1.3-korg
    
    
    
73e119036b3a

media: rockchip: rkcif: fix off by one bugs

1 file changed · +5 6
  • drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c+5 6 modified
    diff --git a/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c b/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    index 1b81bcc067efd..9e67160a16e46 100644
    --- a/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    +++ b/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    @@ -489,8 +489,8 @@ static inline unsigned int rkcif_mipi_get_reg(struct rkcif_interface *interface,
     
     	block = interface->index - RKCIF_MIPI_BASE;
     
    -	if (WARN_ON_ONCE(block > RKCIF_MIPI_MAX - RKCIF_MIPI_BASE) ||
    -	    WARN_ON_ONCE(index > RKCIF_MIPI_REGISTER_MAX))
    +	if (WARN_ON_ONCE(block >= ARRAY_SIZE(rkcif->match_data->mipi->blocks)) ||
    +	    WARN_ON_ONCE(index >= ARRAY_SIZE(rkcif->match_data->mipi->regs)))
     		return RKCIF_REGISTER_NOTSUPPORTED;
     
     	offset = rkcif->match_data->mipi->blocks[block].offset;
    @@ -510,9 +510,9 @@ static inline unsigned int rkcif_mipi_id_get_reg(struct rkcif_stream *stream,
     	block = stream->interface->index - RKCIF_MIPI_BASE;
     	id = stream->id;
     
    -	if (WARN_ON_ONCE(block > RKCIF_MIPI_MAX - RKCIF_MIPI_BASE) ||
    -	    WARN_ON_ONCE(id > RKCIF_ID_MAX) ||
    -	    WARN_ON_ONCE(index > RKCIF_MIPI_ID_REGISTER_MAX))
    +	if (WARN_ON_ONCE(block >= ARRAY_SIZE(rkcif->match_data->mipi->blocks)) ||
    +	    WARN_ON_ONCE(id >= ARRAY_SIZE(rkcif->match_data->mipi->regs_id)) ||
    +	    WARN_ON_ONCE(index >= ARRAY_SIZE(rkcif->match_data->mipi->regs_id[id])))
     		return RKCIF_REGISTER_NOTSUPPORTED;
     
     	offset = rkcif->match_data->mipi->blocks[block].offset;
    -- 
    cgit 1.3-korg
    
    
    
e4056b84af0f

media: rockchip: rkcif: fix off by one bugs

1 file changed · +5 6
  • drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c+5 6 modified
    diff --git a/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c b/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    index 1b81bcc067efd..9e67160a16e46 100644
    --- a/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    +++ b/drivers/media/platform/rockchip/rkcif/rkcif-capture-mipi.c
    @@ -489,8 +489,8 @@ static inline unsigned int rkcif_mipi_get_reg(struct rkcif_interface *interface,
     
     	block = interface->index - RKCIF_MIPI_BASE;
     
    -	if (WARN_ON_ONCE(block > RKCIF_MIPI_MAX - RKCIF_MIPI_BASE) ||
    -	    WARN_ON_ONCE(index > RKCIF_MIPI_REGISTER_MAX))
    +	if (WARN_ON_ONCE(block >= ARRAY_SIZE(rkcif->match_data->mipi->blocks)) ||
    +	    WARN_ON_ONCE(index >= ARRAY_SIZE(rkcif->match_data->mipi->regs)))
     		return RKCIF_REGISTER_NOTSUPPORTED;
     
     	offset = rkcif->match_data->mipi->blocks[block].offset;
    @@ -510,9 +510,9 @@ static inline unsigned int rkcif_mipi_id_get_reg(struct rkcif_stream *stream,
     	block = stream->interface->index - RKCIF_MIPI_BASE;
     	id = stream->id;
     
    -	if (WARN_ON_ONCE(block > RKCIF_MIPI_MAX - RKCIF_MIPI_BASE) ||
    -	    WARN_ON_ONCE(id > RKCIF_ID_MAX) ||
    -	    WARN_ON_ONCE(index > RKCIF_MIPI_ID_REGISTER_MAX))
    +	if (WARN_ON_ONCE(block >= ARRAY_SIZE(rkcif->match_data->mipi->blocks)) ||
    +	    WARN_ON_ONCE(id >= ARRAY_SIZE(rkcif->match_data->mipi->regs_id)) ||
    +	    WARN_ON_ONCE(index >= ARRAY_SIZE(rkcif->match_data->mipi->regs_id[id])))
     		return RKCIF_REGISTER_NOTSUPPORTED;
     
     	offset = rkcif->match_data->mipi->blocks[block].offset;
    -- 
    cgit 1.3-korg
    
    
    

Vulnerability mechanics

No source-code context for this CVE — mechanics is only generated when we can read the actual fix diff. Without that, the four sections (root cause, attack vector, affected code, fix) would be speculation rather than analysis.

References

2

News mentions

1