Received: by 2002:a05:6358:111d:b0:dc:6189:e246 with SMTP id f29csp806204rwi; Mon, 31 Oct 2022 07:47:43 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7ZH3mKoFrQukUfF0VbLxid0LiDdaYj7AjCbpe63yld8VlCMFrIM8a3iaFnPAUgKNlpRWRU X-Received: by 2002:aa7:c302:0:b0:461:85d7:b82 with SMTP id l2-20020aa7c302000000b0046185d70b82mr14065370edq.354.1667227662956; Mon, 31 Oct 2022 07:47:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667227662; cv=none; d=google.com; s=arc-20160816; b=ER2rAzfjOh8ZW0bEEfMaOQcOVoTJ2ruwV17kbSc2ec6bi9vRC47hIlsGxnHotvzV9l k04kPKPoJWVU3RnoE0Rhncc7MhY8qYTv/evvH1qSg+zVVANI8T7uambhBl3QDkQXe0ts fklCUL2WmimSuP1IRA6AVg8AZsT+P3tFFrrVXj0JYZcUXGo1jBkxAqhyXBcs2A1vCmKy OY3TSzdTbeBIouWgwthaoNVwP/sKzq0nv/Q9E7pqqMbBUMGd9LJbrQLx2tpPr0mScZmG bSwSu1LXaUivj1Oc3VXzGtS0MlHSRcBaKgQe9SLz76CTRHN1YIxi/vm7sdQyp/OBHqbm mrLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:mime-version :dkim-signature; bh=Lhc4EkblHbbPD+96+0PH89wXhgm+3piSxAQSO0JjnxM=; b=qSK5GrVDx1yUukKVwAL/i1j5EzuG1cFLEnrpVJUcmUcAfazRN2DbuZgXBe5cJYH4kA I7G/cSCshWPWGmqwlm7Z7s5cxMIBEP54zz7VeZGzLo08bqjBVBw4yHVLtOq1u/4eHuKO og0A83OQuymddhFmh1imkY25LgVQXSa9ewgiGFnsiE5sWSKy1fAJJPPZthcIHQBX9W87 bWJ2rS6Hg9XrLvABvsWfF3HNFMheC37nVciGUqJyQFqaOr/ubWz10vbP+HcKWgnpow1g CAf+6Nv+UlOWjt2yVKaoM0wKlhOBi3AmDDhsHxAKS3OMf1w0nZeNBYrevDQzzXL6nCLX bxCg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=tjGLldjI; 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 a14-20020a50c30e000000b00461d60a86casi7072046edb.135.2022.10.31.07.47.18; Mon, 31 Oct 2022 07:47:42 -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=20210112 header.b=tjGLldjI; 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 S231523AbiJaOVh (ORCPT + 98 others); Mon, 31 Oct 2022 10:21:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42544 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230492AbiJaOVd (ORCPT ); Mon, 31 Oct 2022 10:21:33 -0400 Received: from mail-il1-x133.google.com (mail-il1-x133.google.com [IPv6:2607:f8b0:4864:20::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EA682DFD5 for ; Mon, 31 Oct 2022 07:21:32 -0700 (PDT) Received: by mail-il1-x133.google.com with SMTP id x16so6262964ilm.5 for ; Mon, 31 Oct 2022 07:21:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Lhc4EkblHbbPD+96+0PH89wXhgm+3piSxAQSO0JjnxM=; b=tjGLldjIWv4CZmbKOjBjCVL2P6AtW9jdRflT4ONyaR2BLdWwfrOP8rW+Y42DhyBOu+ NdSErUwhGEUrHYcP/1B0UKOFpMpVV6M8vH4j8U5WvONlQFetEG8KZ61AawGLHyOl98h+ 4Mf9MRc+CjFaJNoebRZhOuFAxdEK7uTaO8XiSmNiTYkLLVq2OvpuesUogdvUVtA5dsqN DNISFnyaBth3hyNkWjBfWYdYrAlS6EsRRi5hAJATU05UJxw4nhKytKESe+E3FSiQYy3r 8Yh0Bvpj3FS0+F2xZAXe2Xqiwbkcb0QM+7d2hPKZCecFy/xlHdGga24Q2bsYO02XtMya HBkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Lhc4EkblHbbPD+96+0PH89wXhgm+3piSxAQSO0JjnxM=; b=ayWA3UGTy80CD5as8SSVnrWsiTjlkGCBdQiujuKr5ArzjD4BtGBNzkdCJ9nKxr/71F axIK3GIh31YmvX9Fsihz+fKJmm8MUmMfg40A1ibVgYfVtVnlqbDvXROCpqHPaxiDCG6B lx3Ad0F44lXsuFsQRyzZ/BNeJMBDU6ownPoQ61a7YTEGF4dNyaC+JFdy4287A4nrSTsd +H28kgC0BZCbk33WAscApM0Jeq3/NNLS3Yq+xkqGpGXwOYDdXG893FpVcSvMyN+FZWA/ /BaPYtnARIq7+BViM01rjf1T7h676rKlgCWMhn/lHs40kzezxao9sSK2MAl2hugZFjJw JdsA== X-Gm-Message-State: ACrzQf1iWJwsHEItI3gjNQKHM7ZdkJQG4pxYXIOE26GfSY334HkFGuFz eosMDd2qz38bb0n98BnvY1Y+qn9Ke11yLbowWdrB7g== X-Received: by 2002:a05:6e02:b4d:b0:300:b1ee:c17e with SMTP id f13-20020a056e020b4d00b00300b1eec17emr1778319ilu.101.1667226092159; Mon, 31 Oct 2022 07:21:32 -0700 (PDT) MIME-Version: 1.0 From: Jann Horn Date: Mon, 31 Oct 2022 15:20:56 +0100 Message-ID: Subject: [BUG] AMDKFD: criu_checkpoint() error path treats userspace pointer as kernel pointer To: Rajneesh Bhardwaj , Felix Kuehling Cc: David Yat Sin , Alex Deucher , kernel list , amd-gfx@lists.freedesktop.org, "Pan, Xinhui" , =?UTF-8?Q?Christian_K=C3=B6nig?= Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham 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 be072b06c73970 ("drm/amdkfd: CRIU export BOs as prime dmabuf objects") added an error path in criu_checkpoint() that (unless I'm completely misreading this) treats the userspace-supplied args->bos (which was previously used as a userspace pointer when passed to criu_checkpoint_bos()) as a kernel pointer: ret = criu_checkpoint_bos(p, num_bos, (uint8_t __user *)args->bos, (uint8_t __user *)args->priv_data, &priv_offset); if (ret) goto exit_unlock; [...] close_bo_fds: if (ret) { /* If IOCTL returns err, user assumes all FDs opened in criu_dump_bos are closed */ uint32_t i; struct kfd_criu_bo_bucket *bo_buckets = (struct kfd_criu_bo_bucket *) args->bos; for (i = 0; i < num_bos; i++) { if (bo_buckets[i].alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) close_fd(bo_buckets[i].dmabuf_fd); } } This seems very wrong, and also like it's guaranteed to blow up as soon as it runs on a machine with SMAP, which makes me think that this codepath was probably never exercised? (Also note that just changing this to copy_from_user() instead would still be wrong, because malicious/bogus userspace could change the FD number to the KFD device's FD, and the VFS assumes that an FD can't be closed while it's being accessed in a single-threaded process.)