Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp32480239rwd; Fri, 7 Jul 2023 14:58:06 -0700 (PDT) X-Google-Smtp-Source: APBJJlGFh19s3XWPV/xSZy3AyhFm+4cTi9RJpwK8KLhr/1Mma6qS/Ydfb6vrbM82zxpjC1YMXZxY X-Received: by 2002:a05:6512:12c7:b0:4fb:8bcd:acd4 with SMTP id p7-20020a05651212c700b004fb8bcdacd4mr5567139lfg.37.1688767086023; Fri, 07 Jul 2023 14:58:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688767085; cv=none; d=google.com; s=arc-20160816; b=TUwt1wrEnJ3WgV/iOW43Qp2by8lzb+2rVCArrO1g8JYWNI4QilVYqxt8uK+swsMw6u wcp0zydmtfhqV6bdx+1uR3TN7IDzsqvah+zQ3UH6GSyVmRlHKbTV4AFCY9W8OwV3IGT1 iZHvxNuIbpI1DYYM7CBD3kNhHQDQQOU7CcVh3WbEFo5XvM/w+D9vD1uQOe6JRAAp6fAd POMDBJbopHY90mfF1p0VBF/KKxzfBXwmx8Yg3x4/QUJyoE2MDqm9JMBCNJBbxlkdZCGB rVkg6Bzcim0W27lZmfLse5L/08Cu8QqOG/rYMzKqOOSXXfTZP6hGK0gloOHdPDdP60xz CqXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=NbMcVYI2pBRE777guUXN8FaAW75orbR1/eldPHt/4Qo=; fh=Opjbx899L+35XA6SNQJRoMm3wFpvelEj3IooMxkZLjI=; b=DgrVwG8yFyVYfTKCGOx3NN1eV+P588ujwJAMHp0G6qtZ72Gl3VQH0g7fx9OYmeW4LB HtsUTej/hdJhxUNzKjzYC0J2mg04GPhxvJ/itSdEFDWMzFJoh0BaKMz7zBYXfmP91tdi eoumozyackX2BZKE8cUwX9OAUG6erBu2Nj68z9zZ+khvISZ8WprskyqXdLnotoA4puL6 VgA4kdunmtVtwN1lu69U+vU+HZuE7i1OpKQRmE4UsfWZ2bbuXpo+4+qV5iBYJKDg5vZ7 PBPi/2BH8lO1tbei0aTmHkVxNOF2gPWORMMlOmIqvjUQE8IIQzLZucduFwVBuRYEJlyI ffzg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=NOEsj6Ql; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w9-20020aa7dcc9000000b0051da8fd756dsi2786846edu.165.2023.07.07.14.57.42; Fri, 07 Jul 2023 14:58:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=NOEsj6Ql; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232832AbjGGV4D (ORCPT + 99 others); Fri, 7 Jul 2023 17:56:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44062 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232561AbjGGVzt (ORCPT ); Fri, 7 Jul 2023 17:55:49 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0C5F31FF6 for ; Fri, 7 Jul 2023 14:55:48 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 3f1490d57ef6-c6cc0dd02c3so1420008276.3 for ; Fri, 07 Jul 2023 14:55:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1688766947; x=1691358947; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=NbMcVYI2pBRE777guUXN8FaAW75orbR1/eldPHt/4Qo=; b=NOEsj6QlU33fkoMHjc+WtoODa05QBYjoZyIbXV7SYMyRK4hq0SF4tb/6rEhclUqRYC mOAiI18o28n3yIQcsYTOwNtyQs9I4Y75+l2ujaQgav71uvbNCaDX8ZAB71qsYgJ7+xTa uxTM2xxcQMPCK82+u5G0FIcYmJndcJvSC2j4rI/o0BwYIadvkUVSbCsJTgLi+uxz3KVd Q99KgDvVH0Fhf1f3UtgXY26LR8Gv38XOQazfPV3NexlCyCTv+Yqi8QmGof9JmvYLxs5o 0PxXYucNeE0EtG/ra5xrr2THGEnwJn3zj/1ct12e0dwMeVPDE0288jdN/lwXa8MEHOhK 4RFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688766947; x=1691358947; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=NbMcVYI2pBRE777guUXN8FaAW75orbR1/eldPHt/4Qo=; b=frnooSUzFlT2Dh3U677yMaZcl794DwwvELZ9ozzPnrodEGP+OUsvx8djzV4lXHZ+Po BSAHdnSDAmmhCI9Wg0u6965NwnV8T4khFOQ1eNRc4HA651Eol3kfj5ie42nLUE16ioe+ apV1hQtohWxKV+W10+EM6/oCs0nbQugt02kEH9rHRSgmXoKiALN33R+0waes7KQk23Pq fxnUvrXEdu2v5pJIulHh88bPqkwlgZETquE0JeyoQKnf4qmzQiX6pfno/qfZ/fFzP/C9 EcLX9k+a8zUzs68eJxrpczwsY9iESOHMqhy9IUCjegJcrjS7/9Ikp/soNP/NeIGb5UaO 8VrA== X-Gm-Message-State: ABy/qLZbPkpnO4vJILH5rZ9tocZYyvFaQl7DMUtioz9zoYtPtJN4Xyur fEtzp+GKZvXn45O3qxlNra4NyQ7GkZBWWIr1ea5B X-Received: from axel.svl.corp.google.com ([2620:15c:2a3:200:c201:5125:39d1:ef3f]) (user=axelrasmussen job=sendgmr) by 2002:a25:ac9e:0:b0:c5b:c4:1789 with SMTP id x30-20020a25ac9e000000b00c5b00c41789mr33953ybi.1.1688766947243; Fri, 07 Jul 2023 14:55:47 -0700 (PDT) Date: Fri, 7 Jul 2023 14:55:34 -0700 In-Reply-To: <20230707215540.2324998-1-axelrasmussen@google.com> Mime-Version: 1.0 References: <20230707215540.2324998-1-axelrasmussen@google.com> X-Mailer: git-send-email 2.41.0.255.g8b1d071c50-goog Message-ID: <20230707215540.2324998-3-axelrasmussen@google.com> Subject: [PATCH v4 2/8] mm: userfaultfd: check for start + len overflow in validate_range From: Axel Rasmussen To: Alexander Viro , Andrew Morton , Brian Geffon , Christian Brauner , David Hildenbrand , Gaosheng Cui , Huang Ying , Hugh Dickins , James Houghton , "Jan Alexander Steffens (heftig)" , Jiaqi Yan , Jonathan Corbet , Kefeng Wang , "Liam R. Howlett" , Miaohe Lin , Mike Kravetz , "Mike Rapoport (IBM)" , Muchun Song , Nadav Amit , Naoya Horiguchi , Peter Xu , Ryan Roberts , Shuah Khan , Suleiman Souhlal , Suren Baghdasaryan , "T.J. Alumbaugh" , Yu Zhao , ZhangPeng Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Axel Rasmussen Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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 Most userfaultfd ioctls take a `start + len` range as an argument. We have the validate_range helper to check that such ranges are valid. However, some (but not all!) ioctls *also* check that `start + len` doesn't wrap around (overflow). Just check for this in validate_range. This saves some repetitive code, and adds the check to some ioctls which weren't bothering to check for it before. Reviewed-by: Peter Xu Signed-off-by: Axel Rasmussen --- fs/userfaultfd.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index 7cecd49e078b..2e84684c46f0 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -1306,6 +1306,8 @@ static __always_inline int validate_range(struct mm_struct *mm, return -EINVAL; if (len > task_size - start) return -EINVAL; + if (start + len <= start) + return -EINVAL; return 0; } @@ -1760,14 +1762,8 @@ static int userfaultfd_copy(struct userfaultfd_ctx *ctx, ret = validate_range(ctx->mm, uffdio_copy.dst, uffdio_copy.len); if (ret) goto out; - /* - * double check for wraparound just in case. copy_from_user() - * will later check uffdio_copy.src + uffdio_copy.len to fit - * in the userland range. - */ + ret = -EINVAL; - if (uffdio_copy.src + uffdio_copy.len <= uffdio_copy.src) - goto out; if (uffdio_copy.mode & ~(UFFDIO_COPY_MODE_DONTWAKE|UFFDIO_COPY_MODE_WP)) goto out; if (uffdio_copy.mode & UFFDIO_COPY_MODE_WP) @@ -1927,11 +1923,6 @@ static int userfaultfd_continue(struct userfaultfd_ctx *ctx, unsigned long arg) goto out; ret = -EINVAL; - /* double check for wraparound just in case. */ - if (uffdio_continue.range.start + uffdio_continue.range.len <= - uffdio_continue.range.start) { - goto out; - } if (uffdio_continue.mode & ~(UFFDIO_CONTINUE_MODE_DONTWAKE | UFFDIO_CONTINUE_MODE_WP)) goto out; -- 2.41.0.255.g8b1d071c50-goog