• Ondrej Mosnacek's avatar
    selinux: avoid atomic_t usage in sidtab · 116f21bb
    Ondrej Mosnacek authored
    As noted in Documentation/atomic_t.txt, if we don't need the RMW atomic
    operations, we should only use READ_ONCE()/WRITE_ONCE() +
    smp_rmb()/smp_wmb() where necessary (or the combined variants
    smp_load_acquire()/smp_store_release()).
    
    This patch converts the sidtab code to use regular u32 for the counter
    and reverse lookup cache and use the appropriate operations instead of
    atomic_get()/atomic_set(). Note that when reading/updating the reverse
    lookup cache we don't need memory barriers as it doesn't need to be
    consistent or accurate. We can now also replace some atomic ops with
    regular loads (when under spinlock) and stores (for conversion target
    fields that are always accessed under the master table's spinlock).
    
    We can now also bump SIDTAB_MAX to U32_MAX as we can use the full u32
    range again.
    Suggested-by: default avatarJann Horn <jannh@google.com>
    Signed-off-by: default avatarOndrej Mosnacek <omosnace@redhat.com>
    Reviewed-by: default avatarJann Horn <jannh@google.com>
    Signed-off-by: default avatarPaul Moore <paul@paul-moore.com>
    116f21bb
sidtab.c 10.7 KB