• A
    [PATCH] find_task_by_pid() needs tasklist_lock · 05eeae20
    Andrew Morton 提交于
    A couple of places are forgetting to take it.
    
    The kswapd case is probably unimportant.  keventd_create_kthread() was racy.
    
    The whole thing is a bit flakey: you start a kernel thread, get its pid from
    kernel_thread() then look up its task_struct.
    
    a) It assumes that pid recycling takes a "long" time.
    
    b) We get a task_struct but no reference was taken on it.  The owner of the
       kswapd and kthread task_struct*'s must assume that the new thread won't
       exit unexpectedly.  Because if it does, they're left holding dead memory
       and any attempt to control or stop that task will crash.
    
    Cc: Christoph Hellwig <hch@lst.de>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    05eeae20
vmscan.c 40.7 KB