Received: by 2002:a05:6358:f14:b0:e5:3b68:ec04 with SMTP id b20csp420579rwj; Thu, 22 Dec 2022 09:20:06 -0800 (PST) X-Google-Smtp-Source: AMrXdXtpX+8W/8klLVo2H1/BGn+URJiORdX/D1dF8Lb4pra9wOnzsNCjZebIBbxBI1udjo/tcSF7 X-Received: by 2002:a17:902:ff01:b0:189:3fcc:f996 with SMTP id f1-20020a170902ff0100b001893fccf996mr7203628plj.21.1671729606058; Thu, 22 Dec 2022 09:20:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671729606; cv=none; d=google.com; s=arc-20160816; b=g0HY1fzvcbKHoYsGNlLwkoQQzoobzflRdfccTBbj+PYrgdGK6Ru4kMKzxVKYEgpGK+ yoq+xp9OJhZSXSrT5V5hYVQH8T2pH9wekzmELMkQL5b55hjtZv7aG5bt6Hyf200QK28K oi+Afl7J3g33AFN+IzywJiojKbtw+qUHoZ4AfXmsB3AGsTZXwxaVRI/FhJgYOoL4K8cD hzUV4EpGVMNbpmhgyixqjV/8B4Hq238XbXxqWPlLHw8p1ne9DRbu/BLSnx2ODhADl0zR 4IDSr11zmFmYIOmJJTtOvP6G6DdjydHQOleYoQ2RFuYz0sWyWLzzTWfAY7nxD9nD99h5 7nZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-disposition:mime-version:message-id :subject:cc:to:from:date:dkim-signature; bh=yZLAlOhCGilIwuTmtW0IVLJRanvaBYIelqxDGN9L3mA=; b=ONKQ0g48P+KQJiG3ebzN1ZId1i2RtaA4PJUj6fWLzzr/E21RUBx2HOmPcnPCwbl2Yx OrrDgHjyQAxPizBTdS0IMPsU6Jc8tEJ2DcqR6YE2rfmIZ4ksv6Thkw0hM2rRXi5Igb28 ycyKjrXhu/CPobfTdxWfhyIZCb6PdGYcnBH9zl4obyfflmCcaqUM0TNTpzrPC6UZi9ah ijoeym7qPpsRRMqdsmAkMqmS5GYv5bD8RzCPGUYfil7FjRn5JNAj6kk6GRLSn9M3+Sax h5wRlMHy5GSnybx0nBxyA7SqfII88jSeK5ljPAO8/z4BZXsyxqg7I/+0s3IKa5+DVJUH 2Afg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=ntlPTMV4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p4-20020a170902e74400b00189d297243fsi1068990plf.254.2022.12.22.09.19.57; Thu, 22 Dec 2022 09:20:06 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=ntlPTMV4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230178AbiLVQnB (ORCPT + 68 others); Thu, 22 Dec 2022 11:43:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229603AbiLVQm5 (ORCPT ); Thu, 22 Dec 2022 11:42:57 -0500 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DAC5227B0F; Thu, 22 Dec 2022 08:42:56 -0800 (PST) Received: by mail-wm1-x32d.google.com with SMTP id ja17so1830869wmb.3; Thu, 22 Dec 2022 08:42:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=yZLAlOhCGilIwuTmtW0IVLJRanvaBYIelqxDGN9L3mA=; b=ntlPTMV4mBJYN7GB1xLqSC6qEFW7/c4RVIUl7rVnZDNgEyUnIFTrW7ehcuwSjA9MOT roXNazIIcGsS24FHx1L0hDGQS3Z8bXmRO0K8a7JuCtbpCxERvYemdLj3Ua0F+5P3X8Js 6+6krr8AjM5RIrp+OxufDGOxjY2Hieowj0//MgfhL0H9x7rknnumipH69NwM/Hw9X11p peaLgdBwcc1r1HCNdLU7G+QzpckOgMmxMzZq1aEn04PkaKZum8VZr5h/v5z0CMpwNa1w EefqCy5z9v4qYICYsn3Qf9hH91DI57OppL3On7C7ra5J+d/YImz3xvg16yTkqmmOGHxI 5q1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=yZLAlOhCGilIwuTmtW0IVLJRanvaBYIelqxDGN9L3mA=; b=Jwkc08Ugqo7++opMPsfC+9JfzLoqgu2ouvyVncv0Tju0zbLIjKAeItD/32IWSzClAz hCK6X/qetjYvGIo7JQe7zzzu8Hz7d/hOuzDLdTaypT5GE9oVfQ9ufxNfCkVnIskT5uYv mOcrs+pkT12kOsIaWn5MvI/UW+Z//kQA6Balb+NvVQqjH+SE7sVUO+FPwzPuK+IizkpK NcAepCfnCVuOPrWuAlVl2d6Oya9mqnUM5uq8F3vT5mnEDVE3psm+xFILhMha/aSDa/p/ J+RwpCvumVWvJaSNwolHDj/2BoBG0ixPNN8FgiBZzBq5NIElpS3INghVtizvRFxslmk6 nSbQ== X-Gm-Message-State: AFqh2kqbItKmIqwS2r3PG/DFksAVLfwSgLZRKbJahtUQBVGQF6EyL/L/ QoiqA9wZQA/6DKeXkKDu8Q== X-Received: by 2002:a05:600c:4d25:b0:3d2:27ba:dde0 with SMTP id u37-20020a05600c4d2500b003d227badde0mr4876976wmp.33.1671727375391; Thu, 22 Dec 2022 08:42:55 -0800 (PST) Received: from p183 ([46.53.253.211]) by smtp.gmail.com with ESMTPSA id t184-20020a1c46c1000000b003b4a699ce8esm6333221wma.6.2022.12.22.08.42.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Dec 2022 08:42:54 -0800 (PST) Date: Thu, 22 Dec 2022 19:42:53 +0300 From: Alexey Dobriyan To: Alejandro Colomar , Michael Kerrisk Cc: linux-kernel@vger.kernel.org, linux-man@vger.kernel.org, oss-security@lists.openwall.com Subject: [patch] proc.5: tell how to parse /proc/*/stat correctly Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org /proc/*/stat can't be parsed with split() or split(" ") or split(' ') or sscanf("%d (%s) ...") or equivalents because "comm" can contain whitespace and parenthesis and is not escaped by the kernel. BTW escaping would not help with naive split() anyway. Mention strrchr(')') so people can at least stop adding new bugs. Signed-off-by: Alexey Dobriyan --- man5/proc.5 | 5 +++++ 1 file changed, 5 insertions(+) --- a/man5/proc.5 +++ b/man5/proc.5 @@ -2092,6 +2092,11 @@ Strings longer than .B TASK_COMM_LEN (16) characters (including the terminating null byte) are silently truncated. This is visible whether or not the executable is swapped out. + +Note that \fIcomm\fP can contain space and closing parenthesis characters. +Parsing /proc/${pid}/stat with split() or equivalent, or scanf(3) isn't +reliable. The correct way is to locate closing parenthesis with strrchr(')') +from the end of the buffer and parse integers from there. .TP (3) \fIstate\fP \ %c One of the following characters, indicating process state: