{
    "dataType": "CVE_RECORD",
    "dataVersion": "5.2",
    "cveMetadata": {
        "cveId": "CVE-2022-49407",
        "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "state": "PUBLISHED",
        "assignerShortName": "Linux",
        "dateReserved": "2025-02-26T02:08:31.566Z",
        "datePublished": "2025-02-26T02:12:31.562Z",
        "dateUpdated": "2026-08-05T08:55:03.171Z"
    },
    "containers": {
        "cna": {
            "providerMetadata": {
                "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
                "shortName": "Linux",
                "dateUpdated": "2026-08-05T08:55:03.171Z"
            },
            "descriptions": [
                {
                    "lang": "en",
                    "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ndlm: fix plock invalid read\n\nThis patch fixes an invalid read showed by KASAN. A unlock will allocate a\n\"struct plock_op\" and a followed send_op() will append it to a global\nsend_list data structure. In some cases a followed dev_read() moves it\nto recv_list and dev_write() will cast it to \"struct plock_xop\" and access\nfields which are only available in those structures. At this point an\ninvalid read happens by accessing those fields.\n\nTo fix this issue the \"callback\" field is moved to \"struct plock_op\" to\nindicate that a cast to \"plock_xop\" is allowed and does the additional\n\"plock_xop\" handling if set.\n\nExample of the KASAN output which showed the invalid read:\n\n[ 2064.296453] ==================================================================\n[ 2064.304852] BUG: KASAN: slab-out-of-bounds in dev_write+0x52b/0x5a0 [dlm]\n[ 2064.306491] Read of size 8 at addr ffff88800ef227d8 by task dlm_controld/7484\n[ 2064.308168]\n[ 2064.308575] CPU: 0 PID: 7484 Comm: dlm_controld Kdump: loaded Not tainted 5.14.0+ #9\n[ 2064.310292] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011\n[ 2064.311618] Call Trace:\n[ 2064.312218]  dump_stack_lvl+0x56/0x7b\n[ 2064.313150]  print_address_description.constprop.8+0x21/0x150\n[ 2064.314578]  ? dev_write+0x52b/0x5a0 [dlm]\n[ 2064.315610]  ? dev_write+0x52b/0x5a0 [dlm]\n[ 2064.316595]  kasan_report.cold.14+0x7f/0x11b\n[ 2064.317674]  ? dev_write+0x52b/0x5a0 [dlm]\n[ 2064.318687]  dev_write+0x52b/0x5a0 [dlm]\n[ 2064.319629]  ? dev_read+0x4a0/0x4a0 [dlm]\n[ 2064.320713]  ? bpf_lsm_kernfs_init_security+0x10/0x10\n[ 2064.321926]  vfs_write+0x17e/0x930\n[ 2064.322769]  ? __fget_light+0x1aa/0x220\n[ 2064.323753]  ksys_write+0xf1/0x1c0\n[ 2064.324548]  ? __ia32_sys_read+0xb0/0xb0\n[ 2064.325464]  do_syscall_64+0x3a/0x80\n[ 2064.326387]  entry_SYSCALL_64_after_hwframe+0x44/0xae\n[ 2064.327606] RIP: 0033:0x7f807e4ba96f\n[ 2064.328470] Code: 89 54 24 18 48 89 74 24 10 89 7c 24 08 e8 39 87 f8 ff 48 8b 54 24 18 48 8b 74 24 10 41 89 c0 8b 7c 24 08 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 31 44 89 c7 48 89 44 24 08 e8 7c 87 f8 ff 48\n[ 2064.332902] RSP: 002b:00007ffd50cfe6e0 EFLAGS: 00000293 ORIG_RAX: 0000000000000001\n[ 2064.334658] RAX: ffffffffffffffda RBX: 000055cc3886eb30 RCX: 00007f807e4ba96f\n[ 2064.336275] RDX: 0000000000000040 RSI: 00007ffd50cfe7e0 RDI: 0000000000000010\n[ 2064.337980] RBP: 00007ffd50cfe7e0 R08: 0000000000000000 R09: 0000000000000001\n[ 2064.339560] R10: 000055cc3886eb30 R11: 0000000000000293 R12: 000055cc3886eb80\n[ 2064.341237] R13: 000055cc3886eb00 R14: 000055cc3886f590 R15: 0000000000000001\n[ 2064.342857]\n[ 2064.343226] Allocated by task 12438:\n[ 2064.344057]  kasan_save_stack+0x1c/0x40\n[ 2064.345079]  __kasan_kmalloc+0x84/0xa0\n[ 2064.345933]  kmem_cache_alloc_trace+0x13b/0x220\n[ 2064.346953]  dlm_posix_unlock+0xec/0x720 [dlm]\n[ 2064.348811]  do_lock_file_wait.part.32+0xca/0x1d0\n[ 2064.351070]  fcntl_setlk+0x281/0xbc0\n[ 2064.352879]  do_fcntl+0x5e4/0xfe0\n[ 2064.354657]  __x64_sys_fcntl+0x11f/0x170\n[ 2064.356550]  do_syscall_64+0x3a/0x80\n[ 2064.358259]  entry_SYSCALL_64_after_hwframe+0x44/0xae\n[ 2064.360745]\n[ 2064.361511] Last potentially related work creation:\n[ 2064.363957]  kasan_save_stack+0x1c/0x40\n[ 2064.365811]  __kasan_record_aux_stack+0xaf/0xc0\n[ 2064.368100]  call_rcu+0x11b/0xf70\n[ 2064.369785]  dlm_process_incoming_buffer+0x47d/0xfd0 [dlm]\n[ 2064.372404]  receive_from_sock+0x290/0x770 [dlm]\n[ 2064.374607]  process_recv_sockets+0x32/0x40 [dlm]\n[ 2064.377290]  process_one_work+0x9a8/0x16e0\n[ 2064.379357]  worker_thread+0x87/0xbf0\n[ 2064.381188]  kthread+0x3ac/0x490\n[ 2064.383460]  ret_from_fork+0x22/0x30\n[ 2064.385588]\n[ 2064.386518] Second to last potentially related work creation:\n[ 2064.389219]  kasan_save_stack+0x1c/0x40\n[ 2064.391043]  __kasan_record_aux_stack+0xaf/0xc0\n[ 2064.393303]  call_rcu+0x11b/0xf70\n[ 2064.394885]  dlm_process_incoming_buffer+0x47d/0xfd0 [dlm]\n[ 2064.397694]  receive_from_sock+0x290/0x770 \n---truncated---"
                }
            ],
            "metrics": [
                {
                    "cvssV3_1": {
                        "version": "3.1",
                        "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
                        "baseScore": 9.8,
                        "baseSeverity": "CRITICAL"
                    },
                    "scenarios": [
                        {
                            "lang": "en",
                            "value": "AV:N - GFS2 and OCFS2 use dlm_posix_unlock for posix locks and are NFS-exportable; remote NLM/NFSv4 unlock reaches vfs_lock_file → gfs2_lock/ocfs2 plock → dlm_posix_unlock, and the plock_xop path exists specifically for NFS lock support.\nAC:L - Any unlock/get that queues a small plock_op and gets a userspace reply reliably hits the out-of-bounds callback read; shaping adjacent kmalloc-96 residue so the stale callback is non-NULL is attacker-influenced heap grooming, not an uncontrollable condition.\nPR:N - A remote NFS client can issue lock/unlock on a writable exported GFS2/OCFS2 share without local shell access or capabilities; on permissive/anonymous exports no prior authenticated privileges are required.\nUI:N - No victim interaction is required once the cluster filesystem is mounted and exported; the attacker triggers the path directly with lock/unlock requests.\nS:U - Impact stays inside the host kernel security authority (memory safety / privilege escalation on that node), with no VM escape or other cross-boundary scope change.\nC:H - Unlock allocates sizeof(plock_op) (~88B) but dev_write treats it as plock_xop and reads a stale callback past the allocation; a non-NULL value enters dlm_plock_callback and further out-of-bounds pointer reads, which is defensibly a high confidentiality memory-corruption primitive.\nI:H - When the out-of-bounds callback is non-NULL, dlm_plock_callback invokes that function pointer on attacker-influenced adjacent memory, enabling control-flow hijacking / integrity compromise.\nA:H - Calling through a garbage callback or further out-of-bounds accesses can oops/panic the kernel; even the KASAN report is an invalid slab read during normal unlock completion."
                        }
                    ]
                }
            ],
            "affected": [
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "unaffected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "fs/dlm/plock.c"
                    ],
                    "versions": [
                        {
                            "version": "586759f03e2e9031ac5589912a51a909ed53c30a",
                            "lessThan": "2c55155cc365861044d9e6e80e342693e8805e33",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "586759f03e2e9031ac5589912a51a909ed53c30a",
                            "lessThan": "72f2f68970f9bdc252d59e119b385a6441b0b155",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "586759f03e2e9031ac5589912a51a909ed53c30a",
                            "lessThan": "5a1765adf9855cf0f6d3f7e0eb4b78ca66f70dee",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "586759f03e2e9031ac5589912a51a909ed53c30a",
                            "lessThan": "49cd9eb7b9a7b88124b31e31f8e539acaf1b3a6d",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "586759f03e2e9031ac5589912a51a909ed53c30a",
                            "lessThan": "899bc4429174861122f0c236588700a4710c1fec",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "586759f03e2e9031ac5589912a51a909ed53c30a",
                            "lessThan": "acdad5bc9827922ec2f2e84fd198718aa8e8ab92",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "586759f03e2e9031ac5589912a51a909ed53c30a",
                            "lessThan": "56aa8d1fbd02357f3bf81bdfba1cde87ce8402fc",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "586759f03e2e9031ac5589912a51a909ed53c30a",
                            "lessThan": "e421872fa17542cf33747071fb141b0130ce9ef7",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "586759f03e2e9031ac5589912a51a909ed53c30a",
                            "lessThan": "42252d0d2aa9b94d168241710a761588b3959019",
                            "status": "affected",
                            "versionType": "git"
                        }
                    ]
                },
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "affected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "fs/dlm/plock.c"
                    ],
                    "versions": [
                        {
                            "version": "2.6.22",
                            "status": "affected"
                        },
                        {
                            "version": "0",
                            "lessThan": "2.6.22",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "4.9.318",
                            "lessThanOrEqual": "4.9.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "4.14.283",
                            "lessThanOrEqual": "4.14.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "4.19.247",
                            "lessThanOrEqual": "4.19.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.4.198",
                            "lessThanOrEqual": "5.4.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.10.121",
                            "lessThanOrEqual": "5.10.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.15.46",
                            "lessThanOrEqual": "5.15.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.17.14",
                            "lessThanOrEqual": "5.17.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.18.3",
                            "lessThanOrEqual": "5.18.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "5.19",
                            "lessThanOrEqual": "*",
                            "status": "unaffected",
                            "versionType": "original_commit_for_fix"
                        }
                    ]
                }
            ],
            "cpeApplicability": [
                {
                    "nodes": [
                        {
                            "operator": "OR",
                            "negate": false,
                            "cpeMatch": [
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.22",
                                    "versionEndExcluding": "4.9.318"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.22",
                                    "versionEndExcluding": "4.14.283"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.22",
                                    "versionEndExcluding": "4.19.247"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.22",
                                    "versionEndExcluding": "5.4.198"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.22",
                                    "versionEndExcluding": "5.10.121"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.22",
                                    "versionEndExcluding": "5.15.46"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.22",
                                    "versionEndExcluding": "5.17.14"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.22",
                                    "versionEndExcluding": "5.18.3"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "2.6.22",
                                    "versionEndExcluding": "5.19"
                                }
                            ]
                        }
                    ]
                }
            ],
            "references": [
                {
                    "url": "https://git.kernel.org/stable/c/2c55155cc365861044d9e6e80e342693e8805e33"
                },
                {
                    "url": "https://git.kernel.org/stable/c/72f2f68970f9bdc252d59e119b385a6441b0b155"
                },
                {
                    "url": "https://git.kernel.org/stable/c/5a1765adf9855cf0f6d3f7e0eb4b78ca66f70dee"
                },
                {
                    "url": "https://git.kernel.org/stable/c/49cd9eb7b9a7b88124b31e31f8e539acaf1b3a6d"
                },
                {
                    "url": "https://git.kernel.org/stable/c/899bc4429174861122f0c236588700a4710c1fec"
                },
                {
                    "url": "https://git.kernel.org/stable/c/acdad5bc9827922ec2f2e84fd198718aa8e8ab92"
                },
                {
                    "url": "https://git.kernel.org/stable/c/56aa8d1fbd02357f3bf81bdfba1cde87ce8402fc"
                },
                {
                    "url": "https://git.kernel.org/stable/c/e421872fa17542cf33747071fb141b0130ce9ef7"
                },
                {
                    "url": "https://git.kernel.org/stable/c/42252d0d2aa9b94d168241710a761588b3959019"
                }
            ],
            "title": "dlm: fix plock invalid read",
            "x_generator": {
                "engine": "bippy-1.2.0"
            }
        }
    }
}