In the Linux kernel, the following vulnerability has been resolved:
net: fix NULL pointer in skbsegmentlist
Commit 3a1296a38d0c ("net: Support GRO/GSO fraglist chaining.") introduced UDP listifyed GRO. The segmentation relies on fraglist being untouched when passing through the network stack. This assumption can be broken sometimes, where fraglist itself gets pulled into linear area, leaving frag_list being NULL. When this happens it can trigger following NULL pointer dereference, and panic the kernel. Reverse the test condition should fix it.
[19185.577801][ C1] BUG: kernel NULL pointer dereference, address: ... [19185.663775][ C1] RIP: 0010:skbsegmentlist+0x1cc/0x390 ... [19185.834644][ C1] Call Trace: [19185.841730][ C1] <TASK> [19185.848563][ C1] _udpgsosegment+0x33e/0x510 [19185.857370][ C1] inetgsosegment+0x15b/0x3e0 [19185.866059][ C1] skbmacgsosegment+0x97/0x110 [19185.874939][ C1] _skbgsosegment+0xb2/0x160 [19185.883646][ C1] udpqueuercvskb+0xc3/0x1d0 [19185.892319][ C1] udpunicastrcvskb+0x75/0x90 [19185.900979][ C1] ipprotocoldeliverrcu+0xd2/0x200 [19185.910003][ C1] iplocaldeliverfinish+0x44/0x60 [19185.918757][ C1] _netifreceiveskbonecore+0x8b/0xa0 [19185.927834][ C1] processbacklog+0x88/0x130 [19185.935840][ C1] _napipoll+0x27/0x150 [19185.943447][ C1] netrxaction+0x27e/0x5f0 [19185.951331][ C1] ? mlx5cqtaskletcb+0x70/0x160 [mlx5core] [19185.960848][ C1] _dosoftirq+0xbc/0x25d [19185.968607][ C1] irqexitrcu+0x83/0xb0 [19185.976247][ C1] commoninterrupt+0x43/0xa0 [19185.984235][ C1] asmcommoninterrupt+0x22/0x40 ... [19186.094106][ C1] </TASK>
[
{
"deprecated": false,
"id": "CVE-2023-52991-4f6b79f0",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@888dad6f3e85e3b2f8389bd6478f181efc72534d",
"signature_version": "v1",
"target": {
"file": "net/core/skbuff.c"
},
"signature_type": "Line",
"digest": {
"line_hashes": [
"334863634449971729788342835794817087145",
"11509869133899065593320574140538590298",
"117673027873539676958801703453572309898",
"159515422063868341713988300901737398019",
"281832942381918037384315044071308941954",
"223055523425756270324562039504458825804",
"52088556441571375361594148324882792849",
"123257029117610434181305559123194713283"
],
"threshold": 0.9
}
},
{
"deprecated": false,
"id": "CVE-2023-52991-5a812f02",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@046de74f9af92ae9ffce75fa22a1795223f4fb54",
"signature_version": "v1",
"target": {
"function": "skb_segment_list",
"file": "net/core/skbuff.c"
},
"signature_type": "Function",
"digest": {
"function_hash": "236448976974324957891070430235685658771",
"length": 1547.0
}
},
{
"deprecated": false,
"id": "CVE-2023-52991-84e2d3c2",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@888dad6f3e85e3b2f8389bd6478f181efc72534d",
"signature_version": "v1",
"target": {
"function": "skb_segment_list",
"file": "net/core/skbuff.c"
},
"signature_type": "Function",
"digest": {
"function_hash": "236448976974324957891070430235685658771",
"length": 1547.0
}
},
{
"deprecated": false,
"id": "CVE-2023-52991-8ba123d6",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@876e8ca8366735a604bac86ff7e2732fc9d85d2d",
"signature_version": "v1",
"target": {
"file": "net/core/skbuff.c"
},
"signature_type": "Line",
"digest": {
"line_hashes": [
"334863634449971729788342835794817087145",
"11509869133899065593320574140538590298",
"117673027873539676958801703453572309898",
"159515422063868341713988300901737398019",
"281832942381918037384315044071308941954",
"223055523425756270324562039504458825804",
"52088556441571375361594148324882792849",
"123257029117610434181305559123194713283"
],
"threshold": 0.9
}
},
{
"deprecated": false,
"id": "CVE-2023-52991-95896686",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@046de74f9af92ae9ffce75fa22a1795223f4fb54",
"signature_version": "v1",
"target": {
"file": "net/core/skbuff.c"
},
"signature_type": "Line",
"digest": {
"line_hashes": [
"334863634449971729788342835794817087145",
"11509869133899065593320574140538590298",
"117673027873539676958801703453572309898",
"159515422063868341713988300901737398019",
"281832942381918037384315044071308941954",
"223055523425756270324562039504458825804",
"52088556441571375361594148324882792849",
"123257029117610434181305559123194713283"
],
"threshold": 0.9
}
},
{
"deprecated": false,
"id": "CVE-2023-52991-aacb31dd",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@876e8ca8366735a604bac86ff7e2732fc9d85d2d",
"signature_version": "v1",
"target": {
"function": "skb_segment_list",
"file": "net/core/skbuff.c"
},
"signature_type": "Function",
"digest": {
"function_hash": "236448976974324957891070430235685658771",
"length": 1547.0
}
},
{
"deprecated": false,
"id": "CVE-2023-52991-b6c33a45",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@6446369fb9f083ce032448c5047da08e298b22e6",
"signature_version": "v1",
"target": {
"function": "skb_segment_list",
"file": "net/core/skbuff.c"
},
"signature_type": "Function",
"digest": {
"function_hash": "238419659637503265586381748986747226324",
"length": 1462.0
}
},
{
"deprecated": false,
"id": "CVE-2023-52991-d51493cd",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@6446369fb9f083ce032448c5047da08e298b22e6",
"signature_version": "v1",
"target": {
"file": "net/core/skbuff.c"
},
"signature_type": "Line",
"digest": {
"line_hashes": [
"67374465192091910567986390020223745298",
"11509869133899065593320574140538590298",
"117673027873539676958801703453572309898",
"159515422063868341713988300901737398019",
"281832942381918037384315044071308941954",
"223055523425756270324562039504458825804",
"52088556441571375361594148324882792849",
"123257029117610434181305559123194713283"
],
"threshold": 0.9
}
}
]