Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp1251470pxy; Thu, 29 Apr 2021 03:06:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxfpQ88Souz0E9Z7KD6iK0CzArjiBhSCceBs1vNuPnxLml4sG0+nmN/gbnxM1xIbTNocSr8 X-Received: by 2002:a17:90a:4dc7:: with SMTP id r7mr19542074pjl.174.1619690782960; Thu, 29 Apr 2021 03:06:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619690782; cv=none; d=google.com; s=arc-20160816; b=AfCzvudyeVJRKIE0xAndfu+b92FBAX29exay40uXz7UCaRiy7eS5+pQGIPs2tnFgux 9YRFeiKgkXrxipuF3SWvKTA02QEXJ4fWERAcbjvPEWr/xZzt2nsv1cKjeM91kcdl+mYv RGU9y3zRYjABBvdamCDjfSniPbH4riKCnG2+UL86WTFfd/gLcKL8myuc0E1h8IRiLV92 HUKD9XklE3ODozLd5KONxW46vsUlbN0voCLX5xyGFuuNTWGWew03/wovz0CjMoLS2q8p gqgFQFMwyqoS7lS065eQeLlXDajz0lICibu0Qft1BfOlrpjC/tIT3KcBhoOguE4p5GFs MQjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ygjEkLzoy67+HxQNC9nOx8jeF7wnqzCRlbT0WkJJcS0=; b=bGmduCrqJUDaVHcXx8wZRhe7uQlatZgG7y4r5NmKAOx3uaEZdNtwks+3hPbTDQCiMb NoEJEtjHFd/FGqFeLnf/5HNQdEr+jKgZtPJaPAT8WuizPE8zOr/NcnMWgyNb0yQUpMQf MDIW7HsbCHiPjreTTrFqVbwyONjoFQnlS3umvYMffTllvAa+Wva2QWieDTmJ1wLL3tIu YF+Q7fDx4c4rLejvWhmsEBVm/rsWfGRiCKDQwwx5ir3rfbfTnQOm9JWCk/GueS7Tc1Z6 pxl2FLiP40bolZ3pubaJdJQ3Tr82eDf6QjCSHqG9xN9qovPzqkXRBSOq5No+hbvI+ZEe Asrg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@o2.pl header.s=1024a header.b=LwnqmiX7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=o2.pl Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b11si3047086plk.261.2021.04.29.03.05.58; Thu, 29 Apr 2021 03:06:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@o2.pl header.s=1024a header.b=LwnqmiX7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=o2.pl Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240260AbhD2KEr (ORCPT + 99 others); Thu, 29 Apr 2021 06:04:47 -0400 Received: from mx-out.tlen.pl ([193.222.135.142]:31033 "EHLO mx-out.tlen.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237512AbhD2KEq (ORCPT ); Thu, 29 Apr 2021 06:04:46 -0400 Received: (wp-smtpd smtp.tlen.pl 2600 invoked from network); 29 Apr 2021 12:03:57 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=o2.pl; s=1024a; t=1619690637; bh=ygjEkLzoy67+HxQNC9nOx8jeF7wnqzCRlbT0WkJJcS0=; h=From:To:Cc:Subject; b=LwnqmiX7PrqVlTiTLaln3sNLKzPHxAoBMfDfjpqcaAMxJ5ohyrsw3DnoM1wLq+eY5 aQOYMDULeavXLpYMW4gUdOgWNyRT5PawV/Vew4vEXM34ldBjZRCsad5zcJiuiSmiGm 7HADcyoA+REJDht35wiOTPeMFkXQqa5x1iTCqhS8= Received: from 89-64-46-199.dynamic.chello.pl (HELO localhost.localdomain) (arek_koz@o2.pl@[89.64.46.199]) (envelope-sender ) by smtp.tlen.pl (WP-SMTPD) with ECDHE-RSA-AES256-GCM-SHA384 encrypted SMTP for ; 29 Apr 2021 12:03:57 +0200 From: "Arkadiusz Kozdra (Arusekk)" To: Linus Torvalds Cc: Christoph Hellwig , Linux Kernel Mailing List , linux-fsdevel@vger.kernel.org, "Arkadiusz Kozdra (Arusekk)" , Alexey Dobriyan , Al Viro , Greg Kroah-Hartman Subject: [PATCH v2] proc: Use seq_read_iter for /proc/*/maps Date: Thu, 29 Apr 2021 12:05:08 +0200 Message-Id: <20210429100508.18502-1-arek_koz@o2.pl> X-Mailer: git-send-email 2.31.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-WP-MailID: d2a92516f227032653df43168bef5a51 X-WP-AV: skaner antywirusowy Poczty o2 X-WP-SPAM: NO 0000000 [AcNU] Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since seq_read_iter looks mature enough to be used for /proc//maps, re-allow applications to perform zero-copy data forwarding from it. Some executable-inspecting tools rely on patching entry point instructions with minimal machine code that uses sendfile to read /proc/self/maps to stdout. The sendfile call allows them to do it faster and without excessive allocations. This is inspired by the series by Cristoph Hellwig (linked). Changes since v1: only change proc_pid_maps_operations Link: https://lore.kernel.org/lkml/20201104082738.1054792-1-hch@lst.de/ Fixes: 36e2c7421f02 ("fs: don't allow splice read/write without explicit ops") Cc: Alexey Dobriyan Cc: Al Viro Cc: Greg Kroah-Hartman Cc: Christoph Hellwig Signed-off-by: Arkadiusz Kozdra (Arusekk) --- fs/proc/task_mmu.c | 3 ++- fs/proc/task_nommu.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index e862cab69583..06282294ddb8 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -351,7 +351,8 @@ static int pid_maps_open(struct inode *inode, struct file *file) const struct file_operations proc_pid_maps_operations = { .open = pid_maps_open, - .read = seq_read, + .read_iter = seq_read_iter, + .splice_read = generic_file_splice_read, .llseek = seq_lseek, .release = proc_map_release, }; diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c index a6d21fc0033c..e55e79fd0175 100644 --- a/fs/proc/task_nommu.c +++ b/fs/proc/task_nommu.c @@ -295,7 +295,8 @@ static int pid_maps_open(struct inode *inode, struct file *file) const struct file_operations proc_pid_maps_operations = { .open = pid_maps_open, - .read = seq_read, + .read_iter = seq_read_iter, + .splice_read = generic_file_splice_read, .llseek = seq_lseek, .release = map_release, }; -- 2.31.1