From nobody Sat Jun 13 19:09:03 2026 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (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 E12F53E9582 for ; Tue, 5 May 2026 20:58:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778014722; cv=none; b=Hbxa49FC9YPM3+dHbDq7YjgL+NJnuWNJ0+JO7xMmZduaRIXveM5LH4KytPouw7ueLEQzrky8orxqOK4C3Vg7ttgoMnro235L2uxMhe7yndBY4K8nOpuWVZfPFwEfVh1oJWeTWg7/7VwOiWkB/oQBn0QbLMQFAtZsf3ZmCKGRaTE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778014722; c=relaxed/simple; bh=6TVlG5PziR3qmd7U7JHFkcbO6djhkN6spgVpg6Q98GY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=TKQtsrBh4pxjITyi7AyTXhP8JYnJXFWCxY3SNTcsOKkSOzxNHLU2u5mDJv4TNau12IIy8QnqWyAeh0sPixSmGW6Wsz6ADzZ7tosqzcunxJ/hvoq1NRpV554rLX+6dbeUnA6g9jCpxrY7s36leqxHbzR9U226D0egP479CspXpCI= 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=YhcAwIEG; arc=none smtp.client-ip=209.85.216.54 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="YhcAwIEG" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-364c5317d67so5844572a91.2 for ; Tue, 05 May 2026 13:58:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778014720; x=1778619520; 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=v/KIP2hVXgnRxDhtLbrroKUeWc6NpJcgq/yST8Hr7Cc=; b=YhcAwIEGZ49LbRzsY48Bl7SYdKjO3Y/a6YtXQ6B0dSk5SqawRqw3KwcZ6SREhHT1yj g2zMC+XQAc0VKmCKeYO7DI+0GafcqjF+2zlJLurQIO9rAUgluPr3cOnyXPy42EtQF29H HD1dpeAvqbgfuv6sjDvydGquEuGQJHv6lqnhGaK8YbjwsIFSu+3ZYuK/7LRFPpN7xsey I2BRj4InFBzp1mKEkMHv3ID8D+M4TQZJvkBQhRoSUqF2l350IBiC0PPqyRnjtht329W/ OsCDB+LQ1FD6Q43idr/zuFFuuM2QwCx7ZTARjdE4gKyl/Iw7K0fRh9v6Jav67/ISVJuw dYQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778014720; x=1778619520; 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=v/KIP2hVXgnRxDhtLbrroKUeWc6NpJcgq/yST8Hr7Cc=; b=FQn068wWC8Th9ngwFQkWwWVO2hMJjipnynhuN0j1X7llSADWFZtd5SeE0AM5ytaqu6 mjC/0Ue4EfSsbjzWvVYc42dDuzKqwWWcCmEd8L18SanG7HTYDyxpU4IEq7xNH50mQ5Yk T2aDOE4jjXTx1WVIS+MjAL28W7xMnlo8vuH6UfNnatzPucVJEaNfyn7BaFKk0rz/9vwv ImVvFj93BUJNV2SShCPOpgSfXu1nUgyO4b/CzHr24FlFK04/5kMbhav7iJrsKDaBw5bq fagEVelW57wuCfK+tL14CbjTPJAsGcWomGzTJWgMUUnUlgNl7OjXIDWCkL29YkbdsQ1u 633w== X-Gm-Message-State: AOJu0YwoabGRHEsazyay+5rkvwc8H8fKEpW2azKiz64AgrSPRBzwCq6C X1sxexZEuK5FeLm/2HUwJSlXkjtCpuGODKFCHoK0NCLFwr3gJ4sKoC/v X-Gm-Gg: AeBDievJddZjmZhyw5pZTvdLfBA03Qq4DCcnZLHaMkbFHL7jUD0DAWyL6DcPEeagP44 AFDEV/NrvHIDC6vJS88UsQNmRAf3jBH9DW4WLmLFlUxeVsIE2XoJLUkAztJ8tfZt5+sGVitNb9m XVarn9Bgf+TJ2NTOGUPpc1TrPADV4W7ELnpLxOV82tA48lTN8liJVd7RQreCVu1pXuRjYXxV6Lt f6x+lQfXmK76+RX4gAXt76RuDphBCP1Gw7EmS46eEH3+gniLipDdE3p0SagD232xdXOEfooWiEE MygJLgv3xUY2n8p1Amj7jxgrKiHpTX5UEmFDNjhrPiJjBF7nyofIaqA7Fhv2pVhBS7D/UsIfL7y ZbAxpnUeWtFU38of3xU3pv8LCt4J+UpBcF3kUBFUJu4UAFhcA7+NPE7yLsYE7fnkPdAsWecSV0D VvigOXHZAsoaI2h25hXd4kioWx82XlZvvDgBcj5FP+gkNA/JZBZ+PTs19jX/mzLlOyot1KmqgZ/ Jo6UllvkDBtDosHbZSPzUMaNmA2X2Bu X-Received: by 2002:a17:90b:2d0c:b0:35e:30bc:96e2 with SMTP id 98e67ed59e1d1-365abadcd42mr467821a91.10.1778014720131; Tue, 05 May 2026 13:58:40 -0700 (PDT) Received: from shyam-VMware-Virtual-Platform.localdomain ([223.181.114.20]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ba7bf2c4aasm1678015ad.23.2026.05.05.13.58.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 May 2026 13:58:39 -0700 (PDT) From: Shyam Sunder Reddy Padira To: gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, linux-staging@lists.linux.dev, Shyam Sunder Reddy Padira Subject: [PATCH] staging: vme_user: check find_bridge() return value Date: Wed, 6 May 2026 02:27:46 +0530 Message-ID: <20260505205746.227144-1-shyamsunderreddypadira@gmail.com> X-Mailer: git-send-email 2.43.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" find_bridge() returns NULL when no matching bridge is found for a given resource. Some call sites dereference the return value without verifying it is non-NULL. Add NULL checks before use to avoid potentail NULL pointer dereferences. Signed-off-by: Shyam Sunder Reddy Padira --- drivers/staging/vme_user/vme.c | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/drivers/staging/vme_user/vme.c b/drivers/staging/vme_user/vme.c index b5c66b66ce32..2ed2f1fe502f 100644 --- a/drivers/staging/vme_user/vme.c +++ b/drivers/staging/vme_user/vme.c @@ -82,6 +82,9 @@ void *vme_alloc_consistent(struct vme_resource *resource,= size_t size, { struct vme_bridge *bridge =3D find_bridge(resource); =20 + if (!bridge) + return NULL; + if (!bridge->alloc_consistent) { dev_err(bridge->parent, "alloc_consistent not supported by bridge %s\n", @@ -107,6 +110,9 @@ void vme_free_consistent(struct vme_resource *resource,= size_t size, { struct vme_bridge *bridge =3D find_bridge(resource); =20 + if (!bridge) + return; + if (!bridge->free_consistent) { dev_err(bridge->parent, "free_consistent not supported by bridge %s\n", @@ -136,6 +142,9 @@ size_t vme_get_size(struct vme_resource *resource) dma_addr_t buf_base; u32 aspace, cycle, dwidth; =20 + if (!bridge) + return 0; + switch (resource->type) { case VME_MASTER: retval =3D vme_master_get(resource, &enabled, &base, &size, @@ -332,6 +341,9 @@ int vme_slave_set(struct vme_resource *resource, int en= abled, struct vme_slave_resource *image; int retval; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_SLAVE) { dev_err(bridge->parent, "Not a slave resource\n"); return -EINVAL; @@ -381,6 +393,9 @@ int vme_slave_get(struct vme_resource *resource, int *e= nabled, struct vme_bridge *bridge =3D find_bridge(resource); struct vme_slave_resource *image; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_SLAVE) { dev_err(bridge->parent, "Not a slave resource\n"); return -EINVAL; @@ -409,6 +424,9 @@ void vme_slave_free(struct vme_resource *resource) struct vme_bridge *bridge =3D find_bridge(resource); struct vme_slave_resource *slave_image; =20 + if (!bridge) + return; + if (resource->type !=3D VME_SLAVE) { dev_err(bridge->parent, "Not a slave resource\n"); return; @@ -529,6 +547,9 @@ int vme_master_set(struct vme_resource *resource, int e= nabled, struct vme_master_resource *image; int retval; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_MASTER) { dev_err(bridge->parent, "Not a master resource\n"); return -EINVAL; @@ -579,6 +600,9 @@ int vme_master_get(struct vme_resource *resource, int *= enabled, struct vme_bridge *bridge =3D find_bridge(resource); struct vme_master_resource *image; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_MASTER) { dev_err(bridge->parent, "Not a master resource\n"); return -EINVAL; @@ -618,6 +642,9 @@ ssize_t vme_master_read(struct vme_resource *resource, = void *buf, size_t count, struct vme_master_resource *image; size_t length; =20 + if (!bridge) + return 0; + if (!bridge->master_read) { dev_warn(bridge->parent, "Reading from resource not supported\n"); @@ -667,6 +694,9 @@ ssize_t vme_master_write(struct vme_resource *resource,= void *buf, struct vme_master_resource *image; size_t length; =20 + if (!bridge) + return 0; + if (!bridge->master_write) { dev_warn(bridge->parent, "Writing to resource not supported\n"); return -EINVAL; @@ -718,6 +748,9 @@ unsigned int vme_master_rmw(struct vme_resource *resour= ce, unsigned int mask, struct vme_bridge *bridge =3D find_bridge(resource); struct vme_master_resource *image; =20 + if (!bridge) + return 0; + if (!bridge->master_rmw) { dev_warn(bridge->parent, "Writing to resource not supported\n"); return -EINVAL; @@ -753,6 +786,9 @@ int vme_master_mmap_prepare(struct vme_resource *resour= ce, struct vme_master_resource *image; phys_addr_t phys_addr; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_MASTER) { dev_err(bridge->parent, "Not a master resource\n"); return -EINVAL; @@ -783,6 +819,9 @@ void vme_master_free(struct vme_resource *resource) struct vme_bridge *bridge =3D find_bridge(resource); struct vme_master_resource *master_image; =20 + if (!bridge) + return; + if (resource->type !=3D VME_MASTER) { dev_err(bridge->parent, "Not a master resource\n"); return; @@ -889,6 +928,9 @@ struct vme_dma_list *vme_new_dma_list(struct vme_resour= ce *resource) struct vme_bridge *bridge =3D find_bridge(resource); struct vme_dma_list *dma_list; =20 + if (!bridge) + return NULL; + if (resource->type !=3D VME_DMA) { dev_err(bridge->parent, "Not a DMA resource\n"); return NULL; @@ -1173,6 +1215,9 @@ int vme_dma_free(struct vme_resource *resource) struct vme_bridge *bridge =3D find_bridge(resource); struct vme_dma_resource *ctrlr; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_DMA) { dev_err(bridge->parent, "Not a DMA resource\n"); return -EINVAL; @@ -1494,6 +1539,9 @@ int vme_lm_count(struct vme_resource *resource) struct vme_bridge *bridge =3D find_bridge(resource); struct vme_lm_resource *lm; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_LM) { dev_err(bridge->parent, "Not a Location Monitor resource\n"); return -EINVAL; @@ -1525,6 +1573,9 @@ int vme_lm_set(struct vme_resource *resource, unsigne= d long long lm_base, struct vme_bridge *bridge =3D find_bridge(resource); struct vme_lm_resource *lm; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_LM) { dev_err(bridge->parent, "Not a Location Monitor resource\n"); return -EINVAL; @@ -1561,6 +1612,9 @@ int vme_lm_get(struct vme_resource *resource, unsigne= d long long *lm_base, struct vme_bridge *bridge =3D find_bridge(resource); struct vme_lm_resource *lm; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_LM) { dev_err(bridge->parent, "Not a Location Monitor resource\n"); return -EINVAL; @@ -1598,6 +1652,9 @@ int vme_lm_attach(struct vme_resource *resource, int = monitor, struct vme_bridge *bridge =3D find_bridge(resource); struct vme_lm_resource *lm; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_LM) { dev_err(bridge->parent, "Not a Location Monitor resource\n"); return -EINVAL; @@ -1631,6 +1688,9 @@ int vme_lm_detach(struct vme_resource *resource, int = monitor) struct vme_bridge *bridge =3D find_bridge(resource); struct vme_lm_resource *lm; =20 + if (!bridge) + return 0; + if (resource->type !=3D VME_LM) { dev_err(bridge->parent, "Not a Location Monitor resource\n"); return -EINVAL; @@ -1664,6 +1724,9 @@ void vme_lm_free(struct vme_resource *resource) struct vme_bridge *bridge =3D find_bridge(resource); struct vme_lm_resource *lm; =20 + if (!bridge) + return; + if (resource->type !=3D VME_LM) { dev_err(bridge->parent, "Not a Location Monitor resource\n"); return; --=20 2.43.0