Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp15048692rwd; Sun, 25 Jun 2023 09:08:10 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4LrXOtbCVfr9JT4/yWdywpBffNPx/P0ykZmnRR3OrHQdiixCnRHKotMUkf22Een3BIgg+M X-Received: by 2002:a92:db06:0:b0:345:eed:c0cd with SMTP id b6-20020a92db06000000b003450eedc0cdmr5792853iln.25.1687709290232; Sun, 25 Jun 2023 09:08:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687709290; cv=none; d=google.com; s=arc-20160816; b=saZMsulgSFRbxezW4r+lXfo+ud7caUtwcMdGojOxtYPL4TUEzLCa8oalYc7SAoF4lC XimiheHrMeZRsdR4v89hQItHaF30c23ykzPCjZnqsrDBPaMfweHgY40JS1nziNjCq2wD L/m3CBQ1LVXBCP5IP0SSMrNsNu6FQ/TI8IXcHTMFClBUNtsg7vVxMDPNp7PBN4QqdRAQ PcAQvbdOjqJI753WpSbmEIYM4pOoaTXpFy17H2ad67zl0K4wZAmk3WE1xjfdRoneHteQ bCa9c9EBQbGvI6i+tpqOI062NX54JCiBUwVoa7Jtgjo5cyyVYzVp5A4W7R7EL18jkkBA R6vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=Q/q3dtLrCdlJ7WBbM40cZSb4jbe1BvLJqZ9PUXcu0LQ=; fh=zJySvKWxwXgr+JoHZOajLIPo+LjKx+AMcAiUcWSYRCU=; b=vSJOwB1ZAbhW8tqC/E1Qu4L8JJSNBLGHsSfpVP9orsAurBWR4YSCOA1o9r9J+egI9o OMwvmbuBMxMk8EkYKYqKf1agFnVKCQXgA0DOLhOoypZAqeQ69yhkEzs+34PXXfuEOA6l gMSuqFZ5xMls4CVxFrYCEaC3jOLgBVuPmYiOpid6Bn29418Rv3fZqV9YGv2gPWBiqrxn JUXzk+z9kbaNM4cFmayJ27NO3BL5iKiRZvEygvH2lX0yKQonFGn5kWMEagJXLXNT6/2d 3riP4kceops8e0ZNFqjYegK3CoDXJn5saE3r4R8peeIpykgnA3gI02AnKEve/WW+Vh7w +YPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=ta3IybJO; 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=NONE sp=NONE dis=NONE) header.from=linux.dev Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 24-20020a631258000000b0054f93b261cfsi3459168pgs.88.2023.06.25.09.07.58; Sun, 25 Jun 2023 09:08:10 -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=@linux.dev header.s=key1 header.b=ta3IybJO; 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=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229670AbjFYPuP (ORCPT + 99 others); Sun, 25 Jun 2023 11:50:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45158 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229452AbjFYPuO (ORCPT ); Sun, 25 Jun 2023 11:50:14 -0400 Received: from out-55.mta1.migadu.com (out-55.mta1.migadu.com [IPv6:2001:41d0:203:375::37]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BFD0A91 for ; Sun, 25 Jun 2023 08:50:11 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1687708209; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=Q/q3dtLrCdlJ7WBbM40cZSb4jbe1BvLJqZ9PUXcu0LQ=; b=ta3IybJOsQx57BtZ8tuN+hHqmjFjPxJptHp/LVOmYQvnA7KQQFfVzzxUU1cvlaaZHAAAb+ US1AJ7nxSln2f8RCUzAFbCAYw4Het9pZbPuyTYkIU9YUJWIEXpNn/8Tgqnl8XhpIO/Uo6G 7s41M4HfZqTs3R9Trkqt8FEXDiZ0Mm4= From: Qi Zheng To: gregkh@linuxfoundation.org, arve@android.com, tkjos@android.com, maco@android.com, joel@joelfernandes.org, brauner@kernel.org, cmllamas@google.com, surenb@google.com Cc: linux-kernel@vger.kernel.org, Qi Zheng Subject: [PATCH] binder: fix memory leak in binder_init() Date: Sun, 25 Jun 2023 15:49:37 +0000 Message-Id: <20230625154937.64316-1-qi.zheng@linux.dev> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE 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 From: Qi Zheng In binder_init(), the destruction of binder_alloc_shrinker_init() is not performed in the wrong path, which will cause memory leaks. So this commit introduces binder_alloc_shrinker_exit() and calls it in the wrong path to fix that. Signed-off-by: Qi Zheng --- drivers/android/binder.c | 1 + drivers/android/binder_alloc.c | 6 ++++++ drivers/android/binder_alloc.h | 1 + 3 files changed, 8 insertions(+) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 486c8271cab7..d720f93d8b19 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -6617,6 +6617,7 @@ static int __init binder_init(void) err_alloc_device_names_failed: debugfs_remove_recursive(binder_debugfs_dir_entry_root); + binder_alloc_shrinker_exit(); return ret; } diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c index 662a2a2e2e84..e3db8297095a 100644 --- a/drivers/android/binder_alloc.c +++ b/drivers/android/binder_alloc.c @@ -1087,6 +1087,12 @@ int binder_alloc_shrinker_init(void) return ret; } +void binder_alloc_shrinker_exit(void) +{ + unregister_shrinker(&binder_shrinker); + list_lru_destroy(&binder_alloc_lru); +} + /** * check_buffer() - verify that buffer/offset is safe to access * @alloc: binder_alloc for this proc diff --git a/drivers/android/binder_alloc.h b/drivers/android/binder_alloc.h index 138d1d5af9ce..dc1e2b01dd64 100644 --- a/drivers/android/binder_alloc.h +++ b/drivers/android/binder_alloc.h @@ -129,6 +129,7 @@ extern struct binder_buffer *binder_alloc_new_buf(struct binder_alloc *alloc, int pid); extern void binder_alloc_init(struct binder_alloc *alloc); extern int binder_alloc_shrinker_init(void); +extern void binder_alloc_shrinker_exit(void); extern void binder_alloc_vma_close(struct binder_alloc *alloc); extern struct binder_buffer * binder_alloc_prepare_to_free(struct binder_alloc *alloc, -- 2.30.2