NetBSD-Bugs archive

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

PR/53674 CVS commit: src/sys/kern



The following reply was made to PR kern/53674; it has been noted by GNATS.

From: "Maxime Villard" <maxv%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc: 
Subject: PR/53674 CVS commit: src/sys/kern
Date: Sun, 7 Apr 2019 08:37:38 +0000

 Module Name:	src
 Committed By:	maxv
 Date:		Sun Apr  7 08:37:38 UTC 2019
 
 Modified Files:
 	src/sys/kern: subr_pool.c
 
 Log Message:
 Fix tiny race in pool+KASAN, that resulted in occasional false positives.
 
 We were uselessly marking already valid areas as valid. When doing that,
 our KASAN code emits two calls to kasan_markmem, and there is a very small
 window where the area becomes invalid. So, if the area happens to be
 already globally referenced, and if another thread happens to read the
 buffer via this reference, we get a false positive.
 
 This happens only with pool_caches that have a pc_ctor that creates a
 global reference to the buffer, and there is one single pool_cache that
 does that: 'file_cache'.
 
 So now, two changes:
 
  - In pool_cache_get_slow(), the pool_get() has already redzoned the
    object, so no need to call pool_redzone_fill().
 
  - In pool_cache_destruct_object1(), don't re-mark the object. If there is
    no ctor pool_put is fine with already-invalid objects, if there is a
    ctor the object was not marked as invalid in the first place; so in
    either case, the re-marking is not needed.
 
 Fixes PR/53674. Although very rare and difficult to reproduce, a local
 quarantine patch of mine made the false positives recurrent.
 
 
 To generate a diff of this commit:
 cvs rdiff -u -r1.246 -r1.247 src/sys/kern/subr_pool.c
 
 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.
 


Home | Main Index | Thread Index | Old Index