From patchwork Tue Feb 14 14:05:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 64972 Return-Path: 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 20CC33858410 for ; Tue, 14 Feb 2023 14:06:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 20CC33858410 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1676383564; bh=7os791p8Ds0Mg8OQL8sWMo85Js2osRcVDJcgrOdFJ4Y=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=PB8Mm+wnzMdpoaiGo/oDNgupSfX4efjFsmxXqcXH6UZyR267iX3vAHzjaXZoZmdVf 6p0QO16tohlR8K5uvsC2suGf3sEewuDnaX/mDDBy8s+udX0wg0HbPMrzKfjdxGqL+D 3utf335EzMNkCJF1UgpSr2w7bw4TTWl1bdLJ3T+M= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x12c.google.com (mail-il1-x12c.google.com [IPv6:2607:f8b0:4864:20::12c]) by sourceware.org (Postfix) with ESMTPS id D20033858005 for ; Tue, 14 Feb 2023 14:05:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D20033858005 Received: by mail-il1-x12c.google.com with SMTP id v6so1339278ilc.10 for ; Tue, 14 Feb 2023 06:05:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=7os791p8Ds0Mg8OQL8sWMo85Js2osRcVDJcgrOdFJ4Y=; b=bhvFg+WsMVeXBqWC7UV00NN/X8aWF0MnsBL7hqxx1FLxAZutGQuqnCgHzJfr7YbdHZ JnQbfR4qqL9hWu28398QvoAIrvhexTqMVpo7BL9as/MCoXfzjtfg8+TFlw3bGaBIBJqc Rugs1OP3fhX7BU/qjVd+VPbYAGK4qqF1B7yHxCsjTRK02eRTjMkrmehQOtau5VwnCyO1 mckHrX4cgypbfGPkKUWKclYT6xeZyA0mdj94EtqYjbmcUaAIVRrk4CS3ty+bKx8JuJlX kH0YMN0Y8A9uPCTEfyQGspZ1BJ8+SHJiDbmHc4EWp86GzDLr9RqgqewVa/L5FqIXIgsn Mgeg== X-Gm-Message-State: AO0yUKUV/v+4zV21+exvDXlcpu8AmqQF4FsEfhrx1h/QwPZ5XgjIVIGd LuNNRzpLrnvLTgp21ytLRr44Utv3mFGrjTrH X-Google-Smtp-Source: AK7set+Xf8Qb4SFax36XY+7cdnkgiWTBO5N7P7Q2VW2O/+7yEtqzOX8k/GbJBKHYp6uXf1VuK5J9DQ== X-Received: by 2002:a05:6e02:20c4:b0:314:fa6:323c with SMTP id 4-20020a056e0220c400b003140fa6323cmr2462379ilq.12.1676383537995; Tue, 14 Feb 2023 06:05:37 -0800 (PST) Received: from localhost.localdomain (75-166-130-93.hlrn.qwest.net. [75.166.130.93]) by smtp.gmail.com with ESMTPSA id h1-20020a92c081000000b00313bbcacc3bsm834209ile.46.2023.02.14.06.05.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Feb 2023 06:05:37 -0800 (PST) To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH] Do not cast away const in agent_run_command Date: Tue, 14 Feb 2023 07:05:31 -0700 Message-Id: <20230214140531.3374817-1-tromey@adacore.com> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, 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.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Tom Tromey via Gdb-patches From: Tom Tromey Reply-To: Tom Tromey Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" While investigating something else, I noticed some weird code in agent_run_command (use of memcpy rather than strcpy). Then I noticed that 'cmd' is used as both an in and out parameter, despite being const. Casting away const like this is bad. This patch removes the const and fixes the memcpy. I also added a static assert to assure myself that the code in gdbserver is correct -- gdbserver is passing its own buffer directly to agent_run_command. Reviewed-By: Andrew Burgess --- gdb/linux-nat.c | 7 ++----- gdbserver/server.cc | 5 +++++ gdbserver/tracepoint.cc | 2 +- gdbsupport/agent.cc | 14 ++++++++------ gdbsupport/agent.h | 2 +- 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 2b206a4ec1e..d6e69e61ef5 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -4114,9 +4114,7 @@ linux_nat_target::static_tracepoint_markers_by_strid (const char *strid) /* Pause all */ target_stop (ptid); - memcpy (s, "qTfSTM", sizeof ("qTfSTM")); - s[sizeof ("qTfSTM")] = 0; - + strcpy (s, "qTfSTM"); agent_run_command (pid, s, strlen (s) + 1); /* Unpause all. */ @@ -4133,8 +4131,7 @@ linux_nat_target::static_tracepoint_markers_by_strid (const char *strid) } while (*p++ == ','); /* comma-separated list */ - memcpy (s, "qTsSTM", sizeof ("qTsSTM")); - s[sizeof ("qTsSTM")] = 0; + strcpy (s, "qTsSTM"); agent_run_command (pid, s, strlen (s) + 1); p = s; } diff --git a/gdbserver/server.cc b/gdbserver/server.cc index 21fb51a45d1..46dfe70838b 100644 --- a/gdbserver/server.cc +++ b/gdbserver/server.cc @@ -51,6 +51,11 @@ #include "gdbsupport/scoped_restore.h" #include "gdbsupport/search.h" +/* PBUFSIZ must also be at least as big as IPA_CMD_BUF_SIZE, because + the client state data is passed directly to some agent + functions. */ +gdb_static_assert (PBUFSIZ >= IPA_CMD_BUF_SIZE); + #define require_running_or_return(BUF) \ if (!target_running ()) \ { \ diff --git a/gdbserver/tracepoint.cc b/gdbserver/tracepoint.cc index 37a9a8c5b7c..b59077a3896 100644 --- a/gdbserver/tracepoint.cc +++ b/gdbserver/tracepoint.cc @@ -6820,7 +6820,7 @@ run_inferior_command (char *cmd, int len) target_pause_all (false); uninsert_all_breakpoints (); - err = agent_run_command (pid, (const char *) cmd, len); + err = agent_run_command (pid, cmd, len); reinsert_all_breakpoints (); target_unpause_all (false); diff --git a/gdbsupport/agent.cc b/gdbsupport/agent.cc index 531807be3d2..81c925dd99d 100644 --- a/gdbsupport/agent.cc +++ b/gdbsupport/agent.cc @@ -179,14 +179,16 @@ gdb_connect_sync_socket (int pid) #endif } -/* Execute an agent command in the inferior. PID is the value of pid of the - inferior. CMD is the buffer for command. GDB or GDBserver will store the - command into it and fetch the return result from CMD. The interaction - between GDB/GDBserver and the agent is synchronized by a synchronization - socket. Return zero if success, otherwise return non-zero. */ +/* Execute an agent command in the inferior. PID is the value of pid + of the inferior. CMD is the buffer for command. It is assumed to + be at least IPA_CMD_BUF_SIZE bytes long. GDB or GDBserver will + store the command into it and fetch the return result from CMD. + The interaction between GDB/GDBserver and the agent is synchronized + by a synchronization socket. Return zero if success, otherwise + return non-zero. */ int -agent_run_command (int pid, const char *cmd, int len) +agent_run_command (int pid, char *cmd, int len) { int fd; int tid = agent_get_helper_thread_id (); diff --git a/gdbsupport/agent.h b/gdbsupport/agent.h index dceb33f6bd5..7a258e267a5 100644 --- a/gdbsupport/agent.h +++ b/gdbsupport/agent.h @@ -22,7 +22,7 @@ #include "gdbsupport/preprocessor.h" -int agent_run_command (int pid, const char *cmd, int len); +int agent_run_command (int pid, char *cmd, int len); int agent_look_up_symbols (void *);