In the Linux kernel, the following vulnerability has been resolved:
kcm: annotate data-races around kcm->rx_psock
kcm->rxpsock can be read locklessly in kcmrfree(). Annotate the read and writes accordingly.
We do the same for kcm->rx_wait in the following patch.
syzbot reported: BUG: KCSAN: data-race in kcmrfree / unreserverx_kcm
write to 0xffff888123d827b8 of 8 bytes by task 2758 on cpu 1: unreserverxkcm+0x72/0x1f0 net/kcm/kcmsock.c:313 kcmrcvstrparser+0x2b5/0x3a0 net/kcm/kcmsock.c:373 _strprecv+0x64c/0xd20 net/strparser/strparser.c:301 strprecv+0x6d/0x80 net/strparser/strparser.c:335 tcpreadsock+0x13e/0x5a0 net/ipv4/tcp.c:1703 strpreadsock net/strparser/strparser.c:358 [inline] dostrpwork net/strparser/strparser.c:406 [inline] strpwork+0xe8/0x180 net/strparser/strparser.c:415 processonework+0x3d3/0x720 kernel/workqueue.c:2289 workerthread+0x618/0xa70 kernel/workqueue.c:2436 kthread+0x1a9/0x1e0 kernel/kthread.c:376 retfromfork+0x1f/0x30 arch/x86/entry/entry64.S:306
read to 0xffff888123d827b8 of 8 bytes by task 5859 on cpu 0: kcmrfree+0x14c/0x220 net/kcm/kcmsock.c:181 skbreleaseheadstate+0x8e/0x160 net/core/skbuff.c:841 skbreleaseall net/core/skbuff.c:852 [inline] kfreeskb net/core/skbuff.c:868 [inline] kfreeskbreason+0x5c/0x260 net/core/skbuff.c:891 kfreeskb include/linux/skbuff.h:1216 [inline] kcmrecvmsg+0x226/0x2b0 net/kcm/kcmsock.c:1161 _sysrecvmsg+0x16c/0x2e0 _sysrecvmsg net/socket.c:2743 [inline] dorecvmmsg+0x2f1/0x710 net/socket.c:2837 _sysrecvmmsg net/socket.c:2916 [inline] _dosysrecvmmsg net/socket.c:2939 [inline] _sesysrecvmmsg net/socket.c:2932 [inline] _x64sysrecvmmsg+0xde/0x160 net/socket.c:2932 dosyscallx64 arch/x86/entry/common.c:50 [inline] dosyscall64+0x2b/0x70 arch/x86/entry/common.c:80 entrySYSCALL64afterhwframe+0x63/0xcd
value changed: 0xffff88812971ce00 -> 0x0000000000000000
Reported by Kernel Concurrency Sanitizer on: CPU: 0 PID: 5859 Comm: syz-executor.3 Not tainted 6.0.0-syzkaller-12189-g19d17ab7c68b-dirty #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/22/2022
[ { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e94395e916b48a5b912a0a04570981b5b091acb0", "target": { "function": "reserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-2a45baec", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "39294881486230465009406580500150003726", "length": 789.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@15e4dabda11b0fa31d510a915d1a580f47dfc92e", "target": { "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-2cabad04", "deprecated": false, "signature_type": "Line", "signature_version": "v1", "digest": { "line_hashes": [ "238898957129075199617758462147232321079", "3113727308257921701264377192102865532", "95288358230161312414705211947396675821", "123088397545434009341827876760179925613", "49104362905690335901566267531354426321", "170643612988158665167482284217826789749", "176516280778585651446021919306107995955", "153688322826826411335112498224737423806", "219393865141810897453734982830312776761", "167950499991189378917026508085319619277", "147006101274913670469431511070043159503", "224312605991372188428612793732195508420" ], "threshold": 0.9 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@15e4dabda11b0fa31d510a915d1a580f47dfc92e", "target": { "function": "reserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-3723a8df", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "39294881486230465009406580500150003726", "length": 789.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@13dba69e18d04c8eec7596369f2a0596b0260275", "target": { "function": "reserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-3b49328e", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "39294881486230465009406580500150003726", "length": 789.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf46af730e58d340f6f740bc69a07c5f6b85c655", "target": { "function": "kcm_rfree", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-3dad4d52", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "68418274022102193687279063006862348470", "length": 430.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@13dba69e18d04c8eec7596369f2a0596b0260275", "target": { "function": "unreserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-4b8184a1", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "204335308488727074527878537635578934431", "length": 609.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@12a0eb340c9a22e0f8c00d2c0c1a60695ead926a", "target": { "function": "unreserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-53e538b3", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "204335308488727074527878537635578934431", "length": 609.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c325f92d8d9b223d5842609ca067e898e9d34566", "target": { "function": "reserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-54c821e0", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "39294881486230465009406580500150003726", "length": 789.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c325f92d8d9b223d5842609ca067e898e9d34566", "target": { "function": "kcm_rfree", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-574d9a18", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "68418274022102193687279063006862348470", "length": 430.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@342d918cf9a45df9cf11bbe7162b851adefd178f", "target": { "function": "unreserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-5b90875e", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "204335308488727074527878537635578934431", "length": 609.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@342d918cf9a45df9cf11bbe7162b851adefd178f", "target": { "function": "reserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-5cfb50db", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "39294881486230465009406580500150003726", "length": 789.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@342d918cf9a45df9cf11bbe7162b851adefd178f", "target": { "function": "kcm_rfree", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-65a82c7e", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "68418274022102193687279063006862348470", "length": 430.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@13dba69e18d04c8eec7596369f2a0596b0260275", "target": { "function": "kcm_rfree", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-678a62e5", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "68418274022102193687279063006862348470", "length": 430.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@12a0eb340c9a22e0f8c00d2c0c1a60695ead926a", "target": { "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-6d67c1d0", "deprecated": false, "signature_type": "Line", "signature_version": "v1", "digest": { "line_hashes": [ "238898957129075199617758462147232321079", "3113727308257921701264377192102865532", "95288358230161312414705211947396675821", "123088397545434009341827876760179925613", "49104362905690335901566267531354426321", "170643612988158665167482284217826789749", "176516280778585651446021919306107995955", "153688322826826411335112498224737423806", "219393865141810897453734982830312776761", "167950499991189378917026508085319619277", "147006101274913670469431511070043159503", "224312605991372188428612793732195508420" ], "threshold": 0.9 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf46af730e58d340f6f740bc69a07c5f6b85c655", "target": { "function": "unreserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-7b9154bd", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "204335308488727074527878537635578934431", "length": 609.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf46af730e58d340f6f740bc69a07c5f6b85c655", "target": { "function": "reserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-97946116", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "39294881486230465009406580500150003726", "length": 789.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e94395e916b48a5b912a0a04570981b5b091acb0", "target": { "function": "kcm_rfree", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-99f34b20", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "68418274022102193687279063006862348470", "length": 430.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1b8a5692ab25db4ef1c2cc8e5d21f7a65dc3d079", "target": { "function": "kcm_rfree", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-a488c0fc", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "68418274022102193687279063006862348470", "length": 430.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@342d918cf9a45df9cf11bbe7162b851adefd178f", "target": { "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-aac03b6d", "deprecated": false, "signature_type": "Line", "signature_version": "v1", "digest": { "line_hashes": [ "238898957129075199617758462147232321079", "3113727308257921701264377192102865532", "95288358230161312414705211947396675821", "123088397545434009341827876760179925613", "49104362905690335901566267531354426321", "170643612988158665167482284217826789749", "176516280778585651446021919306107995955", "153688322826826411335112498224737423806", "219393865141810897453734982830312776761", "167950499991189378917026508085319619277", "147006101274913670469431511070043159503", "224312605991372188428612793732195508420" ], "threshold": 0.9 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1b8a5692ab25db4ef1c2cc8e5d21f7a65dc3d079", "target": { "function": "unreserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-b1de3d13", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "204335308488727074527878537635578934431", "length": 609.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1b8a5692ab25db4ef1c2cc8e5d21f7a65dc3d079", "target": { "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-bbd049ff", "deprecated": false, "signature_type": "Line", "signature_version": "v1", "digest": { "line_hashes": [ "238898957129075199617758462147232321079", "3113727308257921701264377192102865532", "95288358230161312414705211947396675821", "123088397545434009341827876760179925613", "49104362905690335901566267531354426321", "170643612988158665167482284217826789749", "176516280778585651446021919306107995955", "153688322826826411335112498224737423806", "219393865141810897453734982830312776761", "167950499991189378917026508085319619277", "147006101274913670469431511070043159503", "224312605991372188428612793732195508420" ], "threshold": 0.9 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e94395e916b48a5b912a0a04570981b5b091acb0", "target": { "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-bdafc0fc", "deprecated": false, "signature_type": "Line", "signature_version": "v1", "digest": { "line_hashes": [ "238898957129075199617758462147232321079", "3113727308257921701264377192102865532", "95288358230161312414705211947396675821", "123088397545434009341827876760179925613", "49104362905690335901566267531354426321", "170643612988158665167482284217826789749", "176516280778585651446021919306107995955", "153688322826826411335112498224737423806", "219393865141810897453734982830312776761", "167950499991189378917026508085319619277", "147006101274913670469431511070043159503", "224312605991372188428612793732195508420" ], "threshold": 0.9 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e94395e916b48a5b912a0a04570981b5b091acb0", "target": { "function": "unreserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-c09bba10", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "204335308488727074527878537635578934431", "length": 609.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1b8a5692ab25db4ef1c2cc8e5d21f7a65dc3d079", "target": { "function": "reserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-c50c9d3d", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "39294881486230465009406580500150003726", "length": 789.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c325f92d8d9b223d5842609ca067e898e9d34566", "target": { "function": "unreserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-c6ecc43b", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "204335308488727074527878537635578934431", "length": 609.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf46af730e58d340f6f740bc69a07c5f6b85c655", "target": { "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-e03f55da", "deprecated": false, "signature_type": "Line", "signature_version": "v1", "digest": { "line_hashes": [ "238898957129075199617758462147232321079", "3113727308257921701264377192102865532", "95288358230161312414705211947396675821", "123088397545434009341827876760179925613", "49104362905690335901566267531354426321", "170643612988158665167482284217826789749", "176516280778585651446021919306107995955", "153688322826826411335112498224737423806", "219393865141810897453734982830312776761", "167950499991189378917026508085319619277", "147006101274913670469431511070043159503", "224312605991372188428612793732195508420" ], "threshold": 0.9 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@12a0eb340c9a22e0f8c00d2c0c1a60695ead926a", "target": { "function": "kcm_rfree", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-e3ba074d", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "68418274022102193687279063006862348470", "length": 430.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@15e4dabda11b0fa31d510a915d1a580f47dfc92e", "target": { "function": "kcm_rfree", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-e4c82efb", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "68418274022102193687279063006862348470", "length": 430.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@15e4dabda11b0fa31d510a915d1a580f47dfc92e", "target": { "function": "unreserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-ea0d1638", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "204335308488727074527878537635578934431", "length": 609.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@12a0eb340c9a22e0f8c00d2c0c1a60695ead926a", "target": { "function": "reserve_rx_kcm", "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-efdf7e51", "deprecated": false, "signature_type": "Function", "signature_version": "v1", "digest": { "function_hash": "39294881486230465009406580500150003726", "length": 789.0 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c325f92d8d9b223d5842609ca067e898e9d34566", "target": { "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-f9eaf5b6", "deprecated": false, "signature_type": "Line", "signature_version": "v1", "digest": { "line_hashes": [ "238898957129075199617758462147232321079", "3113727308257921701264377192102865532", "95288358230161312414705211947396675821", "123088397545434009341827876760179925613", "49104362905690335901566267531354426321", "170643612988158665167482284217826789749", "176516280778585651446021919306107995955", "153688322826826411335112498224737423806", "219393865141810897453734982830312776761", "167950499991189378917026508085319619277", "147006101274913670469431511070043159503", "224312605991372188428612793732195508420" ], "threshold": 0.9 } }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@13dba69e18d04c8eec7596369f2a0596b0260275", "target": { "file": "net/kcm/kcmsock.c" }, "id": "CVE-2022-50291-fd7dc224", "deprecated": false, "signature_type": "Line", "signature_version": "v1", "digest": { "line_hashes": [ "238898957129075199617758462147232321079", "3113727308257921701264377192102865532", "95288358230161312414705211947396675821", "123088397545434009341827876760179925613", "49104362905690335901566267531354426321", "170643612988158665167482284217826789749", "176516280778585651446021919306107995955", "153688322826826411335112498224737423806", "219393865141810897453734982830312776761", "167950499991189378917026508085319619277", "147006101274913670469431511070043159503", "224312605991372188428612793732195508420" ], "threshold": 0.9 } } ]