From nobody Mon Feb 9 10:25:53 2026 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 80B3431B13F for ; Mon, 10 Nov 2025 16:37:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762792671; cv=none; b=ZEvTMJvcVricb6cEcrHkQhZuVgha7hK7uLuJkj4jpSRgP7lbNJIpFRdvL+736bq7LVodROZpMNEByp+8OHQ8MuELsZNsAKrxu7NkG/2d3IShRTNkwEv6l7eYDK9QO9JunTqktCCN4rYegcv5Fcn0mHXdiBc/5wmGaPZQNAFXvFM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762792671; c=relaxed/simple; bh=e4vkEHA+9PTiYMh5yLQWM+MeyKZuslfqcgr629D3+7E=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RfKuYofmMcRoqBtbjBC4boID2hoD5yZJ54J7prrT4TWZru9/xpw1aEE/a0YaqiGcxtE/oV1EnrZRtlgTzATScl9OJMM3W8Ds6EhaKeMsFTYJqlilUaCSXn7BgrwwyaH1Zu4e26olb319EX0AqoDiBZD8Nm4gpc5qOJsa3e5s704= 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=OQBR1353; arc=none smtp.client-ip=209.85.214.182 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="OQBR1353" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-29516a36affso30297095ad.3 for ; Mon, 10 Nov 2025 08:37:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762792668; x=1763397468; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=mbgbln0r/0DljbZ66YwwMMl7cTrgB9t9J30U0WpMJ+k=; b=OQBR135369VT4PBc2hT+xdd5VzRxTuB3C1HjCn9+F1vDopvc539ePQpm6Ee2GA+EqD lfx6/UfDSuphvjq+xMy7mV4jp4iNppQvvP7+ysUMaqPz5bjGbFvRqP6+zOPenEBsfyaQ oWpmrc/pgw2jbDKu5FqjNAYvNNG1Otf2niawwM25tVE8PeEZJ0Wdor6Yh8ialpn4SWYo 3qpm8WtvKl6LiY70DZ6jIrbPPlgPa2eBOE+vWhG1lXysEREIC8SC2A69IcKRasMH7J0/ i6Im5iL2Kh828eRW2hS74RRA3Xq4J+oC9wBBEFWVQwXvxzuc57ta5ISEyQwq0b/KSOWg LTJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762792668; x=1763397468; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=mbgbln0r/0DljbZ66YwwMMl7cTrgB9t9J30U0WpMJ+k=; b=vZNHusPTiGzUZAE0EBEe9epmsaLSlX/BOtBHMgXGQueQ5WQ9YuO3slQUPd+Jvv1TAs qgZrf4EnHVPpX/2+Nx+ZUvxSrest/p2QBgvnVuhC4OMikKNB6umEJ2fsRgNRDYdPnp8v AW/sYfy3pbBQweYDC+CkmHaGxouLM5vzLZqlBOHuC3zy8aQAq7z+puxCjELephIbKBCQ cp8pA2rfVtUgauQ25r1Gf2XqZB7sVIWc5v6MYUU+e95INLOHamNzVuFy5Q6QoGw1reR6 W3W29+13y7xxsKMn40QXBrR8556NeHbrsaxjziUrroqV7cS8g14fZ5s+tx5N5TZbNuhG DC0g== X-Forwarded-Encrypted: i=1; AJvYcCUslD5mhONHNAc2d9ltDPcCRoTW4sHK9/ReUvTz9yHyx4pyyDLTmd6GTmZQ8hYd9MUDRt2mjapmWr5wa5o=@vger.kernel.org X-Gm-Message-State: AOJu0YwXI7TVvUeNV773dRRGmC4kqOlrw80ndkFGIdV9EWdX9lrkqjiP 7C4jPqtcti0jIj9p8tfSxK84+pIpfp4xqk3K41zLOmi7/vhwUQ7lwRWV X-Gm-Gg: ASbGncu8Z4eZ9daxTHYjfWXHLmz+xDX3zCMl159YPD72WZAdF9EUoKDigbeys3csk10 fFxA+WKhMAIzuL6kPVapDbW1Mh/YxOeRmwQsR0ceClSAlHE7G+WM8USCta/DFDVDnv0V4dVg7bw iW/JcfTp94zMDACQuT8X4PiCc3gZHk+RJvyBpxdRVh7QGig9lpGN/rgXVZ3yXBDPR3zaIP/mGH3 He48Z3vw0fRkCzda13CMSga3A4hs20kpjIAXEzm4/5j3R0WQHJAtCtJM3kKvcBR7KjhJBQfCpe5 Je9GmDrN5VJ+qcIo18GG09NekOyRGq0+BxkGOqaNAzZXyjMOYAsV4Ggvc31SnqOf89+APqpA44L ApEoQo704c+YZBaalrrMvnWtJ2P0e4LkhhVR3Z5PERvTANcp7/t1g6Ih7Hcp9KaeaJA6i4rStkj 2cjpl7pwN0YW4= X-Google-Smtp-Source: AGHT+IF9D2s5oh2IOSIoqnbGH6eyisWVL5PhHGPCW6i2QHK95VMIMn4wu9hvntS0Aig4CKNxr1HiEw== X-Received: by 2002:a17:902:ebc1:b0:294:cc8d:c0c2 with SMTP id d9443c01a7336-297e5663a67mr107303455ad.27.1762792667923; Mon, 10 Nov 2025 08:37:47 -0800 (PST) Received: from localhost ([103.88.46.62]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29651c92cddsm154610615ad.83.2025.11.10.08.37.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Nov 2025 08:37:47 -0800 (PST) From: Jinchao Wang To: Andrew Morton , "Masami Hiramatsu (Google)" , Peter Zijlstra , Randy Dunlap , Marco Elver , Mike Rapoport , Alexander Potapenko , Adrian Hunter , Alexander Shishkin , Alice Ryhl , Andrey Konovalov , Andrey Ryabinin , Andrii Nakryiko , Ard Biesheuvel , Arnaldo Carvalho de Melo , Ben Segall , Bill Wendling , Borislav Petkov , Catalin Marinas , Dave Hansen , David Hildenbrand , David Kaplan , "David S. Miller" , Dietmar Eggemann , Dmitry Vyukov , "H. Peter Anvin" , Ian Rogers , Ingo Molnar , James Clark , Jinchao Wang , Jinjie Ruan , Jiri Olsa , Jonathan Corbet , Juri Lelli , Justin Stitt , kasan-dev@googlegroups.com, Kees Cook , "Liam R. Howlett" , "Liang Kan" , Linus Walleij , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-perf-users@vger.kernel.org, linux-trace-kernel@vger.kernel.org, llvm@lists.linux.dev, Lorenzo Stoakes , Mark Rutland , Masahiro Yamada , Mathieu Desnoyers , Mel Gorman , Michal Hocko , Miguel Ojeda , Nam Cao , Namhyung Kim , Nathan Chancellor , Naveen N Rao , Nick Desaulniers , Rong Xu , Sami Tolvanen , Steven Rostedt , Suren Baghdasaryan , Thomas Gleixner , =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= , Valentin Schneider , Vincent Guittot , Vincenzo Frascino , Vlastimil Babka , Will Deacon , workflows@vger.kernel.org, x86@kernel.org Subject: [PATCH v8 15/27] mm/ksw: limit canary search to current stack frame Date: Tue, 11 Nov 2025 00:36:10 +0800 Message-ID: <20251110163634.3686676-16-wangjinchao600@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251110163634.3686676-1-wangjinchao600@gmail.com> References: <20251110163634.3686676-1-wangjinchao600@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the compiler-provided frame pointer when CONFIG_FRAME_POINTER is enabled to restrict the stack canary search range to the current function frame. This prevents scanning beyond valid stack bounds and improves reliability across architectures. Also add explicit handling for missing CONFIG_STACKPROTECTOR and make the failure message more visible. Signed-off-by: Jinchao Wang --- mm/kstackwatch/stack.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/mm/kstackwatch/stack.c b/mm/kstackwatch/stack.c index 60371b292915..3455d1e70db9 100644 --- a/mm/kstackwatch/stack.c +++ b/mm/kstackwatch/stack.c @@ -64,15 +64,32 @@ static unsigned long ksw_find_stack_canary_addr(struct = pt_regs *regs) unsigned long *stack_ptr, *stack_end, *stack_base; unsigned long expected_canary; unsigned int i; +#ifdef CONFIG_FRAME_POINTER + unsigned long *fp =3D NULL; +#endif =20 stack_ptr =3D (unsigned long *)kernel_stack_pointer(regs); - stack_base =3D (unsigned long *)(current->stack); =20 - // TODO: limit it to the current frame stack_end =3D (unsigned long *)((char *)current->stack + THREAD_SIZE); +#ifdef CONFIG_FRAME_POINTER + /* + * Use the compiler-provided frame pointer. + * Limit the search to the current frame + * Works on any arch that keeps FP when CONFIG_FRAME_POINTER=3Dy. + */ + fp =3D __builtin_frame_address(0); =20 + if (fp > stack_ptr && fp < stack_end) + stack_end =3D fp; +#endif + +#ifdef CONFIG_STACKPROTECTOR expected_canary =3D current->stack_canary; +#else + pr_err("no canary without CONFIG_STACKPROTECTOR\n"); + return 0; +#endif =20 if (stack_ptr < stack_base || stack_ptr >=3D stack_end) { pr_err("Stack pointer 0x%lx out of bounds [0x%lx, 0x%lx)\n", @@ -85,15 +102,11 @@ static unsigned long ksw_find_stack_canary_addr(struct= pt_regs *regs) if (&stack_ptr[i] >=3D stack_end) break; =20 - if (stack_ptr[i] =3D=3D expected_canary) { - pr_debug("canary found i:%d 0x%lx\n", i, - (unsigned long)&stack_ptr[i]); + if (stack_ptr[i] =3D=3D expected_canary) return (unsigned long)&stack_ptr[i]; - } } =20 - pr_debug("canary not found in first %d steps\n", - MAX_CANARY_SEARCH_STEPS); + pr_err("canary not found in first %d steps\n", MAX_CANARY_SEARCH_STEPS); return 0; } =20 --=20 2.43.0