| From 3ecb98935171b8ca25ad11e553994bb75b5f532d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 18 Mar 2026 13:40:07 +0100 |
| Subject: ALSA: asihpi: avoid write overflow check warning |
| |
| From: Arnd Bergmann <arnd@arndb.de> |
| |
| [ Upstream commit 591721223be9e28f83489a59289579493b8e3d83 ] |
| |
| clang-22 rightfully warns that the memcpy() in adapter_prepare() copies |
| between different structures, crossing the boundary of nested |
| structures inside it: |
| |
| In file included from sound/pci/asihpi/hpimsgx.c:13: |
| In file included from include/linux/string.h:386: |
| include/linux/fortify-string.h:569:4: error: call to '__write_overflow_field' declared with 'warning' attribute: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror,-Wattribute-warning] |
| 569 | __write_overflow_field(p_size_field, size); |
| |
| The two structures seem to refer to the same layout, despite the |
| separate definitions, so the code is in fact correct. |
| |
| Avoid the warning by copying the two inner structures separately. |
| I see the same pattern happens in other functions in the same file, |
| so there is a chance that this may come back in the future, but |
| this instance is the only one that I saw in practice, hitting it |
| multiple times per day in randconfig build. |
| |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Link: https://patch.msgid.link/20260318124016.3488566-1-arnd@kernel.org |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/pci/asihpi/hpimsgx.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| diff --git a/sound/pci/asihpi/hpimsgx.c b/sound/pci/asihpi/hpimsgx.c |
| index b68e6bfbbfbab..ed1c7b7744361 100644 |
| --- a/sound/pci/asihpi/hpimsgx.c |
| +++ b/sound/pci/asihpi/hpimsgx.c |
| @@ -581,8 +581,10 @@ static u16 adapter_prepare(u16 adapter) |
| HPI_ADAPTER_OPEN); |
| hm.adapter_index = adapter; |
| hw_entry_point(&hm, &hr); |
| - memcpy(&rESP_HPI_ADAPTER_OPEN[adapter], &hr, |
| - sizeof(rESP_HPI_ADAPTER_OPEN[0])); |
| + memcpy(&rESP_HPI_ADAPTER_OPEN[adapter].h, &hr, |
| + sizeof(rESP_HPI_ADAPTER_OPEN[adapter].h)); |
| + memcpy(&rESP_HPI_ADAPTER_OPEN[adapter].a, &hr.u.ax.info, |
| + sizeof(rESP_HPI_ADAPTER_OPEN[adapter].a)); |
| if (hr.error) |
| return hr.error; |
| |
| -- |
| 2.53.0 |
| |