summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Wellving <andreas.wellving@enea.com>2018-10-12 08:13:02 +0200
committerAdrian Dudau <Adrian.Dudau@enea.com>2018-10-12 14:08:50 +0200
commit3f29767ddff09c1a5b8b75ca3bf8e7cfb1291c75 (patch)
tree1077605384ea1884b8a176be0fc3f0f1623247a6
parent114f0c3a79127252b0c11f2c9004388a8b89c07d (diff)
downloadenea-kernel-cache-3f29767ddff09c1a5b8b75ca3bf8e7cfb1291c75.tar.gz
hfsplus: CVE-2018-14617
hfsplus: fix NULL dereference in hfsplus_lookup() References: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-4.9.y&id=1cedd72d0f688b9c169836649ac9ec07a3c601d6 https://bugzilla.kernel.org/show_bug.cgi?id=200297 Change-Id: I03bfdffcb6e4fe3f525a2dbfe2177f131ac95ff2 Signed-off-by: Andreas Wellving <andreas.wellving@enea.com>
-rw-r--r--patches/cve/4.9.x.scc3
-rw-r--r--patches/cve/CVE-2018-14617-hfsplus-fix-NULL-dereference-in-hfsplus_lookup.patch60
2 files changed, 62 insertions, 1 deletions
diff --git a/patches/cve/4.9.x.scc b/patches/cve/4.9.x.scc
index d730f9d..26926f0 100644
--- a/patches/cve/4.9.x.scc
+++ b/patches/cve/4.9.x.scc
@@ -14,4 +14,5 @@ patch CVE-2018-9363-Bluetooth-hidp-buffer-overflow-in-hidp_process_repor.patch
14patch CVE-2018-10938-Cipso-cipso_v4_optptr-enter-infinite-loop.patch 14patch CVE-2018-10938-Cipso-cipso_v4_optptr-enter-infinite-loop.patch
15 15
16#CVEs fixed in 4.9.127: 16#CVEs fixed in 4.9.127:
17patch CVE-2018-14609-btrfs-relocation-Only-remove-reloc-rb_trees-if-reloc.patch \ No newline at end of file 17patch CVE-2018-14609-btrfs-relocation-Only-remove-reloc-rb_trees-if-reloc.patch
18patch CVE-2018-14617-hfsplus-fix-NULL-dereference-in-hfsplus_lookup.patch
diff --git a/patches/cve/CVE-2018-14617-hfsplus-fix-NULL-dereference-in-hfsplus_lookup.patch b/patches/cve/CVE-2018-14617-hfsplus-fix-NULL-dereference-in-hfsplus_lookup.patch
new file mode 100644
index 0000000..7117557
--- /dev/null
+++ b/patches/cve/CVE-2018-14617-hfsplus-fix-NULL-dereference-in-hfsplus_lookup.patch
@@ -0,0 +1,60 @@
1From a7ec7a4193a2eb3b5341243fc0b621c1ac9e4ec4 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Ernesto=20A=2E=20Fern=C3=A1ndez?=
3 <ernesto.mnd.fernandez@gmail.com>
4Date: Thu, 23 Aug 2018 17:00:25 -0700
5Subject: [PATCH] hfsplus: fix NULL dereference in hfsplus_lookup()
6MIME-Version: 1.0
7Content-Type: text/plain; charset=UTF-8
8Content-Transfer-Encoding: 8bit
9
10An HFS+ filesystem can be mounted read-only without having a metadata
11directory, which is needed to support hardlinks. But if the catalog
12data is corrupted, a directory lookup may still find dentries claiming
13to be hardlinks.
14
15hfsplus_lookup() does check that ->hidden_dir is not NULL in such a
16situation, but mistakenly does so after dereferencing it for the first
17time. Reorder this check to prevent a crash.
18
19This happens when looking up corrupted catalog data (dentry) on a
20filesystem with no metadata directory (this could only ever happen on a
21read-only mount). Wen Xu sent the replication steps in detail to the
22fsdevel list: https://bugzilla.kernel.org/show_bug.cgi?id=200297
23
24CVE: CVE-2018-14617
25Upstream-Status: Backport
26
27Link: http://lkml.kernel.org/r/20180712215344.q44dyrhymm4ajkao@eaf
28Signed-off-by: Ernesto A. Fernández <ernesto.mnd.fernandez@gmail.com>
29Reported-by: Wen Xu <wen.xu@gatech.edu>
30Cc: Viacheslav Dubeyko <slava@dubeyko.com>
31Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
32Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
33Signed-off-by: Andreas Wellving <andreas.wellving@enea.com>
34---
35 fs/hfsplus/dir.c | 4 ++--
36 1 file changed, 2 insertions(+), 2 deletions(-)
37
38diff --git a/fs/hfsplus/dir.c b/fs/hfsplus/dir.c
39index c5a70f8..f376626 100644
40--- a/fs/hfsplus/dir.c
41+++ b/fs/hfsplus/dir.c
42@@ -77,13 +77,13 @@ static struct dentry *hfsplus_lookup(struct inode *dir, struct dentry *dentry,
43 cpu_to_be32(HFSP_HARDLINK_TYPE) &&
44 entry.file.user_info.fdCreator ==
45 cpu_to_be32(HFSP_HFSPLUS_CREATOR) &&
46+ HFSPLUS_SB(sb)->hidden_dir &&
47 (entry.file.create_date ==
48 HFSPLUS_I(HFSPLUS_SB(sb)->hidden_dir)->
49 create_date ||
50 entry.file.create_date ==
51 HFSPLUS_I(d_inode(sb->s_root))->
52- create_date) &&
53- HFSPLUS_SB(sb)->hidden_dir) {
54+ create_date)) {
55 struct qstr str;
56 char name[32];
57
58--
592.7.4
60