• Manfred Spraul's avatar
    ipc: conserve sequence numbers in ipcmni_extend mode · 3278a2c2
    Manfred Spraul authored
    Rewrite, based on the patch from Waiman Long:
    
    The mixing in of a sequence number into the IPC IDs is probably to avoid
    ID reuse in userspace as much as possible.  With ipcmni_extend mode, the
    number of usable sequence numbers is greatly reduced leading to higher
    chance of ID reuse.
    
    To address this issue, we need to conserve the sequence number space as
    much as possible.  Right now, the sequence number is incremented for
    every new ID created.  In reality, we only need to increment the
    sequence number when new allocated ID is not greater than the last one
    allocated.  It is in such case that the new ID may collide with an
    existing one.  This is being done irrespective of the ipcmni mode.
    
    In order to avoid any races, the index is first allocated and then the
    pointer is replaced.
    
    Changes compared to the initial patch:
     - Handle failures from idr_alloc().
     - Avoid that concurrent operations can see the wrong sequence number.
       (This is achieved by using idr_replace()).
     - IPCMNI_SEQ_SHIFT is not a constant, thus renamed to
       ipcmni_seq_shift().
     - IPCMNI_SEQ_MAX is not a constant, thus renamed to ipcmni_seq_max().
    
    Link: http://lkml.kernel.org/r/20190329204930.21620-2-longman@redhat.comSigned-off-by: default avatarManfred Spraul <manfred@colorfullife.com>
    Signed-off-by: default avatarWaiman Long <longman@redhat.com>
    Suggested-by: default avatarMatthew Wilcox <willy@infradead.org>
    Acked-by: default avatarWaiman Long <longman@redhat.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Davidlohr Bueso <dbueso@suse.de>
    Cc: "Eric W . Biederman" <ebiederm@xmission.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: "Luis R. Rodriguez" <mcgrof@kernel.org>
    Cc: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    3278a2c2
util.c 22.7 KB