[Pkg-openssl-devel] Bug#534892: Debian OpenSSL Bug # 534892

Russell Coker russell at coker.com.au
Tue May 17 02:04:39 UTC 2011


On Tue, 17 May 2011, Scott Schaefer <saschaefer at neurodiverse.org> wrote:
> I am a bit confused...  I am certainly no Helgrind expert [indeed, I had 
> never heard of it until I first read your report), and I will concede 
> that it may know more about C than I do.  However, this certainly 
> appears to me to be a false positive.
> 
> The variable err_fns is declared as:
> static const ERR_FNS *err_fns = NULL;
> 
> Your subject line states "err_fns_check() has a race if a pointer 
> assignment is not atomic".  Except, because the assignment is inside of 
> CRYPTO_w_lock(),CRYPTO_w_unlock(), no race condition exists (assuming 
> these two functions are implemented correctly).

If that function was the only one using the function pointer in question then 
that analysis would be correct.

const ERR_FNS *ERR_get_implementation(void)
        {
        err_fns_check();
        return err_fns;
        }

However it's expected that some other functions such as the above which rely 
on it.  Imagine an architecture which has 64bit pointers but only 32bit 
atomicity for memory writes.  If one thread writes a value to err_fns and gets 
interrupted before completing the operation then another thread could return 
from the first line of err_fns_check() and allow ERR_get_implementation() to 
return data from a half-written memory location.

I could be wrong in this analysis, it would be good if someone who knows more 
about Valgrind than I do could check this out.

-- 
My Main Blog         http://etbe.coker.com.au/
My Documents Blog    http://doc.coker.com.au/





More information about the Pkg-openssl-devel mailing list