Message ID | 20250304215011.2092-1-daniel-email@gmx.net |
---|---|
State | New |
Headers |
Return-Path: <gdb-patches-bounces~patchwork=sourceware.org@sourceware.org> X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D3C703858432 for <patchwork@sourceware.org>; Tue, 4 Mar 2025 21:51:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D3C703858432 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, secure) header.d=gmx.net header.i=daniel-email@gmx.net header.a=rsa-sha256 header.s=s31663417 header.b=k3gb/SV0 X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by sourceware.org (Postfix) with ESMTPS id C87763858D21 for <gdb-patches@sourceware.org>; Tue, 4 Mar 2025 21:50:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C87763858D21 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.net ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C87763858D21 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=212.227.17.20 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1741125049; cv=none; b=knsE2LSdQ2YEMl71H8jMlIep/FadwYAQJUx1YgNoyCj305X3ilpKgjMvZgYz7h3ero0GHMEz/YwzLK+MXim7FU3dWDRXBrcdKBnkKmSf1DkGtfqcERrS1smHaMtWXAWGkf7Oz0Ej7fK+hRlgwh6tmR5gVZVC7hW8tApTlfepllQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1741125049; c=relaxed/simple; bh=sCQAkbf0PVN+bDpunNNXMx8WvxHtRKos6jgIwwQbQd0=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=peLWYWw3A33JYyPdF29GmxO9JS/3vFgzBbMroGSeTRf+g/W0iOwDWAITigpXh3jnIWYSm/S4XslDcBFPwlQPldps869qLm7ERopj9GSmuP8BipslqTXBDq+lyZE/LiOmHir42OkiIMpCQ3tKH/TkoqXpOhYAnHrMqbzUJy7ej0o= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C87763858D21 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.net; s=s31663417; t=1741125047; x=1741729847; i=daniel-email@gmx.net; bh=2Jf4UyF2rFpq5HVH7LHXSrcIAKRdFkyRaUQ8vOlBcaI=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id: MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=k3gb/SV0dhtQbnxs6+Q7jL4MnTHrS4uG9MMmX/PAbcpumIrAMwCtf+t1eJ4nDNZx 9EMw05SR5eYf1tuQfaiTWRk7lISD2a9C5LTjIA9E1FkurjZQKROofnojiOHy3hCSr 1EUuDfOcce+4kBNe+wKnt5kJqPbJFnXYYEZ2r+yTfmtN/QlcX+xVXVyGLFR005mS0 hKf72ArS1qIARZZhgVLYgM3gelhdciUnm3WJZ3x/qSfojG3hVXwzQ06Xle8ADef+6 lGQI/c4NA5CjLraS7DY3JRqjWRsp0i2DjW3m+B25oSMQFhpxfJcuGw4bHPSf3D00J ZC/+QwgTlqH/rSGM/A== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from localhost.localdomain ([79.242.65.197]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M6Daq-1twAnf0kxM-00BC5q; Tue, 04 Mar 2025 22:50:47 +0100 From: Daniel Starke <daniel-email@gmx.net> To: gdb-patches@sourceware.org Cc: Daniel Starke <daniel-email@gmx.net> Subject: [PATCH 1/1] gdb: Fix null pointer dereference on missing PATH variable Date: Tue, 4 Mar 2025 22:50:11 +0100 Message-Id: <20250304215011.2092-1-daniel-email@gmx.net> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:z78cZoXyJombVIgSpvcbPDsnv1Usl2kjTLJMO3rNrj5A8OWjVYm Iy4cXfdMApULT50Tn7U8cmqfM9D6n7XXEO+oAJArKy8GCdubW2Eij3nCUuZVQwCp0SUnrN0 SEQNcieBt8u7JOSwHmZdJaBqZgiGSM5GMC+EUwhYa1DQLMSb4HNOV44ebC8fGziC1KQc8FP 2VujhJ6SDdJ8QMvpykK7g== UI-OutboundReport: notjunk:1;M01:P0:CyzI9yDvaxM=;FToo7YYM8O3Hid36eeC/lKQzcGt 00neYy+8zRrppZ0Z8f8aFV3Ct/D0c8hzapjZZzVXSp7xIF8/BEc+bC79LtHMbNhE78CmpX3To RT4Q5BgRgRYJFYY2Bv11ItRb7AY8VGOUs0go5vZk/v+pVMpoPJRn3sLwvQ75zX1S38rgfdmKl 6KxAW7g2cXU2mfuvDBBNhRVzlw47UajkPEaVj3WgZ2x2H8imE2VwAUrSHk9c209IUQqXRi4sj a+Hv8i37Cj7ETFi2s/k08IwMIenyXzV7AfRw8p9hG44kodvkBe/bLS9Hp9ZM9u2q2PiCTppDK JHQmvxOg3wENOIg519CJ9EhtxFTnIz0EQT88LPV6zVKRP8O1sNdjP5v689pGxih1GZl1WygfW HxwbnC2hgKW1d7q1CsQhyc5yGe+axyJiUDmSusH5upyl+sO2ntvn/FvEieeF5SZd6dedux2nP kPJ/V7yV3hIb5kiFNMVEBNcxV0ABkVitD2cS+L3QsQ4fzgoPiK6Pjn8ODoNK6Hh7wg7qFG7fK stWTKn/8V/1JCPRgWJcQwaOQ1AnM9leZ3j6+Xkrd8cipvQC1XVxmB4dauMly3eH4lhgy/ZdDI xxhwEqMhDDftVk/pWFKS2uNda9FuRuWFLfJRfFJo7GZSAy6VvF6LrQCv9nXyeltQvBMEh5ImP 67vDTXK3B/tHZY1ZT74ZZjnbdxC/czjPM/abkJYIwUaUN+NvSklti+IoKSV65uE5BMOixS61T fKIUyH3G6Jo8b1s7AyqFn5Xel/Wj502oXUd5wUqZrgETA/u6s7H05FM4XmjVC16Y+JRvM8H/4 8hnwMNwqPQIiz0zIlHzJokEKBw19NBsFRZwpTGJs5+xSzX8ERW/P4tiA8+FPG8tn9+9ZzKBPu x98p5lcCbrJYKxAaR7H9FzT4FqSk33NRtrIzcuXPRrFrVzzyITCIY2iCRjJK6KMz1lFG+QriM vd9AvSVfAik190d5o/naMiD1ZpPxx04QnqKJnCSlJiOi2jdocPM8yyZWJkcJOK0JiR3BcQkul 4cJ3fqqQ/yssvau7v4ySUTE3bZx137X+Za6p+X2txXkZRUtqh81l93Dcko+y3W/9b11buF5qr ZINxwXmKtro3rl6tSKgq4AxkbYjOkH3WVXAP11QKYODm+Vq76keZhKLML/6yugUHwwCO0Rvdf 19ZTOZlDTPV6CAOSH6N13C3yg3n1bapoGqqbbZYYHFis9jo3DlQiBAGK3pItSd5VVIRHMdJKg PPdRIzlU29gaoHRYyBhvUTD5ACvkFItnA9udwsDAynvtbl1ypVXAWE3CbpEde9KXOwZbLpXIQ 7qboqSpM99CFzmiZDitSjmlQX1FiOsh5OlvLl5h0CNvuVj1jnhZCwsM2EpPkCliM2/OpKO+J/ PGmnOI5RIPJAsgkkV115oTV/zTFEisJRMKnyllG2juayI5CAAidbqmvuyv X-Spam-Status: No, score=-14.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list <gdb-patches.sourceware.org> List-Unsubscribe: <https://sourceware.org/mailman/options/gdb-patches>, <mailto:gdb-patches-request@sourceware.org?subject=unsubscribe> List-Archive: <https://sourceware.org/pipermail/gdb-patches/> List-Post: <mailto:gdb-patches@sourceware.org> List-Help: <mailto:gdb-patches-request@sourceware.org?subject=help> List-Subscribe: <https://sourceware.org/mailman/listinfo/gdb-patches>, <mailto:gdb-patches-request@sourceware.org?subject=subscribe> Errors-To: gdb-patches-bounces~patchwork=sourceware.org@sourceware.org |
Series |
[1/1] gdb: Fix null pointer dereference on missing PATH variable
|
|
Checks
Context | Check | Description |
---|---|---|
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 | success | Build passed |
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 | success | Test passed |
linaro-tcwg-bot/tcwg_gdb_build--master-arm | success | Build passed |
linaro-tcwg-bot/tcwg_gdb_check--master-arm | success | Test passed |
Commit Message
Daniel Starke
March 4, 2025, 9:50 p.m. UTC
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 <daniel-email@gmx.net>
---
gdb/infcmd.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--
2.39.5
Comments
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 <daniel-email@gmx.net> > --- > 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 <daniel-email@gmx.net> 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 <daniel-email@gmx.net> Co-Authored-By: Simon Marchi <simon.marchi@efficios.com> 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
>>>>> "Simon" == Simon Marchi <simark@simark.ca> writes:
Simon> I propose this little tweak shown below, changing the code to use
Simon> gdb_printf instead of gdb_puts, if that's ok with you.
Simon> + gdb_printf ("Executable and object file path: %s\n",
Probably should use _() here.
Approved-By: Tom Tromey <tom@tromey.com>
Tom
On 3/5/25 10:28 AM, Tom Tromey wrote: >>>>>> "Simon" == Simon Marchi <simark@simark.ca> writes: > > Simon> I propose this little tweak shown below, changing the code to use > Simon> gdb_printf instead of gdb_puts, if that's ok with you. > > Simon> + gdb_printf ("Executable and object file path: %s\n", > > Probably should use _() here. > > Approved-By: Tom Tromey <tom@tromey.com> > > Tom Thanks, pushing with that fixed. Simon
> I propose this little tweak shown below, changing the code to use > gdb_printf instead of gdb_puts, if that's ok with you. I did not test that but sure.
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"); }