video: driver: copy struct v4l2_format by assignment#125
Open
ricardosalveti wants to merge 1 commit into
Open
Conversation
GCC 16.1 with -Wstringop-overread (turned into an error by the driver's own -Werror) rejects the byte-wise copies of a whole struct v4l2_format: msm_venc.c:1327:9: error: 'memcpy' reading 208 bytes from a region of size 0 [-Werror=stringop-overread] note: source object is likely at address zero After msm_venc_s_fmt_input() is inlined into msm_venc_s_fmt(), the compiler's value-range analysis mis-judges the source object (&inst->fmts[INPUT_PORT]) as a zero-sized region at address zero and rejects the memcpy(). The source is a regular member of struct msm_vidc_inst and is never NULL, so this is a false positive, but it breaks the build for newer toolchains. Copy the structures with a plain aggregate assignment instead of memcpy(). The assignment is a by-value copy of the whole structure - it copies the entire object, including the embedded union, exactly as the old memcpy(..., sizeof(struct v4l2_format)) did. It lets the compiler derive the size from the type and is not subject to the string/memory builtin diagnostics, so it both fixes the build and is more idiomatic. No functional change intended. Assisted-by: Claude:claude-opus-4.8 Signed-off-by: Ricardo Salveti <ricardo.salveti@oss.qualcomm.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GCC 16.1 with -Wstringop-overread (turned into an error by the driver's own -Werror) rejects the byte-wise copies of a whole struct v4l2_format:
msm_venc.c:1327:9: error: 'memcpy' reading 208 bytes from a region
of size 0 [-Werror=stringop-overread]
note: source object is likely at address zero
After msm_venc_s_fmt_input() is inlined into msm_venc_s_fmt(), the compiler's value-range analysis mis-judges the source object (&inst->fmts[INPUT_PORT]) as a zero-sized region at address zero and rejects the memcpy(). The source is a regular member of struct msm_vidc_inst and is never NULL, so this is a false positive, but it breaks the build for newer toolchains.
Copy the structures with a plain aggregate assignment instead of memcpy(). The assignment is a by-value copy of the whole structure - it copies the entire object, including the embedded union, exactly as the old memcpy(..., sizeof(struct v4l2_format)) did. It lets the compiler derive the size from the type and is not subject to the string/memory builtin diagnostics, so it both fixes the build and is more idiomatic.
No functional change intended.
Assisted-by: Claude:claude-opus-4.8