fscrypto: don't use on-stack buffer for filename encryption
authorEric Biggers <ebiggers@google.com>
Mon, 14 Nov 2016 01:35:52 +0000 (20:35 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 20 Nov 2016 01:56:06 +0000 (20:56 -0500)
commit3c7018ebf8dbf14e7cd4f5dc648c51fc979f45bb
tree6d1f382a088cb398acb0bd9b3d50fe1d577038d4
parentbc33b0ca11e3df467777a4fa7639ba488c9d4911
fscrypto: don't use on-stack buffer for filename encryption

With the new (in 4.9) option to use a virtually-mapped stack
(CONFIG_VMAP_STACK), stack buffers cannot be used as input/output for
the scatterlist crypto API because they may not be directly mappable to
struct page.  For short filenames, fname_encrypt() was encrypting a
stack buffer holding the padded filename.  Fix it by encrypting the
filename in-place in the output buffer, thereby making the temporary
buffer unnecessary.

This bug could most easily be observed in a CONFIG_DEBUG_SG kernel
because this allowed the BUG in sg_set_buf() to be triggered.

Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/crypto/fname.c