In the Linux kernel, the following vulnerability has been resolved:
iouring/net: fix overflow check in iorecvmsgmshotprep()
The "controllen" variable is type size_t (unsigned long). Casting it to int could lead to an integer underflow.
The checkaddoverflow() function considers the type of the destination which is type int. If we add two positive values and the result cannot fit in an integer then that's counted as an overflow.
However, if we cast "controllen" to an int and it turns negative, then negative values can fit into an int type so there is no overflow.
Good: 100 + (unsigned long)-4 = 96 <-- overflow Bad: 100 + (int)-4 = 96 <-- no overflow
I deleted the cast of the sizeof() as well. That's not a bug but the cast is unnecessary.
[ { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@868ec868616438df487b9e2baa5a99f8662cc47c", "target": { "function": "io_recvmsg_mshot_prep", "file": "io_uring/net.c" }, "id": "CVE-2024-35827-05c1b78b", "deprecated": false, "digest": { "function_hash": "31861661820468925433159550787286236142", "length": 508.0 }, "signature_type": "Function", "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b6563ad0d599110bd5cf8f56c47d279c3ed796fe", "target": { "file": "io_uring/net.c" }, "id": "CVE-2024-35827-1616ad3f", "deprecated": false, "digest": { "line_hashes": [ "287153237116196689013247623937292921111", "157214197136553937762804073861884492854", "304732265887613804168549686211868905815", "339314805167082085433070181690256754406", "266437426615791699957035616476021366246", "187995865070519232292000964873500519932", "223398753431039235347297230943927719103" ], "threshold": 0.9 }, "signature_type": "Line", "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@59a534690ecc3af72c6ab121aeac1237a4adae66", "target": { "file": "io_uring/net.c" }, "id": "CVE-2024-35827-416999c8", "deprecated": false, "digest": { "line_hashes": [ "287153237116196689013247623937292921111", "157214197136553937762804073861884492854", "304732265887613804168549686211868905815", "339314805167082085433070181690256754406", "266437426615791699957035616476021366246", "187995865070519232292000964873500519932", "223398753431039235347297230943927719103" ], "threshold": 0.9 }, "signature_type": "Line", "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@868ec868616438df487b9e2baa5a99f8662cc47c", "target": { "file": "io_uring/net.c" }, "id": "CVE-2024-35827-4fba1317", "deprecated": false, "digest": { "line_hashes": [ "287153237116196689013247623937292921111", "157214197136553937762804073861884492854", "304732265887613804168549686211868905815", "339314805167082085433070181690256754406", "266437426615791699957035616476021366246", "187995865070519232292000964873500519932", "223398753431039235347297230943927719103" ], "threshold": 0.9 }, "signature_type": "Line", "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@0c8c74bb59e7d77554016efc34c2d10376985e5e", "target": { "file": "io_uring/net.c" }, "id": "CVE-2024-35827-8978ca75", "deprecated": false, "digest": { "line_hashes": [ "287153237116196689013247623937292921111", "157214197136553937762804073861884492854", "304732265887613804168549686211868905815", "339314805167082085433070181690256754406", "266437426615791699957035616476021366246", "187995865070519232292000964873500519932", "223398753431039235347297230943927719103" ], "threshold": 0.9 }, "signature_type": "Line", "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@8ede3db5061bb1fe28e2c9683329aafa89d2b1b4", "target": { "file": "io_uring/net.c" }, "id": "CVE-2024-35827-8c70bb3e", "deprecated": false, "digest": { "line_hashes": [ "287153237116196689013247623937292921111", "157214197136553937762804073861884492854", "304732265887613804168549686211868905815", "339314805167082085433070181690256754406", "266437426615791699957035616476021366246", "187995865070519232292000964873500519932", "223398753431039235347297230943927719103" ], "threshold": 0.9 }, "signature_type": "Line", "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@0c8c74bb59e7d77554016efc34c2d10376985e5e", "target": { "function": "io_recvmsg_mshot_prep", "file": "io_uring/net.c" }, "id": "CVE-2024-35827-b4e4bac4", "deprecated": false, "digest": { "function_hash": "31861661820468925433159550787286236142", "length": 508.0 }, "signature_type": "Function", "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b6563ad0d599110bd5cf8f56c47d279c3ed796fe", "target": { "function": "io_recvmsg_mshot_prep", "file": "io_uring/net.c" }, "id": "CVE-2024-35827-d904208f", "deprecated": false, "digest": { "function_hash": "31861661820468925433159550787286236142", "length": 508.0 }, "signature_type": "Function", "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@59a534690ecc3af72c6ab121aeac1237a4adae66", "target": { "function": "io_recvmsg_mshot_prep", "file": "io_uring/net.c" }, "id": "CVE-2024-35827-f783d472", "deprecated": false, "digest": { "function_hash": "31861661820468925433159550787286236142", "length": 508.0 }, "signature_type": "Function", "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@8ede3db5061bb1fe28e2c9683329aafa89d2b1b4", "target": { "function": "io_recvmsg_mshot_prep", "file": "io_uring/net.c" }, "id": "CVE-2024-35827-fe66773e", "deprecated": false, "digest": { "function_hash": "31861661820468925433159550787286236142", "length": 508.0 }, "signature_type": "Function", "signature_version": "v1" } ]