[bug report] ALSA: seq: Use no intrruptible mutex_lock
Takashi Iwai
tiwai at suse.de
Mon Feb 1 14:23:16 CET 2021
On Mon, 01 Feb 2021 14:13:14 +0100,
Dan Carpenter wrote:
>
> Hello Takashi Iwai,
>
> The patch 04702e8d0092: "ALSA: seq: Use no intrruptible mutex_lock"
> from Aug 1, 2018, leads to the following static checker warning:
>
> sound/core/seq/seq_clientmgr.c:2194 snd_seq_create_kernel_client()
> warn: called with lock held. '®ister_mutex'
>
> sound/core/seq/seq_midi.c
> 294 if (ports > (256 / SNDRV_RAWMIDI_DEVICES))
> 295 ports = 256 / SNDRV_RAWMIDI_DEVICES;
> 296
> 297 mutex_lock(®ister_mutex);
> ^^^^^^^^^^^^^^^
> Holding lock
>
> 298 client = synths[card->number];
> 299 if (client == NULL) {
> 300 newclient = 1;
> 301 client = kzalloc(sizeof(*client), GFP_KERNEL);
> 302 if (client == NULL) {
> 303 mutex_unlock(®ister_mutex);
> 304 kfree(info);
> 305 return -ENOMEM;
> 306 }
> 307 client->seq_client =
> 308 snd_seq_create_kernel_client(
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> Deadlock
>
> 309 card, 0, "%s", card->shortname[0] ?
> 310 (const char *)card->shortname : "External MIDI");
> 311 if (client->seq_client < 0) {
> 312 kfree(client);
> 313 mutex_unlock(®ister_mutex);
> 314 kfree(info);
> 315 return -ENOMEM;
> 316 }
> 317 }
Again, both register_mutex are different instances, where both are
local static variables, hence they can't conflict with each other.
thanks,
Takashi
More information about the Alsa-devel
mailing list