mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Eric Dumazet <edumazet@google.com>,
	 syzbot <syzbot+4d0e4d2db6dfde01b52f@syzkaller.appspotmail.com>,
	davem@davemloft.net, horms@kernel.org, idosch@nvidia.com,
	 kuba@kernel.org, linux-kernel@vger.kernel.org,
	pabeni@redhat.com,  razor@blackwall.org,
	steffen.klassert@secunet.com, syzkaller-bugs@googlegroups.com,
	 Thomas Graf <tgraf@suug.ch>,
	linux-crypto@vger.kernel.org, NeilBrown <neilb@ownmail.net>,
	 quanyeyang <quanyemostima@gmail.com>
Subject: Re: [v3 PATCH] rhashtable: Use separate lockdep keys for each lock
Date: Fri, 18 Sep 2026 16:59:24 +0900	[thread overview]
Message-ID: <aqztNV8fLEDsAtZL@shinmob> (raw)
In-Reply-To: <aqpXcMuAChVSxoaz@gondor.apana.org.au>

[-- Attachment #1: Type: text/plain, Size: 13987 bytes --]

On Sep 16, 2026 / 18:46, Herbert Xu wrote:
> v3 removes an obsolete comment regarding the use of nesting level 2 or more.
> 
> ---8<---
> Use separate lockdep keys for the different types of locks in
> rhashtable (mutex, spin lock, and bucket locks).  They are
> separate and not normally nested with respect to each other.
> 
> Also move the rhashtable_init/rhltable_init kdoc to the header
> file as that's where the macros are defined.
> 
> Fixes: 4333ab90aaae ("rhashtable: use private lockdep class for all locks.")
> Reported-by: syzbot+4d0e4d2db6dfde01b52f@syzkaller.appspotmail.com
> Assisted-by: Gemini:gemini-3.6-flash
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
> Reviewed-by: NeilBrown <neil@brown.name>

Thank you for the fix action. I evaluated the patch. It takes very long time to
reproduce the WARN with my test set, so I asked my AI to create a reproducer.
The attached source file is a simple kernel module that recreates the WARN at
module load. Using this module, I tried three kernels:

 v7.3-rc3 kernel                                    : no WARN
 v7.3-rc3 kernel + 4333ab90aaae                     : recreated the WARN [2]
 v7.3-rc3 kernel + 4333ab90aaae + this v3 fix patch : no WARN

The result looks good, hence,

Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>


[2] WARN observed with the reproducer

Sep 18 15:39:28 redsun41 kernel: ------------[ cut here ]------------
Sep 18 15:39:28 redsun41 kernel: Looking for class "&ht->mutex" with key __key.2 [nf_tables], but found a different class "key" with the same key
Sep 18 15:39:28 redsun41 kernel: WARNING: kernel/locking/lockdep.c:955 at look_up_lock_class+0xa8/0x170, CPU#2: kworker/2:1/78
Sep 18 15:39:28 redsun41 kernel: Modules linked in: xt_conntrack nf_conntrack_netbios_ns nf_conntrack_broadcast bridge nft_fib_inet stp nft_fib_ipv4 llc nft_fib_ipv6 nft_fib nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct nft_chain_nat target_core_user ip6table_nat ip6table_mangle target_core_mod ip6table_raw ip6table_security iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 iptable_mangle iptable_raw iptable_security qrtr rfkill nf_tables ip6table_filter ip6_tables iptable_filter ip_tables intel_rapl_msr intel_rapl_common sb_edac x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm irqbypass rapl intel_cstate iTCO_wdt intel_pmc_bxt sunrpc intel_uncore pcspkr i2c_i801 i2c_smbus igb mei_me lpc_ich mei ses enclosure ioatdma dca binfmt_misc wmi joydev acpi_pad acpi_power_meter btrfs raid6_pq xor dm_multipath zram lz4hc_compress zstd_compress ast drm_client_lib i2c_algo_bit drm_shmem_helper drm_kms_helper drm mpi3mr mpt3sas raid_class scsi_transport_sas fuse scsi_dh_rdac scsi_dh_emc scsi_dh_alua i2c_dev
Sep 18 15:39:28 redsun41 kernel: CPU: 2 UID: 0 PID: 78 Comm: kworker/2:1 Not tainted 7.3.0-rc3-kts+ #85 PREEMPT(lazy) 
Sep 18 15:39:28 redsun41 kernel: Hardware name: Supermicro Super Server/X10SRL-F, BIOS 2.0 12/17/2015
Sep 18 15:39:28 redsun41 kernel: Workqueue: events drm_fb_helper_damage_work [drm_kms_helper]
Sep 18 15:39:28 redsun41 kernel: RIP: 0010:look_up_lock_class+0xa8/0x170
Sep 18 15:39:28 redsun41 kernel: Code: 39 6b 40 75 ed 48 8b 8b b8 00 00 00 49 8b 74 24 18 48 39 f1 74 34 49 8b 14 24 48 81 fa 30 a1 92 ae 74 27 48 8d 3d d8 c5 4e 02 <67> 48 0f b9 3a 48 89 d8 48 8b 6c 24 10 4c 8b 64 24 18 48 8b 5c 24
Sep 18 15:39:28 redsun41 kernel: RSP: 0000:ffff88b77df08148 EFLAGS: 00010002
Sep 18 15:39:28 redsun41 kernel: RAX: 0000000000000001 RBX: ffffffffb2988310 RCX: ffffffffaba2e200
Sep 18 15:39:28 redsun41 kernel: RDX: ffffffffc21822a0 RSI: ffffffffaba2e180 RDI: ffffffffad913390
Sep 18 15:39:28 redsun41 kernel: RBP: ffffffffc21822a0 R08: 0000000000000001 R09: ffff8881c25a3818
Sep 18 15:39:28 redsun41 kernel: R10: 0000000000000004 R11: ffff88b77df08420 R12: ffff8881c25a11f8
Sep 18 15:39:28 redsun41 kernel: R13: 0000000000000003 R14: 0000000000000246 R15: 00000000ffffffff
Sep 18 15:39:28 redsun41 kernel: FS:  0000000000000000(0000) GS:ffff88b7cf69c000(0000) knlGS:0000000000000000
Sep 18 15:39:28 redsun41 kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Sep 18 15:39:28 redsun41 kernel: CR2: 0000000001791b40 CR3: 000000015e8e2005 CR4: 00000000001726f0
Sep 18 15:39:28 redsun41 kernel: Call Trace:
Sep 18 15:39:28 redsun41 kernel:  <IRQ>
Sep 18 15:39:28 redsun41 kernel:  ? ip_local_deliver+0x184/0x4a0
Sep 18 15:39:28 redsun41 kernel:  match_held_lock+0xdb/0x130
Sep 18 15:39:28 redsun41 kernel:  lock_is_held_type+0xb0/0x180
Sep 18 15:39:28 redsun41 kernel:  nft_rhash_lookup+0x541/0x7e0 [nf_tables]
Sep 18 15:39:28 redsun41 kernel:  ? asm_common_interrupt+0x26/0x40
Sep 18 15:39:28 redsun41 kernel:  ? lock_release.part.0+0x39/0x50
Sep 18 15:39:28 redsun41 kernel:  ? lock_vma_under_rcu+0x15e/0x3e0
Sep 18 15:39:28 redsun41 kernel:  ? do_user_addr_fault+0x3a6/0xf30
Sep 18 15:39:28 redsun41 kernel:  ? exc_page_fault+0x98/0x140
Sep 18 15:39:28 redsun41 kernel:  ? asm_exc_page_fault+0x26/0x30
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_nft_rhash_lookup+0x10/0x10 [nf_tables]
Sep 18 15:39:28 redsun41 kernel:  nft_set_do_lookup+0x1ac/0x2a0 [nf_tables]
Sep 18 15:39:28 redsun41 kernel:  ? rcu_read_lock_sched_held+0x40/0x70
Sep 18 15:39:28 redsun41 kernel:  nft_lookup_eval+0xcc/0x590 [nf_tables]
Sep 18 15:39:28 redsun41 kernel:  ? lock_is_held_type+0xb0/0x180
Sep 18 15:39:28 redsun41 kernel:  nft_do_chain+0x2a9/0x1680 [nf_tables]
Sep 18 15:39:28 redsun41 kernel:  ? update_load_avg+0x120/0x2c70
Sep 18 15:39:28 redsun41 kernel:  ? __lock_acquire+0x691/0xd00
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_nft_do_chain+0x10/0x10 [nf_tables]
Sep 18 15:39:28 redsun41 kernel:  ? __local_bh_enable_ip+0xb4/0x150
Sep 18 15:39:28 redsun41 kernel:  ? ipt_do_table+0xa10/0x11e0 [ip_tables]
Sep 18 15:39:28 redsun41 kernel:  ? ipt_do_table+0xa15/0x11e0 [ip_tables]
Sep 18 15:39:28 redsun41 kernel:  nft_do_chain_inet+0xdc/0x4a0 [nf_tables]
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_nft_do_chain_inet+0x10/0x10 [nf_tables]
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_ipt_do_table+0x10/0x10 [ip_tables]
Sep 18 15:39:28 redsun41 kernel:  nf_hook_slow+0xbe/0x210
Sep 18 15:39:28 redsun41 kernel:  ? lock_is_held_type+0xb0/0x180
Sep 18 15:39:28 redsun41 kernel:  ip_local_deliver+0x2d0/0x4a0
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_ip_local_deliver+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? tcp_v4_early_demux.isra.0+0x5c4/0xb20
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_ip_local_deliver_finish+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? ip_rcv_finish_core+0x75b/0x1470
Sep 18 15:39:28 redsun41 kernel:  ? lock_is_held_type+0xb0/0x180
Sep 18 15:39:28 redsun41 kernel:  ip_list_rcv_finish+0x815/0xbd0
Sep 18 15:39:28 redsun41 kernel:  ? ip_sublist_rcv+0x106/0x2f0
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_ip_list_rcv_finish+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? __lock_release.isra.0+0x69/0x1a0
Sep 18 15:39:28 redsun41 kernel:  ip_sublist_rcv+0x8b/0x2f0
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_ip_sublist_rcv+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? __kasan_mempool_unpoison_object+0x128/0x1c0
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_ip_rcv_finish+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? ip_rcv_core+0x619/0xd00
Sep 18 15:39:28 redsun41 kernel:  ? __kasan_slab_alloc+0x6a/0x90
Sep 18 15:39:28 redsun41 kernel:  ip_list_rcv+0x2dd/0x440
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_ip_list_rcv+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? lock_is_held_type+0xb0/0x180
Sep 18 15:39:28 redsun41 kernel:  ? __lock_acquire+0x691/0xd00
Sep 18 15:39:28 redsun41 kernel:  __netif_receive_skb_list_core+0x6bf/0xa10
Sep 18 15:39:28 redsun41 kernel:  ? __pfx___netif_receive_skb_list_core+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? lock_acquire.part.0+0xc8/0x240
Sep 18 15:39:28 redsun41 kernel:  ? netif_receive_skb_list_internal+0x382/0xc90
Sep 18 15:39:28 redsun41 kernel:  ? lock_acquire+0x11a/0x140
Sep 18 15:39:28 redsun41 kernel:  netif_receive_skb_list_internal+0x603/0xc90
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_netif_receive_skb_list_internal+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? igb_clean_tx_irq+0x10f1/0x17f0 [igb]
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_igb_clean_rx_irq+0x10/0x10 [igb]
Sep 18 15:39:28 redsun41 kernel:  napi_complete_done+0x1a4/0x900
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_napi_complete_done+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_igb_clean_tx_irq+0x10/0x10 [igb]
Sep 18 15:39:28 redsun41 kernel:  ? __lock_acquire+0x691/0xd00
Sep 18 15:39:28 redsun41 kernel:  igb_poll+0x18f/0x1f0 [igb]
Sep 18 15:39:28 redsun41 kernel:  __napi_poll+0x351/0x520
Sep 18 15:39:28 redsun41 kernel:  net_rx_action+0x446/0xc30
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_net_rx_action+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? do_raw_spin_unlock+0x59/0x230
Sep 18 15:39:28 redsun41 kernel:  ? lock_release.part.0+0x1c/0x50
Sep 18 15:39:28 redsun41 kernel:  ? sched_clock_cpu+0x69/0x630
Sep 18 15:39:28 redsun41 kernel:  ? __lock_acquire+0x691/0xd00
Sep 18 15:39:28 redsun41 kernel:  ? mark_held_locks+0x40/0x70
Sep 18 15:39:28 redsun41 kernel:  handle_softirqs+0x1db/0x870
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_handle_softirqs+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? irqtime_account_irq+0x3e/0x2d0
Sep 18 15:39:28 redsun41 kernel:  __irq_exit_rcu+0x164/0x290
Sep 18 15:39:28 redsun41 kernel:  irq_exit_rcu+0xe/0x20
Sep 18 15:39:28 redsun41 kernel:  common_interrupt+0x85/0xa0
Sep 18 15:39:28 redsun41 kernel:  </IRQ>
Sep 18 15:39:28 redsun41 kernel:  <TASK>
Sep 18 15:39:28 redsun41 kernel:  asm_common_interrupt+0x26/0x40
Sep 18 15:39:28 redsun41 kernel: RIP: 0010:qlist_free_all+0x2e/0x130
Sep 18 15:39:28 redsun41 kernel: Code: 85 c0 0f 84 16 01 00 00 41 57 41 56 41 be 00 00 00 80 41 55 49 89 fd 41 54 49 89 f4 55 53 eb 3b 48 63 93 cc 00 00 00 48 8b 28 <48> 89 df 48 29 d0 48 89 c6 49 89 c7 e8 d1 ef ff ff 66 90 4c 89 fe
Sep 18 15:39:28 redsun41 kernel: RSP: 0000:ffff88810284f848 EFLAGS: 00000246
Sep 18 15:39:28 redsun41 kernel: RAX: ffff8882958a3200 RBX: ffff8881003aec80 RCX: 0000000000000000
Sep 18 15:39:28 redsun41 kernel: RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff88810284f7e0
Sep 18 15:39:28 redsun41 kernel: RBP: ffff8882958a3f00 R08: ffff8882956f3500 R09: ffffffffa8df51ce
Sep 18 15:39:28 redsun41 kernel: R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000000
Sep 18 15:39:28 redsun41 kernel: R13: ffff88810284f880 R14: 0000000080000000 R15: ffff8882956f3500
Sep 18 15:39:28 redsun41 kernel:  ? qlist_free_all+0x4e/0x130
Sep 18 15:39:28 redsun41 kernel:  ? qlist_free_all+0x53/0x130
Sep 18 15:39:28 redsun41 kernel:  kasan_quarantine_reduce+0x19a/0x250
Sep 18 15:39:28 redsun41 kernel:  __kasan_slab_alloc+0x6a/0x90
Sep 18 15:39:28 redsun41 kernel:  __kmalloc_cache_noprof+0x219/0x660
Sep 18 15:39:28 redsun41 kernel:  ? drm_gem_duplicate_shadow_plane_state+0x6f/0xf0 [drm_kms_helper]
Sep 18 15:39:28 redsun41 kernel:  drm_gem_duplicate_shadow_plane_state+0x6f/0xf0 [drm_kms_helper]
Sep 18 15:39:28 redsun41 kernel:  drm_atomic_get_plane_state+0x227/0x960 [drm]
Sep 18 15:39:28 redsun41 kernel:  ? modeset_lock+0x164/0x620 [drm]
Sep 18 15:39:28 redsun41 kernel:  drm_atomic_helper_dirtyfb+0x45b/0x770 [drm_kms_helper]
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_drm_atomic_helper_dirtyfb+0x10/0x10 [drm_kms_helper]
Sep 18 15:39:28 redsun41 kernel:  ? find_held_lock+0x2b/0x80
Sep 18 15:39:28 redsun41 kernel:  ? do_raw_spin_lock+0x131/0x280
Sep 18 15:39:28 redsun41 kernel:  ? find_held_lock+0x2b/0x80
Sep 18 15:39:28 redsun41 kernel:  ? mark_held_locks+0x40/0x70
Sep 18 15:39:28 redsun41 kernel:  drm_fbdev_shmem_helper_fb_dirty+0x1a0/0x440 [drm_shmem_helper]
Sep 18 15:39:28 redsun41 kernel:  ? _raw_spin_unlock_irqrestore+0x45/0x60
Sep 18 15:39:28 redsun41 kernel:  drm_fb_helper_fb_dirty+0x3fa/0xa60 [drm_kms_helper]
Sep 18 15:39:28 redsun41 kernel:  ? process_one_work+0x8c3/0x1760
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_drm_fb_helper_fb_dirty+0x10/0x10 [drm_kms_helper]
Sep 18 15:39:28 redsun41 kernel:  ? lock_acquire+0x11a/0x140
Sep 18 15:39:28 redsun41 kernel:  process_one_work+0x947/0x1760
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_process_one_work+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? lock_acquire.part.0+0xc8/0x240
Sep 18 15:39:28 redsun41 kernel:  ? lock_is_held_type+0xb0/0x180
Sep 18 15:39:28 redsun41 kernel:  worker_thread+0x601/0xff0
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_worker_thread+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? __kthread_parkme+0xbd/0x210
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_worker_thread+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_worker_thread+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  kthread+0x361/0x460
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_kthread+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ret_from_fork+0x560/0x860
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_ret_from_fork+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ? __switch_to+0x473/0xd50
Sep 18 15:39:28 redsun41 kernel:  ? __switch_to_asm+0x39/0x70
Sep 18 15:39:28 redsun41 kernel:  ? __switch_to_asm+0x33/0x70
Sep 18 15:39:28 redsun41 kernel:  ? __pfx_kthread+0x10/0x10
Sep 18 15:39:28 redsun41 kernel:  ret_from_fork_asm+0x1a/0x30
Sep 18 15:39:28 redsun41 kernel:  </TASK>
Sep 18 15:39:28 redsun41 kernel: irq event stamp: 332632
Sep 18 15:39:28 redsun41 kernel: hardirqs last  enabled at (332632): [<ffffffffa81e3134>] __local_bh_enable_ip+0xb4/0x150
Sep 18 15:39:28 redsun41 kernel: hardirqs last disabled at (332631): [<ffffffffa81e316a>] __local_bh_enable_ip+0xea/0x150
Sep 18 15:39:28 redsun41 kernel: softirqs last  enabled at (332492): [<ffffffffa81e2802>] handle_softirqs+0x632/0x870
Sep 18 15:39:28 redsun41 kernel: softirqs last disabled at (332613): [<ffffffffa81e2bb4>] __irq_exit_rcu+0x164/0x290
Sep 18 15:39:28 redsun41 kernel: ---[ end trace 0000000000000000 ]---


[-- Attachment #2: rht_lockdep_repro.c --]
[-- Type: text/plain, Size: 2959 bytes --]

// SPDX-License-Identifier: GPL-2.0

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/mutex.h>
#include <linux/ww_mutex.h>
#include <linux/spinlock.h>
#include <linux/lockdep.h>
#include <linux/rhashtable.h>
#include <linux/slab.h>

/*
 * ww_mutex machinery used to give a held lock a non-zero ->references.
 * All ww_mutexes of one ww_class share a single lockdep class, and
 * ww_mutex_lock() passes nest_lock = &ctx->dep_map, so acquiring the second
 * one sets ->references on the first one's held_lock entry.
 */
static DEFINE_WW_CLASS(repro_ww_class);
static struct ww_mutex ww_a;
static struct ww_mutex ww_b;

struct repro_obj {
	int			value;
	struct rhash_head	node;
};

static struct rhashtable ht;
static const struct rhashtable_params repro_params = {
	.key_len	= sizeof(int),
	.key_offset	= offsetof(struct repro_obj, value),
	.head_offset	= offsetof(struct repro_obj, node),
};

/*
 * Run fn() while holding two same-class ww_mutexes under one acquire context,
 * so that the first held_lock entry has ->references != 0.
 */
static int with_referenced_held_lock(void (*fn)(void))
{
	struct ww_acquire_ctx ctx;
	int ret;

	ww_mutex_init(&ww_a, &repro_ww_class);
	ww_mutex_init(&ww_b, &repro_ww_class);

	ww_acquire_init(&ctx, &repro_ww_class);

	ret = ww_mutex_lock(&ww_a, &ctx);
	if (ret) {
		pr_err("ww_mutex_lock(ww_a) failed: %d\n", ret);
		goto out_fini;
	}
	/* same class as ww_a plus a nest_lock -> bumps ->references */
	ret = ww_mutex_lock(&ww_b, &ctx);
	if (ret) {
		pr_err("ww_mutex_lock(ww_b) failed: %d\n", ret);
		ww_mutex_unlock(&ww_a);
		goto out_fini;
	}

	fn();

	ww_mutex_unlock(&ww_b);
	ww_mutex_unlock(&ww_a);
out_fini:
	ww_acquire_fini(&ctx);
	return ret;
}

static void lookup_rhashtable(void)
{
	int wanted = 42;

	pr_info("doing rhashtable_lookup_fast()\n");
	pr_info("rhashtable_lookup_fast() = %px\n",
		rhashtable_lookup_fast(&ht, &wanted, repro_params));
}

static int __init repro_rhashtable(void)
{
	struct rhashtable_iter iter;
	int ret;

	ret = rhashtable_init(&ht, &repro_params);
	if (ret) {
		pr_err("rhashtable_init failed: %d\n", ret);
		return ret;
	}

	/*
	 * rhashtable_walk_enter() takes spin_lock(&ht->lock), which is what
	 * registers subclass 0 of this instance's key under the name "key".
	 */
	rhashtable_walk_enter(&ht, &iter);
	rhashtable_walk_exit(&iter);

	ret = with_referenced_held_lock(lookup_rhashtable);

	rhashtable_destroy(&ht);
	return ret;
}

static int __init repro_init(void)
{
	if (!IS_ENABLED(CONFIG_PROVE_LOCKING)) {
		pr_err("CONFIG_PROVE_LOCKING is required\n");
		return -EOPNOTSUPP;
	}
	if (!debug_locks) {
		pr_err("lockdep is already disabled, cannot test\n");
		return -EOPNOTSUPP;
	}

	return repro_rhashtable();
}

static void __exit repro_exit(void)
{
	pr_info("rht_lockdep_repro: unloaded\n");
}

module_init(repro_init);
module_exit(repro_exit);

MODULE_DESCRIPTION("Reproducer for the rhashtable lockdep subclass collision");
MODULE_LICENSE("GPL");

      reply	other threads:[~2026-09-18  7:59 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-13  1:31 [syzbot] [bridge?] WARNING: locking bug in match_held_lock syzbot
2026-09-15  3:40 ` Shin'ichiro Kawasaki
2026-09-15  4:06   ` Eric Dumazet
2026-09-15  6:04     ` [PATCH] rhashtable: Use separate lockdep keys for each lock Herbert Xu
2026-09-15 21:06       ` NeilBrown
2026-09-16  8:00       ` [v2 PATCH] " Herbert Xu
2026-09-16  8:46         ` [v3 " Herbert Xu
2026-09-18  7:59           ` Shin'ichiro Kawasaki [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aqztNV8fLEDsAtZL@shinmob \
    --to=shinichiro.kawasaki@wdc.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=horms@kernel.org \
    --cc=idosch@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=neilb@ownmail.net \
    --cc=pabeni@redhat.com \
    --cc=quanyemostima@gmail.com \
    --cc=razor@blackwall.org \
    --cc=steffen.klassert@secunet.com \
    --cc=syzbot+4d0e4d2db6dfde01b52f@syzkaller.appspotmail.com \
    --cc=syzkaller-bugs@googlegroups.com \
    --cc=tgraf@suug.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®