linux/fs/f2fs
David Miller b355b899c7 crypto: Work around deallocated stack frame reference gcc bug on sparc.
commit d41519a69b upstream.

On sparc, if we have an alloca() like situation, as is the case with
SHASH_DESC_ON_STACK(), we can end up referencing deallocated stack
memory.  The result can be that the value is clobbered if a trap
or interrupt arrives at just the right instruction.

It only occurs if the function ends returning a value from that
alloca() area and that value can be placed into the return value
register using a single instruction.

For example, in lib/libcrc32c.c:crc32c() we end up with a return
sequence like:

        return  %i7+8
         lduw   [%o5+16], %o0   ! MEM[(u32 *)__shash_desc.1_10 + 16B],

%o5 holds the base of the on-stack area allocated for the shash
descriptor.  But the return released the stack frame and the
register window.

So if an intererupt arrives between 'return' and 'lduw', then
the value read at %o5+16 can be corrupted.

Add a data compiler barrier to work around this problem.  This is
exactly what the gcc fix will end up doing as well, and it absolutely
should not change the code generated for other cpus (unless gcc
on them has the same bug :-)

With crucial insight from Eric Sandeen.

Reported-by: Anatoly Pugachev <matorola@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2017-06-24 07:11:17 +02:00
..
acl.c Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-10-10 13:04:49 -07:00
acl.h f2fs: remove dead code f2fs_check_acl 2016-09-14 16:52:36 -07:00
checkpoint.c f2fs: fix to determine start_cp_addr by sbi->cur_cp_pack 2017-01-06 10:40:14 +01:00
data.c f2fs: hide a maybe-uninitialized warning 2017-01-12 11:39:35 +01:00
debug.c f2fs: remove percpu_count due to performance regression 2017-01-12 11:39:35 +01:00
dir.c fscrypt: avoid collisions when presenting long encrypted filenames 2017-05-25 15:44:38 +02:00
extent_cache.c f2fs: fix a problem of using memory after free 2017-03-12 06:41:51 +01:00
f2fs.h crypto: Work around deallocated stack frame reference gcc bug on sparc. 2017-06-24 07:11:17 +02:00
file.c f2fs: fix overflow due to condition check order 2017-01-06 10:40:14 +01:00
gc.c f2fs: add ovp valid_blocks check for bg gc victim to fg_gc 2017-03-12 06:41:51 +01:00
gc.h f2fs: detect idle time depending on user behavior 2016-01-11 15:56:37 -08:00
hash.c f2fs: check entire encrypted bigname when finding a dentry 2017-05-25 15:44:38 +02:00
inline.c f2fs: check entire encrypted bigname when finding a dentry 2017-05-25 15:44:38 +02:00
inode.c f2fs: support configuring fault injection per superblock 2016-09-30 17:34:31 -07:00
Kconfig f2fs: add mount option to select fault injection ratio 2016-05-07 10:32:22 -07:00
Makefile fs crypto: move per-file encryption from f2fs tree to fs/crypto 2016-03-17 21:19:33 -07:00
namei.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-10-10 20:16:43 -07:00
node.c Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-10-10 13:04:49 -07:00
node.h f2fs: introduce cp_lock to protect updating of ckpt_flags 2016-09-30 17:34:20 -07:00
recovery.c f2fs: introduce cp_lock to protect updating of ckpt_flags 2016-09-30 17:34:20 -07:00
segment.c f2fs: avoid to issue redundant discard commands 2017-03-12 06:41:51 +01:00
segment.h f2fs: add ovp valid_blocks check for bg gc victim to fg_gc 2017-03-12 06:41:51 +01:00
shrinker.c f2fs: produce more nids and reduce readahead nats 2016-07-06 10:44:08 -07:00
super.c f2fs: sanity check segment count 2017-05-14 14:00:22 +02:00
trace.c f2fs: use bio op accessors 2016-06-07 13:41:38 -06:00
trace.h f2fs: add sbi and page pointer in f2fs_io_info 2015-05-28 15:41:32 -07:00
xattr.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-10-10 20:16:43 -07:00
xattr.h f2fs: add missing argument to f2fs_setxattr stub 2016-03-17 21:19:47 -07:00