<?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>Fri, 02 Oct 2026 10:58:59 +0000</lastBuildDate>
    <item>
      <title>CVE-2024-47702 — bpf: Fail verification for sign-extension of packet data/data_end/data_meta</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2024-47702</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;bpf: Fail verification for sign-extension of packet data/data_end/data_meta&lt;/p&gt;
&lt;p&gt;syzbot reported a kernel crash due to
  commit 1f1e864b6555 (&amp;#34;bpf: Handle sign-extenstin ctx member accesses&amp;#34;).
The reason is due to sign-extension of 32-bit load for
packet data/data_end/data_meta uapi field.&lt;/p&gt;
&lt;p&gt;The original code looks like:
        r2 = *(s32 *)(r1 + 76) /* load __sk_buff-&amp;gt;data */
        r3 = *(u32 *)(r1 + 80) /* load __sk_buff-&amp;gt;data_end */
        r0 = r2
        r0 += 8
        if r3 &amp;gt; r0 goto +1
        ...
Note that __sk_buff-&amp;gt;data load has 32-bit sign extension.&lt;/p&gt;
&lt;p&gt;After verification and convert_ctx_accesses(), the final asm code looks like:
        r2 = *(u64 *)(r1 +208)
        r2 = (s32)r2
        r3 = *(u64 *)(r1 +80)
        r0 = r2
        r0 += 8
        if r3 &amp;gt; r0 goto pc+1
        ...
Note that &amp;#39;r2 = (s32)r2&amp;#39; may make the kernel __sk_buff-&amp;gt;data address invalid
which may cause runtime failure.&lt;/p&gt;
&lt;p&gt;Currently, in C code, typically we have
        void *data = (void *)(long)skb-&amp;gt;data;
        void *data_end = (void *)(long)skb-&amp;gt;data_end;
        ...
and it will generate
        r2 = *(u64 *)(r1 +208)
        r3 = *(u64 *)(r1 +80)
        r0 = r2
        r0 += 8
        if r3 &amp;gt; r0 goto pc+1&lt;/p&gt;
&lt;p&gt;If we allow sign-extension,
        void *data = (void *)(long)(int)skb-&amp;gt;data;
        void *data_end = (void *)(long)skb-&amp;gt;data_end;
        ...
the generated code looks like
        r2 = *(u64 *)(r1 +208)
        r2 &amp;lt;&amp;lt;= 3…&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;bpf: Fail verification for sign-extension of packet data/data_end/data_meta&lt;/p&gt;
&lt;p&gt;syzbot reported a kernel crash due to
  commit 1f1e864b6555 (&amp;#34;bpf: Handle sign-extenstin ctx member accesses&amp;#34;).
The reason is due to sign-extension of 32-bit load for
packet data/data_end/data_meta uapi field.&lt;/p&gt;
&lt;p&gt;The original code looks like:
        r2 = *(s32 *)(r1 + 76) /* load __sk_buff-&amp;gt;data */
        r3 = *(u32 *)(r1 + 80) /* load __sk_buff-&amp;gt;data_end */
        r0 = r2
        r0 += 8
        if r3 &amp;gt; r0 goto +1
        ...
Note that __sk_buff-&amp;gt;data load has 32-bit sign extension.&lt;/p&gt;
&lt;p&gt;After verification and convert_ctx_accesses(), the final asm code looks like:
        r2 = *(u64 *)(r1 +208)
        r2 = (s32)r2
        r3 = *(u64 *)(r1 +80)
        r0 = r2
        r0 += 8
        if r3 &amp;gt; r0 goto pc+1
        ...
Note that &amp;#39;r2 = (s32)r2&amp;#39; may make the kernel __sk_buff-&amp;gt;data address invalid
which may cause runtime failure.&lt;/p&gt;
&lt;p&gt;Currently, in C code, typically we have
        void *data = (void *)(long)skb-&amp;gt;data;
        void *data_end = (void *)(long)skb-&amp;gt;data_end;
        ...
and it will generate
        r2 = *(u64 *)(r1 +208)
        r3 = *(u64 *)(r1 +80)
        r0 = r2
        r0 += 8
        if r3 &amp;gt; r0 goto pc+1&lt;/p&gt;
&lt;p&gt;If we allow sign-extension,
        void *data = (void *)(long)(int)skb-&amp;gt;data;
        void *data_end = (void *)(long)skb-&amp;gt;data_end;
        ...
the generated code looks like
        r2 = *(u64 *)(r1 +208)
        r2 &amp;lt;&amp;lt;= 3…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2024-47702</guid>
    </item>
  </channel>
</rss>
