{"id":"CVE-2026-98989","kind":"vulnerability","aliases":["CVE-2026-98989"],"related":[],"title":"Linux kernel: recursive bind mount of namespace files leaks memory","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nnamespace: check a recursive bind mount for mount namespace loops\n\ndo_loopback() refuses to bind mount the file of a mount namespace that\nis as old as the caller's or older because a mount namespace that holds\na mount of its own file, or of an ancestor's, would cause a cycle. But\nit only checks the dentry the bind mount starts from. With MS_REC\neverything below it is copied and do_loopback() passes\nCL_COPY_MNT_NS_FILE so mount namespace files below the source are\ncopied.\n\nThat's fine for a source in the caller's own mount namespace. Every\nmount namespace file in there passed the same check when it was\nbind-mounted. It isn't fine for a source in another mount namespace.\nmay_copy_tree() accepts a bind mount of any nsfs or pidfs file no matter\nwhat mount namespace it lives in so that /proc/<pid>/ns/<ns> and pidfds\ncan be bind mounted. If we create a bind-mount stack of mount namespaces\nfile descriptors the kernel will copy them irrespective of their\nancestoral relationship to the mount namespace in question:\n\n  151 146 0:7 net:[4026531833] /tmp/nrc/y rw - nsfs nsfs rw\n  152 151 0:7 mnt:[4026532293] /tmp/nrc/y rw - nsfs nsfs rw\n\nMount 152 is a mount of the mount namespace file of mount namespace\n4026532293 inside mount namespace 4026532293. That namespace and every\nmount in it are leaked... All it takes is a process in an older mount\nnamespace that stacks the file and repeating it leaks without limit:\n\n  after control: Shmem:               380 kB\n  child: mount(/proc/self/fd/6, MS_BIND|MS_REC): ok\n  after cycle: Shmem:             65916 kB\n\ndo_move_mount() runs check_for_nsfs_mounts() over a detached tree for\nexactly that reason. Do the same for the copy before it is grafted.","summary":"A recursive bind mount of a mount namespace file taken from another mount namespace can create a mount namespace loop in the Linux kernel. Repeating the operation leaks kernel memory without limit, which a local process can use to exhaust the machine's memory.","severity":"unknown","cvss":null,"epss":0.00206,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["containers","infrastructure","kernel","linux","self-hosted"],"not_affected_if":["patched-kernel"],"how_to_check":"- Run `uname -r` and compare against the kernel version that carries the fix, which the sources do not name: unknown\n- Check whether unprivileged user namespaces are enabled with `sysctl kernel.unprivileged_userns_clone` or `sysctl user.max_user_namespaces`: unknown","fix":"- Update the Linux kernel to a release that includes the upstream commit titled 'namespace: check a recursive bind mount for mount namespace loops'; the fixed version numbers are unknown from the sources\n- Until patched, restrict who can run untrusted code on the host: unknown","status":"open","published_at":"2026-10-23T13:17:20+00:00","first_seen_at":"2026-10-23T21:57:33+00:00","triaged_at":"2026-10-25T04:56:08+00:00","updated_at":"2026-10-25T12:38:50+00:00","category":"infrastructure","confidence":0.6,"triage":{"at":"2026-10-25T04:56:08Z","model":"claude-haiku-5-5","output":{"fix":"- Update the Linux kernel to a release that includes the upstream commit titled 'namespace: check a recursive bind mount for mount namespace loops'; the fixed version numbers are unknown from the sources\n- Until patched, restrict who can run untrusted code on the host: unknown","reach":"local","title":"Linux kernel: recursive bind mount of namespace files leaks memory","impact":"medium","summary":"A recursive bind mount of a mount namespace file taken from another mount namespace can create a mount namespace loop in the Linux kernel. Repeating the operation leaks kernel memory without limit, which a local process can use to exhaust the machine's memory.","category":"infrastructure","nicknames":[],"who_cares":["linux","kernel","self-hosted","containers"],"confidence":0.6,"needs_auth":"yes","worst_case":"local process exhausts kernel memory, leaking mounts and namespaces without limit","analyst_note":"Find the fixed kernel versions and the upstream commit for the stable branches in the NVD or kernel.org stable mailing list entry for CVE-2026-98989.","how_to_check":"- Run `uname -r` and compare against the kernel version that carries the fix, which the sources do not name: unknown\n- Check whether unprivileged user namespaces are enabled with `sysctl kernel.unprivileged_userns_clone` or `sysctl user.max_user_namespaces`: unknown","needs_analyst":true,"not_affected_if":["patched-kernel"],"who_is_affected":"Systems running a Linux kernel without the upstream fix are affected. The flaw needs a local process that can call mount with MS_BIND and MS_REC on a nsfs or pidfs file, so multi-tenant hosts and container platforms deserve the most attention. Single-user machines with no untrusted local code have less exposure.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"unknown"},"cost_usd":0.000722,"input_tokens":3893,"output_tokens":665,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':12A,15A '-98989':13A,16A '/ns':232C '/proc':231C '/proc/self/fd/6':345C '/tmp/nrc/y':274C,285C '0':270C,281C '146':269C '151':268C,280C '152':279C,291C '380':341C '4026531833':273C '4026532293':284C,303C,307C '65916':354C '7':271C,282C 'accept':211C 'ancestor':125C,260C 'anoth':35B,205C 'bind':4A,26B,82C,92C,138C,195C,213C,237C,244C,347C 'bind-mount':194C,243C 'caller':106C,176C 'caus':128C 'check':79C,134C,190C,360C 'child':343C 'cl':154C 'contain':17B 'control':339C 'copi':149C,155C,167C,209C,255C,377C 'creat':39B,241C 'cve':11A,14A 'cycl':130C,352C 'dentri':136C 'descriptor':251C 'detach':366C 'everi':181C,311C 'everyth':145C 'exact':369C 'exhaust':63B 'file':8A,32B,95C,121C,158C,162C,184C,220C,250C,299C,331C 'fine':170C,200C 'follow':73C 'graft':381C 'hold':115C 'host':23B 'infrastructur':18B 'insid':304C 'irrespect':257C 'isn':198C 'kb':342C,355C 'kernel':2A,19B,47B,52B,71C,253C 'leak':9A,51B,316C,335C 'limit':55B,337C 'linux':1A,20B,46B,70C 'live':227C 'local':58B 'loop':43B,87C 'loopback':89C,152C 'machin':65B 'matter':222C 'may':208C 'memori':10A,53B,67B 'mnt':156C,283C 'mount':5A,27B,30B,36B,41B,83C,85C,93C,98C,112C,117C,139C,160C,179C,182C,196C,206C,214C,224C,238C,245C,248C,264C,290C,294C,297C,301C,305C,312C,326C,344C,358C,363C 'move':357C 'ms':143C,346C,348C 'namespac':7A,31B,37B,42B,78C,86C,99C,113C,161C,180C,183C,207C,225C,249C,265C,298C,302C,306C,309C,327C 'net':272C 'ns':157C 'nsfs':217C,276C,277C,287C,288C,362C 'ok':350C 'old':103C 'older':109C,325C 'oper':50B 'pass':153C,187C 'pidf':219C 'pidfd':234C 'process':59B,322C 'question':267C 'reason':371C 'rec':144C,349C 'recurs':3A,25B,81C 'refus':90C 'relationship':261C 'repeat':48B,333C 'resolv':77C 'run':359C 'rw':275C,278C,286C,289C 'self':22B 'self-host':21B 'shmem':340C,353C 'sourc':165C,173C,203C 'stack':246C,329C 'start':140C 'take':319C 'taken':33B 'tree':210C,367C 'use':61B 'vulner':74C 'without':54B,336C 'would':127C","nicknames":[],"mitigations":[],"who_affected":"Systems running a Linux kernel without the upstream fix are affected. The flaw needs a local process that can call mount with MS_BIND and MS_REC on a nsfs or pidfs file, so multi-tenant hosts and container platforms deserve the most attention. Single-user machines with no untrusted local code have less exposure.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-23T13:17:20+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-98989","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98989","severity":null,"published_at":"2026-10-23T13:17:20+00:00","modified_at":"2026-10-23T13:17:20+00:00","first_seen_at":"2026-10-23T21:57:33+00:00","fetched_at":"2026-10-23T22:29:03+00:00","note":null},{"source":"epss","external_id":"CVE-2026-98989","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-98989","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-25T12:38:50+00:00","fetched_at":"2026-10-25T12:38:50+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}