CVE-2026-90413 (GCVE-0-2026-90413)

Vulnerability from cvelistv5 – Published: 2026-09-17 16:09 – Updated: 2026-09-18 17:55
VLAI
Title
IB/isert: reject login PDUs declaring more data than was received
Summary
In the Linux kernel, the following vulnerability has been resolved: IB/isert: reject login PDUs declaring more data than was received isert_login_recv_done() records how many bytes the HCA actually placed in the login buffer, but nothing compares that against the length the login PDU's BHS declares. isert_rx_login_req() copies min(login_req_len, MAX_KEY_VALUE_PAIRS) bytes into login->req_buf, and the login code then reads the declared length back out of that buffer - for the first PDU in iscsi_target_locate_portal(), payload_length = ntoh24(login_req->dlength); tmpbuf = kmemdup_nul(login->req_buf, payload_length, GFP_KERNEL); and for the ones after it in iscsi_decode_text_input(), reached from iscsi_target_do_login(). login->req_buf is a fixed MAX_KEY_VALUE_PAIRS (8192) byte allocation, so an initiator that declares more than it sends reads off the end of it, before authentication and with the length under its control: BUG: KASAN: slab-out-of-bounds in kmemdup_nul+0x43/0x80 Read of size 8193 at addr ffff8881056a8000 by task iscsi_np/167 __asan_memcpy+0x23/0x60 kmemdup_nul+0x43/0x80 iscsi_target_locate_portal+0x48d/0x1180 iscsi_target_login_thread+0x19a9/0x3350 Allocated by task 167: __kmalloc_cache_noprof+0x158/0x370 iscsi_target_login_thread+0x971/0x3350 which belongs to the cache kmalloc-8k of size 8192 allocated 8192-byte region Falsifying the second login PDU instead reaches the other reader, on the same buffer: BUG: KASAN: slab-out-of-bounds in kmemdup_nul+0x43/0x80 Read of size 8193 at addr ffff888104d10000 by task kworker/1:1/50 Workqueue: isert_login_wq iscsi_target_do_login_rx __asan_memcpy+0x23/0x60 kmemdup_nul+0x43/0x80 iscsi_decode_text_input+0xc6/0x11c0 iscsi_target_do_login+0x261/0x1470 iscsi_target_do_login_rx+0x51d/0x7d0 iscsit over TCP is not exposed: iscsit_get_login_rx() validates the declared length with iscsi_target_check_login_request() and then reads exactly that many bytes off the socket, so the declared length governs how much arrives rather than how much is copied out of an already-filled buffer. isert does not call iscsi_target_check_login_request() at all. Reject a login PDU whose declared DataSegmentLength exceeds what was received, in both paths that reach isert_rx_login_req(): isert_get_login_rx() for the first login PDU and isert_login_recv_done() for the ones after it. dlength <= login_req_len is allowed because the received count can include up to three bytes of iSCSI padding. Once the check is in place the copy out can no longer exceed the copy in: the posted login SGE is ISER_RX_PAYLOAD_SIZE, so login_req_len cannot exceed MAX_KEY_VALUE_PAIRS and the min() in isert_rx_login_req() is login_req_len. Like the existing short-PDU check added by 29e7b925ae6d, the reject in isert_login_recv_done() returns without completing login_req_comp, so a malformed subsequent PDU leaves the login to be torn down by the login timer rather than failing immediately. The first-PDU path returns an error and fails straight away. Reproduced on 7.2.0-rc4 with soft-RoCE (rdma_rxe) under KASAN, using an initiator that sends the real key=value payload while declaring 8193 in the BHS, on the first login PDU and on the second in separate runs. The reported read size tracks the declared value exactly; 16384 and 61440 behave the same. Unpatched 3 of 3 runs report on each of the two paths, patched 0 of 3 on both, run alternately in a single session, and a normal login still completes on the patched build.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: b8d26b3be8b33682cf163274ed07479a70554633 , < b1f3313e7b3e396e4985fea5c709477387e0a065 (git)
Affected: b8d26b3be8b33682cf163274ed07479a70554633 , < 228aaa620fe6a7bc8b5b21dd348b4836b1760c61 (git)
Affected: b8d26b3be8b33682cf163274ed07479a70554633 , < 0d9c0586af703890afe1bd0cfe641e3a3af1c32d (git)
Affected: b8d26b3be8b33682cf163274ed07479a70554633 , < 44fe800ec13386c88bd5b32bcd1deaa1e17535d5 (git)
Affected: b8d26b3be8b33682cf163274ed07479a70554633 , < 71ec8bbfa4a183f1e623662f9cfbcd702e433bdb (git)
Affected: b8d26b3be8b33682cf163274ed07479a70554633 , < c345d9d0b3eefc990bb90cf565325785aab06aab (git)
Affected: b8d26b3be8b33682cf163274ed07479a70554633 , < 48812c8103071d550d9ab4a3431be5bdc52255bc (git)
Affected: b8d26b3be8b33682cf163274ed07479a70554633 , < 2488b5b4827e5415768afc8daf097e8eb83c98df (git)
guessed Create a notification for this product.
Linux Linux Affected: 3.10
Unaffected: 0 , < 3.10 (semver)
Unaffected: 5.10.270 , ≤ 5.10.* (semver)
Unaffected: 5.15.221 , ≤ 5.15.* (semver)
Unaffected: 6.1.188 , ≤ 6.1.* (semver)
Unaffected: 6.6.157 , ≤ 6.6.* (semver)
Unaffected: 6.12.110 , ≤ 6.12.* (semver)
Unaffected: 6.18.52 , ≤ 6.18.* (semver)
Unaffected: 7.2.6 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc1 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/infiniband/ulp/isert/ib_isert.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "b1f3313e7b3e396e4985fea5c709477387e0a065",
              "status": "affected",
              "version": "b8d26b3be8b33682cf163274ed07479a70554633",
              "versionType": "git"
            },
            {
              "lessThan": "228aaa620fe6a7bc8b5b21dd348b4836b1760c61",
              "status": "affected",
              "version": "b8d26b3be8b33682cf163274ed07479a70554633",
              "versionType": "git"
            },
            {
              "lessThan": "0d9c0586af703890afe1bd0cfe641e3a3af1c32d",
              "status": "affected",
              "version": "b8d26b3be8b33682cf163274ed07479a70554633",
              "versionType": "git"
            },
            {
              "lessThan": "44fe800ec13386c88bd5b32bcd1deaa1e17535d5",
              "status": "affected",
              "version": "b8d26b3be8b33682cf163274ed07479a70554633",
              "versionType": "git"
            },
            {
              "lessThan": "71ec8bbfa4a183f1e623662f9cfbcd702e433bdb",
              "status": "affected",
              "version": "b8d26b3be8b33682cf163274ed07479a70554633",
              "versionType": "git"
            },
            {
              "lessThan": "c345d9d0b3eefc990bb90cf565325785aab06aab",
              "status": "affected",
              "version": "b8d26b3be8b33682cf163274ed07479a70554633",
              "versionType": "git"
            },
            {
              "lessThan": "48812c8103071d550d9ab4a3431be5bdc52255bc",
              "status": "affected",
              "version": "b8d26b3be8b33682cf163274ed07479a70554633",
              "versionType": "git"
            },
            {
              "lessThan": "2488b5b4827e5415768afc8daf097e8eb83c98df",
              "status": "affected",
              "version": "b8d26b3be8b33682cf163274ed07479a70554633",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/infiniband/ulp/isert/ib_isert.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "3.10"
            },
            {
              "lessThan": "3.10",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.270",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.221",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.188",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.157",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.110",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.52",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.6",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.270",
                  "versionStartIncluding": "3.10",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.221",
                  "versionStartIncluding": "3.10",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.188",
                  "versionStartIncluding": "3.10",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.157",
                  "versionStartIncluding": "3.10",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.110",
                  "versionStartIncluding": "3.10",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.52",
                  "versionStartIncluding": "3.10",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.6",
                  "versionStartIncluding": "3.10",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "3.10",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nIB/isert: reject login PDUs declaring more data than was received\n\nisert_login_recv_done() records how many bytes the HCA actually placed in\nthe login buffer, but nothing compares that against the length the login\nPDU\u0027s BHS declares.  isert_rx_login_req() copies min(login_req_len,\nMAX_KEY_VALUE_PAIRS) bytes into login-\u003ereq_buf, and the login code then\nreads the declared length back out of that buffer - for the first PDU in\niscsi_target_locate_portal(),\n\n\tpayload_length = ntoh24(login_req-\u003edlength);\n\ttmpbuf = kmemdup_nul(login-\u003ereq_buf, payload_length, GFP_KERNEL);\n\nand for the ones after it in iscsi_decode_text_input(), reached from\niscsi_target_do_login().\n\nlogin-\u003ereq_buf is a fixed MAX_KEY_VALUE_PAIRS (8192) byte allocation, so\nan initiator that declares more than it sends reads off the end of it,\nbefore authentication and with the length under its control:\n\n  BUG: KASAN: slab-out-of-bounds in kmemdup_nul+0x43/0x80\n  Read of size 8193 at addr ffff8881056a8000 by task iscsi_np/167\n   __asan_memcpy+0x23/0x60\n   kmemdup_nul+0x43/0x80\n   iscsi_target_locate_portal+0x48d/0x1180\n   iscsi_target_login_thread+0x19a9/0x3350\n  Allocated by task 167:\n   __kmalloc_cache_noprof+0x158/0x370\n   iscsi_target_login_thread+0x971/0x3350\n  which belongs to the cache kmalloc-8k of size 8192\n  allocated 8192-byte region\n\nFalsifying the second login PDU instead reaches the other reader, on the\nsame buffer:\n\n  BUG: KASAN: slab-out-of-bounds in kmemdup_nul+0x43/0x80\n  Read of size 8193 at addr ffff888104d10000 by task kworker/1:1/50\n  Workqueue: isert_login_wq iscsi_target_do_login_rx\n   __asan_memcpy+0x23/0x60\n   kmemdup_nul+0x43/0x80\n   iscsi_decode_text_input+0xc6/0x11c0\n   iscsi_target_do_login+0x261/0x1470\n   iscsi_target_do_login_rx+0x51d/0x7d0\n\niscsit over TCP is not exposed: iscsit_get_login_rx() validates the\ndeclared length with iscsi_target_check_login_request() and then reads\nexactly that many bytes off the socket, so the declared length governs\nhow much arrives rather than how much is copied out of an already-filled\nbuffer.  isert does not call iscsi_target_check_login_request() at all.\n\nReject a login PDU whose declared DataSegmentLength exceeds what was\nreceived, in both paths that reach isert_rx_login_req():\nisert_get_login_rx() for the first login PDU and isert_login_recv_done()\nfor the ones after it.  dlength \u003c= login_req_len is allowed because the\nreceived count can include up to three bytes of iSCSI padding.\n\nOnce the check is in place the copy out can no longer exceed the copy in:\nthe posted login SGE is ISER_RX_PAYLOAD_SIZE, so login_req_len cannot\nexceed MAX_KEY_VALUE_PAIRS and the min() in isert_rx_login_req() is\nlogin_req_len.\n\nLike the existing short-PDU check added by 29e7b925ae6d, the reject in\nisert_login_recv_done() returns without completing login_req_comp, so a\nmalformed subsequent PDU leaves the login to be torn down by the login\ntimer rather than failing immediately.  The first-PDU path returns an\nerror and fails straight away.\n\nReproduced on 7.2.0-rc4 with soft-RoCE (rdma_rxe) under KASAN, using an\ninitiator that sends the real key=value payload while declaring 8193 in\nthe BHS, on the first login PDU and on the second in separate runs.  The\nreported read size tracks the declared value exactly; 16384 and 61440\nbehave the same.  Unpatched 3 of 3 runs report on each of the two paths,\npatched 0 of 3 on both, run alternately in a single session, and a normal\nlogin still completes on the patched build."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 9.1,
            "baseSeverity": "CRITICAL",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:N - The forged length is the iSCSI Login Request BHS DataSegmentLength (hdr-\u003edlength) delivered in an RDMA Send that completes in isert_login_recv_done(); isert_setup_id() rdma_bind_addr()/rdma_listen()s that portal on an IP sockaddr with RDMA_PS_TCP (RoCEv2/iWARP), so the bytes arrive on a routable IP transport.\nAC:L - The initiator sets dlength independently of wc-\u003ebyte_len. isert_rx_login_req() copies only min(login_req_len, MAX_KEY_VALUE_PAIRS) into login-\u003ereq_buf, then iscsi_target_locate_portal()/iscsi_decode_text_input() pass ntoh24(dlength) to kmemdup_nul(); declared lengths 8193, 16384 and 61440 hit with no race.\nPR:N - iscsi_target_locate_portal() runs in iscsi_target_login_thread() immediately after isert_get_login_rx() returns the first Login Request, before iscsi_target_start_negotiation() or CHAP; isert_connect_request() accepts the RDMA CM CONNECT_REQUEST whenever np-\u003eenabled, with no credentials.\nUI:N - The attacker itself performs the RDMA CM connect and sends the crafted Login Request; no local user action is required once the isert portal is already listening.\nS:U - kmemdup_nul() over-reads the host kernel\u0027s login-\u003ereq_buf in iscsi_target_locate_portal() and iscsi_decode_text_input() on the iSER target; the impact stays in that kernel and does not cross a guest/host or IOMMU boundary.\nC:H - ntoh24(login_req-\u003edlength) is a 24-bit attacker-chosen size passed to kmemdup_nul(login-\u003ereq_buf, payload_length), which memcpy-reads that many bytes from the 8192-byte req_buf object, an unbounded slab-out-of-bounds read of adjacent kernel memory rather than a few-byte leak.\nI:N - kmemdup_nul() writes only into a newly allocated tmpbuf of size payload_length+1, so the bug is a source over-read of req_buf, not a write into neighboring objects; parsing that copy as key=value does not give the initiator an attacker-controlled kernel write.\nA:H - KASAN reports a slab-out-of-bounds read in kmemdup_nul() from iscsi_target_locate_portal() on the first PDU and from iscsi_decode_text_input() on later PDUs; a declared length of 61440 walks tens of kilobytes past the kmalloc-8k object and faults the target."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-18T17:55:14.522Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/b1f3313e7b3e396e4985fea5c709477387e0a065"
        },
        {
          "url": "https://git.kernel.org/stable/c/228aaa620fe6a7bc8b5b21dd348b4836b1760c61"
        },
        {
          "url": "https://git.kernel.org/stable/c/0d9c0586af703890afe1bd0cfe641e3a3af1c32d"
        },
        {
          "url": "https://git.kernel.org/stable/c/44fe800ec13386c88bd5b32bcd1deaa1e17535d5"
        },
        {
          "url": "https://git.kernel.org/stable/c/71ec8bbfa4a183f1e623662f9cfbcd702e433bdb"
        },
        {
          "url": "https://git.kernel.org/stable/c/c345d9d0b3eefc990bb90cf565325785aab06aab"
        },
        {
          "url": "https://git.kernel.org/stable/c/48812c8103071d550d9ab4a3431be5bdc52255bc"
        },
        {
          "url": "https://git.kernel.org/stable/c/2488b5b4827e5415768afc8daf097e8eb83c98df"
        }
      ],
      "title": "IB/isert: reject login PDUs declaring more data than was received",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-90413",
    "datePublished": "2026-09-17T16:09:39.383Z",
    "dateReserved": "2026-09-11T19:38:34.813Z",
    "dateUpdated": "2026-09-18T17:55:14.522Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-90413",
      "date": "2026-09-27",
      "epss": "0.00866",
      "percentile": "0.57041"
    },
    "microsoft_vex": {
      "current_release_date": "2026-09-24T01:33:19.000Z",
      "cve": "CVE-2026-90413",
      "id": "msrc_CVE-2026-90413",
      "initial_release_date": "2026-09-19T01:12:06.000Z",
      "product_status:fixed": "1",
      "product_status:known_affected": "2",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "IB/isert: reject login PDUs declaring more data than was received",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-90413.json",
      "version": "4"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/infiniband/ulp/isert/ib_isert.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "b1f3313e7b3e396e4985fea5c709477387e0a065",
                    "status": "affected",
                    "version": "b8d26b3be8b33682cf163274ed07479a70554633",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "228aaa620fe6a7bc8b5b21dd348b4836b1760c61",
                    "status": "affected",
                    "version": "b8d26b3be8b33682cf163274ed07479a70554633",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "0d9c0586af703890afe1bd0cfe641e3a3af1c32d",
                    "status": "affected",
                    "version": "b8d26b3be8b33682cf163274ed07479a70554633",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "44fe800ec13386c88bd5b32bcd1deaa1e17535d5",
                    "status": "affected",
                    "version": "b8d26b3be8b33682cf163274ed07479a70554633",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "71ec8bbfa4a183f1e623662f9cfbcd702e433bdb",
                    "status": "affected",
                    "version": "b8d26b3be8b33682cf163274ed07479a70554633",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "c345d9d0b3eefc990bb90cf565325785aab06aab",
                    "status": "affected",
                    "version": "b8d26b3be8b33682cf163274ed07479a70554633",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "48812c8103071d550d9ab4a3431be5bdc52255bc",
                    "status": "affected",
                    "version": "b8d26b3be8b33682cf163274ed07479a70554633",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "2488b5b4827e5415768afc8daf097e8eb83c98df",
                    "status": "affected",
                    "version": "b8d26b3be8b33682cf163274ed07479a70554633",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/infiniband/ulp/isert/ib_isert.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "3.10"
                  },
                  {
                    "lessThan": "3.10",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "5.10.*",
                    "status": "unaffected",
                    "version": "5.10.270",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "5.15.*",
                    "status": "unaffected",
                    "version": "5.15.221",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.1.*",
                    "status": "unaffected",
                    "version": "6.1.188",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.6.*",
                    "status": "unaffected",
                    "version": "6.6.157",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.110",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.52",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.6",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc1",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nIB/isert: reject login PDUs declaring more data than was received\n\nisert_login_recv_done() records how many bytes the HCA actually placed in\nthe login buffer, but nothing compares that against the length the login\nPDU\u0027s BHS declares.  isert_rx_login_req() copies min(login_req_len,\nMAX_KEY_VALUE_PAIRS) bytes into login-\u003ereq_buf, and the login code then\nreads the declared length back out of that buffer - for the first PDU in\niscsi_target_locate_portal(),\n\n\tpayload_length = ntoh24(login_req-\u003edlength);\n\ttmpbuf = kmemdup_nul(login-\u003ereq_buf, payload_length, GFP_KERNEL);\n\nand for the ones after it in iscsi_decode_text_input(), reached from\niscsi_target_do_login().\n\nlogin-\u003ereq_buf is a fixed MAX_KEY_VALUE_PAIRS (8192) byte allocation, so\nan initiator that declares more than it sends reads off the end of it,\nbefore authentication and with the length under its control:\n\n  BUG: KASAN: slab-out-of-bounds in kmemdup_nul+0x43/0x80\n  Read of size 8193 at addr ffff8881056a8000 by task iscsi_np/167\n   __asan_memcpy+0x23/0x60\n   kmemdup_nul+0x43/0x80\n   iscsi_target_locate_portal+0x48d/0x1180\n   iscsi_target_login_thread+0x19a9/0x3350\n  Allocated by task 167:\n   __kmalloc_cache_noprof+0x158/0x370\n   iscsi_target_login_thread+0x971/0x3350\n  which belongs to the cache kmalloc-8k of size 8192\n  allocated 8192-byte region\n\nFalsifying the second login PDU instead reaches the other reader, on the\nsame buffer:\n\n  BUG: KASAN: slab-out-of-bounds in kmemdup_nul+0x43/0x80\n  Read of size 8193 at addr ffff888104d10000 by task kworker/1:1/50\n  Workqueue: isert_login_wq iscsi_target_do_login_rx\n   __asan_memcpy+0x23/0x60\n   kmemdup_nul+0x43/0x80\n   iscsi_decode_text_input+0xc6/0x11c0\n   iscsi_target_do_login+0x261/0x1470\n   iscsi_target_do_login_rx+0x51d/0x7d0\n\niscsit over TCP is not exposed: iscsit_get_login_rx() validates the\ndeclared length with iscsi_target_check_login_request() and then reads\nexactly that many bytes off the socket, so the declared length governs\nhow much arrives rather than how much is copied out of an already-filled\nbuffer.  isert does not call iscsi_target_check_login_request() at all.\n\nReject a login PDU whose declared DataSegmentLength exceeds what was\nreceived, in both paths that reach isert_rx_login_req():\nisert_get_login_rx() for the first login PDU and isert_login_recv_done()\nfor the ones after it.  dlength \u003c= login_req_len is allowed because the\nreceived count can include up to three bytes of iSCSI padding.\n\nOnce the check is in place the copy out can no longer exceed the copy in:\nthe posted login SGE is ISER_RX_PAYLOAD_SIZE, so login_req_len cannot\nexceed MAX_KEY_VALUE_PAIRS and the min() in isert_rx_login_req() is\nlogin_req_len.\n\nLike the existing short-PDU check added by 29e7b925ae6d, the reject in\nisert_login_recv_done() returns without completing login_req_comp, so a\nmalformed subsequent PDU leaves the login to be torn down by the login\ntimer rather than failing immediately.  The first-PDU path returns an\nerror and fails straight away.\n\nReproduced on 7.2.0-rc4 with soft-RoCE (rdma_rxe) under KASAN, using an\ninitiator that sends the real key=value payload while declaring 8193 in\nthe BHS, on the first login PDU and on the second in separate runs.  The\nreported read size tracks the declared value exactly; 16384 and 61440\nbehave the same.  Unpatched 3 of 3 runs report on each of the two paths,\npatched 0 of 3 on both, run alternately in a single session, and a normal\nlogin still completes on the patched build."
          }
        ],
        "id": "CVE-2026-90413",
        "lastModified": "2026-09-18T18:17:58.063",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "NETWORK",
                "availabilityImpact": "HIGH",
                "baseScore": 9.1,
                "baseSeverity": "CRITICAL",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "NONE",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 3.9,
              "impactScore": 5.2,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-17T17:17:43.430",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/0d9c0586af703890afe1bd0cfe641e3a3af1c32d"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/228aaa620fe6a7bc8b5b21dd348b4836b1760c61"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/2488b5b4827e5415768afc8daf097e8eb83c98df"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/44fe800ec13386c88bd5b32bcd1deaa1e17535d5"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/48812c8103071d550d9ab4a3431be5bdc52255bc"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/71ec8bbfa4a183f1e623662f9cfbcd702e433bdb"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/b1f3313e7b3e396e4985fea5c709477387e0a065"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/c345d9d0b3eefc990bb90cf565325785aab06aab"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…