diff options
author | Xiaolei Li <xiaolei.li@mediatek.com> | 2017-06-22 22:37:23 -0400 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2017-07-14 16:50:54 -0400 |
commit | d8db5b1ca9d4c57e49893d0f78e6d5ce81450cc8 (patch) | |
tree | d416e0fe37e606100a02d1c786c8050f460d7577 /fs/ubifs/crypto.c | |
parent | 4acadda74ff8b949c448c0282765ae747e088c87 (diff) |
ubifs: Massage assert in ubifs_xattr_set() wrt. init_xattrs
The inode is not locked in init_xattrs when creating a new inode.
Without this patch, there will occurs assert when booting or creating
a new file, if the kernel config CONFIG_SECURITY_SMACK is enabled.
Log likes:
UBIFS assert failed in ubifs_xattr_set at 298 (pid 1156)
CPU: 1 PID: 1156 Comm: ldconfig Tainted: G S 4.12.0-rc1-207440-g1e70b02 #2
Hardware name: MediaTek MT2712 evaluation board (DT)
Call trace:
[<ffff000008088538>] dump_backtrace+0x0/0x238
[<ffff000008088834>] show_stack+0x14/0x20
[<ffff0000083d98d4>] dump_stack+0x9c/0xc0
[<ffff00000835d524>] ubifs_xattr_set+0x374/0x5e0
[<ffff00000835d7ec>] init_xattrs+0x5c/0xb8
[<ffff000008385788>] security_inode_init_security+0x110/0x190
[<ffff00000835e058>] ubifs_init_security+0x30/0x68
[<ffff00000833ada0>] ubifs_mkdir+0x100/0x200
[<ffff00000820669c>] vfs_mkdir+0x11c/0x1b8
[<ffff00000820b73c>] SyS_mkdirat+0x74/0xd0
[<ffff000008082f8c>] __sys_trace_return+0x0/0x4
Signed-off-by: Xiaolei Li <xiaolei.li@mediatek.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'fs/ubifs/crypto.c')
-rw-r--r-- | fs/ubifs/crypto.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/ubifs/crypto.c b/fs/ubifs/crypto.c index 382ed428cfd2..114ba455bac3 100644 --- a/fs/ubifs/crypto.c +++ b/fs/ubifs/crypto.c | |||
@@ -9,8 +9,13 @@ static int ubifs_crypt_get_context(struct inode *inode, void *ctx, size_t len) | |||
9 | static int ubifs_crypt_set_context(struct inode *inode, const void *ctx, | 9 | static int ubifs_crypt_set_context(struct inode *inode, const void *ctx, |
10 | size_t len, void *fs_data) | 10 | size_t len, void *fs_data) |
11 | { | 11 | { |
12 | /* | ||
13 | * Creating an encryption context is done unlocked since we | ||
14 | * operate on a new inode which is not visible to other users | ||
15 | * at this point. So, no need to check whether inode is locked. | ||
16 | */ | ||
12 | return ubifs_xattr_set(inode, UBIFS_XATTR_NAME_ENCRYPTION_CONTEXT, | 17 | return ubifs_xattr_set(inode, UBIFS_XATTR_NAME_ENCRYPTION_CONTEXT, |
13 | ctx, len, 0); | 18 | ctx, len, 0, false); |
14 | } | 19 | } |
15 | 20 | ||
16 | static bool ubifs_crypt_empty_dir(struct inode *inode) | 21 | static bool ubifs_crypt_empty_dir(struct inode *inode) |