]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - queue-6.8/cxl-core-regs-fix-usage-of-map-reg_type-in-cxl_decod.patch
Fixes for 6.8
[thirdparty/kernel/stable-queue.git] / queue-6.8 / cxl-core-regs-fix-usage-of-map-reg_type-in-cxl_decod.patch
1 From 5382167bdfd3a20cebcd0f0f4ff8d20c6a3f0a8e Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Tue, 19 Mar 2024 11:15:08 -0700
4 Subject: cxl/core/regs: Fix usage of map->reg_type in cxl_decode_regblock()
5 before assigned
6
7 From: Dave Jiang <dave.jiang@intel.com>
8
9 [ Upstream commit 5c88a9ccd4c431d58b532e4158b6999a8350062c ]
10
11 In the error path, map->reg_type is being used for kernel warning
12 before its value is setup. Found by code inspection. Exposure to
13 user is wrong reg_type being emitted via kernel log. Use a local
14 var for reg_type and retrieve value for usage.
15
16 Fixes: 6c7f4f1e51c2 ("cxl/core/regs: Make cxl_map_{component, device}_regs() device generic")
17 Reviewed-by: Dan Williams <dan.j.williams@intel.com>
18 Reviewed-by: Davidlohr Bueso <dave@stgolabs.net>
19 Signed-off-by: Dave Jiang <dave.jiang@intel.com>
20 Signed-off-by: Sasha Levin <sashal@kernel.org>
21 ---
22 drivers/cxl/core/regs.c | 5 +++--
23 1 file changed, 3 insertions(+), 2 deletions(-)
24
25 diff --git a/drivers/cxl/core/regs.c b/drivers/cxl/core/regs.c
26 index 372786f809555..3c42f984eeafa 100644
27 --- a/drivers/cxl/core/regs.c
28 +++ b/drivers/cxl/core/regs.c
29 @@ -271,6 +271,7 @@ EXPORT_SYMBOL_NS_GPL(cxl_map_device_regs, CXL);
30 static bool cxl_decode_regblock(struct pci_dev *pdev, u32 reg_lo, u32 reg_hi,
31 struct cxl_register_map *map)
32 {
33 + u8 reg_type = FIELD_GET(CXL_DVSEC_REG_LOCATOR_BLOCK_ID_MASK, reg_lo);
34 int bar = FIELD_GET(CXL_DVSEC_REG_LOCATOR_BIR_MASK, reg_lo);
35 u64 offset = ((u64)reg_hi << 32) |
36 (reg_lo & CXL_DVSEC_REG_LOCATOR_BLOCK_OFF_LOW_MASK);
37 @@ -278,11 +279,11 @@ static bool cxl_decode_regblock(struct pci_dev *pdev, u32 reg_lo, u32 reg_hi,
38 if (offset > pci_resource_len(pdev, bar)) {
39 dev_warn(&pdev->dev,
40 "BAR%d: %pr: too small (offset: %pa, type: %d)\n", bar,
41 - &pdev->resource[bar], &offset, map->reg_type);
42 + &pdev->resource[bar], &offset, reg_type);
43 return false;
44 }
45
46 - map->reg_type = FIELD_GET(CXL_DVSEC_REG_LOCATOR_BLOCK_ID_MASK, reg_lo);
47 + map->reg_type = reg_type;
48 map->resource = pci_resource_start(pdev, bar) + offset;
49 map->max_size = pci_resource_len(pdev, bar) - offset;
50 return true;
51 --
52 2.43.0
53