From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C84AC433EF for ; Wed, 13 Apr 2022 23:06:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D55E66B0071; Wed, 13 Apr 2022 19:06:18 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CDC726B0073; Wed, 13 Apr 2022 19:06:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B7D4E6B0074; Wed, 13 Apr 2022 19:06:18 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.a.hostedemail.com [64.99.140.24]) by kanga.kvack.org (Postfix) with ESMTP id A2C546B0071 for ; Wed, 13 Apr 2022 19:06:18 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 6E70D60528 for ; Wed, 13 Apr 2022 23:06:18 +0000 (UTC) X-FDA: 79353391236.16.B633A8A Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by imf14.hostedemail.com (Postfix) with ESMTP id BFB70100003 for ; Wed, 13 Apr 2022 23:06:17 +0000 (UTC) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id B0576B82728; Wed, 13 Apr 2022 23:06:15 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C680C385A6; Wed, 13 Apr 2022 23:06:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1649891174; bh=eWoWonxCoNljYRVKhnJBW3w5BMc5SBWugMCEjTpDLok=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=uautVyWW7P+lnFbIYbKqQvYsgSb1d1GQNLDfUD7PP4uDY3dCRtkoxX6WprnGiGjDX muWyGww4K9gep2e/lBXV5QH7pCc6JtvesX0EBVAEiTZCD9aSH7nIUElYh5TxwoME8p 4zN8t8UJIoW3og8ciJqnby5CyJtwW4azwqjMcf2s= Date: Wed, 13 Apr 2022 16:06:13 -0700 From: Andrew Morton To: "Alex Xu (Hello71)" Cc: Alexey Dobriyan , Daniel Colascione , linux-api@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Vlastimil Babka Subject: Re: [PATCH] mm/smaps_rollup: return empty file for kthreads instead of ESRCH Message-Id: <20220413160613.385269bf45a9ebb2f7223ca8@linux-foundation.org> In-Reply-To: <1649886492.rqei1nn3vm.none@localhost> References: <20220413211357.26938-1-alex_y_xu.ref@yahoo.ca> <20220413211357.26938-1-alex_y_xu@yahoo.ca> <20220413142748.a5796e31e567a6205c850ae7@linux-foundation.org> <1649886492.rqei1nn3vm.none@localhost> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspam-User: X-Stat-Signature: bti194jzf5te1nfjh3xaxc4fau8ysrcn Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=uautVyWW; spf=pass (imf14.hostedemail.com: domain of akpm@linux-foundation.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org; dmarc=none X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: BFB70100003 X-HE-Tag: 1649891177-478608 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, 13 Apr 2022 18:25:53 -0400 "Alex Xu (Hello71)" wrote: > Excerpts from Andrew Morton's message of April 13, 2022 5:27 pm: > > On Wed, 13 Apr 2022 17:13:57 -0400 "Alex Xu (Hello71)" wrote: > > > >> This restores the behavior prior to 258f669e7e88 ("mm: > >> /proc/pid/smaps_rollup: convert to single value seq_file"), making it > >> once again consistent with maps and smaps, and allowing patterns like > >> awk '$1=="Anonymous:"{x+=$2}END{print x}' /proc/*/smaps_rollup to work. > >> Searching all Debian packages for "smaps_rollup" did not find any > >> programs which would be affected by this change. > > > > Thanks. > > > > 258f669e7e88 was 4 years ago, so I guess a -stable backport isn't > > really needed. > > > > However, we need to be concerned about causing new regressions, and I > > don't think you've presented enough information for this to be determined. > > > > So please provide us with a full description of how the smaps_rollup > > output will be altered by this patch. Quoting example output would be > > helpful. > > > > > > Current behavior (4.19+): > > $ cat /proc/2/smaps; echo $? > 0 > $ cat /proc/2/smaps_rollup; echo $? > cat: /proc/2/smaps_rollup: No such process > 1 > $ strace -yP /proc/2/smaps_rollup cat /proc/2/smaps_rollup > openat(AT_FDCWD, "/proc/2/smaps_rollup", O_RDONLY) = 3 > newfstatat(3, "", {st_mode=S_IFREG|0444, st_size=0, ...}, AT_EMPTY_PATH) = 0 > fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0 > read(3, 0x7fa475f5d000, 131072) = -1 ESRCH (No such process) > cat: /proc/2/smaps_rollup: No such process > close(3) = 0 > +++ exited with 1 +++ > > Pre-4.19 and post-patch behavior: > > $ cat /proc/2/smaps; echo $? > 0 > $ cat /proc/2/smaps_rollup; echo $? > 0 > $ strace -yP /proc/2/smaps_rollup cat /proc/2/smaps_rollup > openat(AT_FDCWD, "/proc/2/smaps_rollup", O_RDONLY) = 3 > newfstatat(3, "", {st_mode=S_IFREG|0444, st_size=0, ...}, AT_EMPTY_PATH) = 0 > fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0 > read(3, "", 131072) = 0 > close(3) = 0 > +++ exited with 0 +++ OK, thanks. But the current behaviour is appropriate, isn't it? An attempt to read the maps of a process which has no maps returns -ESRCH. Seems sensible enough. On the other hand, returning a zero-length read() is also appropriate. > I agree that this type of change must be done carefully to avoid > introducing inadvertent regressions. However, I think this particular > change is highly unlikely to introduce regressions for the following > reasons: > > 1. I cannot think of a plausible case which would be affected. The only > case I can possibly imagine is a program checking whether a process > is a kernel thread, but this seems like a particularly silly method. > Moreover, the method is already broken on kernels before 4.14 > (because smaps_rollup does not exist) and before 4.19 (because > smaps_rollup worked like smaps). A plausible method would be opening > /proc/x/(s)maps and checking that it is empty, which some programs > actually do. Well, I suppose a poorly coded application could do something like if (read(fd, buf, 1000) >= 0) assume_buf_now_contains_data() > 2. Research on Debian Code Search did not find any apparent cases. I also > searched GitHub Code Search but found too many irrelevant results with > no useful way to filter them out. I don't think this will work very well. smaps_rollup is the sort of system tuning thing for which organizations will develop in-house tooling which never get relesaed externally. > 3. As mentioned previously, this was already the behavior between 4.14 > and 4.18 (inclusive). > Yup. Hm, tricky. I'd prefer to leave it alone if possible. How serious a problem is this, really?