summaryrefslogtreecommitdiffstats
path: root/fs/fscache/main.c
diff options
context:
space:
mode:
authorDavid Howells2018-10-17 16:23:45 +0200
committerGreg Kroah-Hartman2018-10-18 11:32:21 +0200
commit1ff22883b0b2f7a73eb2609ffe879c9fd96f6328 (patch)
tree113747086e8d148ccd64a1cfcec97f10f558071e /fs/fscache/main.c
parentcachefiles: fix the race between cachefiles_bury_object() and rmdir(2) (diff)
downloadkernel-qcow2-linux-1ff22883b0b2f7a73eb2609ffe879c9fd96f6328.tar.gz
kernel-qcow2-linux-1ff22883b0b2f7a73eb2609ffe879c9fd96f6328.tar.xz
kernel-qcow2-linux-1ff22883b0b2f7a73eb2609ffe879c9fd96f6328.zip
fscache: Fix incomplete initialisation of inline key space
The inline key in struct rxrpc_cookie is insufficiently initialized, zeroing only 3 of the 4 slots, therefore an index_key_len between 13 and 15 bytes will end up hashing uninitialized memory because the memcpy only partially fills the last buf[] element. Fix this by clearing fscache_cookie objects on allocation rather than using the slab constructor to initialise them. We're going to pretty much fill in the entire struct anyway, so bringing it into our dcache writably shouldn't incur much overhead. This removes the need to do clearance in fscache_set_key() (where we aren't doing it correctly anyway). Also, we don't need to set cookie->key_len in fscache_set_key() as we already did it in the only caller, so remove that. Fixes: ec0328e46d6e ("fscache: Maintain a catalogue of allocated cookies") Reported-by: syzbot+a95b989b2dde8e806af8@syzkaller.appspotmail.com Reported-by: Eric Sandeen <sandeen@redhat.com> Cc: stable <stable@vger.kernel.org> Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/fscache/main.c')
-rw-r--r--fs/fscache/main.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/fscache/main.c b/fs/fscache/main.c
index 7dce110bf17d..30ad89db1efc 100644
--- a/fs/fscache/main.c
+++ b/fs/fscache/main.c
@@ -143,9 +143,7 @@ static int __init fscache_init(void)
fscache_cookie_jar = kmem_cache_create("fscache_cookie_jar",
sizeof(struct fscache_cookie),
- 0,
- 0,
- fscache_cookie_init_once);
+ 0, 0, NULL);
if (!fscache_cookie_jar) {
pr_notice("Failed to allocate a cookie jar\n");
ret = -ENOMEM;