The CCSR file descriptor was kept open after mmap() was done.
Close the fd immediately after mmap() as it is no longer needed,
preventing a file descriptor leak.

Fixes: 8e253882cd ("bus/dpaa: support interrupt portal based fd")
Cc: [email protected]

Signed-off-by: Hemant Agrawal <[email protected]>
Signed-off-by: Jun Yang <[email protected]>
---
 drivers/bus/dpaa/base/qbman/bman_driver.c | 3 ++-
 drivers/bus/dpaa/base/qbman/qman_driver.c | 6 +++---
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/bus/dpaa/base/qbman/bman_driver.c 
b/drivers/bus/dpaa/base/qbman/bman_driver.c
index 23e44ac10b..71a2028383 100644
--- a/drivers/bus/dpaa/base/qbman/bman_driver.c
+++ b/drivers/bus/dpaa/base/qbman/bman_driver.c
@@ -145,7 +145,7 @@ void bman_thread_irq(void)
 
 int bman_init_ccsr(const struct device_node *node)
 {
-       static int ccsr_map_fd;
+       int ccsr_map_fd;
        uint64_t phys_addr;
        const uint32_t *bman_addr;
        uint64_t regs_size;
@@ -169,6 +169,7 @@ int bman_init_ccsr(const struct device_node *node)
 
        bman_ccsr_map = mmap(NULL, regs_size, PROT_READ |
                             PROT_WRITE, MAP_SHARED, ccsr_map_fd, phys_addr);
+       close(ccsr_map_fd);
        if (bman_ccsr_map == MAP_FAILED) {
                pr_err("Can not map BMan CCSR base Bman: "
                       "0x%x Phys: 0x%" PRIx64 " size 0x%" PRIu64,
diff --git a/drivers/bus/dpaa/base/qbman/qman_driver.c 
b/drivers/bus/dpaa/base/qbman/qman_driver.c
index 3bab8b8337..45b094e0c6 100644
--- a/drivers/bus/dpaa/base/qbman/qman_driver.c
+++ b/drivers/bus/dpaa/base/qbman/qman_driver.c
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
  *
  * Copyright 2008-2016 Freescale Semiconductor Inc.
- * Copyright 2017-2022, 2025 NXP
+ * Copyright 2017-2022, 2025-2026 NXP
  *
  */
 
@@ -270,7 +270,7 @@ int qman_global_init(void)
        const struct device_node *dt_node;
        size_t lenp;
        const u32 *chanid;
-       static int ccsr_map_fd;
+       int ccsr_map_fd;
        const uint32_t *qman_addr;
        uint64_t phys_addr;
        uint64_t regs_size;
@@ -358,9 +358,9 @@ int qman_global_init(void)
                pr_err("Can not open /dev/mem for qman ccsr map\n");
                return ccsr_map_fd;
        }
-
        qman_ccsr_map = mmap(NULL, regs_size, PROT_READ | PROT_WRITE,
                             MAP_SHARED, ccsr_map_fd, phys_addr);
+       close(ccsr_map_fd);
        if (qman_ccsr_map == MAP_FAILED) {
                pr_err("Can not map qman ccsr base\n");
                return -EINVAL;
-- 
2.43.0

Reply via email to