In the Linux kernel, the following vulnerability has been resolved:
net/mlx5e: Check for NOT_READY flag state after locking
Currently the check for NOTREADY flag is performed before obtaining the necessary lock. This opens a possibility for race condition when the flow is concurrently removed from unreadyflows list by the workqueue task, which causes a double-removal from the list and a crash[0]. Fix the issue by moving the flag check inside the section protected by uplinkpriv->unreadyflows_lock mutex.
[44376.391665] CPU: 7 PID: 59123 Comm: tc Not tainted 6.4.0-rc4+ #1 [44376.392984] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 [44376.395342] RIP: 0010:mlx5etcdelfdbflow+0xb3/0x340 [mlx5core] [44376.396857] Code: 00 48 8b b8 68 ce 02 00 e8 8a 4d 02 00 4c 8d a8 a8 01 00 00 4c 89 ef e8 8b 79 88 e1 48 8b 83 98 06 00 00 48 8b 93 90 06 00 00 <48> 89 42 08 48 89 10 48 b8 00 01 00 00 00 00 ad de 48 89 83 90 06 [44376.399167] RSP: 0018:ffff88812cc97570 EFLAGS: 00010246 [44376.399680] RAX: dead000000000122 RBX: ffff8881088e3800 RCX: ffff8881881bac00 [44376.400337] RDX: dead000000000100 RSI: ffff88812cc97500 RDI: ffff8881242f71b0 [44376.401001] RBP: ffff88811cbb0940 R08: 0000000000000400 R09: 0000000000000001 [44376.401663] R10: 0000000000000001 R11: 0000000000000000 R12: ffff88812c944000 [44376.402342] R13: ffff8881242f71a8 R14: ffff8881222b4000 R15: 0000000000000000 [44376.402999] FS: 00007f0451104800(0000) GS:ffff88852cb80000(0000) knlGS:0000000000000000 [44376.403787] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [44376.404343] CR2: 0000000000489108 CR3: 0000000123a79003 CR4: 0000000000370ea0 [44376.405004] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [44376.405665] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [44376.406339] Call Trace: [44376.406651] <TASK> [44376.406939] ? dieaddr+0x33/0x90 [44376.407311] ? excgeneralprotection+0x192/0x390 [44376.407795] ? asmexcgeneralprotection+0x22/0x30 [44376.408292] ? mlx5etcdelfdbflow+0xb3/0x340 [mlx5core] [44376.408876] mlx5etcdelfdbpeerflow+0xbc/0xe0 [mlx5core] [44376.409482] mlx5etcdelflow+0x42/0x210 [mlx5core] [44376.410055] mlx5eflowput+0x25/0x50 [mlx5core] [44376.410529] mlx5edeleteflower+0x24b/0x350 [mlx5core] [44376.411043] tcsetupcbreoffload+0x22/0x80 [44376.411462] flreoffload+0x261/0x2f0 [clsflower] [44376.411907] ? mlx5erepindrsetupftcb+0x160/0x160 [mlx5core] [44376.412481] ? mlx5erepindrsetupftcb+0x160/0x160 [mlx5core] [44376.413044] tcfblockplaybackoffloads+0x76/0x170 [44376.413497] tcfblockunbind+0x7b/0xd0 [44376.413881] tcfblocksetup+0x17d/0x1c0 [44376.414269] tcfblockoffloadcmd.isra.0+0xf1/0x130 [44376.414725] tcfblockoffloadunbind+0x43/0x70 [44376.415153] _tcfblockput+0x82/0x150 [44376.415532] ingressdestroy+0x22/0x30 [schingress] [44376.415986] qdiscdestroy+0x3b/0xd0 [44376.416343] qdiscgraft+0x4d0/0x620 [44376.416706] tcgetqdisc+0x1c9/0x3b0 [44376.417074] rtnetlinkrcvmsg+0x29c/0x390 [44376.419978] ? repmovsalternative+0x3a/0xa0 [44376.420399] ? rtnlcalcit.isra.0+0x120/0x120 [44376.420813] netlinkrcvskb+0x54/0x100 [44376.421192] netlinkunicast+0x1f6/0x2c0 [44376.421573] netlinksendmsg+0x232/0x4a0 [44376.421980] socksendmsg+0x38/0x60 [44376.422328] _syssendmsg+0x1d0/0x1e0 [44376.422709] ? copymsghdrfromuser+0x6d/0xa0 [44376.423127] syssendmsg+0x80/0xc0 [44376.423495] ? sysrecvmsg+0x8b/0xc0 [44376.423869] _syssendmsg+0x51/0x90 [44376.424226] dosyscall64+0x3d/0x90 [44376.424587] entrySYSCALL64afterhwframe+0x46/0xb0 [44376.425046] RIP: 0033:0x7f045134f887 [44376.425403] Code: 0a 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b9 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 2e 00 ---truncated---