From patchwork Fri Mar 11 15:29:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Charan Teja Kalla X-Patchwork-Id: 12778231 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 B4524C433F5 for ; Fri, 11 Mar 2022 15:31:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 15EE58D0005; Fri, 11 Mar 2022 10:31:14 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 10E9F8D0001; Fri, 11 Mar 2022 10:31:14 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F18118D0005; Fri, 11 Mar 2022 10:31:13 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.28]) by kanga.kvack.org (Postfix) with ESMTP id E51E48D0001 for ; Fri, 11 Mar 2022 10:31:13 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay12.hostedemail.com (Postfix) with ESMTP id 9EFF3121165 for ; Fri, 11 Mar 2022 15:31:13 +0000 (UTC) X-FDA: 79232494026.01.B574039 Received: from alexa-out-sd-01.qualcomm.com (alexa-out-sd-01.qualcomm.com [199.106.114.38]) by imf21.hostedemail.com (Postfix) with ESMTP id A2E7A1C002B for ; Fri, 11 Mar 2022 15:31:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1647012672; x=1678548672; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version; bh=RMMRc4l/DMGvaxhGwtRQMf5EeR3IlqrnnLrpu8bbrak=; b=xJzA86hXJxMf1sz3FjhA7m6BGWNerfinMrcx1mxtk7JmCrSgyVybYtlZ d03//Y4RKzitl/XczH0FISwLjhv/NTXBm/befol8cFC0+Z9kUFxkAuVex OLriKAuQYMyEo4kCNMfma+b+7hSQtULxd6NXTb4jbFWq9S5jseyEK9msB Q=; Received: from unknown (HELO ironmsg01-sd.qualcomm.com) ([10.53.140.141]) by alexa-out-sd-01.qualcomm.com with ESMTP; 11 Mar 2022 07:31:11 -0800 X-QCInternal: smtphost Received: from nasanex01c.na.qualcomm.com ([10.47.97.222]) by ironmsg01-sd.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Mar 2022 07:31:10 -0800 Received: from nalasex01a.na.qualcomm.com (10.47.209.196) by nasanex01c.na.qualcomm.com (10.47.97.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.15; Fri, 11 Mar 2022 07:31:10 -0800 Received: from hu-charante-hyd.qualcomm.com (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.15; Fri, 11 Mar 2022 07:31:05 -0800 From: Charan Teja Kalla To: , , , , , , , , CC: , , Charan Teja Kalla , "# 5 . 10+" Subject: [PATCH V2,2/2] mm: madvise: skip unmapped vma holes passed to process_madvise Date: Fri, 11 Mar 2022 20:59:06 +0530 Message-ID: <4f091776142f2ebf7b94018146de72318474e686.1647008754.git.quic_charante@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-Rspam-User: X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: A2E7A1C002B X-Stat-Signature: phfu7ukmuhrurggto4wfer6zih39kmcr Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=quicinc.com header.s=qcdkim header.b=xJzA86hX; dmarc=pass (policy=none) header.from=quicinc.com; spf=pass (imf21.hostedemail.com: domain of quic_charante@quicinc.com designates 199.106.114.38 as permitted sender) smtp.mailfrom=quic_charante@quicinc.com X-HE-Tag: 1647012672-641153 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000009, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: The process_madvise() system call is expected to skip holes in vma passed through 'struct iovec' vector list. But do_madvise, which process_madvise() calls for each vma, returns ENOMEM in case of unmapped holes, despite the VMA is processed. Thus process_madvise() should treat ENOMEM as expected and consider the VMA passed to as processed and continue processing other vma's in the vector list. Returning -ENOMEM to user, despite the VMA is processed, will be unable to figure out where to start the next madvise. Fixes: ecb8ac8b1f14("mm/madvise: introduce process_madvise() syscall: an external memory hinting API") Cc: # 5.10+ Signed-off-by: Charan Teja Kalla --- Changes in V2: -- Fixed handling of ENOMEM by process_madvise(). -- Patch doesn't exist in V1. mm/madvise.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mm/madvise.c b/mm/madvise.c index e97e6a9..14fb76d 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1426,9 +1426,16 @@ SYSCALL_DEFINE5(process_madvise, int, pidfd, const struct iovec __user *, vec, while (iov_iter_count(&iter)) { iovec = iov_iter_iovec(&iter); + /* + * do_madvise returns ENOMEM if unmapped holes are present + * in the passed VMA. process_madvise() is expected to skip + * unmapped holes passed to it in the 'struct iovec' list + * and not fail because of them. Thus treat -ENOMEM return + * from do_madvise as valid and continue processing. + */ ret = do_madvise(mm, (unsigned long)iovec.iov_base, iovec.iov_len, behavior); - if (ret < 0) + if (ret < 0 && ret != -ENOMEM) break; iov_iter_advance(&iter, iovec.iov_len); }