Skip to content
  • Kirill A. Shutemov's avatar
    ipc/shm: handle removed segments gracefully in shm_mmap() · 1ac0b6de
    Kirill A. Shutemov authored
    remap_file_pages(2) emulation can reach file which represents removed
    IPC ID as long as a memory segment is mapped.  It breaks expectations of
    IPC subsystem.
    
    Test case (rewritten to be more human readable, originally autogenerated
    by syzkaller[1]):
    
    	#define _GNU_SOURCE
    	#include <stdlib.h>
    	#include <sys/ipc.h>
    	#include <sys/mman.h>
    	#include <sys/shm.h>
    
    	#define PAGE_SIZE 4096
    
    	int main()
    	{
    		int id;
    		void *p;
    
    		id = shmget(IPC_PRIVATE, 3 * PAGE_SIZE, 0);
    		p = shmat(id, NULL, 0);
    		shmctl(id, IPC_RMID, NULL);
    		remap_file_pages(p, 3 * PAGE_SIZE, 0, 7, 0);
    
    	        return 0;
    	}
    
    The patch changes shm_mmap() and code around shm_lock() to propagate
    locking error back to caller of shm_mmap().
    
    [1] http://github.com/google/syzkaller
    
    
    
    Signed-off-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Reported-by: default avatarDmitry Vyukov <dvyukov@google.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Manfred Spraul <manfred@colorfullife.com>
    Cc: <stabl...
    1ac0b6de