NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/57649: Uninitialized lock in gus.c



On Tue, Oct 10, 2023 at 12:15:02AM +0000, Taylor R Campbell wrote:
> The following reply was made to PR kern/57649; it has been noted by GNATS.
> 
> From: Taylor R Campbell <riastradh%NetBSD.org@localhost>
> To: Harold Gutch <logix%foobar.franken.de@localhost>
> Cc: gnats-bugs%NetBSD.org@localhost
> Subject: Re: kern/57649: Uninitialized lock in gus.c
> Date: Tue, 10 Oct 2023 00:12:40 +0000
> 
>  I think this can't be right.
>  
>  sc->sc_lock and sc->sc_intr_lock appear to be totally unused.  We
>  should just flush them, and delete the bogus

They are used down the line in audio.c.


>  	sc->sc_lock = sc->sc_codec.sc_ad1848.sc_lock;
>  	sc->sc_intr_lock = sc->sc_codec.sc_ad1848.sc_intr_lock;
>  
>  initalization, which has never made sense.
>  
>  The real mutexes, returned by .get_locks = ad1848_get_locks, are
>  already initialized by ad1848_init_locks when gusattach calls that
>  early on.

Ah, indeed, I missed the call to ad1848_init_locks() just a few lines
above...


>  So why are they uninitialized?  Not sure!  Maybe something is trying
>  to use sc->sc_mixer and sc->sc_codec (which are in a union) at the
>  same time and things are stomping all over each other?  Time to printf
>  all the things?

They might not be uninitialized - what would be an easy way to check
this?

This might just be LOCKDEBUG messing up because it keeps tracks of
locks via the variables used to address them - and the two variables
sc->sc_lock and sc->sc_codec.sc_ad1848.sc_lock differ, even if their
value is the same.  A GENERIC kernel with "gus?" on the right base
port but without LOCKDEBUG works for me.  It is "only" LOCKDEBUG that
then makes it panic in audio.c because that thinks sc->sc_lock is
uninitialized.

Is there a reasonable way of "copying" a lock like gus.c wants to do
in the two lines you quoted?


thanks,
  Harold


Home | Main Index | Thread Index | Old Index