These upstream commits: commit 946e51f2bf37f1656916eb75bd0742ba33983c28 Author: Al Viro <[email protected]> Date: Sun Oct 26 19:19:16 2014 -0400
move d_rcu from overlapping d_child to overlapping d_alias
commit ca5358ef75fc69fee5322a38a340f5739d997c10
Author: Al Viro <[email protected]>
Date: Sun Oct 26 19:31:10 2014 -0400
deal with deadlock in d_walk()
fix a local denial-of-service vulnerability, designated CVE-2014-8559.
So far, they have only been applied in stable versions 3.18.1 and (with
substantial changes) 3.2.66. However, according to
<https://lkml.org/lkml/2014/10/25/179> the bug was introduced by "fs:
dcache avoid starvation in dcache multi-step operations", i.e. commit
58db63d08679 in 2.6.38-rc1. So all the 3.x branches should be fixed.
The first commit is likely to result in conflicts and/or compiler errors
when applied to any earlier kernel version; they can be resolved by:
- Mechanical substitution in references to struct dentry fields:
s/d_alias/d_u.d_alias/; s/d_u\.d_child/d_child/
- For versions before 3.15, moving the WARN_ON() to d_free() rather than
dentry_free()
I think the second commit should apply cleanly to 3.12 and later, but
for earlier versions the changes to d_walk() need to be replicated in
all the functions that use try_to_ascend(). My backport to 3.2 might
also be suitable for 3.4 and 3.10, but I still haven't had a positive
confirmation from Al that it's correct.
Ben.
--
Ben Hutchings
One of the nice things about standards is that there are so many of them.
signature.asc
Description: This is a digitally signed message part
