From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id yan7AEjo4WkY2B0AWB0awg (envelope-from ) for ; Fri, 17 Apr 2026 03:59:04 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=lF+nu6AD; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=qQ6xxKO1; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=lF+nu6AD; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=qQ6xxKO1; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id E58D21E0C3; Fri, 17 Apr 2026 03:59:03 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.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,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (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 6E9F71E0B1 for ; Fri, 17 Apr 2026 03:59:01 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 88F1C4BAD158 for ; Fri, 17 Apr 2026 07:59:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 88F1C4BAD158 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=lF+nu6AD; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=qQ6xxKO1; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=lF+nu6AD; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=qQ6xxKO1 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id 1EF664C91755 for ; Fri, 17 Apr 2026 07:57:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1EF664C91755 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1EF664C91755 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776412659; cv=none; b=S+iGJizVmdiiJnX/UxUnQ6C4hSrgL4mcPf4+kaKjHW9qfoywAmQeSs4AnkpHPLp0NFYJEOj0UnUzEmSa1WmEz9UpHnRmhU7j+IAUXjpj9FO4Jq9YTrM+fPT6ctjpZh6z9NsqHNRjw6hkquxd/XsiJ4WYJP+1V3RCBJ51bbhNEf4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776412659; c=relaxed/simple; bh=AH5T80Av5kC81w4gzce96h8JvXSqkcMIaLB17ZRrDsg=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=Ib4g5J9sVV0Z17CSijfB2Hl+rVd349KAcSo15REsHous3m7tewm9kA132B7fUPnSsNZ2ommaJzIxhz/3iJDOwpSkq2oG6psAiayYOsHYdU8sPIummHJ8hfyEFlyUqG+JPpQQISs8j/F9XX/Ay2BKe5qvhe8XTYoZssLNfWef+Bs= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1EF664C91755 Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 781765BE58 for ; Fri, 17 Apr 2026 07:57:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1776412640; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/gNM7fBbjVWJSNPxBMlyuoAd+s4781nakWNixV5jt/E=; b=lF+nu6ADHA3UT7cMQTswh42nm/6PYdpp5WSIXUJC6jBXh9VqioOZKBx6Xd+/2Cc8QkCzQD caf39eHpA/yQUlOo/I1zobXRoYDyDoPvFCUr28Kv1uiwdOBuz+xt3DAloTAZuESIIGlD5E rvisXhznfjz0V22ZOCQMo1e92wSoh9k= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1776412640; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/gNM7fBbjVWJSNPxBMlyuoAd+s4781nakWNixV5jt/E=; b=qQ6xxKO1JmVF5sTC0NHmGdezNUBTmAi+FQ+3ip4k5hKPuF0+LadOy1P12jW5E1QCuY8rWE M3SF1SMLaFVJ05AQ== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=lF+nu6AD; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=qQ6xxKO1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1776412640; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/gNM7fBbjVWJSNPxBMlyuoAd+s4781nakWNixV5jt/E=; b=lF+nu6ADHA3UT7cMQTswh42nm/6PYdpp5WSIXUJC6jBXh9VqioOZKBx6Xd+/2Cc8QkCzQD caf39eHpA/yQUlOo/I1zobXRoYDyDoPvFCUr28Kv1uiwdOBuz+xt3DAloTAZuESIIGlD5E rvisXhznfjz0V22ZOCQMo1e92wSoh9k= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1776412640; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/gNM7fBbjVWJSNPxBMlyuoAd+s4781nakWNixV5jt/E=; b=qQ6xxKO1JmVF5sTC0NHmGdezNUBTmAi+FQ+3ip4k5hKPuF0+LadOy1P12jW5E1QCuY8rWE M3SF1SMLaFVJ05AQ== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 63083593AE for ; Fri, 17 Apr 2026 07:57:20 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id YPLIFuDn4WkYHgAAD6G6ig (envelope-from ) for ; Fri, 17 Apr 2026 07:57:20 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH v6 4/4] [gdb/tui] Fix crash with debuginfod query (C-x C-a) Date: Fri, 17 Apr 2026 09:57:19 +0200 Message-ID: <20260417075719.852558-5-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260417075719.852558-1-tdevries@suse.de> References: <20260417075719.852558-1-tdevries@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Action: no action X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:104:10:150:64:97:from]; MIME_TRACE(0.00)[0:+]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCVD_TLS_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:106:10:150:64:167:received]; RCVD_VIA_SMTP_AUTH(0.00)[]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[2a07:de40:b281:106:10:150:64:167:received]; DBL_BLOCKED_OPENRESOLVER(0.00)[sourceware.org:url,suse.de:dkim,suse.de:mid] X-Rspamd-Queue-Id: 781765BE58 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 PR tui/33794 reports an abort when the debuginfod query happens while enabling TUI using the "C-x C-a" key combination. The abort triggering is this one in rl_callback_read_char: ... if (rl_linefunc == NULL) { _rl_errmsg ("readline_callback_read_char() called with no handler!"); abort (); } ... This is similar to PR python/24796, and can be fixed by applying a similar fix in tui_enable: ... void tui_enable (void) { + SCOPE_EXIT { reinstall_readline_callback_handler_cleanup (); }; ... After doing so, things seem to be fixed, but when compiling gdb with Asan, we run into a heap-use-after-free. The problem here is that readline is used recursively: - readline is entered when handling the C-x C-a key combination - readline is entered again when handling the debuginfod query This would have to be addressed in readline, but in the mean time we need a fix in gdb. An RFC [1] was posted exploring the option of avoiding recursive readline use by rather than handling the key combination directly, queueing it in an event queue and handling the events later. This patch takes a conservative approach: bail out if debuginfod enabled is set to ask when entering TUI. The fix is minimal, and consequently low-risk, and applies cleanly to the gdb-17-branch (and that holds more or less as well for the patches this patch is dependent on). Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33794 [1] https://sourceware.org/pipermail/gdb-patches/2026-February/225289.html --- gdb/testsuite/gdb.tui/query.exp | 3 +-- gdb/tui/tui.c | 10 ++++++++-- gdb/tui/tui.h | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gdb/testsuite/gdb.tui/query.exp b/gdb/testsuite/gdb.tui/query.exp index acf0db63ebb..eb0bee49aec 100644 --- a/gdb/testsuite/gdb.tui/query.exp +++ b/gdb/testsuite/gdb.tui/query.exp @@ -49,8 +49,7 @@ file delete $tmpfile set l {} lappend l "command" -# Disabled due to PR33794. -#lappend l "keys" +lappend l "keys" foreach_with_prefix how $l { save_vars { env(DEBUGINFOD_URLS) } { diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c index 9cf21f390c8..d2f1b79616c 100644 --- a/gdb/tui/tui.c +++ b/gdb/tui/tui.c @@ -41,6 +41,7 @@ #include "top.h" #include "ui.h" #include "observable.h" +#include "debuginfod-support.h" #include @@ -140,7 +141,7 @@ tui_rl_switch_mode (int notused1 = 0, int notused2 = 0) /* If tui_enable throws, we'll re-prep below. */ rl_deprep_terminal (); - tui_enable (); + tui_enable (false); } } catch (const gdb_exception_forced_quit &ex) @@ -399,13 +400,18 @@ gdb_getenv_term (void) the gdb output, configures the readline to work in tui mode. When in curses mode, it does nothing. */ void -tui_enable (void) +tui_enable (bool queries_allowed) { TUI_SCOPED_DEBUG_ENTER_EXIT; if (tui_active) return; + if (!queries_allowed + && debuginfod_enabled_ask_p () + && defaulted_query_auto_answers_p () != TRIBOOL_TRUE) + error (_("Please set debuginfod enabled to on or off before enabling TUI")); + tui_batch_rendering defer; /* To avoid to initialize curses when gdb starts, there is a deferred diff --git a/gdb/tui/tui.h b/gdb/tui/tui.h index 7daefe2c9bb..e90c40b562e 100644 --- a/gdb/tui/tui.h +++ b/gdb/tui/tui.h @@ -70,7 +70,7 @@ extern bool tui_get_command_dimension (unsigned int *width, extern void tui_ensure_readline_initialized (); /* Enter in the tui mode (curses). */ -extern void tui_enable (void); +extern void tui_enable (bool queries_allowed = true); /* Leave the tui mode. */ extern void tui_disable (void); -- 2.51.0