• Elena Reshetova's avatar
    kcov: convert kcov.refcount to refcount_t · 39e07cb6
    Elena Reshetova authored
    atomic_t variables are currently used to implement reference
    counters with the following properties:
    
     - counter is initialized to 1 using atomic_set()
    
     - a resource is freed upon counter reaching zero
    
     - once counter reaches zero, its further
       increments aren't allowed
    
     - counter schema uses basic atomic operations
       (set, inc, inc_not_zero, dec_and_test, etc.)
    
    Such atomic variables should be converted to a newly provided refcount_t
    type and API that prevents accidental counter overflows and underflows.
    This is important since overflows and underflows can lead to
    use-after-free situation and be exploitable.
    
    The variable kcov.refcount is used as pure reference counter.  Convert
    it to refcount_t and fix up the operations.
    
    **Important note for maintainers:
    
    Some functions from refcount_t API defined in lib/refcount.c have
    different memory ordering guarantees than their atomic counterparts.
    
    The full comparison can be seen in https://lkml.org/lkml/2017/11/15...
    39e07cb6
kcov.c 11 KB