<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Sat, 03 Oct 2026 12:06:31 +0000</lastBuildDate>
    <item>
      <title>CVE-2022-49605 — igc: Reinstate IGC_REMOVED logic and implement it properly</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2022-49605</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;igc: Reinstate IGC_REMOVED logic and implement it properly&lt;/p&gt;
&lt;p&gt;The initially merged version of the igc driver code (via commit
146740f9abc4, &amp;#34;igc: Add support for PF&amp;#34;) contained the following
IGC_REMOVED checks in the igc_rd32/wr32() MMIO accessors:&lt;/p&gt;
&lt;p&gt;u32 igc_rd32(struct igc_hw *hw, u32 reg)
	{
		u8 __iomem *hw_addr = READ_ONCE(hw-&amp;gt;hw_addr);
		u32 value = 0;&lt;/p&gt;
&lt;p&gt;if (IGC_REMOVED(hw_addr))
			return ~value;&lt;/p&gt;
&lt;p&gt;value = readl(&amp;amp;hw_addr[reg]);&lt;/p&gt;
&lt;p&gt;/* reads should not return all F&amp;#39;s */
		if (!(~value) &amp;amp;&amp;amp; (!reg || !(~readl(hw_addr))))
			hw-&amp;gt;hw_addr = NULL;&lt;/p&gt;
&lt;p&gt;return value;
	}&lt;/p&gt;
&lt;p&gt;And:&lt;/p&gt;
&lt;p&gt;#define wr32(reg, val) \
	do { \
		u8 __iomem *hw_addr = READ_ONCE((hw)-&amp;gt;hw_addr); \
		if (!IGC_REMOVED(hw_addr)) \
			writel((val), &amp;amp;hw_addr[(reg)]); \
	} while (0)&lt;/p&gt;
&lt;p&gt;E.g. igb has similar checks in its MMIO accessors, and has a similar
macro E1000_REMOVED, which is implemented as follows:&lt;/p&gt;
&lt;p&gt;#define E1000_REMOVED(h) unlikely(!(h))&lt;/p&gt;
&lt;p&gt;These checks serve to detect and take note of an 0xffffffff MMIO read
return from the device, which can be caused by a PCIe link flap or some
other kind of PCI bus error, and to avoid performing MMIO reads and
writes from that point onwards.&lt;/p&gt;
&lt;p&gt;However, the IGC_REMOVED macro was not originally implemented:&lt;/p&gt;
&lt;p&gt;#ifndef IGC_REMOVED
	#define IGC_REMOVED(a) (0)
	#endif /* IGC_REMOVED */&lt;/p&gt;
&lt;p&gt;This led to the IGC_REMOVED logic to be removed entirely in a
subsequent commit (commit 3c215fb18e70, &amp;#34;igc: remove IGC_REMOVED
function…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;igc: Reinstate IGC_REMOVED logic and implement it properly&lt;/p&gt;
&lt;p&gt;The initially merged version of the igc driver code (via commit
146740f9abc4, &amp;#34;igc: Add support for PF&amp;#34;) contained the following
IGC_REMOVED checks in the igc_rd32/wr32() MMIO accessors:&lt;/p&gt;
&lt;p&gt;u32 igc_rd32(struct igc_hw *hw, u32 reg)
	{
		u8 __iomem *hw_addr = READ_ONCE(hw-&amp;gt;hw_addr);
		u32 value = 0;&lt;/p&gt;
&lt;p&gt;if (IGC_REMOVED(hw_addr))
			return ~value;&lt;/p&gt;
&lt;p&gt;value = readl(&amp;amp;hw_addr[reg]);&lt;/p&gt;
&lt;p&gt;/* reads should not return all F&amp;#39;s */
		if (!(~value) &amp;amp;&amp;amp; (!reg || !(~readl(hw_addr))))
			hw-&amp;gt;hw_addr = NULL;&lt;/p&gt;
&lt;p&gt;return value;
	}&lt;/p&gt;
&lt;p&gt;And:&lt;/p&gt;
&lt;p&gt;#define wr32(reg, val) \
	do { \
		u8 __iomem *hw_addr = READ_ONCE((hw)-&amp;gt;hw_addr); \
		if (!IGC_REMOVED(hw_addr)) \
			writel((val), &amp;amp;hw_addr[(reg)]); \
	} while (0)&lt;/p&gt;
&lt;p&gt;E.g. igb has similar checks in its MMIO accessors, and has a similar
macro E1000_REMOVED, which is implemented as follows:&lt;/p&gt;
&lt;p&gt;#define E1000_REMOVED(h) unlikely(!(h))&lt;/p&gt;
&lt;p&gt;These checks serve to detect and take note of an 0xffffffff MMIO read
return from the device, which can be caused by a PCIe link flap or some
other kind of PCI bus error, and to avoid performing MMIO reads and
writes from that point onwards.&lt;/p&gt;
&lt;p&gt;However, the IGC_REMOVED macro was not originally implemented:&lt;/p&gt;
&lt;p&gt;#ifndef IGC_REMOVED
	#define IGC_REMOVED(a) (0)
	#endif /* IGC_REMOVED */&lt;/p&gt;
&lt;p&gt;This led to the IGC_REMOVED logic to be removed entirely in a
subsequent commit (commit 3c215fb18e70, &amp;#34;igc: remove IGC_REMOVED
function…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2022-49605</guid>
    </item>
  </channel>
</rss>
