From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 63929 invoked by alias); 5 Jan 2018 02:57:04 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 63403 invoked by uid 89); 5 Jan 2018 02:57:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_HELO_PASS,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy= X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 05 Jan 2018 02:57:02 +0000 Received: from [10.0.0.11] (192-222-251-162.qc.cable.ebox.net [192.222.251.162]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 83B8C1E02D; Thu, 4 Jan 2018 21:57:00 -0500 (EST) Subject: Re: [PATCH v2 2/5] Don't return stale data from fbsd_pid_to_exec_file for kernel processes. To: John Baldwin , gdb-patches@sourceware.org References: <20180104014923.11899-1-jhb@FreeBSD.org> <20180104014923.11899-3-jhb@FreeBSD.org> From: Simon Marchi Message-ID: Date: Fri, 05 Jan 2018 02:57:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: <20180104014923.11899-3-jhb@FreeBSD.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2018-01/txt/msg00063.txt.bz2 On 2018-01-03 08:49 PM, John Baldwin wrote: > For processes without an associated executable (such as kernel processes), > the kern.proc.pathname. system control node returns a length of zero > without modifying the user's buffer. Detect this case and return NULL > rather than the previous contents of the static buffer 'buf'. > > gdb/ChangeLog: > > * fbsd-nat.c (fbsd_pid_to_exec_file) [KERN_PROC_PATHNAME]: Return > NULL for an empty pathname. > --- > gdb/ChangeLog | 5 +++++ > gdb/fbsd-nat.c | 2 +- > 2 files changed, 6 insertions(+), 1 deletion(-) > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog > index 29cfbb287b..804dd4f402 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,8 @@ > +2018-01-03 John Baldwin > + > + * fbsd-nat.c (fbsd_pid_to_exec_file) [KERN_PROC_PATHNAME]: Return > + NULL for an empty pathname. > + > 2018-01-03 John Baldwin > > * fbsd-tdep.c (KVE_STRUCTSIZE, KVE_START, KVE_END, KVE_OFFSET) > diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c > index ec4eed9abe..7b1d1bf148 100644 > --- a/gdb/fbsd-nat.c > +++ b/gdb/fbsd-nat.c > @@ -63,7 +63,7 @@ fbsd_pid_to_exec_file (struct target_ops *self, int pid) > mib[3] = pid; > buflen = sizeof buf; > if (sysctl (mib, 4, buf, &buflen, NULL, 0) == 0) > - return buf; > + return buflen == 0 ? NULL : buf; > #endif > > xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid); > LGTM, but maybe add a comment saying in what situation the sysctl can return a buflen of 0. Does the alternative method that reads from /proc//exe work in that case too? Simon