<< All versions

Skill v1.0.0

currentAutomated scan100/100
gvago/unofficial-qodo-review-skills/kernel-locking-concurrency
──Details
PublishedSeptember 27, 2026 at 10:23 PM
Content Hashsha256:1f8971ff6e2a700f...
Git SHA
──Files
Files (1 file, 3.6 KB)
SKILL.md3.6 KBactive
SKILL.md · 80 lines · 3.6 KB

version: "1.0.0" name: kernel-locking-concurrency description: "Use when a Linux kernel PR diff touches locks, atomics, RCU, IRQs, or deferred work, concurrency audit (Sashiko stage 5): races, deadlocks, lock-context violations, missing barriers, RCU misuse. Every finding must name the two racing contexts. Part of the linux-kernel-review suite." license: Apache-2.0 metadata: author: Sashiko contributors / Chris Mason adapted_by: gvago source: https://github.com/sashiko-dev/sashiko (Apache-2.0), references from masoncl/review-prompts (MIT) variant: review version: 1.0.0


kernel-locking-concurrency

Lens for locking and synchronization audit (Sashiko stage 5). World-class concurrency review of the diff. This is the noisiest domain in kernel review, every finding must name the two racing contexts.

How to apply

  • Identify every lock, RCU section, and lockless access the diff touches.
  • For each concern, name context A, context B, and the interleaving that

breaks. If you cannot construct the interleaving, route the concern to kernel-review-discipline as speculative.

  • Load references/locking.md for the full invariant catalog before deep

analysis; references/rcu.md whenever call_rcu/synchronize_rcu/kfree_rcu or RCU list ops appear.

Rule index

  • C1. Sleeping in atomic context: mutex_lock, GFP_KERNEL allocation,

msleep, cond_resched, flush_workqueue, synchronize_rcu, cancel_work_sync under a spinlock, rwlock, or rcu_read_lock.

  • C2. Lock ordering and deadlock: AB-BA orders, acquiring a lock already

held by a higher layer (e.g. ethtool), missing _irqsave when the lock is taken in hardirq context.

  • C3. Races and lockless access: shared state touched without the owning

lock, missing smp_mb/smp_wmb/smp_rmb where lockless access is intended, TOCTOU where state is checked outside the lock and relied on inside.

  • C4. Locking freed memory: unlock on freed objects; works/timers destroyed

after the subsystem that can still schedule them is gone; "initialized" flags set before private data is ready.

  • C5. RCU rules: non-RCU-safe ops (list_splice_init) on RCU-protected

lists; list_for_each_rcu without rcu_read_lock; removal-vs-call_rcu ordering (see references/rcu.md).

  • C6. Unprotected state modification: state checked before lock

acquisition, hardware state/flags/stats updated without protection.

  • C7. Sequence counters: double counting inside u64_stats_fetch_retry

loops; interrupt reading a seqcount its own interrupted context writes.

  • C8. Lock lifecycle: re-initializing a live lock; destroying a lock on a

failure path other paths still use.

  • C9. Missing locking on publication: a port/file exposed to userspace

before linking completes; a worker racing cleanup.

Mapping a finding to the contract

  • action_level: action_required for a constructed deadlock, sleep-in-atomic,

or race with memory corruption; remediation_recommended for inefficient but correct locking.

  • category: Correctness (Security if the race is user-triggerable).
  • evidence: both contexts, the shared object, the interleaving, lines.

What NOT to flag

  • READ_ONCE absence when the data is protected by a lock currently held.
  • Races that existing memory barriers or lock coverage already close ,

read references/locking.md before asserting a barrier is missing.

  • Theoretical races with no constructible interleaving.

References (load only when needed)

  • references/locking.md, full locking invariant catalog (512 lines).
  • references/rcu.md, RCU lifecycle and list rules.

Sourcing

Stage text adapted from Sashiko (Apache-2.0). References reproduced from masoncl/review-prompts (MIT).

All versions