Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp887430pxb; Fri, 22 Apr 2022 13:28:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwGnExN7aN6EIjJ/iqR/FiEgnDL63z/V3URIbsx8dPDBKRS+9y1SelWP573GQZdCAmk5br7 X-Received: by 2002:a17:902:e94e:b0:158:91e6:501 with SMTP id b14-20020a170902e94e00b0015891e60501mr6242008pll.29.1650659328644; Fri, 22 Apr 2022 13:28:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650659328; cv=none; d=google.com; s=arc-20160816; b=0CBbPQu0+lk1GijkB4c2Hn6CIhGlRhCMEPoTzyRP6OutjW83Plg2+RPueUImuWrdSp pW6FiOTny+Gkm0o9cIYa8tfuMVJOacN8HEUlito/BIpl2whGz4aZg8k4I9SX4ywjhByu bEbbNvv6gWfhO3u4ibalXoa3NSobnSA7i8Or1obTeyuq89h+j6LmP1XQ1yliC/0dLrK1 o1L/nC1iBJwveqZoW1PLzXfx1i5Lm8J6vkCDgUoEyPAWyycgaKC6lpKFN450ZzheJ47v E5wgu5FdCaoz3E67p3klBeGumaT8k1iS7QI09P+OJBn8t+p4XeGGwgHc5RXGhIb6o3j4 woWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:dkim-signature; bh=qLGjkp6XaJCG2v9la8Z0Z1LTGbSB3IZhkcSgJ6/yvwg=; b=R9Qg03rNOc6YEF8F/qWxAbm+4iqyt3IWtJAzxX5RnFRN1Ny195BSIbPais41TZGFt4 EsEuoE/n1z6kXBMK+XrmyfLBilyfpPIw0QTZ+7XbjdjAL3WuilBW5sB676ocKCP0WYXV FLgUQZNIWdVLc7g75rw8QMac//pZztByj6mCGunhgcNQurFponewi14hV76g8SL/NQQV MluK89+kVE7wNJLgFBPhA1Z5FXgjZgbYGrCmRi/aJEp0ATFRtyER/pvSSQv9jUE+Fu+Q 8uF/TTUf8ZoyayMgXlBr3oabtKEHxPWGOIXCg0h6bj3uYnTaaBMK/XryGtp5zT7ubcad bGKw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ellerman.id.au header.s=201909 header.b=PErqBP2j; 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 Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id nn18-20020a17090b38d200b001cb95c53172si12950297pjb.78.2022.04.22.13.28.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 13:28:48 -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=@ellerman.id.au header.s=201909 header.b=PErqBP2j; 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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 386B527C9E1; Fri, 22 Apr 2022 12:15:49 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1383021AbiDTW4z (ORCPT + 99 others); Wed, 20 Apr 2022 18:56:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345330AbiDTW4y (ORCPT ); Wed, 20 Apr 2022 18:56:54 -0400 Received: from gandalf.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 609A12251E for ; Wed, 20 Apr 2022 15:54:07 -0700 (PDT) Received: from authenticated.ozlabs.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mail.ozlabs.org (Postfix) with ESMTPSA id 4KkGF85JJwz4xR9; Thu, 21 Apr 2022 08:54:04 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ellerman.id.au; s=201909; t=1650495246; bh=qLGjkp6XaJCG2v9la8Z0Z1LTGbSB3IZhkcSgJ6/yvwg=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=PErqBP2jpEF4B/n7y1EbTTycn/YDD/Zd3naDd0QJs/z4v+AgYgf9XdgIVCdUtaQYw 4FwVbt6qqTFcXzCRMll0FheC6mKtJ84MyV8b5nTEWTGu9PDEQnaCO5sjpy9o0l2VQV ykE3BoykcnWH3H6ui7YZ3wgsN+SkhCW3ufppgnNXNINAtxQ3zaFhH+uRrSUzwZw038 HELDg4p9aNQbWegyo7fkesOFjSbjds8lhcI2wm/UAeN3K0AMVhwo4oodnoiiBpuELi qSre6nYZRuZGYhZASVtnmuQAmRsx2Ul3t4e+zw1IQlN+XJTlYQYc7zhVXaKe9fndkh ayhFeoZcy4c2Q== From: Michael Ellerman To: Hangyu Hua , fbarrat@linux.ibm.com, ajd@linux.ibm.com, arnd@arndb.de, gregkh@linuxfoundation.org, alastair@d-silva.org Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Hangyu Hua Subject: Re: [PATCH] misc: ocxl: fix possible double free in ocxl_file_register_afu In-Reply-To: <20220418085758.38145-1-hbh25y@gmail.com> References: <20220418085758.38145-1-hbh25y@gmail.com> Date: Thu, 21 Apr 2022 08:54:04 +1000 Message-ID: <87czhbfjsj.fsf@mpe.ellerman.id.au> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE autolearn=no 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 Hangyu Hua writes: > info_release() will be called in device_unregister() when info->dev's > reference count is 0. So there is no need to call ocxl_afu_put() and > kfree() again. Double frees are often exploitable. But it looks to me like this error path is not easily reachable by an attacker. ocxl_file_register_afu() is only called from ocxl_probe(), and we only go to err_unregister if the sysfs or cdev initialisation fails, which should only happen if we hit ENOMEM, or we have a duplicate device which would be a device-tree/hardware error. But maybe Fred can check more closely, I don't know the driver that well. cheers > Fix this by adding free_minor() and return to err_unregister error path. > > Fixes: 75ca758adbaf ("ocxl: Create a clear delineation between ocxl backend & frontend") > Signed-off-by: Hangyu Hua > --- > drivers/misc/ocxl/file.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/misc/ocxl/file.c b/drivers/misc/ocxl/file.c > index d881f5e40ad9..6777c419a8da 100644 > --- a/drivers/misc/ocxl/file.c > +++ b/drivers/misc/ocxl/file.c > @@ -556,7 +556,9 @@ int ocxl_file_register_afu(struct ocxl_afu *afu) > > err_unregister: > ocxl_sysfs_unregister_afu(info); // safe to call even if register failed > + free_minor(info); > device_unregister(&info->dev); > + return rc; > err_put: > ocxl_afu_put(afu); > free_minor(info); > -- > 2.25.1