From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 447B347DD4A for ; Tue, 28 Apr 2026 16:14:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777392867; cv=none; b=fQ15RwvEzVW1v+EYhQIZR4rIpgQuQAgtJV03pkRpA/PPsq2AKR9i1i+QfuaLgT4wnIAwbbOUnPYVsDzFlRMSBQS9CRBnlGfvoO+iMqLOZ/fhZQeoTBQdFFaZ7FnnMaH8y1E79D85KtJfF0KZsuhitt/3kDAKnivKFSkH7hQ02wg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777392867; c=relaxed/simple; bh=6kTZH/32p86XVcFzCtM+iCTAIlTdeH5SLSxO6RKsCew=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tFaMEl/8ZAI2W2XJMQ6vx+uOnfRhdY5I0eUReiP/SiMJVz9j0b/RCAt2+B/Dws/cNmxJTZSS7W//4Kwd07iv/NnOzuAN3H/Q2iGKXZmXHVSqKAhhw4CtqGbR2trbm5E4KW7kpcfsGTQZ9QmMaB+RjcMcl2AK9ngvFN8AAMmrGWk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=shKCUsb9; arc=none smtp.client-ip=209.85.208.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="shKCUsb9" Received: by mail-lj1-f170.google.com with SMTP id 38308e7fff4ca-38e7bd07656so105555841fa.1 for ; Tue, 28 Apr 2026 09:14:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777392863; x=1777997663; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lgq6z5Z9dkQxQkYs8MZMof9rIQA2gGJwXIkdAa9GMr0=; b=shKCUsb9lYVRVkv1BhyrEai4mumaHbtTbv0ompyo+0oZ7ilTgNRlXzLiS3D3ovJpfm 7p52sreXTbpO2uTufMvUvC5sH57iVllYBFBIYYHFBKoyvs4QJsAicdAdTGSDr7J8a+R3 4B2kR1al8tqFrV0PzjKLQhq7YboFjZDbGKEsOYM1MKTcUnnXW3bYWZn2hDM6R8g9t3jk +u0J1q6168Zbc0QN3sicHHUCcE6ZC9v0U9nyJ6aD6jogb4/YflbMo3KTbHqgwkI3Bmi0 D37HDOjvoMWL407cIggQ/Adie88N8Hz3DNu0//bIdNHMuudkN+G2Fs/FMbCMj5Yp8RYY C7Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777392863; x=1777997663; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=lgq6z5Z9dkQxQkYs8MZMof9rIQA2gGJwXIkdAa9GMr0=; b=bRpznYzjSGVSAYioUvNUhwJzbhOBULttHspHOqtiCZ+7MYsRdU9ZIK9eevY4WJbX1s s4YRArTlORz9Ib0cKwKEPzDw9PoNm7w8md8O7kf7tZLsWwjdFVMsXcH8fxznkMKQqLn0 Exfc8YYe//D8XFtyplLM6Qr+0rDke0LG/lX+g3+c4AgK6r+euo0yqn1Zs5+8bp7NMQ2d WJUoxE4lrScJSPiUdb1XTLZDuCJabWAsLlNOv2KzEQL3gLpSF0kOanEYwW79o/wXqvPe GTCH0dWetSQ3YAqOLjF0CnKjaSPM95rK4btkSx+6MpZHoDlqL8CfHqupKysLmgEIwmhH 8BvQ== X-Gm-Message-State: AOJu0YyAA7mYMHOiQU9rkOBCPFV2qekIcZ7Z+gasOzyOW8X/sLQN6WrA nnr5zJNdkoC7JvovlHhepORse0RTWUuSHrEh8ApxO7HAuszc9DkqvxGBG0Jo/+52 X-Gm-Gg: AeBDievNTo8c72tigfmhg3Muy7nrjlJ+G7V/aRm1WmaqjwymKiIJKT056l0Kg7+ssyY T868PGpvZ3rDsdkZt9GYIdfJuzbt3B7zpA0YZd0jhzMMJxrxZ7l/ELPuRc5AILHfs1j/t76T8fE eYgUsAi7qUVMVuj4J3Zb2Ev0asuyvK0x1Em/xwIKKb1E58VxzrksVx8cGVV34RoFRGB4Y9QGEG/ RkjEwvAqhR4o9X9eqXscLjCrB+mV38efMccMq0zgt+W/IoqBrjz1oweBD7QmXZlYMtQLvyNJBDl h6hNm2fxaCh0WfpYOy8d3rHIyK4mylKNsJYnPkbR0Tv3JAzGevCs/MGLg3QTQPF45qj+4qQm409 hgJ6nWh0GZw+WWfYamUS4n1kWd8ipPSZffAMSPR1AKl9A82oEMPZfIZsFdqfF6WmQrCiij994Ez cfToZeVtVQnxLjzI/Ot71jh0uA1g== X-Received: by 2002:a05:651c:4191:b0:38d:f31d:7ebd with SMTP id 38308e7fff4ca-39240cdd576mr12818711fa.7.1777392863295; Tue, 28 Apr 2026 09:14:23 -0700 (PDT) Received: from localhost.localdomain ([2001:9b1:d5a0:a500::24b]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3923f55f156sm8119671fa.32.2026.04.28.09.14.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 09:14:22 -0700 (PDT) From: "Uladzislau Rezki (Sony)" To: Herbert Xu , linux-crypto@vger.kernel.org Cc: LKML , Andrew Morton , Uladzislau Rezki Subject: [PATCH 2/2] rhashtable: Add bucket_table_free_atomic() helper Date: Tue, 28 Apr 2026 18:14:19 +0200 Message-ID: <20260428161419.94695-2-urezki@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260428161419.94695-1-urezki@gmail.com> References: <20260428161419.94695-1-urezki@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit rhashtable_insert_rehash() allocates a new bucket table with GFP_ATOMIC, as it is called from an RCU read-side critical section. If rhashtable_rehash_attach() then fails, the new table is freed via kvfree(). This is unsafe, since kvfree() may fall back to vfree() for vmalloc-backed allocations, which can sleep and trigger: BUG: sleeping function called from invalid context Add bucket_table_free_atomic(), which uses kvfree_atomic() so the table can be freed safely from non-sleeping context. Signed-off-by: Uladzislau Rezki (Sony) --- lib/rhashtable.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/rhashtable.c b/lib/rhashtable.c index 6074ed5f66f3..4111aab8cee4 100644 --- a/lib/rhashtable.c +++ b/lib/rhashtable.c @@ -114,6 +114,14 @@ static void bucket_table_free(const struct bucket_table *tbl) kvfree(tbl); } +static void bucket_table_free_atomic(const struct bucket_table *tbl) +{ + if (tbl->nest) + nested_bucket_table_free(tbl); + + kvfree_atomic(tbl); +} + static void bucket_table_free_rcu(struct rcu_head *head) { bucket_table_free(container_of(head, struct bucket_table, rcu)); @@ -473,7 +481,7 @@ static int rhashtable_insert_rehash(struct rhashtable *ht, err = rhashtable_rehash_attach(ht, tbl, new_tbl); if (err) { - bucket_table_free(new_tbl); + bucket_table_free_atomic(new_tbl); if (err == -EEXIST) err = 0; } else -- 2.47.3