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
[
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e94395e916b48a5b912a0a04570981b5b091acb0",
"target": {
"function": "reserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "39294881486230465009406580500150003726",
"length": 789.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-2a45baec"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@15e4dabda11b0fa31d510a915d1a580f47dfc92e",
"target": {
"file": "net/kcm/kcmsock.c"
},
"digest": {
"line_hashes": [
"238898957129075199617758462147232321079",
"3113727308257921701264377192102865532",
"95288358230161312414705211947396675821",
"123088397545434009341827876760179925613",
"49104362905690335901566267531354426321",
"170643612988158665167482284217826789749",
"176516280778585651446021919306107995955",
"153688322826826411335112498224737423806",
"219393865141810897453734982830312776761",
"167950499991189378917026508085319619277",
"147006101274913670469431511070043159503",
"224312605991372188428612793732195508420"
],
"threshold": 0.9
},
"signature_type": "Line",
"id": "CVE-2022-50291-2cabad04"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@15e4dabda11b0fa31d510a915d1a580f47dfc92e",
"target": {
"function": "reserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "39294881486230465009406580500150003726",
"length": 789.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-3723a8df"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@13dba69e18d04c8eec7596369f2a0596b0260275",
"target": {
"function": "reserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "39294881486230465009406580500150003726",
"length": 789.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-3b49328e"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf46af730e58d340f6f740bc69a07c5f6b85c655",
"target": {
"function": "kcm_rfree",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "68418274022102193687279063006862348470",
"length": 430.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-3dad4d52"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@13dba69e18d04c8eec7596369f2a0596b0260275",
"target": {
"function": "unreserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "204335308488727074527878537635578934431",
"length": 609.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-4b8184a1"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@12a0eb340c9a22e0f8c00d2c0c1a60695ead926a",
"target": {
"function": "unreserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "204335308488727074527878537635578934431",
"length": 609.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-53e538b3"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c325f92d8d9b223d5842609ca067e898e9d34566",
"target": {
"function": "reserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "39294881486230465009406580500150003726",
"length": 789.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-54c821e0"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c325f92d8d9b223d5842609ca067e898e9d34566",
"target": {
"function": "kcm_rfree",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "68418274022102193687279063006862348470",
"length": 430.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-574d9a18"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@342d918cf9a45df9cf11bbe7162b851adefd178f",
"target": {
"function": "unreserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "204335308488727074527878537635578934431",
"length": 609.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-5b90875e"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@342d918cf9a45df9cf11bbe7162b851adefd178f",
"target": {
"function": "reserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "39294881486230465009406580500150003726",
"length": 789.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-5cfb50db"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@342d918cf9a45df9cf11bbe7162b851adefd178f",
"target": {
"function": "kcm_rfree",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "68418274022102193687279063006862348470",
"length": 430.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-65a82c7e"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@13dba69e18d04c8eec7596369f2a0596b0260275",
"target": {
"function": "kcm_rfree",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "68418274022102193687279063006862348470",
"length": 430.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-678a62e5"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@12a0eb340c9a22e0f8c00d2c0c1a60695ead926a",
"target": {
"file": "net/kcm/kcmsock.c"
},
"digest": {
"line_hashes": [
"238898957129075199617758462147232321079",
"3113727308257921701264377192102865532",
"95288358230161312414705211947396675821",
"123088397545434009341827876760179925613",
"49104362905690335901566267531354426321",
"170643612988158665167482284217826789749",
"176516280778585651446021919306107995955",
"153688322826826411335112498224737423806",
"219393865141810897453734982830312776761",
"167950499991189378917026508085319619277",
"147006101274913670469431511070043159503",
"224312605991372188428612793732195508420"
],
"threshold": 0.9
},
"signature_type": "Line",
"id": "CVE-2022-50291-6d67c1d0"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf46af730e58d340f6f740bc69a07c5f6b85c655",
"target": {
"function": "unreserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "204335308488727074527878537635578934431",
"length": 609.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-7b9154bd"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf46af730e58d340f6f740bc69a07c5f6b85c655",
"target": {
"function": "reserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "39294881486230465009406580500150003726",
"length": 789.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-97946116"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e94395e916b48a5b912a0a04570981b5b091acb0",
"target": {
"function": "kcm_rfree",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "68418274022102193687279063006862348470",
"length": 430.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-99f34b20"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1b8a5692ab25db4ef1c2cc8e5d21f7a65dc3d079",
"target": {
"function": "kcm_rfree",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "68418274022102193687279063006862348470",
"length": 430.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-a488c0fc"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@342d918cf9a45df9cf11bbe7162b851adefd178f",
"target": {
"file": "net/kcm/kcmsock.c"
},
"digest": {
"line_hashes": [
"238898957129075199617758462147232321079",
"3113727308257921701264377192102865532",
"95288358230161312414705211947396675821",
"123088397545434009341827876760179925613",
"49104362905690335901566267531354426321",
"170643612988158665167482284217826789749",
"176516280778585651446021919306107995955",
"153688322826826411335112498224737423806",
"219393865141810897453734982830312776761",
"167950499991189378917026508085319619277",
"147006101274913670469431511070043159503",
"224312605991372188428612793732195508420"
],
"threshold": 0.9
},
"signature_type": "Line",
"id": "CVE-2022-50291-aac03b6d"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1b8a5692ab25db4ef1c2cc8e5d21f7a65dc3d079",
"target": {
"function": "unreserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "204335308488727074527878537635578934431",
"length": 609.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-b1de3d13"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1b8a5692ab25db4ef1c2cc8e5d21f7a65dc3d079",
"target": {
"file": "net/kcm/kcmsock.c"
},
"digest": {
"line_hashes": [
"238898957129075199617758462147232321079",
"3113727308257921701264377192102865532",
"95288358230161312414705211947396675821",
"123088397545434009341827876760179925613",
"49104362905690335901566267531354426321",
"170643612988158665167482284217826789749",
"176516280778585651446021919306107995955",
"153688322826826411335112498224737423806",
"219393865141810897453734982830312776761",
"167950499991189378917026508085319619277",
"147006101274913670469431511070043159503",
"224312605991372188428612793732195508420"
],
"threshold": 0.9
},
"signature_type": "Line",
"id": "CVE-2022-50291-bbd049ff"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e94395e916b48a5b912a0a04570981b5b091acb0",
"target": {
"file": "net/kcm/kcmsock.c"
},
"digest": {
"line_hashes": [
"238898957129075199617758462147232321079",
"3113727308257921701264377192102865532",
"95288358230161312414705211947396675821",
"123088397545434009341827876760179925613",
"49104362905690335901566267531354426321",
"170643612988158665167482284217826789749",
"176516280778585651446021919306107995955",
"153688322826826411335112498224737423806",
"219393865141810897453734982830312776761",
"167950499991189378917026508085319619277",
"147006101274913670469431511070043159503",
"224312605991372188428612793732195508420"
],
"threshold": 0.9
},
"signature_type": "Line",
"id": "CVE-2022-50291-bdafc0fc"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@e94395e916b48a5b912a0a04570981b5b091acb0",
"target": {
"function": "unreserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "204335308488727074527878537635578934431",
"length": 609.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-c09bba10"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@1b8a5692ab25db4ef1c2cc8e5d21f7a65dc3d079",
"target": {
"function": "reserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "39294881486230465009406580500150003726",
"length": 789.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-c50c9d3d"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c325f92d8d9b223d5842609ca067e898e9d34566",
"target": {
"function": "unreserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "204335308488727074527878537635578934431",
"length": 609.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-c6ecc43b"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf46af730e58d340f6f740bc69a07c5f6b85c655",
"target": {
"file": "net/kcm/kcmsock.c"
},
"digest": {
"line_hashes": [
"238898957129075199617758462147232321079",
"3113727308257921701264377192102865532",
"95288358230161312414705211947396675821",
"123088397545434009341827876760179925613",
"49104362905690335901566267531354426321",
"170643612988158665167482284217826789749",
"176516280778585651446021919306107995955",
"153688322826826411335112498224737423806",
"219393865141810897453734982830312776761",
"167950499991189378917026508085319619277",
"147006101274913670469431511070043159503",
"224312605991372188428612793732195508420"
],
"threshold": 0.9
},
"signature_type": "Line",
"id": "CVE-2022-50291-e03f55da"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@12a0eb340c9a22e0f8c00d2c0c1a60695ead926a",
"target": {
"function": "kcm_rfree",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "68418274022102193687279063006862348470",
"length": 430.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-e3ba074d"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@15e4dabda11b0fa31d510a915d1a580f47dfc92e",
"target": {
"function": "kcm_rfree",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "68418274022102193687279063006862348470",
"length": 430.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-e4c82efb"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@15e4dabda11b0fa31d510a915d1a580f47dfc92e",
"target": {
"function": "unreserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "204335308488727074527878537635578934431",
"length": 609.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-ea0d1638"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@12a0eb340c9a22e0f8c00d2c0c1a60695ead926a",
"target": {
"function": "reserve_rx_kcm",
"file": "net/kcm/kcmsock.c"
},
"digest": {
"function_hash": "39294881486230465009406580500150003726",
"length": 789.0
},
"signature_type": "Function",
"id": "CVE-2022-50291-efdf7e51"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c325f92d8d9b223d5842609ca067e898e9d34566",
"target": {
"file": "net/kcm/kcmsock.c"
},
"digest": {
"line_hashes": [
"238898957129075199617758462147232321079",
"3113727308257921701264377192102865532",
"95288358230161312414705211947396675821",
"123088397545434009341827876760179925613",
"49104362905690335901566267531354426321",
"170643612988158665167482284217826789749",
"176516280778585651446021919306107995955",
"153688322826826411335112498224737423806",
"219393865141810897453734982830312776761",
"167950499991189378917026508085319619277",
"147006101274913670469431511070043159503",
"224312605991372188428612793732195508420"
],
"threshold": 0.9
},
"signature_type": "Line",
"id": "CVE-2022-50291-f9eaf5b6"
},
{
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@13dba69e18d04c8eec7596369f2a0596b0260275",
"target": {
"file": "net/kcm/kcmsock.c"
},
"digest": {
"line_hashes": [
"238898957129075199617758462147232321079",
"3113727308257921701264377192102865532",
"95288358230161312414705211947396675821",
"123088397545434009341827876760179925613",
"49104362905690335901566267531354426321",
"170643612988158665167482284217826789749",
"176516280778585651446021919306107995955",
"153688322826826411335112498224737423806",
"219393865141810897453734982830312776761",
"167950499991189378917026508085319619277",
"147006101274913670469431511070043159503",
"224312605991372188428612793732195508420"
],
"threshold": 0.9
},
"signature_type": "Line",
"id": "CVE-2022-50291-fd7dc224"
}
]