Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp1031099pxb; Fri, 15 Apr 2022 18:58:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwhjUwKhdwfhKRfnMBvJK3prJvJZewKMUpyoyFQp6dkP9IrERWYMYyWJxoNemw3bGQ4cXdl X-Received: by 2002:a17:902:f211:b0:155:ceb9:3706 with SMTP id m17-20020a170902f21100b00155ceb93706mr1450418plc.35.1650074326888; Fri, 15 Apr 2022 18:58:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650074326; cv=none; d=google.com; s=arc-20160816; b=d1XsCSL8OZmr1dDh+MZSCPZHAIwInnv36ibVQMOzlTfbrZyd4GAqF0RBCI6jC9sxga Zllzb+UJGK+uvf3yoGknMRMEnQhOfp4gMqviBVPRsHGnwdCe2LLXMbZiQEDwor0OS1JD K3UqDeTzCCDZvFX/2NZMtv945YYhhv1QNI9l/IDJgRNqfKrhWS2JEGl9As/D54GdLDhV AfxHPmd7ywBb75mZrqAK4LX1YcqJQ3Edy6bqMmTu1wW6yXyjtxu4W2j9FuCDtEEueAGW Z5uAuVK7sfGT/NkFCOxOxoqvyppcJcSUuoGle48qQL9lsEZTGLBc15GzHjDVV+mPCciw uxjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature; bh=uODln0vhOum+2TmooGakPEQyd171bQ+mLLWEZrWqTtc=; b=QYFFDksJhvFnFZSJ7HbSXjQj2g7Z9Jj31Ce3kwdfsWY7f3nRPCK7QosCnM6wyXKwIr g+equH8yVzZe+fwx19K+oNUUADR7VHS8f9AfIbIQ69g0StYZPLbYyqiXMAnKjfMb2+Dd 9jUwpq+QHVriowrF62h4yBdZKYBRnTZJxkP8Kjagzkrr0GjK/fj0r+FxJYzLMDCD/J6O qSVMAMBsD/gnof23pQUHHAuCRNByKxEGOFQr52j9OGAGOroaEb02tQMjS10RdM9Aavlq 4zJrX8efIGWEX0OsnYvvrQ2kGoj2l3oXb1dXV8EDFEchH7f7y3I9t/OzC0Yej02m+VS+ juFw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=google header.b=EvbgG93t; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id t21-20020a63eb15000000b003821f536216si2866941pgh.578.2022.04.15.18.58.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Apr 2022 18:58:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=google header.b=EvbgG93t; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 2A9181B0878; Fri, 15 Apr 2022 18:19:27 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238322AbiDNVuQ (ORCPT + 99 others); Thu, 14 Apr 2022 17:50:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232439AbiDNVuO (ORCPT ); Thu, 14 Apr 2022 17:50:14 -0400 Received: from mail-il1-x12a.google.com (mail-il1-x12a.google.com [IPv6:2607:f8b0:4864:20::12a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18EC8939F2 for ; Thu, 14 Apr 2022 14:47:49 -0700 (PDT) Received: by mail-il1-x12a.google.com with SMTP id x9so3934223ilc.3 for ; Thu, 14 Apr 2022 14:47:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=google; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=uODln0vhOum+2TmooGakPEQyd171bQ+mLLWEZrWqTtc=; b=EvbgG93teZuoQFogrfgcb/t3dQ0nNizMxjjAe1NOWX+E1MXm+QCLg+Y96hefcOTRMa aLJjZIuP7eGzJR5Zfng32friME4aRgo68ROrj0xDMgz+M4FxZwW5lZDaSYRXCPEFfm37 NOquHBfk4dDuS3EGt45XVo6CWaNJW5kubJkhw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=uODln0vhOum+2TmooGakPEQyd171bQ+mLLWEZrWqTtc=; b=q0e5+2DlHLMNdYitBb1R/WiKienKq3lMZWIs1HRpa+lpCXLhkEfdrDpxdXKHRHlPv6 Qj4SRYFJOXbpYDe+5Wm+R85f7iJaG6xxirLytiIT4JGmRWiCO0QFd5HoKjx+Jd7lKShA H+WHJ/A/iKPZfnmfXwd7bwSxuseZSfVR55P8ob1EL3yvkRWjPUDR/4XKplH2BnuhhUWR BX4CzJ3x8u8UtFyHMfIL2FW0y/HatXsICcNDrAjR7C65qF+bdTsU2ViQsgrPunfqHmPw jWI3jE9+5vwdUE2kBcoARGp1DzkdMfWEnjNAe/JBfWdqvCi+h6u1nodvwiw4yD6x8+Bu Zd/w== X-Gm-Message-State: AOAM532XbSr71rENSX9NO1UDocdcDzHIJcj1mzneZIRql0FeR+J0Vyxp gz9xk+FmJCSBw6EdwO/UfhOCiVpCbZqc6A== X-Received: by 2002:a92:640d:0:b0:2ca:ad76:3e88 with SMTP id y13-20020a92640d000000b002caad763e88mr1746974ilb.84.1649972868142; Thu, 14 Apr 2022 14:47:48 -0700 (PDT) Received: from [192.168.1.128] ([71.205.29.0]) by smtp.gmail.com with ESMTPSA id d195-20020a6bb4cc000000b0064fceb8033dsm1318892iof.7.2022.04.14.14.47.47 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 14 Apr 2022 14:47:47 -0700 (PDT) Subject: Re: [PATCH 2/4] selftest/vm: verify remap destination address in mremap_test To: Sidhartha Kumar , shuah@kernel.org, akpm@linux-foundation.org Cc: linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Shuah Khan References: <20220414171529.62058-1-sidhartha.kumar@oracle.com> <20220414171529.62058-3-sidhartha.kumar@oracle.com> From: Shuah Khan Message-ID: Date: Thu, 14 Apr 2022 15:47:46 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: <20220414171529.62058-3-sidhartha.kumar@oracle.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-5.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,NICE_REPLY_A,RDNS_NONE,SPF_HELO_NONE, T_SCC_BODY_TEXT_LINE autolearn=unavailable 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 On 4/14/22 11:15 AM, Sidhartha Kumar wrote: > Because mremap does not have a NOREPLACE flag, > it can destroy existing mappings. This can > cause a segfault if regions such as text are > destroyed. Please explain the reason for segfault. Add a blank line here. Makes it easier to read. Verify the requested mremap destination > address does not overlap any existing mappings > by using mmap's FIXED_NOREPLACE flag and checking Spell this out fully - MAP_FIXED_NOREPLACE > for the EEXIST error code. Keep incrementing the > destination address until a valid mapping is found > or max address is reached. > Essentially mremap() doesn't check for overlaps and removes or overwrites existing mappings? The way you are fixing it is by verifying by calling mremap() with MAP_FIXED_NOREPLACE flag and check for EEXIST. What happens when max address is reached? Same comment on # of chars per line in commit log. Also > Signed-off-by: Sidhartha Kumar > --- > tools/testing/selftests/vm/mremap_test.c | 36 ++++++++++++++++++++++++ > 1 file changed, 36 insertions(+) > > diff --git a/tools/testing/selftests/vm/mremap_test.c b/tools/testing/selftests/vm/mremap_test.c > index 58600fee4b81..98e9cff34aa7 100644 > --- a/tools/testing/selftests/vm/mremap_test.c > +++ b/tools/testing/selftests/vm/mremap_test.c > @@ -10,6 +10,7 @@ > #include > #include > #include > +#include > > #include "../kselftest.h" > > @@ -65,6 +66,34 @@ enum { > .expect_failure = should_fail \ > } > > +/* > + * Returns 0 if the requested remap region overlaps with an > + * existing mapping (e.g text, stack) else returns 1. > + */ > +static int remap_region_valid(void *addr, unsigned long long size) This returns bool 0 (false) 1 (true) Please name the routine - is_remap_region_valid() and change it to return bool. > +{ > + void *remap_addr = NULL; > + int ret = 1; > + > + if ((unsigned long long) addr > ULLONG_MAX - size) { > + ksft_print_msg("Can't find a valid region to remap to\n"); Change it to "Couldn't" - also this message doesn't look right. We hav't looked for valid region yet and it just exceeds the limits? > + exit(KSFT_SKIP);> + } > + > + /* Use MAP_FIXED_NOREPLACE flag to ensure region is not mapped */ > + remap_addr = mmap(addr, size, PROT_READ | PROT_WRITE, > + MAP_FIXED_NOREPLACE | MAP_ANONYMOUS | MAP_SHARED, > + -1, 0); Alignment should match open parenthesis here and in other places. Makes it easier to read the code. > + if (remap_addr == MAP_FAILED) { > + if (errno == EEXIST) > + ret = 0; > + } else { > + munmap(remap_addr, size); > + } > + > + return ret; > +} > + > /* Returns mmap_min_addr sysctl */ > static unsigned long long get_mmap_min_addr(void) > { > @@ -180,6 +209,13 @@ static long long remap_region(struct config c, unsigned int threshold_mb, > if (!((unsigned long long) addr & c.dest_alignment)) > addr = (void *) ((unsigned long long) addr | c.dest_alignment); > > + /* Don't destroy existing mappings unless expected to overlap */ > + while (!remap_region_valid(addr, c.region_size)) { > + if (c.overlapping) > + break; > + addr += c.src_alignment; > + } > + > clock_gettime(CLOCK_MONOTONIC, &t_start); > dest_addr = mremap(src_addr, c.region_size, c.region_size, > MREMAP_MAYMOVE|MREMAP_FIXED, (char *) addr); > thanks, -- Shuah