• Steven Rostedt's avatar
    [PATCH] protect remove_proc_entry · 64a07bd8
    Steven Rostedt authored
    It has been discovered that the remove_proc_entry has a race in the removing
    of entries in the proc file system that are siblings.  There's no protection
    around the traversing and removing of elements that belong in the same
    subdirectory.
    
    This subdirectory list is protected in other areas by the BKL.  So the BKL was
    at first used to protect this area too, but unfortunately, remove_proc_entry
    may be called with spinlocks held.  The BKL may schedule, so this was not a
    solution.
    
    The final solution was to add a new global spin lock to protect this list,
    called proc_subdir_lock.  This lock now protects the list in
    remove_proc_entry, and I also went around looking for other areas that this
    list is modified and added this protection there too.  Care must be taken
    since these locations call several functions that may also schedule.
    
    Since I don't see any location that these functions that modify the
    subdirectory list are called by interrupts, the irqsave/restore versions of
    the spin lock was _not_ used.
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    64a07bd8
generic.c 17 KB