From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 13CB83D16F0 for ; Tue, 25 Aug 2026 09:19:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787649601; cv=none; b=FPr9ILGnST0tIqWbfOQkX+kyFl3KCX1p0jdiSt0O5N3/wuuZeVNhMIGpJesAIt/mBysMOBX4knq+qt0yNP5SXyC6R2LB2bt6uKfPa8T76w/ypRUiT6VZaeU07VIifpn7Ue/Ywq7ULwAE+8zMn5RaaY5SlQ84wMml3cMMALEe5eA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787649601; c=relaxed/simple; bh=D66adXG808kKvHGFjYUqA4tig8Dw+saSez0dVHfHggk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=c3BV6rIwRbQ1QQn9pnYQrMpumqQ2WhBP5jdaTLPUwMTB6qbUvu4VUQlknZHuobVowK/+2SUMD9vL+GnIZ8tHx/wuwEy1MOzeoyBdps7BQVlfmA7ZjS/cVBjQGxeEF67eYJJ9kFbnH/5LP4WUORrEgwX68N9Y24ldQxfj+MeNQtw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KdJ+K1Fl; arc=none smtp.client-ip=209.85.216.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KdJ+K1Fl" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-3964dfb5b9aso633370a91.1 for ; Tue, 25 Aug 2026 02:19:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787649599; x=1788254399; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=mcMaA8k4079NSaoa9TVIZnwrsvuZMFF/q9SWhIvUUQY=; b=KdJ+K1FlRxA4Hbfi44eznk+5FdwxOgFhBStC0evXcsJH4cr5G4fOtpypHa6eIQFFaC jtNGegI324eXNP6IqSHm54yioMCjI/aUhx+ObaZVS2xbsjOuR9AfYtZcJrPPMZO4mcyS w6YC1fnUAuCxGixSVlVh4wH23sr+XfZSywWCHMvE6mM1xbshXE5SNhQ0YvtkidVykwPo FIML5W9JmLRPtvLP16EB1k/Wp4jBF2nISGzdGSLt03W2V4mqoTZK7dmFuiUi6Kz6AAxB tct+YAHP1lxdK8Vph6LEXhGwdXCR7T4pF2lD5QeB6qU74rJdfK8n+8ojVLaQS7Zr50V+ Tuhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787649599; x=1788254399; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=mcMaA8k4079NSaoa9TVIZnwrsvuZMFF/q9SWhIvUUQY=; b=jfIemchYgcKMIsnKX7MnAbNU6WzkU/E02kSC9sOAkLCREG6V4cDII4x3ebltWk36SO 7qJlCHWY6pnCXEB1l3usXVM4LFwXUQVk/AUCh97qm3x2vQJcRiOLKJCxMPL2BA/mK/4L 9XM4yOHnD/bKHwc120NfJMu4Jdgha2KadgBEeMPfmzNx4BS9+r64lE95jMSCQV7LHl/K LF/SMhFTsDMwcuELO9RRY0IoiCZc0yLOCi3N25IiSDz7cdtaivFwgboG/ay5zpPJyvRn 3b/KiD8ak2aq/D5nKhQK+Z4p5R2QC+6ymoLdVQISDnoJJIrv41/eOBozc70JzfTK7K2g IXSQ== X-Forwarded-Encrypted: i=1; AHgh+Rr82OB5PpImn6jDEhi+UIcEOqsvya6MjtgAPjLWgRUrT8C9c5BrPOvR0RenNFaVR/XApmfQfmFSGNfK+dY=@vger.kernel.org X-Gm-Message-State: AFuF++mtPeSe+BNmMtIvQyg2JXdXHMJU74ihIJYnEavD6eqy+OBaqYBR 0b43kjykjG1eWCU4IWuoJL7suXugxtv8496g0M2Geyh1gkJ2N8/dSvc3 X-Gm-Gg: AR+sD10tTIu5qnOa/xMCb/0OHSk4OtMLFdxyo+OBbCozOC3iwUIoW4mvvlhXhrg6+OG KruZGDeQLo3g8QHDrKiM3d2StkyzluwZlHhOZmL5LuBCA6ljX4CaVAXA8bOpFYWV44M3EZkPpF0 DsqB7fzuC7EoZvS15au/uG/D86mL1SPgwZfiZB37IrSlVrxXveU1neX2ts9+TpDgZfhXbC9qp3Z MtbE7lEPeiHEWbT7+nUjqlgSOWYhXCsfYJh6YvsphIAvfxsrGO644F+p8AlG3jp/HaCwlJZWaGP Se+N8Zu4VWdI6LZLT1uphoGrcUf7bkilbLPJX9OzNgjykJ+Dv3EkPhKFr0KfVtQvyfok7XjvY7d jB4C3+OWC/R/NNUfkCQtfKA38aWCXG+ZUGND+zYn8AF8OCpKMiy/IAClW8CJWvPMdmUq02ZHTJ5 OOU0HH/G68nLksPeu27wlkZJS2HhqBBib/r80CgirdBQjAiTSQKd2us9yopCagGa4djyQHxhVot lbY59a84GDQEHpDHMk= X-Received: by 2002:a17:90b:1d50:b0:38f:dec8:f7e9 with SMTP id 98e67ed59e1d1-395df29b3c5mr51331801a91.12.1787649599247; Tue, 25 Aug 2026 02:19:59 -0700 (PDT) Received: from localhost.localdomain ([103.120.31.178]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3282afb407bsm5386163eec.30.2026.08.25.02.19.55 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 25 Aug 2026 02:19:58 -0700 (PDT) From: Khawar Ahemad To: bpf@vger.kernel.org, linux-kernel@vger.kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, eddyz87@gmail.com, jiayuan.chen@linux.dev, emil@etsalapatis.com Subject: [PATCH bpf-next v6 0/4] bpf: arena: handle memory.max on fault-in with reclaim/OOM Date: Tue, 25 Aug 2026 14:49:48 +0530 Message-ID: <20260825091952.81971-1-ahemadkhawar123@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit This series fixes an issue where accessing a valid BPF arena page under memory pressure (e.g. hitting a cgroup's memory.max limit) incorrectly results in a SIGSEGV crash rather than invoking memory reclaim or the memcg OOM killer. Problem: ======== arena_vm_fault() previously performed page allocation while holding arena->spinlock (with interrupts disabled). This restricted the allocation path to the non-blocking alloc_pages_nolock() path, which cannot sleep, reclaim memory, or invoke the memcg OOM killer. When the cgroup's memory.max limit was reached, the allocation returned -ENOMEM, which arena_vm_fault() converted to VM_FAULT_SIGSEGV, killing the process on a valid virtual address. Solution: ========= 1. Introduce bpf_map_alloc_page_sleepable() using BPF_PAGE_GFP (GFP_KERNEL | __GFP_ZERO | __GFP_ACCOUNT | __GFP_NOWARN) for sleepable contexts. 2. Rework arena_vm_fault() to preallocate the page outside arena->spinlock with bpf_map_alloc_page_sleepable(), allowing reclaim and OOM handling. 3. Use a lockless probe (vmalloc_to_page) before allocation to avoid redundant allocations in the hot path. 4. Replace misleading VM_FAULT_SIGSEGV returns with VM_FAULT_SIGBUS for non-recoverable internal errors, reserving SIGSEGV strictly for true addressing violations under BPF_F_SEGV_ON_FAULT. 5. Add a BPF selftest (arena_memcg) to validate fault-in behavior and proper OOM handling under cgroup memory.max constraints. Signed-off-by: Khawar Ahemad Jiayuan Chen (4): bpf: Add a sleepable page allocator for map memory bpf: arena: allocate the fault-in page outside the lock selftests/bpf: Add read_cgroup_file() to cgroup_helpers selftests/bpf: Add a test for arena fault-in under memory.max include/linux/bpf.h | 1 + kernel/bpf/arena.c | 90 +++++++--- kernel/bpf/syscall.c | 21 ++- tools/testing/selftests/bpf/cgroup_helpers.c | 67 ++++++++ tools/testing/selftests/bpf/cgroup_helpers.h | 4 + .../selftests/bpf/prog_tests/arena_memcg.c | 158 ++++++++++++++++++ .../testing/selftests/bpf/progs/arena_memcg.c | 24 +++ 7 files changed, 340 insertions(+), 25 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/arena_memcg.c create mode 100644 tools/testing/selftests/bpf/progs/arena_memcg.c -- 2.54.0 (Apple Git-157)