• Davidlohr Bueso's avatar
    ipc: get rid of ids->tables_initialized hack · dc2c8c84
    Davidlohr Bueso authored
    In sysvipc we have an ids->tables_initialized regarding the rhashtable,
    introduced in 0cfb6aee ("ipc: optimize semget/shmget/msgget for lots
    of keys")
    
    It's there, specifically, to prevent nil pointer dereferences, from using
    an uninitialized api.  Considering how rhashtable_init() can fail
    (probably due to ENOMEM, if anything), this made the overall ipc
    initialization capable of failure as well.  That alone is ugly, but fine,
    however I've spotted a few issues regarding the semantics of
    tables_initialized (however unlikely they may be):
    
    - There is inconsistency in what we return to userspace: ipc_addid()
      returns ENOSPC which is certainly _wrong_, while ipc_obtain_object_idr()
      returns EINVAL.
    
    - After we started using rhashtables, ipc_findkey() can return nil upon
      !tables_initialized, but the caller expects nil for when the ipc
      structure isn't found, and can therefore call into ipcget() callbacks.
    
    Now that rhashtable initialization cannot fail, we can properly get rid of
    the hack altogether.
    
    [manfred@colorfullife.com: commit id extended to 12 digits]
    Link: http://lkml.kernel.org/r/20180712185241.4017-10-manfred@colorfullife.comSigned-off-by: default avatarDavidlohr Bueso <dbueso@suse.de>
    Signed-off-by: default avatarManfred Spraul <manfred@colorfullife.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Michael Kerrisk <mtk.manpages@gmail.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    dc2c8c84
util.c 22.3 KB