android_kernel_oneplus_msm8998/fs/crypto/fname.c

413 lines
11 KiB
C
Raw Normal View History

/*
* This contains functions for filename crypto management
*
* Copyright (C) 2015, Google, Inc.
* Copyright (C) 2015, Motorola Mobility
*
* Written by Uday Savagaonkar, 2014.
* Modified by Jaegeuk Kim, 2015.
*
* This has not yet undergone a rigorous security audit.
*/
#include <linux/scatterlist.h>
#include <linux/ratelimit.h>
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
#include <crypto/skcipher.h>
#include "fscrypt_private.h"
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
static inline bool fscrypt_is_dot_dotdot(const struct qstr *str)
{
if (str->len == 1 && str->name[0] == '.')
return true;
if (str->len == 2 && str->name[0] == '.' && str->name[1] == '.')
return true;
return false;
}
/**
* fname_encrypt() - encrypt a filename
*
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
* The output buffer must be at least as large as the input buffer.
* Any extra space is filled with NUL padding before encryption.
*
* Return: 0 on success, -errno on failure
*/
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
int fname_encrypt(struct inode *inode, const struct qstr *iname,
u8 *out, unsigned int olen)
{
struct skcipher_request *req = NULL;
DECLARE_CRYPTO_WAIT(wait);
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
struct crypto_skcipher *tfm = inode->i_crypt_info->ci_ctfm;
int res = 0;
char iv[FS_CRYPTO_BLOCK_SIZE];
struct scatterlist sg;
/*
* Copy the filename to the output buffer for encrypting in-place and
* pad it with the needed number of NUL bytes.
*/
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
if (WARN_ON(olen < iname->len))
return -ENOBUFS;
memcpy(out, iname->name, iname->len);
memset(out + iname->len, 0, olen - iname->len);
/* Initialize the IV */
memset(iv, 0, FS_CRYPTO_BLOCK_SIZE);
/* Set up the encryption request */
req = skcipher_request_alloc(tfm, GFP_NOFS);
if (!req) {
printk_ratelimited(KERN_ERR
"%s: skcipher_request_alloc() failed\n", __func__);
return -ENOMEM;
}
skcipher_request_set_callback(req,
CRYPTO_TFM_REQ_MAY_BACKLOG | CRYPTO_TFM_REQ_MAY_SLEEP,
crypto_req_done, &wait);
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
sg_init_one(&sg, out, olen);
skcipher_request_set_crypt(req, &sg, &sg, olen, iv);
/* Do the encryption */
res = crypto_wait_req(crypto_skcipher_encrypt(req), &wait);
skcipher_request_free(req);
if (res < 0) {
printk_ratelimited(KERN_ERR
"%s: Error (error code %d)\n", __func__, res);
return res;
}
return 0;
}
/**
* fname_decrypt() - decrypt a filename
*
* The caller must have allocated sufficient memory for the @oname string.
*
* Return: 0 on success, -errno on failure
*/
static int fname_decrypt(struct inode *inode,
const struct fscrypt_str *iname,
struct fscrypt_str *oname)
{
struct skcipher_request *req = NULL;
DECLARE_CRYPTO_WAIT(wait);
struct scatterlist src_sg, dst_sg;
struct fscrypt_info *ci = inode->i_crypt_info;
struct crypto_skcipher *tfm = ci->ci_ctfm;
int res = 0;
char iv[FS_CRYPTO_BLOCK_SIZE];
unsigned lim;
lim = inode->i_sb->s_cop->max_namelen(inode);
if (iname->len <= 0 || iname->len > lim)
return -EIO;
/* Allocate request */
req = skcipher_request_alloc(tfm, GFP_NOFS);
if (!req) {
printk_ratelimited(KERN_ERR
"%s: crypto_request_alloc() failed\n", __func__);
return -ENOMEM;
}
skcipher_request_set_callback(req,
CRYPTO_TFM_REQ_MAY_BACKLOG | CRYPTO_TFM_REQ_MAY_SLEEP,
crypto_req_done, &wait);
/* Initialize IV */
memset(iv, 0, FS_CRYPTO_BLOCK_SIZE);
/* Create decryption request */
sg_init_one(&src_sg, iname->name, iname->len);
sg_init_one(&dst_sg, oname->name, oname->len);
skcipher_request_set_crypt(req, &src_sg, &dst_sg, iname->len, iv);
res = crypto_wait_req(crypto_skcipher_decrypt(req), &wait);
skcipher_request_free(req);
if (res < 0) {
printk_ratelimited(KERN_ERR
"%s: Error (error code %d)\n", __func__, res);
return res;
}
oname->len = strnlen(oname->name, iname->len);
return 0;
}
static const char *lookup_table =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,";
#define BASE64_CHARS(nbytes) DIV_ROUND_UP((nbytes) * 4, 3)
/**
* digest_encode() -
*
* Encodes the input digest using characters from the set [a-zA-Z0-9_+].
* The encoded string is roughly 4/3 times the size of the input string.
*/
static int digest_encode(const char *src, int len, char *dst)
{
int i = 0, bits = 0, ac = 0;
char *cp = dst;
while (i < len) {
ac += (((unsigned char) src[i]) << bits);
bits += 8;
do {
*cp++ = lookup_table[ac & 0x3f];
ac >>= 6;
bits -= 6;
} while (bits >= 6);
i++;
}
if (bits)
*cp++ = lookup_table[ac & 0x3f];
return cp - dst;
}
static int digest_decode(const char *src, int len, char *dst)
{
int i = 0, bits = 0, ac = 0;
const char *p;
char *cp = dst;
while (i < len) {
p = strchr(lookup_table, src[i]);
if (p == NULL || src[i] == 0)
return -2;
ac += (p - lookup_table) << bits;
bits += 6;
if (bits >= 8) {
*cp++ = ac & 0xff;
ac >>= 8;
bits -= 8;
}
i++;
}
if (ac)
return -1;
return cp - dst;
}
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
bool fscrypt_fname_encrypted_size(const struct inode *inode, u32 orig_len,
u32 max_len, u32 *encrypted_len_ret)
{
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
int padding = 4 << (inode->i_crypt_info->ci_flags &
FS_POLICY_FLAGS_PAD_MASK);
u32 encrypted_len;
if (orig_len > max_len)
return false;
encrypted_len = max(orig_len, (u32)FS_CRYPTO_BLOCK_SIZE);
encrypted_len = round_up(encrypted_len, padding);
*encrypted_len_ret = min(encrypted_len, max_len);
return true;
}
/**
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
* fscrypt_fname_alloc_buffer - allocate a buffer for presented filenames
*
* Allocate a buffer that is large enough to hold any decrypted or encoded
* filename (null-terminated), for the given maximum encrypted filename length.
*
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
* Return: 0 on success, -errno on failure
*/
int fscrypt_fname_alloc_buffer(const struct inode *inode,
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
u32 max_encrypted_len,
struct fscrypt_str *crypto_str)
{
const u32 max_encoded_len =
max_t(u32, BASE64_CHARS(FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE),
1 + BASE64_CHARS(sizeof(struct fscrypt_digested_name)));
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
u32 max_presented_len;
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
max_presented_len = max(max_encoded_len, max_encrypted_len);
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
crypto_str->name = kmalloc(max_presented_len + 1, GFP_NOFS);
if (!crypto_str->name)
return -ENOMEM;
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
crypto_str->len = max_presented_len;
return 0;
}
EXPORT_SYMBOL(fscrypt_fname_alloc_buffer);
/**
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
* fscrypt_fname_free_buffer - free the buffer for presented filenames
*
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
* Free the buffer allocated by fscrypt_fname_alloc_buffer().
*/
void fscrypt_fname_free_buffer(struct fscrypt_str *crypto_str)
{
if (!crypto_str)
return;
kfree(crypto_str->name);
crypto_str->name = NULL;
}
EXPORT_SYMBOL(fscrypt_fname_free_buffer);
/**
* fscrypt_fname_disk_to_usr() - converts a filename from disk space to user
* space
*
* The caller must have allocated sufficient memory for the @oname string.
*
* If the key is available, we'll decrypt the disk name; otherwise, we'll encode
* it for presentation. Short names are directly base64-encoded, while long
* names are encoded in fscrypt_digested_name format.
*
* Return: 0 on success, -errno on failure
*/
int fscrypt_fname_disk_to_usr(struct inode *inode,
u32 hash, u32 minor_hash,
const struct fscrypt_str *iname,
struct fscrypt_str *oname)
{
const struct qstr qname = FSTR_TO_QSTR(iname);
struct fscrypt_digested_name digested_name;
if (fscrypt_is_dot_dotdot(&qname)) {
oname->name[0] = '.';
oname->name[iname->len - 1] = '.';
oname->len = iname->len;
return 0;
}
if (iname->len < FS_CRYPTO_BLOCK_SIZE)
return -EUCLEAN;
if (inode->i_crypt_info)
return fname_decrypt(inode, iname, oname);
if (iname->len <= FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE) {
oname->len = digest_encode(iname->name, iname->len,
oname->name);
return 0;
}
if (hash) {
digested_name.hash = hash;
digested_name.minor_hash = minor_hash;
} else {
digested_name.hash = 0;
digested_name.minor_hash = 0;
}
memcpy(digested_name.digest,
FSCRYPT_FNAME_DIGEST(iname->name, iname->len),
FSCRYPT_FNAME_DIGEST_SIZE);
oname->name[0] = '_';
oname->len = 1 + digest_encode((const char *)&digested_name,
sizeof(digested_name), oname->name + 1);
return 0;
}
EXPORT_SYMBOL(fscrypt_fname_disk_to_usr);
/**
* fscrypt_setup_filename() - prepare to search a possibly encrypted directory
* @dir: the directory that will be searched
* @iname: the user-provided filename being searched for
* @lookup: 1 if we're allowed to proceed without the key because it's
* ->lookup() or we're finding the dir_entry for deletion; 0 if we cannot
* proceed without the key because we're going to create the dir_entry.
* @fname: the filename information to be filled in
*
* Given a user-provided filename @iname, this function sets @fname->disk_name
* to the name that would be stored in the on-disk directory entry, if possible.
* If the directory is unencrypted this is simply @iname. Else, if we have the
* directory's encryption key, then @iname is the plaintext, so we encrypt it to
* get the disk_name.
*
* Else, for keyless @lookup operations, @iname is the presented ciphertext, so
* we decode it to get either the ciphertext disk_name (for short names) or the
* fscrypt_digested_name (for long names). Non-@lookup operations will be
* impossible in this case, so we fail them with ENOKEY.
*
* If successful, fscrypt_free_filename() must be called later to clean up.
*
* Return: 0 on success, -errno on failure
*/
int fscrypt_setup_filename(struct inode *dir, const struct qstr *iname,
int lookup, struct fscrypt_name *fname)
{
int ret;
int digested;
memset(fname, 0, sizeof(struct fscrypt_name));
fname->usr_fname = iname;
if (!IS_ENCRYPTED(dir) || fscrypt_is_dot_dotdot(iname)) {
fname->disk_name.name = (unsigned char *)iname->name;
fname->disk_name.len = iname->len;
return 0;
}
ret = fscrypt_get_encryption_info(dir);
if (ret && ret != -EOPNOTSUPP)
return ret;
if (dir->i_crypt_info) {
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
if (!fscrypt_fname_encrypted_size(dir, iname->len,
dir->i_sb->s_cop->max_namelen(dir),
&fname->crypto_buf.len))
return -ENAMETOOLONG;
fname->crypto_buf.name = kmalloc(fname->crypto_buf.len,
GFP_NOFS);
if (!fname->crypto_buf.name)
return -ENOMEM;
ret = fname_encrypt(dir, iname, fname->crypto_buf.name,
fname->crypto_buf.len);
if (ret)
goto errout;
fname->disk_name.name = fname->crypto_buf.name;
fname->disk_name.len = fname->crypto_buf.len;
return 0;
}
if (!lookup)
return -ENOKEY;
/*
* We don't have the key and we are doing a lookup; decode the
* user-supplied name
*/
if (iname->name[0] == '_') {
if (iname->len !=
1 + BASE64_CHARS(sizeof(struct fscrypt_digested_name)))
return -ENOENT;
digested = 1;
} else {
if (iname->len >
BASE64_CHARS(FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE))
return -ENOENT;
digested = 0;
}
fname->crypto_buf.name =
kmalloc(max_t(size_t, FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE,
sizeof(struct fscrypt_digested_name)),
GFP_KERNEL);
if (fname->crypto_buf.name == NULL)
return -ENOMEM;
ret = digest_decode(iname->name + digested, iname->len - digested,
fname->crypto_buf.name);
if (ret < 0) {
ret = -ENOENT;
goto errout;
}
fname->crypto_buf.len = ret;
if (digested) {
const struct fscrypt_digested_name *n =
(const void *)fname->crypto_buf.name;
fname->hash = n->hash;
fname->minor_hash = n->minor_hash;
} else {
fname->disk_name.name = fname->crypto_buf.name;
fname->disk_name.len = fname->crypto_buf.len;
}
return 0;
errout:
f2fs/fscrypt: updates to v4.17-rc1 Pull f2fs update from Jaegeuk Kim: "In this round, we've mainly focused on performance tuning and critical bug fixes occurred in low-end devices. Sheng Yong introduced lost_found feature to keep missing files during recovery instead of thrashing them. We're preparing coming fsverity implementation. And, we've got more features to communicate with users for better performance. In low-end devices, some memory-related issues were fixed, and subtle race condtions and corner cases were addressed as well. Enhancements: - large nat bitmaps for more free node ids - add three block allocation policies to pass down write hints given by user - expose extension list to user and introduce hot file extension - tune small devices seamlessly for low-end devices - set readdir_ra by default - give more resources under gc_urgent mode regarding to discard and cleaning - introduce fsync_mode to enforce posix or not - nowait aio support - add lost_found feature to keep dangling inodes - reserve bits for future fsverity feature - add test_dummy_encryption for FBE Bug fixes: - don't use highmem for dentry pages - align memory boundary for bitops - truncate preallocated blocks in write errors - guarantee i_times on fsync call - clear CP_TRIMMED_FLAG correctly - prevent node chain loop during recovery - avoid data race between atomic write and background cleaning - avoid unnecessary selinux violation warnings on resgid option - GFP_NOFS to avoid deadlock in quota and read paths - fix f2fs_skip_inode_update to allow i_size recovery In addition to the above, there are several minor bug fixes and clean-ups" Cherry-pick from origin/upstream-f2fs-stable-linux-4.4.y: 42bf67fc543b f2fs: remain written times to update inode during fsync 6cb5aa02bfbd f2fs: make assignment of t->dentry_bitmap more readable a8d07f1f9c62 f2fs: truncate preallocated blocks in error case 86444d600692 f2fs: fix a wrong condition in f2fs_skip_inode_update db2188a68704 f2fs: reserve bits for fs-verity ee2e74b3f00e f2fs: Add a segment type check in inplace write 0192e0a4502f f2fs: no need to initialize zero value for GFP_F2FS_ZERO 49338842e9b2 f2fs: don't track new nat entry in nat set d6a69d5e6568 f2fs: clean up with F2FS_BLK_ALIGN 2c8834a7a2c9 f2fs: check blkaddr more accuratly before issue a bio 6ab573a9d96f f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read 7419dcb8be02 f2fs: introduce a new mount option test_dummy_encryption 9321e22c038c f2fs: introduce F2FS_FEATURE_LOST_FOUND feature 8a5719615847 f2fs: release locks before return in f2fs_ioc_gc_range() 739ace131cdf f2fs: align memory boundary for bitops 4c55abe4f8d2 f2fs: remove unneeded set_cold_node() 30654507e0a2 f2fs: add nowait aio support d909e9410634 f2fs: wrap all options with f2fs_sb_info.mount_opt 5738be52b3e8 f2fs: Don't overwrite all types of node to keep node chain 0bdeb167c843 f2fs: introduce mount option for fsync mode 6bc490f0eedc f2fs: fix to restore old mount option in ->remount_fs 0c9c3e034410 f2fs: wrap sb_rdonly with f2fs_readonly 6c6611223a79 f2fs: avoid selinux denial on CAP_SYS_RESOURCE 076a6f32fe5d f2fs: support hot file extension 58edcdbca67a f2fs: fix to avoid race in between atomic write and background GC 1e0aeb0af9ed f2fs: do gc in greedy mode for whole range if gc_urgent mode is set 10b2d001d6ac f2fs: issue discard aggressively in the gc_urgent mode a5052f32b940 f2fs: set readdir_ra by default 1aa536a624cc f2fs: add auto tuning for small devices 0ffdffc8f106 f2fs: add mount option for segment allocation policy b79829891249 f2fs: don't stop GC if GC is contended 766d2321697f f2fs: expose extension_list sysfs entry 98b329de5026 f2fs: fix to set KEEP_SIZE bit in f2fs_zero_range 4d409fa3346b f2fs: introduce sb_lock to make encrypt pwsalt update exclusive 1f6bac14c100 f2fs: remove redundant initialization of pointer 'p' 946aefc7545d f2fs: flush cp pack except cp pack 2 page at first e5081a52ac09 f2fs: clean up f2fs_sb_has_xxx functions a292477154b5 f2fs: remove redundant check of page type when submit bio 190e64a819df f2fs: fix to handle looped node chain during recovery 889d98087652 f2fs: handle quota for orphan inodes 92b12bb1a23e f2fs: support passing down write hints to block layer with F2FS policy 22fa74c2b097 f2fs: support passing down write hints given by users to block layer 180900373ec1 f2fs: fix to clear CP_TRIMMED_FLAG 0671fae134bb f2fs: support large nat bitmap eceb943d5d59 f2fs: fix to check extent cache in f2fs_drop_extent_tree 2e2a339c9853 f2fs: restrict inline_xattr_size configuration 41dda1164137 f2fs: fix heap mode to reset it back 39575737bb62 f2fs: fix potential corruption in area before F2FS_SUPER_OFFSET 7e0e7995ee97 fscrypt: fix build with pre-4.6 gcc versions 31d3279a4fca fscrypt: fix up fscrypt_fname_encrypted_size() for internal use 82bec888567b fscrypt: define fscrypt_fname_alloc_buffer() to be for presented names 168a90782888 fscrypt: calculate NUL-padding length in one place only 042ae9f4cfbf fscrypt: move fscrypt_symlink_data to fscrypt_private.h f9550c24c20e fscrypt: remove fscrypt_fname_usr_to_disk() 7ac4756a2474 f2fs: switch to fscrypt_get_symlink() 6b76f58e24bd f2fs: switch to fscrypt ->symlink() helper functions fd457d2c4e04 fscrypt: new helper function - fscrypt_get_symlink() a1cdacb7ae0d fscrypt: new helper functions for ->symlink() 7f43602f4d10 fscrypt: trim down fscrypt.h includes d9cadc11bdcf fscrypt: move fscrypt_is_dot_dotdot() to fs/crypto/fname.c e6fe930580cb fscrypt: move fscrypt_valid_enc_modes() to fscrypt_private.h efefa434f47e fscrypt: move fscrypt_operations declaration to fscrypt_supp.h 7ed178bc8ae9 fscrypt: split fscrypt_dummy_context_enabled() into supp/notsupp versions 3f16e09dadfb fscrypt: move fscrypt_ctx declaration to fscrypt_supp.h 8216a0b51a3b fscrypt: move fscrypt_info_cachep declaration to fscrypt_private.h dfe0b3b1b67f fscrypt: move fscrypt_control_page() to supp/notsupp headers 3a2c79177822 fscrypt: move fscrypt_has_encryption_key() to supp/notsupp headers Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
2018-01-05 10:44:52 -08:00
kfree(fname->crypto_buf.name);
return ret;
}
EXPORT_SYMBOL(fscrypt_setup_filename);