From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (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 A29F83DDDC1 for ; Mon, 27 Jul 2026 07:59:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785139153; cv=none; b=CgvjnyxQDpcJIy/LdFvh3QHv0FShHLhZJW4mqdWpmHfxpVVrdXq36oodNyEybXzDvLfAZZaRdIiYy1byxbEpkahb/7UvECQAtYMStwuTZCDPcwrRvcHeIdgDOtZ6RbNuhFUviPTFb5RAQ91ojhToMwqtra1v+dOa2183jUvofr8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785139153; c=relaxed/simple; bh=EbnUXDEiH4aXd7svurft8q4vb7XSEmBoWUkT4ZL4rnE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=iKzzJgttxo4+d9vcxlBdXVKgjXMDTPTA4DV+kaT9Q2zuWY5loU164bxuP+NR8fOFhF+uDJIA+AMRrBqM0TygNKKn+A0pT+8mrUS4NKAtg3rXAxkPTye2r4BV+AQnGLNEEpzitZ/GtrJt2kX6Iu7wzIODLtGRhOh53euJKP6auEY= 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=I084IXkL; arc=none smtp.client-ip=209.85.214.177 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="I084IXkL" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2ceab75934dso29590255ad.2 for ; Mon, 27 Jul 2026 00:59:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785139152; x=1785743952; 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:content-type; bh=wvZrTTp8XTspOh3eFR2KOmNstM1K6wskKfXxNBZ4/oE=; b=I084IXkLP5zUliNOTmTG6s9/FJfNWSc8isX4eGGRUal/ycL4lI1UbJzE8WGKklQrM1 1jsaQ/PnE0Utxy/yZ/E2h09I5C9z3dvzAezdc1YTOiZOcATzRlXA6OnVaSBNpx+DyFNd 06J7OsPg6qBW0vGAPFlgN8qjfPu4KEnAvvB6vbAloDMeBf67UGG2xowDU5Uc98dimNAk PjZS9WDp3jXYwLhvbxbLhOl6Rdz2c7B39kxj9RlaGejKPAwSghYFEfZEn0d6/0H4m6fw MiAWOtuU9WP7C8gtTzuUux9nsLYEyWjdDpHuCoRe+sV0TntiJXnjcYt+pfVbWlCY5FzZ F1uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785139152; x=1785743952; 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:content-type; bh=wvZrTTp8XTspOh3eFR2KOmNstM1K6wskKfXxNBZ4/oE=; b=JBAnvqeBw9BeHcYeFDm3pMYw+kOPkzg+2ChU78TMzGx+Tb2GpR/CfwS9y/3bQemMAz WyXZBGQ481BSMDSrxF1OCybft0k9575mnk84USP+FQVcbFysCWQFvz/4lnwd2JCqi0Hk tL8Q9G0+4jI2bSNCpJMGWkBa127TmhD9g1cQTRJs+rlVOtnE3PVMBxM7ngNXr4nk3kOF KvV7h/z8iKIajj8noj2q4GH4W62SJh7vaoRmt1H2npeHvCxYR2Z+AP9ooZR5/FjQbboA /OPgZNWlPp+MIUoBP0ZKuhLGSbMIr3wW/CdYji6o+SVti7sci/55/LVXIGc9MWmWYhZz WMlg== X-Forwarded-Encrypted: i=1; AHgh+Rrc+FDXH8hr/V9iGcNrvIdcVjmuNdM3NKeJ3gwbrj6raseFPiI1dWgML02vex7pTCm8XLAqM9dFuGJ0i1I=@vger.kernel.org X-Gm-Message-State: AOJu0YypWkvzzy4PzLrK9XYeaXJ7dZW8rZ0r0Kwr45NgGnkdBclIVnD/ A+Wco/vZoAZ/j5wNNnNvtYCXo79oSJa2LiUcp1/FiZmIMw8T7oJb/H8B X-Gm-Gg: AR+sD12tdyOMekPSBWI9c7le+g7YyolRdSnZbqTw9FvfWpHrZh/WiGg+s17vJDz73Vo 8PNZkWSZFHehyOX9WebWmzN6mPDRlOrN6lzqWi7jT6layoKLdqTxQLDjwMSQvjkZx/dHskJh9tI jSMLtrPwzOmuhMIiea0TQhf08oQXDibE8Ymnfq6DcGa1WdvLSmCZDCmrr3J7LQgH39VaWyg5dy6 TFiHUAE2xOPr8sT1TTJl2jd2tXEhJ/TpM6d5jmZkWRSIpvNcH5kuNFIoRHvNXg/QOYh8nEb7QvE ch1OaojazlwlXvBAfrGVHVj+730O20s0khkgoPHmv/4ImPh4y6GpHOuRwqlXwq9ttV9gw/plVlS DMs9bVk071ow2Nw6AAJ2yALXpXbCfg6ZBgu7xG2hS3gwM+q0ePrHSdcHohBdWKhCvETyCAlx9ia c2NyVLhFxLVvLoO1c/YfmlEA== X-Received: by 2002:a05:6a20:9e49:b0:3c3:a4f4:c5c1 with SMTP id adf61e73a8af0-3c67e102104mr7113538637.60.1785139151974; Mon, 27 Jul 2026 00:59:11 -0700 (PDT) Received: from kernel ([103.219.206.53]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-314bc548f5dsm34056767eec.17.2026.07.27.00.59.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Jul 2026 00:59:11 -0700 (PDT) From: Mohamad Raizudeen To: bhelgass@google.com Cc: robh@kernel.org, gregkh@linuxfoundation.org, skhan@linuxfoundation.org, jkoolstra@xs4all.nl, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Mohamad Raizudeen Subject: [PATCH] PCI: Fix unmasked value in pci_generic_config_write32() Date: Mon, 27 Jul 2026 13:28:52 +0530 Message-ID: <20260727075852.4688-1-raizudeen.kerneldev@gmail.com> X-Mailer: git-send-email 2.53.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 When writing less than 4 bytes, pci_generic_config_write32() uses a read-modify-write sequence to protect adjacent bytes. The code comment states the goal is to "merge in the bits we intend to write". However the code does not mask the incoming 'val' before shifting it. Since the function 'pci_generic_config_write32()' accepts a 'u32', a caller could pass a value with extra bits set outside the intended write size, those extra bits will shift into the adjacent bytes and corrupt them. Fix this my masking 'val' before the shift so only the target bytes are written. This makes the code do what the comment says and matches the read function, pci_generic_config_read32(). Fixes: 1f94a94f67e10 ("PCI: Add generic config accessors") Signed-off-by: Mohamad Raizudeen --- drivers/pci/access.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pci/access.c b/drivers/pci/access.c index b123da16b63b..47b38d01694c 100644 --- a/drivers/pci/access.c +++ b/drivers/pci/access.c @@ -176,7 +176,7 @@ int pci_generic_config_write32(struct pci_bus *bus, unsigned int devfn, mask = ~(((1 << (size * 8)) - 1) << ((where & 0x3) * 8)); tmp = readl(addr) & mask; - tmp |= val << ((where & 0x3) * 8); + tmp |= (val & ((1 << (size * 8)) - 1)) << ((where & 0x3) * 8); writel(tmp, addr); return PCIBIOS_SUCCESSFUL; -- 2.53.0