From patchwork Fri Jan 24 09:32:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Kroah-Hartman X-Patchwork-Id: 233109 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E8BBAC3F68F for ; Fri, 24 Jan 2020 10:08:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C108C214AF for ; Fri, 24 Jan 2020 10:08:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579860485; bh=8uam1c4zrf5tbI9DzabBv9YZUEmJLBKIUJu6yPQTu1w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=sRG1FSLvkDavlRzTg9R12XBoJkx9ej165k8s8Wvu8DpD8NbzPhqOdkiRcO17kZ4I2 16PYdzkpJdWTByujV2iYXQdOnr8vUIdSCOqsCYAjsmH9Z4ZXREcIesVd3gcaszYsKA SbsvC31uUPA/UEHjM62SNrwhc4eyU0DY+IO30kqY= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389300AbgAXKIE (ORCPT ); Fri, 24 Jan 2020 05:08:04 -0500 Received: from mail.kernel.org ([198.145.29.99]:44842 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389261AbgAXKIE (ORCPT ); Fri, 24 Jan 2020 05:08:04 -0500 Received: from localhost (unknown [145.15.244.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 223D52087E; Fri, 24 Jan 2020 10:08:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579860483; bh=8uam1c4zrf5tbI9DzabBv9YZUEmJLBKIUJu6yPQTu1w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BMuvfhFOvvX6z4KfOd8tRSI48iCSqR3TS7kGXeacEDUaXctXAF7lW8CejwTPaHBvg deAubRIEbU/tPZZCxS8L3kRVl81ymc3fF6I6HL5jN21lOLuSbkiDZfkdun2vmvnD7d eJoTdYCY1wcId08FmCTcdVim96TN91ukKkyd9Fgo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Navid Emamdoost , David Sterba , Sasha Levin Subject: [PATCH 4.14 337/343] affs: fix a memory leak in affs_remount Date: Fri, 24 Jan 2020 10:32:35 +0100 Message-Id: <20200124093004.075958447@linuxfoundation.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200124092919.490687572@linuxfoundation.org> References: <20200124092919.490687572@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Navid Emamdoost [ Upstream commit 450c3d4166837c496ebce03650c08800991f2150 ] In affs_remount if data is provided it is duplicated into new_opts. The allocated memory for new_opts is only released if parse_options fails. There's a bit of history behind new_options, originally there was save/replace options on the VFS layer so the 'data' passed must not change (thus strdup), this got cleaned up in later patches. But not completely. There's no reason to do the strdup in cases where the filesystem does not need to reuse the 'data' again, because strsep would modify it directly. Fixes: c8f33d0bec99 ("affs: kstrdup() memory handling") Signed-off-by: Navid Emamdoost [ update changelog ] Signed-off-by: David Sterba Signed-off-by: Sasha Levin --- fs/affs/super.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/fs/affs/super.c b/fs/affs/super.c index 884bedab7266a..789a1c7db5d8c 100644 --- a/fs/affs/super.c +++ b/fs/affs/super.c @@ -559,14 +559,9 @@ affs_remount(struct super_block *sb, int *flags, char *data) int root_block; unsigned long mount_flags; int res = 0; - char *new_opts; char volume[32]; char *prefix = NULL; - new_opts = kstrdup(data, GFP_KERNEL); - if (data && !new_opts) - return -ENOMEM; - pr_debug("%s(flags=0x%x,opts=\"%s\")\n", __func__, *flags, data); sync_filesystem(sb); @@ -577,7 +572,6 @@ affs_remount(struct super_block *sb, int *flags, char *data) &blocksize, &prefix, volume, &mount_flags)) { kfree(prefix); - kfree(new_opts); return -EINVAL; }