From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1879) id 15B46385803B; Tue, 14 Dec 2021 19:35:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 15B46385803B Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Simon Marchi To: gdb-cvs@sourceware.org Subject: [binutils-gdb] gdbserver/tracepoint.cc: use snprintf in gdb_agent_socket_init X-Act-Checkin: binutils-gdb X-Git-Author: Simon Marchi X-Git-Refname: refs/heads/master X-Git-Oldrev: b2c7007bddb0df76006f41025117596b0c613760 X-Git-Newrev: 237f6eac1577223034a3e3436bd270428d097534 Message-Id: <20211214193528.15B46385803B@sourceware.org> Date: Tue, 14 Dec 2021 19:35:28 +0000 (GMT) X-BeenThere: gdb-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Dec 2021 19:35:28 -0000 https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=237f6eac1577223034a3e3436bd270428d097534 commit 237f6eac1577223034a3e3436bd270428d097534 Author: Simon Marchi Date: Tue Dec 14 14:34:57 2021 -0500 gdbserver/tracepoint.cc: use snprintf in gdb_agent_socket_init If we modify tracepoint.cc to try to use a too long unix socket name, for example by modifying SOCK_DIR to be: #define SOCK_DIR "/tmp/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut" ... trying to start an application with libinproctrace.so loaded crashes: $ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.6:./libinproctrace.so /bin/ls /home/smarchi/src/binutils-gdb/gdbserver/../gdbsupport/common-utils.cc:69: A problem internal to GDBserver in-process agent has been detected. xsnprintf: Assertion `ret < size' failed. Looking at the rest of the socket initialization code, the intent seems to be that if something goes wrong, we warn but let the program execute. So crashing on this failed assertions seems against the intent. Commit 6cebaf6e1ae4 ("use xsnprintf instead of snprintf.") changed this code to use xsnprintf instead of snprintf, introducing this assertion. Before that, snprintf would return a value bigger that UNIX_PATH_MAX and the "if" after would catch it and emit a warning, which is exactly what we want. That change was done because LynxOS didn't have snprintf. Since LynxOS isn't supported anymore, we can simply revert to use snprintf there. With this patch, we get a warning (printed by the caller of gdb_agent_socket_init), but the program keeps executing: $ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.6:./libinproctrace.so /bin/ls ipa: could not create sync socket ... Change-Id: I78bca52d5dc3145335abeae45a42052701e3f5dd Diff: --- gdbserver/tracepoint.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gdbserver/tracepoint.cc b/gdbserver/tracepoint.cc index a62d9a7233c..97d8fa5877f 100644 --- a/gdbserver/tracepoint.cc +++ b/gdbserver/tracepoint.cc @@ -6943,8 +6943,8 @@ gdb_agent_socket_init (void) { int result, fd; - result = xsnprintf (agent_socket_name, UNIX_PATH_MAX, "%s/gdb_ust%d", - SOCK_DIR, getpid ()); + result = snprintf (agent_socket_name, UNIX_PATH_MAX, "%s/gdb_ust%d", + SOCK_DIR, getpid ()); if (result >= UNIX_PATH_MAX) { trace_debug ("string overflow allocating socket name");