{"id":"CVE-2026-72380","state":"PUBLISHED","title":"xen/pvcalls: bound backend response req_id before indexing rsp[]","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nxen/pvcalls: bound backend response req_id before indexing rsp[]\n\npvcalls_front_event_handler() takes req_id directly from the\nbackend-supplied ring response and uses it to index the fixed-size\nbedata->rsp[] array for a memcpy() and a store, with no range check. A\nmalicious or buggy backend can set req_id past PVCALLS_NR_RSP_PER_RING\nand drive an out-of-bounds write past the bedata allocation.\n\nreq_id was also declared int while the wire field rsp->req_id is u32, so\na range check on the signed value alone is insufficient: a backend\nreq_id of 0xffffffff becomes -1, passes a >= PVCALLS_NR_RSP_PER_RING\ntest and indexes bedata->rsp[-1]. Declare req_id as u32 so a single\nbound covers both ends.\n\nA backend that sends an out-of-range req_id has violated the wire\nprotocol, so rather than silently dropping the response, log once and\nstop trusting the backend: set bedata->disabled. The event handler then\nignores further responses, and the request paths that wait for a\nresponse return -EIO instead of blocking forever. This mirrors the\nfatal-error handling xen-netback uses (xenvif_fatal_tx_err()).\n\nThe pvcalls frontend currently trusts its backend, so this is not a\nclassic-Xen security issue, but it matters for hardening PV frontends\nagainst malicious backends (confidential and disaggregated deployments).","publishedAt":"2026-08-15T05:56:12.866Z","updatedAt":"2026-10-30T12:29:12.462Z","severity":{"score":8.8,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"4aaf7f32f1569e2c0475e073b8d7ec63b231d4c6","versionType":"git"},{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"72e27ef70a20298e60a1de438f3628c515dea895","versionType":"git"},{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"ede7a60b046d8b7288651c55198574ed7c259da7","versionType":"git"},{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"bc8f2d1c6f7cf6e6551c00eb582baf4b52a04794","versionType":"git"},{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"d1297a9e2fd6ce08678b370d41bc980ca798f809","versionType":"git"},{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"d33846c8dcc06b83b7acdeac1e8bfbb5c0c26cb2","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/xen/pvcalls-front.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.15","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.15","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.114","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.57","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.1.5","status":"unaffected","lessThanOrEqual":"7.1.*","versionType":"semver"},{"version":"7.2","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/xen/pvcalls-front.c"]}],"references":["https://git.kernel.org/stable/c/4aaf7f32f1569e2c0475e073b8d7ec63b231d4c6","https://git.kernel.org/stable/c/72e27ef70a20298e60a1de438f3628c515dea895","https://git.kernel.org/stable/c/ede7a60b046d8b7288651c55198574ed7c259da7","https://git.kernel.org/stable/c/bc8f2d1c6f7cf6e6551c00eb582baf4b52a04794","https://git.kernel.org/stable/c/d1297a9e2fd6ce08678b370d41bc980ca798f809","https://git.kernel.org/stable/c/d33846c8dcc06b83b7acdeac1e8bfbb5c0c26cb2"],"weaknesses":[],"ingestedAt":"2026-10-30T12:48:04.825Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/72xxx/CVE-2026-72380.json","commit":"1f312381e38164a43607eebab851b151dd16861e","baselineCommit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-72380","state":"PUBLISHED","datePublished":"2026-08-15T05:56:12.866Z","dateUpdated":"2026-10-30T12:29:12.462Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-08-09T03:40:39.922Z"},"containers":{"cna":{"title":"xen/pvcalls: bound backend response req_id before indexing rsp[]","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nxen/pvcalls: bound backend response req_id before indexing rsp[]\n\npvcalls_front_event_handler() takes req_id directly from the\nbackend-supplied ring response and uses it to index the fixed-size\nbedata->rsp[] array for a memcpy() and a store, with no range check. A\nmalicious or buggy backend can set req_id past PVCALLS_NR_RSP_PER_RING\nand drive an out-of-bounds write past the bedata allocation.\n\nreq_id was also declared int while the wire field rsp->req_id is u32, so\na range check on the signed value alone is insufficient: a backend\nreq_id of 0xffffffff becomes -1, passes a >= PVCALLS_NR_RSP_PER_RING\ntest and indexes bedata->rsp[-1]. Declare req_id as u32 so a single\nbound covers both ends.\n\nA backend that sends an out-of-range req_id has violated the wire\nprotocol, so rather than silently dropping the response, log once and\nstop trusting the backend: set bedata->disabled. The event handler then\nignores further responses, and the request paths that wait for a\nresponse return -EIO instead of blocking forever. This mirrors the\nfatal-error handling xen-netback uses (xenvif_fatal_tx_err()).\n\nThe pvcalls frontend currently trusts its backend, so this is not a\nclassic-Xen security issue, but it matters for hardening PV frontends\nagainst malicious backends (confidential and disaggregated deployments)."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"4aaf7f32f1569e2c0475e073b8d7ec63b231d4c6","versionType":"git"},{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"72e27ef70a20298e60a1de438f3628c515dea895","versionType":"git"},{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"ede7a60b046d8b7288651c55198574ed7c259da7","versionType":"git"},{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"bc8f2d1c6f7cf6e6551c00eb582baf4b52a04794","versionType":"git"},{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"d1297a9e2fd6ce08678b370d41bc980ca798f809","versionType":"git"},{"version":"2195046bfd69e487d9a76dc47840f15c8412840c","status":"affected","lessThan":"d33846c8dcc06b83b7acdeac1e8bfbb5c0c26cb2","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/xen/pvcalls-front.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.15","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.15","versionType":"semver"},{"version":"6.1.191","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.160","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.114","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.57","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.1.5","status":"unaffected","lessThanOrEqual":"7.1.*","versionType":"semver"},{"version":"7.2","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/xen/pvcalls-front.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/4aaf7f32f1569e2c0475e073b8d7ec63b231d4c6"},{"url":"https://git.kernel.org/stable/c/72e27ef70a20298e60a1de438f3628c515dea895"},{"url":"https://git.kernel.org/stable/c/ede7a60b046d8b7288651c55198574ed7c259da7"},{"url":"https://git.kernel.org/stable/c/bc8f2d1c6f7cf6e6551c00eb582baf4b52a04794"},{"url":"https://git.kernel.org/stable/c/d1297a9e2fd6ce08678b370d41bc980ca798f809"},{"url":"https://git.kernel.org/stable/c/d33846c8dcc06b83b7acdeac1e8bfbb5c0c26cb2"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":8.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:A - The bug is reached when a malicious Xen PVCalls backend writes crafted responses into the shared grant-table ring and notifies the guest frontend via an inter-domain event channel; this is an adjacent on-host backend-to-guest path, not remote IP delivery to the guest.\nAC:L - A compromised backend fully controls ring response contents and can set any req_id (including 0xffffffff for rsp[-1]) and re-notify the frontend IRQ at will; no races or attacker-uncontrollable heap layout are required to trigger the out-of-bounds write.\nPR:N - No credentials inside the vulnerable guest are needed; once the pvcalls frontend is xenbus-connected to a backend, that backend alone can inject the malformed response. Backend/domain control is the attack position, not privileges obtainable in the guest via user namespaces.\nUI:N - No victim user or application action is required after xenbus binds the pvcalls frontend to its backend; backend-driven ring writes and event-channel interrupts alone reach pvcalls_front_event_handler() without mounts, socket use, or other interactive steps.\nS:U - The out-of-bounds write corrupts kmalloc heap memory and kernel objects within the guest running the pvcalls frontend. This is backend-to-guest hardening, not a demonstrated guest-to-host or hypervisor escape across the VM security boundary.\nC:H - Backend-chosen req_id indexes bedata->rsp[] out of bounds for a ~20-byte memcpy plus req_id store, corrupting adjacent kernel heap memory (including rsp[-1] via the signed req_id bug) and enabling plausible arbitrary kernel memory disclosure if shaped further.\nI:H - The heap out-of-bounds write can overwrite adjacent kmalloc objects or allocator metadata, providing a credible path to arbitrary guest-kernel memory modification and control-flow hijack rather than being limited to a bounded or non-security integrity effect.\nA:H - Corrupting kernel heap structures via the unbounded rsp[] indexing can immediately panic or oops the guest kernel; even unexploited attempts are likely to crash or disable the frontend, causing total loss of guest availability."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-30T12:29:12.462Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.15","versionEndExcluding":"6.1.191"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.15","versionEndExcluding":"6.6.160"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.15","versionEndExcluding":"6.12.114"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.15","versionEndExcluding":"6.18.57"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.15","versionEndExcluding":"7.1.5"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.15","versionEndExcluding":"7.2"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}}}}}