Linux: ipv6: sr: enforce exact attribute length for SEG6_ATTR_DST
What fixes it
- 050a0aa3c80907b8c60a396b7e04d48d8b1a9e70LinuxCVE List
- 209eefebee54c4a5f01d68b61e8ac9881eca2de9LinuxCVE List
- 66bf65fa109326e4c4ddeb0b94093379f72838fdLinuxCVE List
- 195813bb7324c338eaba0aaa02b18681ee65b670LinuxCVE List
- 6fcfc362344edea745a69f3a705de50b731f3418LinuxCVE List
- 94214cf0a08dd2c5f37aeeea46078d9dfe8e4a0eLinuxCVE List
Show all 7 fixed versions
- 2d959c75c27f90e9ec489d18ce5ee6b852ad4741LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
ipv6: sr: enforce exact attribute length for SEG6_ATTR_DST
In seg6_genl_policy, SEG6_ATTR_DST is defined with .type = NLA_BINARY and .len = sizeof(struct in6_addr). For NLA_BINARY, .len only enforces the maximum payload length and permits shorter payloads (e.g., 0 bytes). When seg6_genl_set_tunsrc() copies sizeof(struct in6_addr) bytes via kmemdup(val, sizeof(*val), GFP_KERNEL), a short SEG6_ATTR_DST attribute triggers a 16-byte out-of-bounds read past skb->tail into uninitialized skb->head memory, which is stored in sdata->tun_src and leaked back to userspace via SEG6_CMD_GET_TUNSRC.
Switch SEG6_ATTR_DST in seg6_genl_policy to NLA_POLICY_EXACT_LEN(sizeof(struct in6_addr)) so that generic netlink validation rejects any attribute whose length is not exactly sizeof(struct in6_addr) with -ERANGE.
Tested in QEMU against Linux 7.3.0-rc3 by sending a SEG6_CMD_SET_TUNSRC Generic Netlink message with a 0-byte SEG6_ATTR_DST attribute followed by SEG6_CMD_GET_TUNSRC. On the unfixed kernel, SEG6_CMD_SET_TUNSRC succeeds (err = 0) and SEG6_CMD_GET_TUNSRC leaks 16 bytes of uninitialized kernel heap memory (tun_src = 836a61ecc4d25a1042a8d60411cfb378); with this patch applied, SEG6_CMD_SET_TUNSRC is rejected by netlink policy validation with -ERANGE (-34) and tun_src remains zeroed.
Text from CVE List
Affected versions 18
- Linuxaffected: 915d7e5e5930b4f01d0971d93b9b25ed17d221aa before 050a0aa3c80907b8c60a396b7e04d48d8b1a9e70CVE List
- Linuxaffected: 915d7e5e5930b4f01d0971d93b9b25ed17d221aa before 209eefebee54c4a5f01d68b61e8ac9881eca2de9CVE List
- Linuxaffected: 915d7e5e5930b4f01d0971d93b9b25ed17d221aa before e3ac68c1cdc2535d127b2bfd50c263d16c8e4199CVE List
- Linuxaffected: 915d7e5e5930b4f01d0971d93b9b25ed17d221aa before 66bf65fa109326e4c4ddeb0b94093379f72838fdCVE List
- Linuxaffected: 915d7e5e5930b4f01d0971d93b9b25ed17d221aa before 195813bb7324c338eaba0aaa02b18681ee65b670CVE List
- Linuxaffected: 915d7e5e5930b4f01d0971d93b9b25ed17d221aa before 6fcfc362344edea745a69f3a705de50b731f3418CVE List
- Linuxaffected: 915d7e5e5930b4f01d0971d93b9b25ed17d221aa before 94214cf0a08dd2c5f37aeeea46078d9dfe8e4a0eCVE List
- Linuxaffected: 915d7e5e5930b4f01d0971d93b9b25ed17d221aa before 2d959c75c27f90e9ec489d18ce5ee6b852ad4741CVE List
- Linuxaffected: 4.10CVE List
- Linuxunaffected: all versions before 4.10CVE List
- Linuxunaffected: 5.10.271 through 5.10.*CVE List
- Linuxunaffected: 5.15.222 through 5.15.*CVE List
- Linuxunaffected: 6.1.189 through 6.1.*CVE List
- Linuxunaffected: 6.6.158 through 6.6.*CVE List
- Linuxunaffected: 6.12.112 through 6.12.*CVE List
- Linuxunaffected: 6.18.55 through 6.18.*CVE List
- Linuxunaffected: 7.2.9 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 8
- git.kernel.org/stable/c/050a0aa3c80907b8c60a396b7e04d48d8b1a9e70Referencevia CVE List
- git.kernel.org/stable/c/209eefebee54c4a5f01d68b61e8ac9881eca2de9Referencevia CVE List
- git.kernel.org/stable/c/e3ac68c1cdc2535d127b2bfd50c263d16c8e4199Referencevia CVE List
- git.kernel.org/stable/c/66bf65fa109326e4c4ddeb0b94093379f72838fdReferencevia CVE List
- git.kernel.org/stable/c/195813bb7324c338eaba0aaa02b18681ee65b670Referencevia CVE List
- git.kernel.org/stable/c/6fcfc362344edea745a69f3a705de50b731f3418Referencevia CVE List
- git.kernel.org/stable/c/94214cf0a08dd2c5f37aeeea46078d9dfe8e4a0eReferencevia CVE List
- git.kernel.org/stable/c/2d959c75c27f90e9ec489d18ce5ee6b852ad4741Referencevia CVE List