From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 50cvMzu7MGjQCDAAWB0awg (envelope-from ) for ; Fri, 23 May 2025 14:15:23 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=NxJF7dyw; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id AB9C01E11C; Fri, 23 May 2025 14:15:23 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-10.1 required=5.0 tests=ARC_SIGNED,ARC_VALID, BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE autolearn=ham autolearn_force=no version=4.0.1 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 B6B941E102 for ; Fri, 23 May 2025 14:15:22 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5087D385608A for ; Fri, 23 May 2025 18:15:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5087D385608A Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=NxJF7dyw Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 5E6C23856272 for ; Fri, 23 May 2025 18:14:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5E6C23856272 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 5E6C23856272 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1748024086; cv=none; b=iLbk273WQ1iH/ND0yz7IJ7zCfrOH0xQ7dPOPBKgfXNdrEQLYqiNBP0xQOuhuAZsqmTt7SAoaIJIi4bMnpRaEMg55l67N8h2fjM8luf1xV8Lm8YvD7Z/IdJIYiRb+e1JkmL3nYnGq6emE19Rw/rrl/MxLX9WlG9z7f/Wy1CByf+A= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1748024086; c=relaxed/simple; bh=Cd6ItFnYqsaom7qiAh65CF14xN/+aAQFJmDEnx5uoS4=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=DfgWywuZ/HhEa9c29qZFaJ643eZcihVpVdwy/VSrWIlSfTxSd99K9tGyVJz+nA7mwqr6prHA4WlypfUVGhax7F0rkgx/At1JPSJleoPYnYisInr01CXUSpI/6/6IYGb+t2H3C6CoDeXQPU+nhdA6jkdxI2Cr192MXin4PqsTPkc= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5E6C23856272 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748024086; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=PP4CsgDTTbZJl++dIEVqvPkPCZzTb8xfNHNzlx5Pmk8=; b=NxJF7dywmsXcXosdAhqprVVHcuNtmByl4/AnJH2XM4XAFM6HtpE9UXTMW9CFaUcrJXTxxe Rbqj4U8C+zHG/PDMhrCr5QP9gvomFo/Dxd5n/ME0/AiuSQJ6nD/YBv4NpSVcKx/HcdnjT2 CJ+9zEa84iUNV2kzuDHmo/bwRakUSX0= Received: from mail-ej1-f70.google.com (mail-ej1-f70.google.com [209.85.218.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-34-E0JNqGKxNYeypQ6xA7ZwIg-1; Fri, 23 May 2025 14:14:44 -0400 X-MC-Unique: E0JNqGKxNYeypQ6xA7ZwIg-1 X-Mimecast-MFC-AGG-ID: E0JNqGKxNYeypQ6xA7ZwIg_1748024083 Received: by mail-ej1-f70.google.com with SMTP id a640c23a62f3a-ad5697c4537so18199366b.0 for ; Fri, 23 May 2025 11:14:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748024083; x=1748628883; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=PP4CsgDTTbZJl++dIEVqvPkPCZzTb8xfNHNzlx5Pmk8=; b=Fbg6mx1HBmTX7AfQSlimQEMVTKilz1U44ZD0d9BRedH1SMa17T/y3/67muMuS9BNoG CfALWC8hVaBpD2kiinq3+ppon141tPZAy2febuw2mQUIwAmrcZUvcS8ZuaAKJ5iHz7tg uC1ONRwqqu/Lttk2ApWZKZhb83ptS/0BVPfAXwlfqp7N2Y2iN4M62APrWNIHvIR6z0Cc rr7QbS+jx63aORmkCxXTfHmVdsJb1pFyKk+xqKuksoBHfW1tTnATYc3yRhWjQULu5Llx gcHKjnjRIZrrcHypQn61bMwMtAtASwNvjQcaddwrgOnYDoGo4r2+8zD6nAbqUzBwYggs 46YQ== X-Forwarded-Encrypted: i=1; AJvYcCX33+3et1s3p7rbZ24r+0visE8ApeP7bxBgIS2x57xNA4++LcoOhSOvi1TsA0Cb9Ri0VvFTsAj6aXsuOQ==@sourceware.org X-Gm-Message-State: AOJu0YzwoPkdGRit9PMmI/xYxPoZEM2g4FzwPjHDTE1HdwYwR72ON3sX rNmSjkLaXtVdgylKdFCI+lQPDp0pNfahoGuSSYzAkjrzoDVVpHRKX27/dObobXcUupgNmax6Xr9 6BHhUXRImqwU62cqC9YJ7HNbWtdpw1T1biiKsUNtyK7cZubl4jNodqFCgdkIfLAA9h9aptkc= X-Gm-Gg: ASbGnctAGcj0O37FTSQkk5c76N+ZmaTCXM1jbNKvxNFiAMlE+bLKz2mS3vFuP5ZzgRM XUwTED8LQ17yL548y/buuUBqsQFFHHfpFG05nHcRuoJ3KdVcvkcsQOQLFayJYXC/bWueOKMCBFh +RxbzpnvnnLGabmvDaDIml/oFe+Ul3VXTLlRxnAYG0JKr3XEFYwMD1H9srNOBHYWszZs6wZCWfg jWBn8sfwXsPLNIUUo/mtVhWRiT3vFOVZp4WmGYtykz8znW4WVsKOYBI+2uyyUXwkUTiKq7KPbXE oR44fntjPu0FabwwRdNfkID/YvW2dDakA4VW X-Received: by 2002:a17:907:2cc6:b0:ad2:e08:e9e2 with SMTP id a640c23a62f3a-ad859b5729amr42488966b.27.1748024082894; Fri, 23 May 2025 11:14:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IECQ+8MTnWMcRIqMYZBTou8pUIyzPxsdpLBsRCaYiHCfRBd4fonuR71oHU4xD22SosQhUpZzg== X-Received: by 2002:a17:907:2cc6:b0:ad2:e08:e9e2 with SMTP id a640c23a62f3a-ad859b5729amr42487166b.27.1748024082418; Fri, 23 May 2025 11:14:42 -0700 (PDT) Received: from localhost (92.40.184.162.threembb.co.uk. [92.40.184.162]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ad52d4383a6sm1260865366b.120.2025.05.23.11.14.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 May 2025 11:14:41 -0700 (PDT) From: Andrew Burgess To: Fabian Kilger , gdb-patches@sourceware.org Cc: Fabian Kilger Subject: Re: [PATCH 1/2][PR GDB/32956] gdb: implement linux namespace support for fileio_stat In-Reply-To: <20250511150113.3163767-2-kilger@sec.in.tum.de> References: <20250511150113.3163767-1-kilger@sec.in.tum.de> <20250511150113.3163767-2-kilger@sec.in.tum.de> Date: Fri, 23 May 2025 19:14:39 +0100 Message-ID: <87a573i48g.fsf@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: OdETEN4LuMW-cXVzNFJF-csFdaImeKWiSJlJrbsNsEQ_1748024083 X-Mimecast-Originator: redhat.com Content-Type: text/plain 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 Fabian Kilger writes: Thanks for working on this. This mostly looks good, I have just a few style issues that I think should be fixed, but it's all pretty minor. > The new algorithm to look for a build-id-based debug file > (introduced by commit 22836ca88591ac7efacf06d5b6db191763fd8aba) > makes use of fileio_stat. As fileio_stat was not supported by > linux-namespace.c, all stat calls would be performed on the host > and not inside the namespace > > --- > gdb/linux-nat.c | 14 ++++++++ > gdb/linux-nat.h | 3 ++ > gdb/nat/linux-namespaces.c | 71 ++++++++++++++++++++++++++++++++++++++ > gdb/nat/linux-namespaces.h | 6 ++++ > 4 files changed, 94 insertions(+) > > diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c > index 3f252370c7b..478a7977c4d 100644 > --- a/gdb/linux-nat.c > +++ b/gdb/linux-nat.c > @@ -4585,6 +4585,20 @@ linux_nat_target::fileio_open (struct inferior *inf, const char *filename, > return fd; > } > > +/* Implementation of to_fileio_stat. */ > +int Add an empty line after the comment please to match the other functions in this file. > +linux_nat_target::fileio_stat (struct inferior *inf, const char *filename, > + struct stat *sb, fileio_error *target_errno) > +{ > + int r = linux_mntns_stat (linux_nat_fileio_pid_of (inf), > + filename, sb); There's no need to wrap this argument list. > + > + if (r == -1) > + *target_errno = host_to_fileio_error (errno); > + > + return r; > +} > + > /* Implementation of to_fileio_readlink. */ > > std::optional > diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h > index b630b858e34..42d1ec142b3 100644 > --- a/gdb/linux-nat.h > +++ b/gdb/linux-nat.h > @@ -108,6 +108,9 @@ class linux_nat_target : public inf_ptrace_target > const char *filename, > fileio_error *target_errno) override; > > + int fileio_stat (struct inferior *inf, const char *filename, > + struct stat *sb, fileio_error *target_errno) override; > + > int fileio_unlink (struct inferior *inf, > const char *filename, > fileio_error *target_errno) override; > diff --git a/gdb/nat/linux-namespaces.c b/gdb/nat/linux-namespaces.c > index 19a05eec905..aa74e9df950 100644 > --- a/gdb/nat/linux-namespaces.c > +++ b/gdb/nat/linux-namespaces.c > @@ -233,6 +233,12 @@ enum mnsh_msg_type > MNSH_RET_INT. */ > MNSH_REQ_SETNS, > > + /* A request that the helper call stat. The single > + argument (the filename) should be passed in BUF, and > + should include a terminating NUL character. The helper > + should respond with a MNSH_RET_INTSTR. */ > + MNSH_REQ_STAT, > + > /* A request that the helper call open. Arguments should > be passed in BUF, INT1 and INT2. The filename (in BUF) > should include a terminating NUL character. The helper > @@ -283,6 +289,10 @@ mnsh_debug_print_message (enum mnsh_msg_type type, > debug_printf ("ERROR"); > break; > > + case MNSH_REQ_STAT: > + debug_printf ("STAT"); > + break; > + > case MNSH_REQ_SETNS: > debug_printf ("SETNS"); > break; > @@ -514,6 +524,20 @@ mnsh_handle_setns (int sock, int fd, int nstype) > return mnsh_return_int (sock, result, errno); > } > > + > +/* Handle a MNSH_REQ_STAT message. Must be async-signal-safe. */ > + > +static ssize_t > +mnsh_handle_stat(int sock, const char *filename) > +{ > + struct stat sb; > + int stat_ok = stat(filename, &sb); Space needed after 'stat'. > + > + return mnsh_return_intstr(sock, stat_ok, &sb, > + stat_ok == -1 ? 0 : sizeof (sb), > + errno); Space needed after 'mnsh_return_intstr'. > +} > + > /* Handle a MNSH_REQ_OPEN message. Must be async-signal-safe. */ > > static ssize_t > @@ -574,6 +598,11 @@ mnsh_main (int sock) > response = mnsh_handle_setns (sock, fd, int1); > break; > > + case MNSH_REQ_STAT: > + if (size > 0 && buf[size - 1] == '\0') > + response = mnsh_handle_stat(sock, buf); Space needed after 'mnsh_handle_stat' > + break; > + > case MNSH_REQ_OPEN: > if (size > 0 && buf[size - 1] == '\0') > response = mnsh_handle_open (sock, buf, int1, int2); > @@ -765,6 +794,10 @@ mnsh_maybe_mourn_peer (void) > mnsh_send_message (helper->sock, MNSH_REQ_OPEN, -1, flags, mode, \ > filename, strlen (filename) + 1) > > +#define mnsh_send_stat(helper, filename) \ > + mnsh_send_message (helper->sock, MNSH_REQ_STAT, -1, 0, 0, \ > + filename, strlen (filename) + 1) > + > #define mnsh_send_unlink(helper, filename) \ > mnsh_send_message (helper->sock, MNSH_REQ_UNLINK, -1, 0, 0, \ > filename, strlen (filename) + 1) > @@ -945,6 +978,44 @@ linux_mntns_access_fs (pid_t pid) > return MNSH_FS_HELPER; > } > > + > +/* See nat/linux-namespaces.h. */ > +int Move the empty line from before the comment to after the comment please. > +linux_mntns_stat (pid_t pid, const char *filename, > + struct stat *sb) > +{ > + enum mnsh_fs_code access = linux_mntns_access_fs (pid); > + struct linux_mnsh *helper; > + int stat_ok, error; > + ssize_t size; The declarations should be moved inline below. > + > + if (access == MNSH_FS_ERROR) > + return -1; > + > + if (access == MNSH_FS_DIRECT) > + return stat(filename, sb); Space needed after 'stat'. > + > + gdb_assert (access == MNSH_FS_HELPER); > + > + helper = linux_mntns_get_helper (); > + > + size = mnsh_send_stat (helper, filename); > + if (size < 0) > + return -1; > + > + size = mnsh_recv_intstr (helper, &stat_ok, &error, sb, sizeof (*sb)); > + > + if (size < 0) > + { > + stat_ok = -1; > + errno = error; > + } > + else > + gdb_assert (stat_ok == -1 || size == sizeof (*sb)); > + > + return stat_ok; > +} > + > /* See nat/linux-namespaces.h. */ > > int > diff --git a/gdb/nat/linux-namespaces.h b/gdb/nat/linux-namespaces.h > index 4327292950b..825cb27eb2d 100644 > --- a/gdb/nat/linux-namespaces.h > +++ b/gdb/nat/linux-namespaces.h > @@ -58,6 +58,12 @@ enum linux_ns_type > > extern int linux_ns_same (pid_t pid, enum linux_ns_type type); > > +/* Like stat(2), but in the mount namespace of process > + PID. */ This comment doesn't need to wrap. Thanks, Andrew > + > +extern int linux_mntns_stat (pid_t pid, const char *filename, > + struct stat *sb); > + > /* Like gdb_open_cloexec, but in the mount namespace of process > PID. */ > > -- > 2.49.0