Skip to content

Commit 9136277

Browse files
committed
ksmbd: fix slab-use-after-free in ksmbd_free_work_struct
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
1 parent a065811 commit 9136277

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

ksmbd_work.c

+8-1
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@
1616
static struct kmem_cache *work_cache;
1717
static struct workqueue_struct *ksmbd_wq;
1818

19+
DEFINE_MUTEX(work_alloc_lock);
20+
1921
struct ksmbd_work *ksmbd_alloc_work_struct(void)
2022
{
21-
struct ksmbd_work *work = kmem_cache_zalloc(work_cache, KSMBD_DEFAULT_GFP);
23+
struct ksmbd_work *work;
2224

25+
mutex_lock(&work_alloc_lock);
26+
work = kmem_cache_zalloc(work_cache, KSMBD_DEFAULT_GFP);
27+
mutex_unlock(&work_alloc_lock);
2328
if (work) {
2429
work->compound_fid = KSMBD_NO_FID;
2530
work->compound_pfid = KSMBD_NO_FID;
@@ -64,7 +69,9 @@ void ksmbd_free_work_struct(struct ksmbd_work *work)
6469

6570
if (work->async_id)
6671
ksmbd_release_id(&work->conn->async_ida, work->async_id);
72+
mutex_lock(&work_alloc_lock);
6773
kmem_cache_free(work_cache, work);
74+
mutex_unlock(&work_alloc_lock);
6875
}
6976

7077
void ksmbd_work_pool_destroy(void)

0 commit comments

Comments
 (0)