kernel
✓Verified·Scanned 2/18/2026
Avoid common Linux kernel mistakes — atomic context violations, allocation failures, and locking traps.
from clawhub.ai·v8d6b348·2.1 KB·0 installs
Scanned from 1.0.0 at 8d6b348 · Transparency log ↗
$ vett add clawhub.ai/ivangdavila/kernel
Atomic Context Traps
spin_lockheld = cannot sleep — nokmalloc(GFP_KERNEL), nomutex_lock, nocopy_from_user- Interrupt can take same spinlock — must use
spin_lock_irqsave, not plainspin_lock rcu_read_lock()section cannot sleep — no blocking calls inside RCU read-sidemight_sleep()annotation — add to functions that may sleep, catches bugs withCONFIG_DEBUG_ATOMIC_SLEEP
Allocation Failures
GFP_ATOMICcan return NULL — always check, don't assume successvmallocmemory not physically contiguous — cannot use for DMAkzallocoverkmalloc— uninitialized memory leaks kernel info to userspace- Allocation in loop risks OOM — preallocate or use memory pool
User Pointer Handling
copy_from_userreturns bytes NOT copied — 0 means success, not failure- Never use
%swith user pointer in printk — kernel crash or info leak - User memory can change during syscall — copy to kernel buffer, validate the copy
__userannotation is documentation — doesn't enforce anything, you must use copy functions
Memory Ordering
READ_ONCE/WRITE_ONCEfor lockless shared data — prevents compiler from caching/reordering- Spinlock release has implicit barrier — but check-then-act patterns still need care
smp_wmb()before publishing pointer — ensures data visible before pointer is
Module Error Paths
- Init fails midway — must undo everything already done
- Reverse order cleanup — unregister in opposite order of register
goto err_*pattern standard — cleaner than nested ifs- Check what's actually initialized — don't free/unregister what wasn't set up
Locking Mistakes
- Same lock acquired twice = deadlock — even in different functions
- Inconsistent lock ordering — document order, acquire in same sequence everywhere
mutex_trylockreturns 1 on success — opposite ofpthread_mutex_trylock- Reader-writer locks rarely worth it — contention overhead usually exceeds benefit