[lkml]   [2018]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH V2] exportfs: do not read dentry after free
On Fri, Nov 23, 2018 at 03:56:33PM +0800, Pan Bian wrote:
> The function dentry_connected calls dput(dentry) to drop the previously
> acquired reference to dentry. In this case, dentry can be released.
> After that, IS_ROOT(dentry) checks the condition
> (dentry == dentry->d_parent), which may result in a use-after-free bug.
> This patch directly compares dentry with its parent obtained before
> dropping the reference.

It's a bit more subtle than the description implies (the race has
dentry connected during dget_parent() and the child we'd reached it
through moved elsewhere during the dput()), but you are right - the
race is there and that patch fixes it.

I wonder if we could avoid those dget_parent()/dput() completely -
looks like we might be able to with rcu_read_lock() and some
care. OTOH, that's not going to be a hot path, anyway...


 \ /
  Last update: 2018-11-23 15:08    [W:2.890 / U:0.012 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site