From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id yA1ULnHHx2dBdwUAWB0awg (envelope-from ) for ; Tue, 04 Mar 2025 22:39:29 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=simark.ca; s=mail; t=1741145969; bh=20r7IbRn7iNYCy/G5KbAIxY57C38Rf59LCVWkRtD7bY=; h=Date:Subject:To:References:From:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=BvKbPlplWCKZOl1i8DBOsg6078nzHTPEIgwASO4Rk5fSXb3KUGAKQMA30UcLZAfyl /zklUAwEWHGiP3JlKGHhEQebM+n1y5jaRZ0vQIK69aWhhiiBnz7uDfr+U+pSe2XeUL sfGXwYw0p3hSaxuONY2LjUPek6bNWFb1nqbidD/k= Received: by simark.ca (Postfix, from userid 112) id B310A1E105; Tue, 4 Mar 2025 22:39:29 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=unavailable autolearn_force=no version=4.0.0 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=simark.ca header.i=@simark.ca header.a=rsa-sha256 header.s=mail header.b=hGSp4yZx; dkim=pass (1024-bit key) header.d=simark.ca header.i=@simark.ca header.a=rsa-sha256 header.s=mail header.b=ISY0c4Sx; dkim-atps=neutral Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 49CD31E05C for ; Tue, 4 Mar 2025 22:39:29 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E23D43858D34 for ; Wed, 5 Mar 2025 03:39:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E23D43858D34 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=simark.ca header.i=@simark.ca header.a=rsa-sha256 header.s=mail header.b=hGSp4yZx; dkim=pass (1024-bit key) header.d=simark.ca header.i=@simark.ca header.a=rsa-sha256 header.s=mail header.b=ISY0c4Sx Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id A3C1D3858D26 for ; Wed, 5 Mar 2025 03:38:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A3C1D3858D26 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark.ca ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A3C1D3858D26 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=158.69.221.121 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1741145934; cv=none; b=FuZj8SM95EUXRLQ6WQ+igG6Z9eKfR4L6Rp6fEiCM3B8dxebBmW9+pfe0hNGqhsvnbI9wqzhR3OKGxljv34Fgob7tF+0G3AD0vp1tng3Clsv7D5DRKMF8fBKWe0C/26fj4MYXU3zxrEKvhk/dFhzAfBbYNl/aMCIo8urTTjB+JAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1741145934; c=relaxed/simple; bh=20r7IbRn7iNYCy/G5KbAIxY57C38Rf59LCVWkRtD7bY=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:MIME-Version: Subject:To:From; b=I1E76QZbvTyweBFFS9mZ/kvNjxbDaQWg9Ar+7ZlGK3pU3yZWGPA7PKFcFlhZy9cv9Lg442P2SZSdfa0uCQJXo0V6RKRmuZo+UpqhI7v/2txjjlzVQxm3s9adyvvinl5+nG8BZRAUKDBoQfLJ0kO0QbXijXWolaWIONNp/tbISIk= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A3C1D3858D26 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=simark.ca; s=mail; t=1741145934; bh=20r7IbRn7iNYCy/G5KbAIxY57C38Rf59LCVWkRtD7bY=; h=Date:Subject:To:References:From:In-Reply-To:From; b=hGSp4yZxctj04KfdqtEuyCyg7CilYOjI2kaMrk3j1iXH0Jgf3NTs3Kl5MZpLlNykd FRJKw20NEAFtTI1IPR2bAjjeE9jt2VlJjm1jJISf0XJQ5b1SJe6i5XpvprrVr9e9el oflQC1idF878xuSVy6uBYKEuiZP1mAeR1JMm8ZLk= Received: by simark.ca (Postfix, from userid 112) id 54A4D1E105; Tue, 4 Mar 2025 22:38:54 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=simark.ca; s=mail; t=1741145933; bh=20r7IbRn7iNYCy/G5KbAIxY57C38Rf59LCVWkRtD7bY=; h=Date:Subject:To:References:From:In-Reply-To:From; b=ISY0c4SxhySZaky+o6OxPnZzGjOPHA1yqUfdRymNK/80HBsp7D2WXAOqwlsXsBCeQ HxAFf3252C+jlCScoIZREQKHNrR7tdFYCXPlRJTAt4Q8EYJHeva+RzoaMJD/aZ/IPR 7Flc/EenFLTXHsZQWFvHTA8ewpFRsIkdIad95H68= Received: from [10.0.0.11] (modemcable238.237-201-24.mc.videotron.ca [24.201.237.238]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 79D051E05C; Tue, 4 Mar 2025 22:38:53 -0500 (EST) Message-ID: Date: Tue, 4 Mar 2025 22:38:53 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/1] gdb: Fix null pointer dereference on missing PATH variable To: Daniel Starke , gdb-patches@sourceware.org References: <20250304215011.2092-1-daniel-email@gmx.net> Content-Language: en-US From: Simon Marchi In-Reply-To: <20250304215011.2092-1-daniel-email@gmx.net> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org On 2025-03-04 16:50, Daniel Starke wrote: > When running "show" with missing PATH variable a null pointer is being > dereferenced in path_info(). > > path_command() correctly checks whether PATH has been set before using it. > It then calls path_info() which retrieves the variable again but fails to > perform the null pointer test on it. As a result, the application crashes with > SIGSEGV on Windows for example. > > Fix this by handling the null pointer case in path_info() accordingly. > > Signed-off-by: Daniel Starke > --- > gdb/infcmd.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/gdb/infcmd.c b/gdb/infcmd.c > index 00703e44b7b..adb2592ae8e 100644 > --- a/gdb/infcmd.c > +++ b/gdb/infcmd.c > @@ -2116,7 +2116,10 @@ static void > path_info (const char *args, int from_tty) > { > gdb_puts ("Executable and object file path: "); > - gdb_puts (current_inferior ()->environment.get (path_var_name)); > + const char *env = current_inferior ()->environment.get (path_var_name); > + if (!env) > + env = ""; > + gdb_puts (env); > gdb_puts ("\n"); > } > > -- > 2.39.5 > I was wondering why I couldn't reproduce on Linux. On my system, the gdb_puts call goes to pager_file::puts, which does handle the nullptr case: if (linebuffer == 0) return; On Windows, I suppose it goes to stdio_file::puts directly or something like that, which doesn't handle the nullptr case. I propose this little tweak shown below, changing the code to use gdb_printf instead of gdb_puts, if that's ok with you. >From 37542545e29b2f5c2b8d1defcfa37e3e3b921854 Mon Sep 17 00:00:00 2001 From: Daniel Starke Date: Tue, 4 Mar 2025 22:50:11 +0100 Subject: [PATCH] gdb: fix null pointer dereference on missing PATH variable When running "show" with missing PATH variable a null pointer is being dereferenced in path_info(). path_command() correctly checks whether PATH has been set before using it. It then calls path_info() which retrieves the variable again but fails to perform the null pointer test on it. As a result, the application crashes with SIGSEGV on Windows for example. Fix this by handling the null pointer case in path_info() accordingly. Signed-off-by: Daniel Starke Co-Authored-By: Simon Marchi Change-Id: I41ef10f00802d3163793491454190008e78f5dc1 --- gdb/infcmd.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 00703e44b7b5..06b7038df506 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -2115,9 +2115,10 @@ static const char path_var_name[] = "PATH"; static void path_info (const char *args, int from_tty) { - gdb_puts ("Executable and object file path: "); - gdb_puts (current_inferior ()->environment.get (path_var_name)); - gdb_puts ("\n"); + const char *env = current_inferior ()->environment.get (path_var_name); + + gdb_printf ("Executable and object file path: %s\n", + env != nullptr ? env : ""); } /* Add zero or more directories to the front of the execution path. */ base-commit: aa2cd0e39dc81b28ba7c934faac18bd4d8287450 -- 2.48.1