diff options
| author | Vasily Averin <[email protected]> | 2020-05-13 17:50:48 -0700 | 
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2020-05-14 10:00:35 -0700 | 
| commit | 5e698222c70257d13ae0816720dde57c56f81e15 (patch) | |
| tree | f53bdc8e4d856267d5a892720982d251ba8c514b /lib/objagg.c | |
| parent | d1564926066115fb47ca06b2b9d23ed506ca9608 (diff) | |
ipc/util.c: sysvipc_find_ipc() incorrectly updates position index
Commit 89163f93c6f9 ("ipc/util.c: sysvipc_find_ipc() should increase
position index") is causing this bug (seen on 5.6.8):
   # ipcs -q
   ------ Message Queues --------
   key        msqid      owner      perms      used-bytes   messages
   # ipcmk -Q
   Message queue id: 0
   # ipcs -q
   ------ Message Queues --------
   key        msqid      owner      perms      used-bytes   messages
   0x82db8127 0          root       644        0            0
   # ipcmk -Q
   Message queue id: 1
   # ipcs -q
   ------ Message Queues --------
   key        msqid      owner      perms      used-bytes   messages
   0x82db8127 0          root       644        0            0
   0x76d1fb2a 1          root       644        0            0
   # ipcrm -q 0
   # ipcs -q
   ------ Message Queues --------
   key        msqid      owner      perms      used-bytes   messages
   0x76d1fb2a 1          root       644        0            0
   0x76d1fb2a 1          root       644        0            0
   # ipcmk -Q
   Message queue id: 2
   # ipcrm -q 2
   # ipcs -q
   ------ Message Queues --------
   key        msqid      owner      perms      used-bytes   messages
   0x76d1fb2a 1          root       644        0            0
   0x76d1fb2a 1          root       644        0            0
   # ipcmk -Q
   Message queue id: 3
   # ipcrm -q 1
   # ipcs -q
   ------ Message Queues --------
   key        msqid      owner      perms      used-bytes   messages
   0x7c982867 3          root       644        0            0
   0x7c982867 3          root       644        0            0
   0x7c982867 3          root       644        0            0
   0x7c982867 3          root       644        0            0
Whenever an IPC item with a low id is deleted, the items with higher ids
are duplicated, as if filling a hole.
new_pos should jump through hole of unused ids, pos can be updated
inside "for" cycle.
Fixes: 89163f93c6f9 ("ipc/util.c: sysvipc_find_ipc() should increase position index")
Reported-by: Andreas Schwab <[email protected]>
Reported-by: Randy Dunlap <[email protected]>
Signed-off-by: Vasily Averin <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Acked-by: Waiman Long <[email protected]>
Cc: NeilBrown <[email protected]>
Cc: Steven Rostedt <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Peter Oberparleiter <[email protected]>
Cc: Davidlohr Bueso <[email protected]>
Cc: Manfred Spraul <[email protected]>
Cc: <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'lib/objagg.c')
0 files changed, 0 insertions, 0 deletions