summaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2017-10-11 23:32:27 +0100
committerSasha Levin <alexander.levin@verizon.com>2017-11-05 23:54:37 -0500
commit34a5c6ecc7ae4470cc6f415cbc3c5b97c15023fe (patch)
tree81202a7faa696ef56f2590fbda08aade964acf51 /block
parent500f156985a31f47a2eadb5b709b245af4c3a05b (diff)
assoc_array: Fix a buggy node-splitting case
[ Upstream commit ea6789980fdaa610d7eb63602c746bf6ec70cd2b ] This fixes CVE-2017-12193. Fix a case in the assoc_array implementation in which a new leaf is added that needs to go into a node that happens to be full, where the existing leaves in that node cluster together at that level to the exclusion of new leaf. What needs to happen is that the existing leaves get moved out to a new node, N1, at level + 1 and the existing node needs replacing with one, N0, that has pointers to the new leaf and to N1. The code that tries to do this gets this wrong in two ways: (1) The pointer that should've pointed from N0 to N1 is set to point recursively to N0 instead. (2) The backpointer from N0 needs to be set correctly in the case N0 is either the root node or reached through a shortcut. Fix this by removing this path and using the split_node path instead, which achieves the same end, but in a more general way (thanks to Eric Biggers for spotting the redundancy). The problem manifests itself as: BUG: unable to handle kernel NULL pointer dereference at 0000000000000010 IP: assoc_array_apply_edit+0x59/0xe5 Fixes: 3cb989501c26 ("Add a generic associative array implementation.") Reported-and-tested-by: WU Fan <u3536072@connect.hku.hk> Signed-off-by: David Howells <dhowells@redhat.com> Cc: stable@vger.kernel.org [v3.13-rc1+] Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Diffstat (limited to 'block')
0 files changed, 0 insertions, 0 deletions