linux/sound/hda
Evan Green 98482377dc ALSA: hda: Fix widget_mutex incomplete protection
The widget_mutex was introduced to serialize callers to
hda_widget_sysfs_{re}init. However, its protection of the sysfs widget array
is incomplete. For example, it is acquired around the call to
hda_widget_sysfs_reinit(), which actually creates the new array, but isn't
still acquired when codec->num_nodes and codec->start_nid is updated. So
the lock ensures one thread sets up the new array at a time, but doesn't
ensure which thread's value will end up in codec->num_nodes. If a larger
num_nodes wins but a smaller array was set up, the next call to
refresh_widgets() will touch free memory as it iterates over codec->num_nodes
that aren't there.

The widget_lock really protects both the tree as well as codec->num_nodes,
start_nid, and end_nid, so make sure it's held across that update. It should
also be held during snd_hdac_get_sub_nodes(), so that a very old read from that
function doesn't end up clobbering a later update.

Fixes: ed180abba7 ("ALSA: hda: Fix race between creating and refreshing sysfs entries")
Signed-off-by: Evan Green <evgreen@chromium.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-07-01 20:13:04 +02:00
..
ext ASoC: Fixes for v5.2 2019-06-13 17:33:34 +02:00
Kconfig ALSA: hda: Make audio component support more generic 2018-07-17 22:25:48 +02:00
Makefile ALSA: hda: Make audio component support more generic 2018-07-17 22:25:48 +02:00
array.c ALSA: hda: Fix krealloc() with __GFP_ZERO usage 2016-08-03 15:17:22 +02:00
hda_bus_type.c ALSA: hda - Advertise MODALIAS in uevent 2015-10-20 10:15:53 +02:00
hdac_bus.c ALSA: hda: Initialize ext-bus-specific fields in snd_hdac_bus_init(), too 2019-04-13 10:10:26 +02:00
hdac_component.c Linux 5.1-rc5 2019-04-15 15:51:49 +10:00
hdac_controller.c ALSA: hda: Fix mismatches for register mask and value in hdac controller 2019-01-09 10:28:44 +01:00
hdac_device.c ALSA: hda: Fix widget_mutex incomplete protection 2019-07-01 20:13:04 +02:00
hdac_i915.c Char/Misc driver patches for 5.1-rc1 2019-03-06 14:18:59 -08:00
hdac_regmap.c regmap: split up regmap_config.use_single_rw 2018-09-07 13:03:55 +01:00
hdac_stream.c ALSA: hda: Avoid NULL pointer dereference at snd_hdac_stream_start() 2019-03-13 11:23:59 +01:00
hdac_sysfs.c ALSA: hda: Fix race between creating and refreshing sysfs entries 2019-05-13 14:41:56 +02:00
hdmi_chmap.c ALSA: hda: Fix too short HDMI/DP chmap reporting 2017-11-17 12:20:37 +01:00
local.h ASoC: Updates for v4.15 2017-11-13 15:45:57 +01:00
trace.c ALSA: hda - Re-add tracepoints to HD-audio core driver 2015-03-23 13:17:58 +01:00
trace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00