From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Robert Pluim Newsgroups: gmane.emacs.bugs Subject: bug#36279: 26.2.90; (process-attributes nonexistent-pid) segmentation fault Date: Wed, 19 Jun 2019 09:06:53 +0200 Message-ID: References: <87zhmfvx44.fsf@gmail.com> <42c23bd8-57e3-4503-a6cf-d38aec89edd0@www.fastmail.com> <3593bb18-c70f-4759-bf34-a245cf1ddf9b@www.fastmail.com> <83lfxyss8m.fsf@gnu.org> <83k1disr88.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="56004"; mail-complaints-to="usenet@blaine.gmane.org" Cc: 36279@debbugs.gnu.org, mail@xuchunyang.me, npostavs@gmail.com To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Jun 19 09:08:16 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hdUha-000EJF-Dq for geb-bug-gnu-emacs@m.gmane.org; Wed, 19 Jun 2019 09:08:14 +0200 Original-Received: from localhost ([::1]:35472 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdUhU-0003tq-GW for geb-bug-gnu-emacs@m.gmane.org; Wed, 19 Jun 2019 03:08:08 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:56484) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hdUhP-0003tX-Fr for bug-gnu-emacs@gnu.org; Wed, 19 Jun 2019 03:08:04 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hdUhO-0004hK-Ah for bug-gnu-emacs@gnu.org; Wed, 19 Jun 2019 03:08:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:60609) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hdUhO-0004gO-6n for bug-gnu-emacs@gnu.org; Wed, 19 Jun 2019 03:08:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hdUhN-0008Dn-Vq for bug-gnu-emacs@gnu.org; Wed, 19 Jun 2019 03:08:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Robert Pluim Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 19 Jun 2019 07:08:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 36279 X-GNU-PR-Package: emacs Original-Received: via spool by 36279-submit@debbugs.gnu.org id=B36279.156092802631515 (code B ref 36279); Wed, 19 Jun 2019 07:08:01 +0000 Original-Received: (at 36279) by debbugs.gnu.org; 19 Jun 2019 07:07:06 +0000 Original-Received: from localhost ([127.0.0.1]:45920 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hdUgT-0008CF-VI for submit@debbugs.gnu.org; Wed, 19 Jun 2019 03:07:06 -0400 Original-Received: from mail-wr1-f65.google.com ([209.85.221.65]:34075) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hdUgS-0008Bj-Q8 for 36279@debbugs.gnu.org; Wed, 19 Jun 2019 03:07:05 -0400 Original-Received: by mail-wr1-f65.google.com with SMTP id k11so2109842wrl.1 for <36279@debbugs.gnu.org>; Wed, 19 Jun 2019 00:07:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:mail-copies-to:gmane-reply-to-list :date:in-reply-to:message-id:mime-version; bh=ur3W103PiUUBbzOiuOhz7/BEEeLX6N1F12CT8/GqbLo=; b=oPeWGcR3XI8/pZQBg8U1/RQMtcJfHyNecLgREOSI0Z8Y7p85mGETCPRbO5Nkr0vjuR 9NyxOQhze4TIWKpgtuhmNnQi04CMWyklQFtHnA9w/UMdOFpUmSm0qPwvpls0nFeV6uWU DyZxh2Zw+Vkomy49bSPipfD3uAbBz1VnDNuGwsbp/nwT/3WjCZ95jQPKYDu8+9grk4bu t439z1Ye1ok7yp2xJmoN9/kdBT3wSnr1HCkYW4si1Hs4UAofiSm+e1TDDcYrdozAavM8 uSQ8vAYQsSttndoZhqePOM3okZNscVji6p2vIP3KEstTJ+ReErbcDc1c7ObGoI5pjCvs FkaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:mail-copies-to :gmane-reply-to-list:date:in-reply-to:message-id:mime-version; bh=ur3W103PiUUBbzOiuOhz7/BEEeLX6N1F12CT8/GqbLo=; b=craZl2qj2cN3iM9sGuIDczKvrcGMEAezFz3WGieVtQ3+wktD/3zTfplNRkznant7zp 2sJCJMqPcV23K+hSt5ujCu5/4IZmELHgqIY4U6Ujqrjz25etRv8saNpBqeHo+yK/4RYW 05LC3m9hzzqAugncac3wL2D3HKScKBm+UC2FuEUE4424fou78rkbJ29ncKCEnbAPTVXr AGi1t+T52+KtCdVsKB7fspk2azhIkU08mTqzha4DEw1IRpOHlRRs9AUXZR1cLrChtVad bMLIzYXnYlJChNLHRMPsfGdRdoEHLfLPblY1CAR+qBBQgh61yjq14yRsBkz9wFKETUu0 I9uQ== X-Gm-Message-State: APjAAAVyXjBPAmbi3atfELSx1wbRq7nZ2GZSf1Fd+CeU2QhVm1jWjNNV mHhd5+q7//wVwtQeIj41QZ8= X-Google-Smtp-Source: APXvYqwtmMXAsoCA7Sqs6z9GPKJyyfHFzMSCrGK6x02WGrxCgmf0YE3v8vyBCQqWQ354gKhvSuLDeA== X-Received: by 2002:adf:9065:: with SMTP id h92mr7631870wrh.132.1560928018754; Wed, 19 Jun 2019 00:06:58 -0700 (PDT) Original-Received: from rpluim-mac ([149.5.228.1]) by smtp.gmail.com with ESMTPSA id x129sm482946wmg.44.2019.06.19.00.06.55 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 19 Jun 2019 00:06:56 -0700 (PDT) Mail-Copies-To: never Gmane-Reply-To-List: yes In-Reply-To: (Robert Pluim's message of "Tue, 18 Jun 2019 20:14:31 +0200") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:160824 Archived-At: --=-=-= Content-Type: text/plain >>>>> On Tue, 18 Jun 2019 20:14:31 +0200, Robert Pluim said: >>>>> On Tue, 18 Jun 2019 21:06:31 +0300, Eli Zaretskii said: >>> From: Robert Pluim >>> Cc: xuchunyang , 36279@debbugs.gnu.org, npostavs@gmail.com >>> Date: Tue, 18 Jun 2019 19:53:06 +0200 >>> >>> list_system_processes (on macOS and FreeBSD) and >>> system_process_attributes(on FreeBSD) potentially have similar issues >>> with sysctl. Would you like a defensive patch for those? Eli> Yes, I think so. Robert> OK, sometime tomorrow (and perhaps for 'get_boot_time' in filelock.c Robert> as well) I think I got all the ChangeLog syntax right. Patch against emacs-26 attached, not yet pushed. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-Check-length-returned-by-sysctl.patch >From a70ac9f644660a16fa871a9f6933c1344ffae083 Mon Sep 17 00:00:00 2001 From: Robert Pluim Date: Wed, 19 Jun 2019 08:52:50 +0200 Subject: [PATCH] Check length returned by sysctl To: emacs-devel@gnu.org sysctl sometimes returns successfully even when it returns no data, such as when querying non-existent processes, which can cause crashes. Check for this condition by validating the length of the returned data. (Bug#36279) * src/sysdep.c (list_system_processes) [DARWIN_OS || __FreeBSD__]: (system_process_attributes) [__FreeBSD__]: (system_process_attributes) [DARWIN_OS]: * src/filelock.c (get_boot_time) [CTL_KERN && KERN_BOOTTIME]: Check length of data returned by sysctl. --- src/filelock.c | 3 +-- src/sysdep.c | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/filelock.c b/src/filelock.c index 81d98f36fa..0865450936 100644 --- a/src/filelock.c +++ b/src/filelock.c @@ -151,8 +151,7 @@ get_boot_time (void) mib[0] = CTL_KERN; mib[1] = KERN_BOOTTIME; size = sizeof (boottime_val); - - if (sysctl (mib, 2, &boottime_val, &size, NULL, 0) >= 0) + if (sysctl (mib, 2, &boottime_val, &size, NULL, 0) >= 0 && size != 0) { boot_time = boottime_val.tv_sec; return boot_time; diff --git a/src/sysdep.c b/src/sysdep.c index 1e35e06b63..b2aecc0dda 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -3014,11 +3014,11 @@ list_system_processes (void) Lisp_Object proclist = Qnil; - if (sysctl (mib, 3, NULL, &len, NULL, 0) != 0) + if (sysctl (mib, 3, NULL, &len, NULL, 0) != 0 || len == 0) return proclist; procs = xmalloc (len); - if (sysctl (mib, 3, procs, &len, NULL, 0) != 0) + if (sysctl (mib, 3, procs, &len, NULL, 0) != 0 || len == 0) { xfree (procs); return proclist; @@ -3618,7 +3618,7 @@ system_process_attributes (Lisp_Object pid) CONS_TO_INTEGER (pid, int, proc_id); mib[3] = proc_id; - if (sysctl (mib, 4, &proc, &proclen, NULL, 0) != 0) + if (sysctl (mib, 4, &proc, &proclen, NULL, 0) != 0 || proclen == 0) return attrs; attrs = Fcons (Fcons (Qeuid, make_fixnum_or_float (proc.ki_uid)), attrs); @@ -3740,7 +3740,7 @@ system_process_attributes (Lisp_Object pid) mib[2] = KERN_PROC_ARGS; len = MAXPATHLEN; - if (sysctl (mib, 4, args, &len, NULL, 0) == 0) + if (sysctl (mib, 4, args, &len, NULL, 0) == 0 && len != 0) { int i; for (i = 0; i < len; i++) @@ -3798,7 +3798,7 @@ system_process_attributes (Lisp_Object pid) CONS_TO_INTEGER (pid, int, proc_id); mib[3] = proc_id; - if (sysctl (mib, 4, &proc, &proclen, NULL, 0) != 0) + if (sysctl (mib, 4, &proc, &proclen, NULL, 0) != 0 || proclen == 0) return attrs; uid = proc.kp_eproc.e_ucred.cr_uid; -- 2.21.0.419.gffac537e6c --=-=-=--