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 E2D58C7619A for ; Wed, 22 Mar 2023 07:13:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C0AA76B007D; Wed, 22 Mar 2023 03:13:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BBC6F6B007E; Wed, 22 Mar 2023 03:13:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 922B8900002; Wed, 22 Mar 2023 03:13:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 7C4686B007D for ; Wed, 22 Mar 2023 03:13:16 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 395A81A02E6 for ; Wed, 22 Mar 2023 07:13:16 +0000 (UTC) X-FDA: 80595667992.12.0B24912 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) by imf05.hostedemail.com (Postfix) with ESMTP id 59136100004 for ; Wed, 22 Mar 2023 07:13:14 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=eYs5xqSP; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf05.hostedemail.com: domain of lstoakes@gmail.com designates 209.85.221.45 as permitted sender) smtp.mailfrom=lstoakes@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679469194; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6V65cLUX2xeh+2N2Uvy0EZnP8d1je6ufa1jMbqVjM6A=; b=FKxWBAAMJebAPEHpu0pd1KmgVxo+i0QUH9r2+OSypW8d3YdiUjONu2/42F7JVZ+ZYGPhqm +drQuvMhtO7BHf8ITXhzz4kFO6D1mWMm/JqFTP0oDymVL8Qz7Igd29GQq3IFvrmiSbkUUE WubZU/M5WV8aGgPy5XMEUBKCIkb/yRk= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=eYs5xqSP; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf05.hostedemail.com: domain of lstoakes@gmail.com designates 209.85.221.45 as permitted sender) smtp.mailfrom=lstoakes@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679469194; a=rsa-sha256; cv=none; b=gbJDAyzTgA/f8KjEWSpMQd0pJ3u6piw0gGzzeE+JOftoH072aOTfFRJVmllxhdBZUlvZaC tTTqS1xWiFTfBAY09eZ1vBNA9EeWcLkb+TYgnr/BHbDnSxvawWnSeMTTaPCieEY9lq73nh P9rzIAoXiGAomrg30ARbBJtm7aD7ocU= Received: by mail-wr1-f45.google.com with SMTP id i9so15940025wrp.3 for ; Wed, 22 Mar 2023 00:13:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679469192; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6V65cLUX2xeh+2N2Uvy0EZnP8d1je6ufa1jMbqVjM6A=; b=eYs5xqSPmMEgQfGjpDiC1O/TEI4F34/TS+CptIoVWwDLTmFaX5Gi6zYIBTkFYVfEs7 jnUiYNwbuhtlc3ihu+38eZchK6OG0cemBxMeBLRyanu92lnJCAQz8B4jQYmxzUyZK9Bd FFAFR6inDRSQJTpm+swOqW8zwKIX+ADzuMFM5z1y/QY01xETXhhx1mnV5cuG0X/0txzZ E0MHtIyQ7HYYHLosQ5EdXJiufL2l1Bsj8jRyi3p51RHqLbx2HGZHpplcCkf7GDAyiY+b n0QM3WehGKxUcxJ0FW24k6a55Ubg9UcQVWtmO8/TBTBacp+ynOkr9/rBPbmP/6jswVfb 7JPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679469192; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6V65cLUX2xeh+2N2Uvy0EZnP8d1je6ufa1jMbqVjM6A=; b=OVunh5ts6uEZ3rhwjqS9JjaUQCDocX4oborN11CtIow02ed3j/wUyC7dg94Y5Q0V/l P1hkFstE0TfCXf5jiYSN0HjsykxscZ2D+W/mwTrjtstEwwJzdT5oe7ESnbDGV7yeMrOT 6m71l3XYIeeEnrE8X7A2IrFDPblbHFLA+uxjLHFq4TOV1voK23Odv0InODjyAtsMjkgb mGkQgj6MKyZK/Hl61NxIyZCJBFg07HCx88tuz9hCt770309SB5pewa+vBZn55vr7vwHf z4QGZ7vJV6RP8rxrFKfO1zrzGziGeBDherzzGOy1lExCxORN2rnC69xvOHNOhTMkX3W4 qSpQ== X-Gm-Message-State: AO0yUKVVK8n/+iNrJWw5URGurAA+2Yaywri3U9KNXjZJYyk+yuijdbbw 5u0kjivIGhAa/PLZCefsvlOkNLWGVWU= X-Google-Smtp-Source: AK7set+SUkTDrSR7EEwrLnc4ekdxQxI6HDvm9VBHUhBXpanAcTysAjoFazHussT1sGpTaf1Hni0UbA== X-Received: by 2002:a5d:61ce:0:b0:2cf:3a99:9c1e with SMTP id q14-20020a5d61ce000000b002cf3a999c1emr4275633wrv.49.1679469192544; Wed, 22 Mar 2023 00:13:12 -0700 (PDT) Received: from lucifer.home (host86-146-209-214.range86-146.btcentralplus.com. [86.146.209.214]) by smtp.googlemail.com with ESMTPSA id u4-20020a5d4344000000b002c5526234d2sm13290279wrr.8.2023.03.22.00.13.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Mar 2023 00:13:11 -0700 (PDT) From: Lorenzo Stoakes To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrew Morton Cc: David Hildenbrand , Matthew Wilcox , Vlastimil Babka , "Liam R . Howlett" , maple-tree@lists.infradead.org, Vernon Yang , Lorenzo Stoakes Subject: [PATCH v3 3/4] mm/mmap/vma_merge: explicitly assign res, vma, extend invariants Date: Wed, 22 Mar 2023 07:13:03 +0000 Message-Id: X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 59136100004 X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: qh7n7mr7bzkm8f8hexusas6jsup9p48k X-HE-Tag: 1679469194-171825 X-HE-Meta: U2FsdGVkX18V9bm4uhLfBQLyy7T+tA/SvX36eXj8plraZ+7lK4rW+OYU8lB9Cuz+vRZ8GrMEVqE6dRfLBezVGfzX0dnLCA8Q8q4C1CbMJ+lvcVwN+0NJs0C1nouECqYnAjm2c9qDMHWCQib3aRd5URWuMG7fwQ4zyW8kqwcCtRtVBR5HYbmgBbn7JZ/RvDdsdwSdUXLIONC7NhTTkqFgXAgHabDO0KhmH+5asHHJrITaIoa3FeBj1g4kZyazqHWpJqhFyQf2oAFEgGKqfkCpWZE0s60qgvU/KIoq+yeEBUdkO4Lv6C5EkG8Nk3STA7g5xxLMCKGpIUsayBTtxEvtH2yYX2Jx8miGnbzd0xl1WR5Pq6Vfv65zsyx3DpbhQRX3+gaAmTGAsRkhRi/+7CEfnOmSKPX49AWJamNy/b3ccsyMYMOCMITaZJgXyBl+dyOHBUckQGtNd7ZFqNwD3orfJFctN3n8dEFGs62wCkcLVZ/nSI13kZBZdpRAqjV2GC9xRXgeVaLTbaVa2TKUICv3XJXHBqpqd/swmetAgM/HGUN5WJpef5D3rz4o/T7wtaXQkOoZMuZeqQjEHFnEyjIRF2Dfc2qXjICcKrZcWt7VoY8GSXykTnizEi6jZWnhbAKsOSzQkVcF4rN3bPgS0NmaOgu/KoO156rEiNsAAY7QrXvLUcHtstKvEMzcIqgbMMnKQ7TE6N47OxM6LAYD/xiXX3bl4oeX1D1jeJKnrHvXMb/URNSZXXLcdlA7NTjXRD61RBNz38K9+qP08hCSMmQ3nwjhiQYZVvOcMEAiRfie1CYM59lX+dIsW1VwT310qgIRRvXUYRexG9LjtO3ddX59UgwojCzor3H7UrahNAgKxN25ksbuwjLjB6GqyZaJNHj34UV0EImR3PPfrsLz312Z8teOkxxdTjBr+QVTdaTItTqOT0rfc1A4fmWofv4ljDbUCm+CUQHATVmTx8zSVQZ r5jEDrhb J8wzsz3HtRlgwtnXjWrhT+H4vaV4B696FwADyB/Tb0Kmip9sHTXkdYiabYiKJ6fSEeqBAyMNhj69LZQmMNuV5V8h/672vLi2NQqSmnkeObDkwLYJ6jHHnCKu1QFd3FDCroq1FYHY706yfha63aMXoLq7LrPvJCLaBe3jyf6uturE2cwIZJwVWv48xnauGE2AGt97WgYxKJ1dUetiP2DOBgSo2fAL826xH9DIFayq0l9Zcpk6ATkLpdj229I+m5/sHbC+gNQhKUPiK1ObU17PEuvmb/p8rhFUTmdFhhATSD+652zu+x7ZiQRxKMfjxjxyM0orlNC+J4c91wrJ0POtxew060pq8qTb3yl0jqpNaaiTQ2XNqO+QX1TCQaZJ3PjAjsYeF1sUGm3r0nywXEpoAomO0eB878T5keT2QF2MBr8rVcmeJsimoTEpNlUKK0UpQYV4Nzg79p37Jo5YLnnM8h4qU+838UuQ8O4909D0cTd+Xwbv1lw9iEwrXSbuiakqRkjh6 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: Previously, vma was an uninitialised variable which was only definitely assigned as a result of the logic covering all possible input cases - for it to have remained uninitialised, prev would have to be NULL, and next would _have_ to be mergeable. The value of res defaults to NULL, so we can neatly eliminate the assignment to res and vma in the if (prev) block and ensure that both res and vma are both explicitly assigned, by just setting both to prev. In addition we add an explanation as to under what circumstances both might change, and since we absolutely do rely on addr == curr->vm_start should curr exist, assert that this is the case. Signed-off-by: Lorenzo Stoakes --- mm/mmap.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index dbdbb92493b2..2a4f63716231 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -911,7 +911,7 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, { pgoff_t pglen = (end - addr) >> PAGE_SHIFT; pgoff_t vma_pgoff; - struct vm_area_struct *curr, *next, *res = NULL; + struct vm_area_struct *curr, *next, *res; struct vm_area_struct *vma, *adjust, *remove, *remove2; int err = -1; bool merge_prev = false; @@ -939,14 +939,18 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, else next = NULL; /* case 5 */ - /* verify some invariant that must be enforced by the caller */ + /* + * By default, we return prev. Cases 3, 4, 8 will instead return next + * and cases 3, 8 will also update vma to point at next. + */ + res = vma = prev; + + /* Verify some invariant that must be enforced by the caller. */ VM_WARN_ON(prev && addr <= prev->vm_start); - VM_WARN_ON(curr && end > curr->vm_end); + VM_WARN_ON(curr && (addr != curr->vm_start || end > curr->vm_end)); VM_WARN_ON(addr >= end); if (prev) { - res = prev; - vma = prev; vma_start = prev->vm_start; vma_pgoff = prev->vm_pgoff; /* Can we merge the predecessor? */ @@ -957,6 +961,7 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, vma_prev(vmi); } } + /* Can we merge the successor? */ if (next && mpol_equal(policy, vma_policy(next)) && can_vma_merge_before(next, vm_flags, @@ -997,6 +1002,10 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, adj_start = -(prev->vm_end - addr); err = dup_anon_vma(next, prev); } else { + /* + * Note that cases 3 and 8 are the ONLY ones where prev + * is permitted to be (but is not necessarily) NULL. + */ vma = next; /* case 3 */ vma_start = addr; vma_end = next->vm_end; -- 2.39.2