diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 392be4b252f69d02f5cd1770c17344b8067aec2f..a503ad9d0aec849e3bb1929b389eab3abb4236ad 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -2908,6 +2908,9 @@ static bool __flush_work(struct work_struct *work, bool from_cancel)
 	if (WARN_ON(!wq_online))
 		return false;
 
+	if (WARN_ON(!work->func))
+		return false;
+
 	if (!from_cancel) {
 		lock_map_acquire(&work->lockdep_map);
 		lock_map_release(&work->lockdep_map);