stream-restore,device-restore: Avoid unaligned access

System Internals / PulseAudio - Arun Raghavan [asymptotic.io] - 23 November 2020 19:02 UTC

Newer GCC warns us that the channel_map and volume in legacy entries are accessed via pointers, and these might be unaligned as the legacy entry is a packed structure. For this reason, we read out those values into local variables before accessing them as pointers.

The warnings are:

[146/433] Compiling C object src/modules/module-device-restore.so.p/module-device-restore.c.o ../src/modules/module-device-restore.c: In function ‘legacy_entry_read’: ../src/modules/module-device-restore.c:554:51: warning: taking address of packed member of ‘struct legacy_entry’ may result in an unaligned pointer value [-Waddress-of-packed-member] 554 | if (le->volume_valid && !pa_channel_map_valid(&le->channel_map)) { | ^~~~~~~~~~~~~~~~ ../src/modules/module-device-restore.c:559:48: warning: taking address of packed member of ‘struct legacy_entry’ may result in an unaligned pointer value [-Waddress-of-packed-member] 559 | if (le->volume_valid && (!pa_cvolume_valid(&le->volume) || !pa_cvolume_compatible_with_channel_map(&le->volume, &le->channel_map))) { | ^~~~~~~~~~~ ../src/modules/module-device-restore.c:559:104: warning: taking address of packed member of ‘struct legacy_entry’ may result in an unaligned pointer value [-Waddress-of-packed-member] 559 | if (le->volume_valid && (!pa_cvolume_valid(&le->volume) || !pa_cvolume_compatible_with_channel_map(&le->volume, &le->channel_map))) { | ^~~~~~~~~~~ ../src/modules/module-device-restore.c:559:117: warning: taking address of packed member of ‘struct legacy_entry’ may result in an unaligned pointer value [-Waddress-of-packed-member] 559 | if (le->volume_valid && (!pa_cvolume_valid(&le->volume) || !pa_cvolume_compatible_with_channel_map(&le->volume, &le->channel_map))) { | ^~~~~~~~~~~~~~~~ [211/433] Compiling C object src/modules/module-stream-restore.so.p/module-stream-restore.c.o ../src/modules/module-stream-restore.c: In function ‘legacy_entry_read’: ../src/modules/module-stream-restore.c:1076:51: warning: taking address of packed member of ‘struct legacy_entry’ may result in an unaligned pointer value [-Waddress-of-packed-member] 1076 | if (le->volume_valid && !pa_channel_map_valid(&le->channel_map)) { | ^~~~~~~~~~~~~~~~ ../src/modules/module-stream-restore.c:1081:48: warning: taking address of packed member of ‘struct legacy_entry’ may result in an unaligned pointer value [-Waddress-of-packed-member] 1081 | if (le->volume_valid && (!pa_cvolume_valid(&le->volume) || !pa_cvolume_compatible_with_channel_map(&le->volume, &le->channel_map))) { | ^~~~~~~~~~~ ../src/modules/module-stream-restore.c:1081:104: warning: taking address of packed member of ‘struct legacy_entry’ may result in an unaligned pointer value [-Waddress-of-packed-member] 1081 | if (le->volume_valid && (!pa_cvolume_valid(&le->volume) || !pa_cvolume_compatible_with_channel_map(&le->volume, &le->channel_map))) { | ^~~~~~~~~~~ ../src/modules/module-stream-restore.c:1081:117: warning: taking address of packed member of ‘struct legacy_entry’ may result in an unaligned pointer value [-Waddress-of-packed-member] 1081 | if (le->volume_valid && (!pa_cvolume_valid(&le->volume) || !pa_cvolume_compatible_with_channel_map(&le->volume, &le->channel_map))) { |

9055f5baf stream-restore,device-restore: Avoid unaligned access
src/modules/module-device-restore.c | 11 +++++++++--
src/modules/module-stream-restore.c | 11 +++++++++--
2 files changed, 18 insertions(+), 4 deletions(-)

Upstream: cgit.freedesktop.org


  • Share