From nobody Mon Feb 9 08:50:42 2026 Received: from fout-a5-smtp.messagingengine.com (fout-a5-smtp.messagingengine.com [103.168.172.148]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7F9F30DD2F for ; Mon, 20 Oct 2025 11:58:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.148 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760961500; cv=none; b=EHBn21jbGPQVnUCmxZsicTLPdlSNtwIP95g/OYfeOIZBUtPS/T/agoMyxJGCIfsr8Vsbf4shhVf65B24xLGkq6jIpyuxDvgz86WCrxisAypJdANj/C4dExP2dyAvMYY+n+IAqCXBBzgpDekzxkCq23SX0ZQ4QIfri1K92GfiP/c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760961500; c=relaxed/simple; bh=LrSjw7A1t1j3KWoJg+t7ZzRpPUSAFXuG6r84MPT5zqM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=OAF27BQRPoBjxgNS/X587sFI/7UhqvyfmChnnZ7Zwgv8U3LhGGY1U23KMoEq72GeAL/ELSQ4CBXx+mlKSftZGf0sG85g3h/vVrEptRORLzJPglyiius9EmbRXfJlD/MCZ8rKHnSa4Ai94ToPRYHhE0y8j+EXiRMEcRjEjyoInGw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=KkCHc70t; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=pUKEzKgh; arc=none smtp.client-ip=103.168.172.148 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="KkCHc70t"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="pUKEzKgh" Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfout.phl.internal (Postfix) with ESMTP id 97C24EC02E2; Mon, 20 Oct 2025 07:58:14 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-05.internal (MEProxy); Mon, 20 Oct 2025 07:58:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:message-id:mime-version:reply-to:subject :subject:to:to; s=fm2; t=1760961494; x=1761047894; bh=Ww9DvCfxJ9 3mFFiHtNCtI5RjcFbBSgRKT6N64U8sLJY=; b=KkCHc70t1mgu3nMMGEfvIM0gIe HmVPe+7wdWD0rlxBalyrB7ui1NT+yEKishMnun/sHHGFGYuSNArr71nk+h7P+Fa5 gFMxqNq2QkEW/4dtgFYRoL8YDlmJwG/nfrL6heRMqbwC1QDjLcdqEcXDBHEOk+UD MfAOndw5/AgqmCDAhKcdBhi3hjccQM6Xi8HDkpaLyH1qVu4nVT+4dP+6offJkWek /5GbbQmtNha3bDSJvoH+G5O3Ysx90zw57Vy4Ss+MmcWCVBr6fX8aMuEstfMZ8EJK 9VOepqPdcjaBLhNjF3BdgljnT+2CKzJ8DUTaY7yiI1xQAvf33p5OWKyqXYvw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:message-id:mime-version:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1760961494; x=1761047894; bh=Ww9DvCfxJ93mFFiHtNCtI5RjcFbBSgRKT6N 64U8sLJY=; b=pUKEzKghSifSQJs8BJXSEnSskU/UK9uojnvGTZrryBagWXR4NP8 PHQmBfD1QTa1LCKmaLuSIx+mX3FZ7i+BrswGdL05vv0sd178OT4r/JSN5MuWvT4e mGhDR1jY4ptlss00Y8SGkn1BWzjzEcfjQLbv1CxODKCfJOZfX+7Ms3Ktcotn6Gnl RrD8OSdICckzWEZndu/KX5mY6y7Y4d1XslaVkEDTfTf+twAGHKfygMavxeoyIf/+ KF5tSHFSkbvXf2oU0k/qCctcPs0nTH1rtmboEvtRo8l2561GEh651ayDIFy4yOBd hYZx3YJvX7dQASGKRwYTonqTz4Icl1WkIag== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddufeejjeeiucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefhvfevufffkffoggfgsedtkeertdertd dtnecuhfhrohhmpefvrghkrghshhhiucfurghkrghmohhtohcuoehoqdhtrghkrghshhhi sehsrghkrghmohgttghhihdrjhhpqeenucggtffrrghtthgvrhhnpeffvdeuleffveekud fhteejudffgefhtedtgfeutdfgvdfgueefudehveehveekkeenucevlhhushhtvghrufhi iigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehoqdhtrghkrghshhhisehsrghkrg hmohgttghhihdrjhhppdhnsggprhgtphhtthhopedvpdhmohguvgepshhmthhpohhuthdp rhgtphhtthhopehlihhnuhigudefleegqdguvghvvghlsehlihhsthhsrdhsohhurhgtvg hfohhrghgvrdhnvghtpdhrtghpthhtoheplhhinhhugidqkhgvrhhnvghlsehvghgvrhdr khgvrhhnvghlrdhorhhg X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 20 Oct 2025 07:58:13 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH] firewire: core: use cleanup function to release cached configuration ROM Date: Mon, 20 Oct 2025 20:58:10 +0900 Message-ID: <20251020115810.92839-1-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When returning from read_config_rom() function, the allocated buffer and the previous buffer for configuration ROM should be released. The cleanup function is useful in the case. This commit uses the cleanup function to remove goto statements. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-device.c | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c index 1674de477852..9b0080397154 100644 --- a/drivers/firewire/core-device.c +++ b/drivers/firewire/core-device.c @@ -653,8 +653,8 @@ static int read_rom(struct fw_device *device, int gener= ation, int speed, int ind static int read_config_rom(struct fw_device *device, int generation) { struct fw_card *card =3D device->card; - const u32 *old_rom, *new_rom; - u32 *rom, *stack; + const u32 *new_rom, *old_rom __free(kfree) =3D NULL; + u32 *stack, *rom __free(kfree) =3D NULL; u32 sp, key; int i, end, length, ret, speed; int quirks; @@ -673,7 +673,7 @@ static int read_config_rom(struct fw_device *device, in= t generation) for (i =3D 0; i < 5; i++) { ret =3D read_rom(device, generation, speed, i, &rom[i]); if (ret !=3D RCODE_COMPLETE) - goto out; + return ret; /* * As per IEEE1212 7.2, during initialization, devices can * reply with a 0 for the first quadlet of the config @@ -682,10 +682,8 @@ static int read_config_rom(struct fw_device *device, i= nt generation) * harddisk). In that case we just fail, and the * retry mechanism will try again later. */ - if (i =3D=3D 0 && rom[i] =3D=3D 0) { - ret =3D RCODE_BUSY; - goto out; - } + if (i =3D=3D 0 && rom[i] =3D=3D 0) + return RCODE_BUSY; } =20 quirks =3D detect_quirks_by_bus_information_block(rom); @@ -712,15 +710,13 @@ static int read_config_rom(struct fw_device *device, = int generation) */ key =3D stack[--sp]; i =3D key & 0xffffff; - if (WARN_ON(i >=3D MAX_CONFIG_ROM_SIZE)) { - ret =3D -ENXIO; - goto out; - } + if (WARN_ON(i >=3D MAX_CONFIG_ROM_SIZE)) + return -ENXIO; =20 /* Read header quadlet for the block to get the length. */ ret =3D read_rom(device, generation, speed, i, &rom[i]); if (ret !=3D RCODE_COMPLETE) - goto out; + return ret; end =3D i + (rom[i] >> 16) + 1; if (end > MAX_CONFIG_ROM_SIZE) { /* @@ -744,7 +740,7 @@ static int read_config_rom(struct fw_device *device, in= t generation) for (; i < end; i++) { ret =3D read_rom(device, generation, speed, i, &rom[i]); if (ret !=3D RCODE_COMPLETE) - goto out; + return ret; =20 if ((key >> 30) !=3D 3 || (rom[i] >> 30) < 2) continue; @@ -804,25 +800,19 @@ static int read_config_rom(struct fw_device *device, = int generation) =20 old_rom =3D device->config_rom; new_rom =3D kmemdup(rom, length * 4, GFP_KERNEL); - if (new_rom =3D=3D NULL) { - ret =3D -ENOMEM; - goto out; - } + if (new_rom =3D=3D NULL) + return -ENOMEM; =20 scoped_guard(rwsem_write, &fw_device_rwsem) { device->config_rom =3D new_rom; device->config_rom_length =3D length; } =20 - kfree(old_rom); - ret =3D RCODE_COMPLETE; device->max_rec =3D rom[2] >> 12 & 0xf; device->cmc =3D rom[2] >> 30 & 1; device->irmc =3D rom[2] >> 31 & 1; - out: - kfree(rom); =20 - return ret; + return RCODE_COMPLETE; } =20 static void fw_unit_release(struct device *dev) base-commit: dbd0cf204fe6ba7ba226153d1d90369019b90164 --=20 2.51.0