FAILED: patch "[PATCH] namei: ->d_inode of a pinned dentry is stable only for" failed to apply to 3.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 3.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
d4565649b6d6923369112758212b851adc407f0cMon Sep 17 00:00:00 2001
From: Al Viro <[email protected]>
Date: Sat, 27 Feb 2016 19:23:16 -0500
Subject: [PATCH] namei: ->d_inode of a pinned dentry is stable only for
positives
both do_last() and walk_component() risk picking a NULL inode out of dentry about to become positive, *then* checking its flags and seeing that it's not negative anymore and using (already stale by then) value they'd fetched earlier. Usually ends up oopsing soon after that...
fs/namei.c +2 -2
@@ -1743,11 +1743,11 @@ static int walk_component(struct nameidata *nd, int flags)if (err <0 )return err; - inode =d_backing_inode (path.dentry); seq =0 ;/* we are already out of RCU mode */ err = -ENOENT ;if (d_is_negative (path.dentry)) goto out_path_put; + inode =d_backing_inode (path.dentry); }if (flags &WALK_PUT )
@@ -3192,12 +3192,12 @@ retry_lookup:return error;BUG_ON (nd->flags &LOOKUP_RCU ); - inode =d_backing_inode (path.dentry); seq =0 ;/* out of RCU mode, so the value doesn't matter */ if (unlikely (d_is_negative (path.dentry))) {path_to_nameidata (&path, nd);return -ENOENT ; } + inode =d_backing_inode (path.dentry); finish_lookup:if (nd->depth)put_link (nd);