ALSA: seq: Use bool for snd_seq_queue internal flags
authorTakashi Iwai <tiwai@suse.de>
Sun, 6 Dec 2020 08:34:56 +0000 (09:34 +0100)
committerTakashi Iwai <tiwai@suse.de>
Sun, 6 Dec 2020 08:35:53 +0000 (09:35 +0100)
The snd_seq_queue struct contains various flags in the bit fields.
Those are categorized to two different use cases, both of which are
protected by different spinlocks.  That implies that there are still
potential risks of the bad operations for bit fields by concurrent
accesses.

For addressing the problem, this patch rearranges those flags to be
a standard bool instead of a bit field.

Reported-by: syzbot+63cbe31877bb80ef58f5@syzkaller.appspotmail.com
Link: https://lore.kernel.org/r/20201206083456.21110-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/seq/seq_queue.h

index 1c3a8d3254d90db2c5ac177e17e590a703fa15b7..c69105dc1a10375b67e3c4e8f088868c5b09fe09 100644 (file)
@@ -26,10 +26,10 @@ struct snd_seq_queue {
        
        struct snd_seq_timer *timer;    /* time keeper for this queue */
        int     owner;          /* client that 'owns' the timer */
-       unsigned int    locked:1,       /* timer is only accesibble by owner if set */
-               klocked:1,      /* kernel lock (after START) */ 
-               check_again:1,
-               check_blocked:1;
+       bool    locked;         /* timer is only accesibble by owner if set */
+       bool    klocked;        /* kernel lock (after START) */
+       bool    check_again;    /* concurrent access happened during check */
+       bool    check_blocked;  /* queue being checked */
 
        unsigned int flags;             /* status flags */
        unsigned int info_flags;        /* info for sync */