3.10.27: BUG on accessing /proc under high load

From: wiebittewas
Date: Sun Jan 19 2014 - 12:59:38 EST


https://bugzilla.kernel.org/show_bug.cgi?id=68991

because http://kernelnewbies.org/FoundBug says, a bug-msg should be
created in bugzilla as well as send to this list, I just follow this...

currently I don't have the time for this list, so please do a CC to me.

when doing a find /proc -type f -exec sha512sum {} \; x-hundred times
parallel, this can lead in a BUG within d_path.

as I can see in the oops and the objdump (filed at bugzilla), the
problems occurs in fs/dcache.c:d_path(), testing for existance of a
function and then calling it:

if (path->dentry->d_op && path->dentry->d_op->d_dname)
return path->dentry->d_op->d_dname(path->dentry, buf, buflen);

looking at fs/proc/base.c:proc_pid_readlink() "path" is initialized in
one of the getlink-functions within proc.c: proc_cwd_link() or
proc_root_link()

in both functions first the task-structure is get by get_roc_task() and
if 's not NULL, then locked and then the wanted fs_struct is
acquired/locked.

now I don't have enough experience, but maybe beetween getting the
task-struct and locking it, the task may be already invalidated because
it exited, so the lock should be done in get_proc_task() or at least it
should be checked after locking, if the task is still alive....???

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/