isofs: Fix unbounded recursion when processing relocated directories
authorJan Kara <jack@suse.cz>
Sun, 17 Aug 2014 09:49:57 +0000 (11:49 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 5 Sep 2014 23:34:12 +0000 (16:34 -0700)
commit3ca762283e2af911674dea8c54631d2d45b04dbf
treeec1d4102aa5d636234013b9c63fcca8d2e32bb35
parent1de1376b8e805c553d28354c9ae5d5fddb8bbff8
isofs: Fix unbounded recursion when processing relocated directories

commit 410dd3cf4c9b36f27ed4542ee18b1af5e68645a4 upstream.

We did not check relocated directory in any way when processing Rock
Ridge 'CL' tag. Thus a corrupted isofs image can possibly have a CL
entry pointing to another CL entry leading to possibly unbounded
recursion in kernel code and thus stack overflow or deadlocks (if there
is a loop created from CL entries).

Fix the problem by not allowing CL entry to point to a directory entry
with CL entry (such use makes no good sense anyway) and by checking
whether CL entry doesn't point to itself.

Reported-by: Chris Evans <cevans@google.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/isofs/inode.c
fs/isofs/isofs.h
fs/isofs/rock.c