Commit 239cec2
bpf: fix mm lifecycle in open-coded task_vma iterator
[ Upstream commit d8e27d2 ]
The open-coded task_vma iterator reads task->mm locklessly and acquires
mmap_read_trylock() but never calls mmget(). If the task exits
concurrently, the mm_struct can be freed as it is not
SLAB_TYPESAFE_BY_RCU, resulting in a use-after-free.
Safely read task->mm with a trylock on alloc_lock and acquire an mm
reference. Drop the reference via bpf_iter_mmput_async() in _destroy()
and error paths. bpf_iter_mmput_async() is a local wrapper around
mmput_async() with a fallback to mmput() on !CONFIG_MMU.
Reject irqs-disabled contexts (including NMI) up front. Operations used
by _next() and _destroy() (mmap_read_unlock, bpf_iter_mmput_async)
take spinlocks with IRQs disabled (pool->lock, pi_lock). Running from
NMI or from a tracepoint that fires with those locks held could
deadlock.
A trylock on alloc_lock is used instead of the blocking task_lock()
(get_task_mm) to avoid a deadlock when a softirq BPF program iterates
a task that already holds its alloc_lock on the same CPU.
Fixes: 4ac4546 ("bpf: Introduce task_vma open-coded iterator kfuncs")
Signed-off-by: Puranjay Mohan <puranjay@kernel.org>
Link: https://lore.kernel.org/r/20260408154539.3832150-2-puranjay@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>1 parent 95b5a8c commit 239cec2
1 file changed
Lines changed: 51 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
| |||
798 | 799 | | |
799 | 800 | | |
800 | 801 | | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
801 | 811 | | |
802 | 812 | | |
803 | 813 | | |
| |||
829 | 839 | | |
830 | 840 | | |
831 | 841 | | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
| 848 | + | |
| 849 | + | |
| 850 | + | |
| 851 | + | |
| 852 | + | |
| 853 | + | |
| 854 | + | |
| 855 | + | |
| 856 | + | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
832 | 860 | | |
833 | 861 | | |
834 | 862 | | |
| |||
838 | 866 | | |
839 | 867 | | |
840 | 868 | | |
| 869 | + | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
841 | 882 | | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
| 886 | + | |
| 887 | + | |
842 | 888 | | |
843 | 889 | | |
844 | 890 | | |
| |||
848 | 894 | | |
849 | 895 | | |
850 | 896 | | |
851 | | - | |
| 897 | + | |
852 | 898 | | |
853 | 899 | | |
854 | 900 | | |
855 | 901 | | |
856 | 902 | | |
| 903 | + | |
| 904 | + | |
857 | 905 | | |
858 | | - | |
859 | | - | |
| 906 | + | |
860 | 907 | | |
861 | 908 | | |
862 | 909 | | |
| |||
879 | 926 | | |
880 | 927 | | |
881 | 928 | | |
| 929 | + | |
882 | 930 | | |
883 | 931 | | |
884 | 932 | | |
| |||
0 commit comments