Patch "f2fs crypto: allocate buffer for decrypting filename" has been added to the 4.3-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
f2fs crypto: allocate buffer for decrypting filename
to the 4.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
f2fs-crypto-allocate-buffer-for-decrypting-filename.patch
and it can be found in the queue-4.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
569cf1876a32e574ba8a7fb825cd91bafd003882Mon Sep 17 00:00:00 2001
From: Jaegeuk Kim <[email protected]>
Date: Thu, 3 Sep 2015 13:38:23 -0700
Subject: f2fs crypto: allocate buffer for decrypting filename
From: Jaegeuk Kim <[email protected]>
commit 569cf1876a32e574ba8a7fb825cd91bafd003882 upstream.
We got dentry pages from high_mem, and its address space directly goes into the decryption path via f2fs_fname_disk_to_usr.
But, sg_init_one assumes the address is not from high_mem, so we can get this panic since it doesn't call kmap_high but kunmap_high is triggered at the end.
kernel BUG at ../../../../../../kernel/mm/highmem.c:290!
Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM
...
(kunmap_high+0xb0/0xb8) from [<c0114534>] (__kunmap_atomic+0xa0/0xa4) (__kunmap_atomic+0xa0/0xa4) from [<c035f028>] (blkcipher_walk_done+0x128/0x1ec) (blkcipher_walk_done+0x128/0x1ec) from [<c0366c24>] (crypto_cbc_decrypt+0xc0/0x170) (crypto_cbc_decrypt+0xc0/0x170) from [<c0367148>] (crypto_cts_decrypt+0xc0/0x114) (crypto_cts_decrypt+0xc0/0x114) from [<c035ea98>] (async_decrypt+0x40/0x48) (async_decrypt+0x40/0x48) from [<c032ca34>] (f2fs_fname_disk_to_usr+0x124/0x304) (f2fs_fname_disk_to_usr+0x124/0x304) from [<c03056fc>] (f2fs_fill_dentries+0xac/0x188) (f2fs_fill_dentries+0xac/0x188) from [<c03059c8>] (f2fs_readdir+0x1f0/0x300) (f2fs_readdir+0x1f0/0x300) from [<c0218054>] (vfs_readdir+0x90/0xb4) (vfs_readdir+0x90/0xb4) from [<c0218418>] (SyS_getdents64+0x64/0xcc) (SyS_getdents64+0x64/0xcc) from [<c0105ba0>] (ret_fast_syscall+0x0/0x30)
--- fs/f2fs/dir.c | 13 ++++++++++--- fs/f2fs/namei.c | 10 +++++++++- 2 files changed, 19 insertions(+), 4 deletions(-)
fs/f2fs/dir.c +10 -3
@@ -787,7 +787,6 @@ bool f2fs_fill_dentries(struct dir_conteelse d_type =DT_UNKNOWN ; -/* encrypted case */ de_name.name = d->filename[bit_pos]; de_name.len =le16_to_cpu (de->name_len);
@@ -795,12 +794,20 @@ bool f2fs_fill_dentries(struct dir_conteint save_len = fstr->len;int ret; + de_name.name =kmalloc (de_name.len,GFP_NOFS ); +if (!de_name.name) +return false; + +memcpy (de_name.name, d->filename[bit_pos], de_name.len); + ret =f2fs_fname_disk_to_usr (d->inode, &de->hash_code, &de_name, fstr); - de_name = *fstr; - fstr->len = save_len; +kfree (de_name.name);if (ret <0 )return true; + + de_name = *fstr; + fstr->len = save_len; } if (!dir_emit(ctx, de_name.name, de_name.len,
fs/f2fs/namei.c +9 -1
@@ -947,8 +947,13 @@ static const char *f2fs_encrypted_follow/* Symlink is encrypted */ sd = (struct f2fs_encrypted_symlink_data *)caddr; - cstr.name = sd->encrypted_path; cstr.len =le16_to_cpu (sd->len); + cstr.name =kmalloc (cstr.len,GFP_NOFS ); +if (!cstr.name) { + res = -ENOMEM ; + goto errout; + } +memcpy (cstr.name, sd->encrypted_path, cstr.len);/* this is broken symlink case */ if (cstr.name[0 ] ==0 && cstr.len ==0 ) {
@@ -970,6 +975,8 @@ static const char *f2fs_encrypted_followif (res <0 ) goto errout; +kfree (cstr.name); + paddr = pstr.name;/* Null-terminate the name */
@@ -979,6 +986,7 @@ static const char *f2fs_encrypted_followpage_cache_release (cpage);return *cookie = paddr; errout: +kfree (cstr.name);f2fs_fname_crypto_free_buffer (&pstr);kunmap (cpage);page_cache_release (cpage);
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/f2fs-crypto-allocate-buffer-for-decrypting-filename.patch