From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9FF3D30D409 for ; Fri, 26 Jun 2026 22:52:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.181 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782514353; cv=none; b=ld4mGY6IS4a0lFboO4EWbRV7yD1v4eAyglg2mSbwf9ly5SctuX0WTnlsozQO8dsYs3iNZxFyuwmU7D38yvc/HnvAFMVC6dH3vmixgVeXwgCYjehLYUY0x6kwVI2IT2cM4s2Dz8Se/n0hibzLYeszb0LajpzVsaCuKO2cvARMpLw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782514353; c=relaxed/simple; bh=SwOPJqpg4b6qLai1Os6dv/e6e2ZIKWpVZgpCjMbs5k4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Ukdf5t/Xp6myM3Re31uHhbeFj1U7UJz5Fa2yLj1zIVAA4ZS4SO6/i8P4yM46s477HmjuPYWWxV2UBjQDON2GdOBwjI/vP4mu/m0bYoaaxa73rjFUlV2CdGNDk6Ws2I7EYe76BnRAC0OYgIkG/FIWk3h9ce37BYEztO3fztfqQlI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RMajR2uP; arc=none smtp.client-ip=209.85.210.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RMajR2uP" Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-845cffb08f9so319586b3a.1 for ; Fri, 26 Jun 2026 15:52:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782514352; x=1783119152; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=WcxVtojs1bzoEtQJKG5MqOp3NObqU50nISOInJcEpNA=; b=RMajR2uPVVKx+FDbhADutccRzPyHpIaKpSuLj679zn8tV3ZeL3F7CltOFSir0Uf4rP y7WOlpi+dHMtMt34XNjrLBuUU8xjwGX3U+o17+NCuUhjUwk0ncsDtGfCGoh6iAJtutVn 6WgSqNmFhOBNt4z3zb63mi3vMctMnWhpNU249qZk6g0N2iPUxNxlwQrORpk28e8KO+qh c/f/AzlTFSO9Ep/inHfgwRki9tRbnZC+E2dQYYsDf6ctZ1LfW+WZVBwd1eMQEOdEuqHY dhgGkmxurt8rLqnIauTacXGEKV6Y+rcbpcJNDIYfSZD3TQQsWPu4oMJ9XBznuFBATGnO WNmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782514352; x=1783119152; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=WcxVtojs1bzoEtQJKG5MqOp3NObqU50nISOInJcEpNA=; b=i9vmI6t8p44vC+SqvleC6JS6sqWYBQGSp3tOwqOPoANZmFnoiPHEoSYwEicW0CUV1u qk9IIcrmVjEFknAjYLFpMjkCttpdBOss8uyQC5XSCr1krrxannd/F/ccB6R5L38efGVT SdcAkmaPEQ/+Z4MvmS/8xbexqltlQ7ZCZKiK7/4ax6wQLiOTM49tvurGbVLGG6W9V7NV tbYrK7WOTAKgE0WkFVOvJFEO/SOljVzPmNb2SIbVj6JRwBY5984qz0PGMPmp4m5R5I/P bZvkd5gAoYCcdH5Ovz75CdqeYPbB1ql++2f8wfNSdUST8VPCzALqN09IMfvIWO/UiPgQ dEDA== X-Forwarded-Encrypted: i=1; AHgh+RpQhB+5WpFBehOU4bSRzA+qdF89h13IZ2laP0DlsHCC+4SheWAPbc/WexWm+n3sOIYFgLkihjEGUD6A49g=@vger.kernel.org X-Gm-Message-State: AOJu0YwbFnDKiJQD0Ctfm7404t54OWaR6/gup1AhLD5DXu50uBqdB+Zu S9aHx8GdTSSuj+oZ8xcnPrGFmQ0Ezibjay8EWYhdgwzrR5Wc6Lu6y3lx X-Gm-Gg: AfdE7cl7UCZH+WQeBkArGBoetNE/AQUZWeNSx0QPndaWxAUkPAGZNLnizIR9yGWVCZU CJbabG/JiqPeEqgBXZG/ivGaDQAoo9ZDZ9vld6KE0+hsKBFwh57NHN3TXEG4p3QPQs3r2lDEqrd jm4Pze7Ar6cIJFgcma8lY57ZHO7L2o2YHgZSIwK4gZuCRP6et+8EVJgnsg7WBvp2l7KJCZUhn7m JN1CGGGVKmgZOp+/ilCX4Oj9SQzByQUYzYLNyBw0HhusEf0HQXTRzgdWm+0EKrB+DmbOuV8ODSG hIvDto9zVzopr9P/2wcOyPsdoxMVBBd3J+RG9gl5F6FXHWsJ05vc+wt/6FOVztO5lxUop2TVup5 z7o8goVLeiuICbCRB656BIgk4NUHhLEGVIhNki8hglalZRkPIwo7V3JG5Wiyy40bkrAeeso3atP g+7O5P2DGkmMF1gR2ufqTc5C5gPuWKaZBAbIUmeV9NTZWUIBdo/u/YTw0fBJlSprdtEV2ZfE7CM SD152U9sg== X-Received: by 2002:a05:6a00:288d:b0:845:a24d:9b65 with SMTP id d2e1a72fcca58-845d1fcaa8emr1886069b3a.14.1782514351859; Fri, 26 Jun 2026 15:52:31 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:5b5d::e34]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-845a3ec0ec9sm7427385b3a.0.2026.06.26.15.52.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jun 2026 15:52:30 -0700 (PDT) From: Rosen Penev To: netdev@vger.kernel.org Cc: Claudiu Manoil , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andy Fleming , linux-kernel@vger.kernel.org (open list) Subject: [PATCH net] net: gianfar: dispose irq mappings on probe failure and device removal Date: Fri, 26 Jun 2026 15:52:28 -0700 Message-ID: <20260626225228.427392-1-rosenp@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit irq_of_parse_and_map() creates irqdomain mappings that should be balanced with irq_dispose_mapping(). The driver never called irq_dispose_mapping(), leaking mappings on probe failure and device removal. Fix by adding irq_dispose_mapping() in free_gfar_dev() and expanding its loop from priv->num_grps to MAXGROUPS so the error path also catches partially-initialized groups. All irqinfo pointers are pre-initialized to NULL in gfar_of_init(), making the NULL-guarded walk in free_gfar_dev() safe for every scenario. gfar_parse_group() itself is left as a simple parse function with no resource management; cleanup is centralized in the caller's error path. Assisted-by: opencode:big-pickle Fixes: b31a1d8b4151 ("gianfar: Convert gianfar to an of_platform_driver") Signed-off-by: Rosen Penev --- drivers/net/ethernet/freescale/gianfar.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index 3271de5844f8..89215e1ddc2d 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c @@ -469,10 +469,13 @@ static void free_gfar_dev(struct gfar_private *priv) { int i, j; - for (i = 0; i < priv->num_grps; i++) + for (i = 0; i < MAXGROUPS; i++) for (j = 0; j < GFAR_NUM_IRQS; j++) { - kfree(priv->gfargrp[i].irqinfo[j]); - priv->gfargrp[i].irqinfo[j] = NULL; + if (priv->gfargrp[i].irqinfo[j]) { + irq_dispose_mapping(priv->gfargrp[i].irqinfo[j]->irq); + kfree(priv->gfargrp[i].irqinfo[j]); + priv->gfargrp[i].irqinfo[j] = NULL; + } } free_netdev(priv->ndev); @@ -616,7 +619,7 @@ static phy_interface_t gfar_get_interface(struct net_device *dev) static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev) { const char *model; - int err = 0, i; + int err = 0, i, j; phy_interface_t interface; struct net_device *dev = NULL; struct gfar_private *priv = NULL; @@ -702,8 +705,11 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev) priv->rx_list.count = 0; mutex_init(&priv->rx_queue_access); - for (i = 0; i < MAXGROUPS; i++) + for (i = 0; i < MAXGROUPS; i++) { priv->gfargrp[i].regs = NULL; + for (j = 0; j < GFAR_NUM_IRQS; j++) + priv->gfargrp[i].irqinfo[j] = NULL; + } /* Parse and initialize group specific information */ if (priv->mode == MQ_MG_MODE) { -- 2.54.0