mirror_zfs/module/os/linux/spl
Ameer Hamza 663dc86de2 Fix taskq NULL pointer dereference on timer race
Remove unsafe timer_pending() check in taskq_cancel_id() that created a
race where:
- Timer expires and timer_pending() returns FALSE
- task_done() frees task with tqent_func = NULL
- Timer callback executes and queues freed task
- Worker thread crashes executing NULL function

Always call timer_delete_sync() unconditionally to ensure timer callback
completes before task is freed.

Reliably reproducible by injecting mdelay(10) after setting CANCEL flag
to widen the race window, combined with frequent task cancellations
(e.g., snapshot automount expiry).

Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ameer Hamza <ahamza@ixsystems.com>
Closes #17942
2025-12-10 10:21:29 -08:00
..
README.md Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
spl-atomic.c SPDX: license tags: GPL-2.0-or-later 2025-03-13 17:57:09 -07:00
spl-condvar.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
spl-cred.c SPDX: license tags: GPL-2.0-or-later 2025-03-13 17:57:09 -07:00
spl-err.c SPDX: license tags: GPL-2.0-or-later 2025-03-13 17:57:09 -07:00
spl-generic.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
spl-kmem-cache.c Prefer VERIFY0P(n) over VERIFY(n == NULL) 2025-08-07 11:41:37 -07:00
spl-kmem.c linux/kmem: remove HAVE_ATOMIC64_T and kmem_alloc_used wrappers 2025-07-22 15:08:07 -07:00
spl-kstat.c Prefer VERIFY0(n) over VERIFY(n == 0) 2025-08-07 11:40:59 -07:00
spl-proc.c linux/kmem: remove HAVE_ATOMIC64_T and kmem_alloc_used wrappers 2025-07-22 15:08:07 -07:00
spl-procfs-list.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
spl-shrinker.c SPDX: license tags: GPL-2.0-or-later 2025-03-13 17:57:09 -07:00
spl-taskq.c Fix taskq NULL pointer dereference on timer race 2025-12-10 10:21:29 -08:00
spl-thread.c Prefer VERIFY0P(n) over VERIFY(n == NULL) 2025-08-07 11:41:37 -07:00
spl-trace.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
spl-tsd.c Prefer VERIFY0P(n) over VERIFY3P(n, ==, NULL) 2025-08-07 11:41:42 -07:00
spl-vmem.c SPDX: license tags: GPL-2.0-or-later 2025-03-13 17:57:09 -07:00
spl-xdr.c SPDX: license tags: GPL-2.0-or-later 2025-03-13 17:57:09 -07:00
spl-zlib.c SPDX: license tags: GPL-2.0-or-later 2025-03-13 17:57:09 -07:00
spl-zone.c Linux 6.18: namespace type moved to ns_common 2025-10-21 09:50:43 -07:00
THIRDPARTYLICENSE.gplv2 OpenZFS restructuring - move platform specific sources 2019-09-06 11:26:26 -07:00
THIRDPARTYLICENSE.gplv2.descrip OpenZFS restructuring - move platform specific sources 2019-09-06 11:26:26 -07:00

The Solaris Porting Layer, SPL, is a Linux kernel module which provides a compatibility layer used by the OpenZFS project.

Installation

The latest version of the SPL is maintained as part of this repository. Only when building ZFS version 0.7.x or earlier must an external SPL release be used. These releases can be found at:

Release

The SPL is released under a GPLv2 license.
For more details see the NOTICE and THIRDPARTYLICENSE files; UCRL-CODE-235197