In the Linux kernel, the following vulnerability has been resolved:
parisc: Fix non-access data TLB cache flush faults
When a page is not present, we get non-access data TLB faults from the fdc and fic instructions in flushuserdcacherangeasm and flushusericacherangeasm. When these occur, the cache line is not invalidated and potentially we get memory corruption. The problem was hidden by the nullification of the flush instructions.
These faults also affect performance. With pa8800/pa8900 processors, there will be 32 faults per 4 KB page since the cache line is 128 bytes. There will be more faults with earlier processors.
The problem is fixed by using flushcachepages(). It does the flush using a tmp alias mapping.
The flushcachepages() call in flushcacherange() flushed too large a range.
V2: Remove unnecessary preemptdisable() and preemptenable() calls.
{ "vanir_signatures": [ { "id": "CVE-2022-49172-2e5c0b83", "signature_type": "Function", "target": { "file": "arch/parisc/kernel/cache.c", "function": "flush_cache_mm" }, "signature_version": "v1", "digest": { "length": 554.0, "function_hash": "56174035500417225385367619420296552352" }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ddca4b82027e2a66333dd40fab21a4beff435c7e" }, { "id": "CVE-2022-49172-3a9939d9", "signature_type": "Line", "target": { "file": "arch/parisc/kernel/cache.c" }, "signature_version": "v1", "digest": { "line_hashes": [ "115509532234773841554775121109545184018", "240053412800798217234273938787971155064", "327234485761514421515387371118017691181", "155832638712820541441148895750074960652", "79749759044683250570371326063123694506", "246935083685282872833669729707858175425", "10092712002510998089761258098423063384", "241507027857418356041777441626699608216", "144421062393716718524585830365143630776", "315180905656461555069772867007732155537", "226018583030045044661824870853874139039", "184365955772480980408450942389241216101", "81067534855120992717620513177301103814", "251479389889109036161154465151340934570", "127799299334312606836341149461176377815", "210737993884420120263569493654422186932", "209649968006451179897843022713695119977", "113537644910509543457476867762605396915", "279525890564075587447333015948407376546", "224336639357494521275780646551959748629", "25807249112163488446076617180969054189", "270523936318442666697609473703849754841", "317518667812017590018061254918561800933", "188582916564333129943115443582866963968", "184365955772480980408450942389241216101", "46654064436681379403466850742468259387", "179553205685690590644855610230020589676", "267927737753294231974262149271772465594", "85485512945378506426565043855412277017", "237077866809864991149950140436837994909", "170898307080091837314548292183909505016", "267940924564554181964633308712965376691", "186154711837035260812172387370427123223", "319305239072505685094120349712850045464", "77269005785712485239549039758849123283" ], "threshold": 0.9 }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ddca4b82027e2a66333dd40fab21a4beff435c7e" }, { "id": "CVE-2022-49172-3d823e4e", "signature_type": "Function", "target": { "file": "arch/parisc/kernel/cache.c", "function": "flush_user_cache_tlb" }, "signature_version": "v1", "digest": { "length": 219.0, "function_hash": "31572356792440801759177581889048363953" }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f839e5f1cef36ce268950c387129b1bfefdaebc9" }, { "id": "CVE-2022-49172-4b0d6ee3", "signature_type": "Function", "target": { "file": "arch/parisc/kernel/cache.c", "function": "flush_user_cache_tlb" }, "signature_version": "v1", "digest": { "length": 219.0, "function_hash": "31572356792440801759177581889048363953" }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b3d6adb3a49d82e4e557c5fc16f50c9ff731da5d" }, { "id": "CVE-2022-49172-5a8863e2", "signature_type": "Function", "target": { "file": "arch/parisc/kernel/cache.c", "function": "flush_cache_range" }, "signature_version": "v1", "digest": { "length": 506.0, "function_hash": "83722670003308091949398127192090251055" }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ddca4b82027e2a66333dd40fab21a4beff435c7e" }, { "id": "CVE-2022-49172-5ecfe7d1", "signature_type": "Function", "target": { "file": "arch/parisc/kernel/cache.c", "function": "flush_cache_mm" }, "signature_version": "v1", "digest": { "length": 554.0, "function_hash": "56174035500417225385367619420296552352" }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b3d6adb3a49d82e4e557c5fc16f50c9ff731da5d" }, { "id": "CVE-2022-49172-6a945181", "signature_type": "Function", "target": { "file": "arch/parisc/kernel/cache.c", "function": "flush_cache_mm" }, "signature_version": "v1", "digest": { "length": 554.0, "function_hash": "56174035500417225385367619420296552352" }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f839e5f1cef36ce268950c387129b1bfefdaebc9" }, { "id": "CVE-2022-49172-718e86a1", "signature_type": "Function", "target": { "file": "arch/parisc/kernel/cache.c", "function": "flush_user_cache_tlb" }, "signature_version": "v1", "digest": { "length": 219.0, "function_hash": "31572356792440801759177581889048363953" }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ddca4b82027e2a66333dd40fab21a4beff435c7e" }, { "id": "CVE-2022-49172-953beb3b", "signature_type": "Function", "target": { "file": "arch/parisc/kernel/cache.c", "function": "flush_cache_range" }, "signature_version": "v1", "digest": { "length": 506.0, "function_hash": "83722670003308091949398127192090251055" }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f839e5f1cef36ce268950c387129b1bfefdaebc9" }, { "id": "CVE-2022-49172-a977ab4e", "signature_type": "Line", "target": { "file": "arch/parisc/kernel/cache.c" }, "signature_version": "v1", "digest": { "line_hashes": [ "115509532234773841554775121109545184018", "240053412800798217234273938787971155064", "327234485761514421515387371118017691181", "155832638712820541441148895750074960652", "79749759044683250570371326063123694506", "246935083685282872833669729707858175425", "10092712002510998089761258098423063384", "241507027857418356041777441626699608216", "144421062393716718524585830365143630776", "315180905656461555069772867007732155537", "226018583030045044661824870853874139039", "184365955772480980408450942389241216101", "81067534855120992717620513177301103814", "251479389889109036161154465151340934570", "127799299334312606836341149461176377815", "210737993884420120263569493654422186932", "209649968006451179897843022713695119977", "113537644910509543457476867762605396915", "279525890564075587447333015948407376546", "224336639357494521275780646551959748629", "25807249112163488446076617180969054189", "270523936318442666697609473703849754841", "317518667812017590018061254918561800933", "188582916564333129943115443582866963968", "184365955772480980408450942389241216101", "46654064436681379403466850742468259387", "179553205685690590644855610230020589676", "267927737753294231974262149271772465594", "85485512945378506426565043855412277017", "237077866809864991149950140436837994909", "170898307080091837314548292183909505016", "267940924564554181964633308712965376691", "186154711837035260812172387370427123223", "319305239072505685094120349712850045464", "77269005785712485239549039758849123283" ], "threshold": 0.9 }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f839e5f1cef36ce268950c387129b1bfefdaebc9" }, { "id": "CVE-2022-49172-b92b9188", "signature_type": "Function", "target": { "file": "arch/parisc/kernel/cache.c", "function": "flush_cache_range" }, "signature_version": "v1", "digest": { "length": 506.0, "function_hash": "83722670003308091949398127192090251055" }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b3d6adb3a49d82e4e557c5fc16f50c9ff731da5d" }, { "id": "CVE-2022-49172-e0e24ab0", "signature_type": "Line", "target": { "file": "arch/parisc/kernel/cache.c" }, "signature_version": "v1", "digest": { "line_hashes": [ "115509532234773841554775121109545184018", "240053412800798217234273938787971155064", "327234485761514421515387371118017691181", "155832638712820541441148895750074960652", "79749759044683250570371326063123694506", "246935083685282872833669729707858175425", "10092712002510998089761258098423063384", "241507027857418356041777441626699608216", "144421062393716718524585830365143630776", "315180905656461555069772867007732155537", "226018583030045044661824870853874139039", "184365955772480980408450942389241216101", "81067534855120992717620513177301103814", "251479389889109036161154465151340934570", "127799299334312606836341149461176377815", "210737993884420120263569493654422186932", "209649968006451179897843022713695119977", "113537644910509543457476867762605396915", "279525890564075587447333015948407376546", "224336639357494521275780646551959748629", "25807249112163488446076617180969054189", "270523936318442666697609473703849754841", "317518667812017590018061254918561800933", "188582916564333129943115443582866963968", "184365955772480980408450942389241216101", "46654064436681379403466850742468259387", "179553205685690590644855610230020589676", "267927737753294231974262149271772465594", "85485512945378506426565043855412277017", "237077866809864991149950140436837994909", "170898307080091837314548292183909505016", "267940924564554181964633308712965376691", "186154711837035260812172387370427123223", "319305239072505685094120349712850045464", "77269005785712485239549039758849123283" ], "threshold": 0.9 }, "deprecated": false, "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@b3d6adb3a49d82e4e557c5fc16f50c9ff731da5d" } ] }