diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index efb9d2811b73d18862f824b0b7a8b4e6b905271d..6ee7064c82fcc3bdb7596e2ad8fe33bc6456102d 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -2460,8 +2460,11 @@ unbind_filter:
 	}
 
 errout_idr:
-	if (!fold)
+	if (!fold) {
+		spin_lock(&tp->lock);
 		idr_remove(&head->handle_idr, fnew->handle);
+		spin_unlock(&tp->lock);
+	}
 	__fl_put(fnew);
 errout_tb:
 	kfree(tb);