mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 19:43:40 +02:00
IOMMU Fixes for Linux v5.9-rc5
Two fixes for the AMD IOMMU driver:
- Fix a potential NULL-ptr dereference found by smatch
- Fix interrupt remapping when a device is assigned to a guest
and AVIC is enabled.
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEr9jSbILcajRFYWYyK/BELZcBGuMFAl9kyyMACgkQK/BELZcB
GuP7DxAAwAI1KbHUQCJC7pbxpl6w/oTZ/AZeKP2v+2ULuMsZEUPyBEM9GsHi1caV
7KJI95LqHm+2kky2pHvNZn5EblfjX7SBdbaLcoCaYpRl17FctE/cJJCTYp+dHR3q
TaTFiMUhLTx4mgTNBJ5SynAVM6kPV3sPT4x5Kz8OowufmYZFxI9c4zx76vVl5gjT
WD/2R23wADMYbFqW90Ct3ltSUWmyn0iimv7gRe/Zh2dtjYmDqjMMHlfMj1HAONXk
/KyRywKbnSLFbaFCR4jtSVqtrodAQUoqAzg8jqcfmOL9t/k0N9tteJW0gDAGD7Uu
evjl+zciR9Me7uJQv1xXE1+8kyyDZV5WMlRTR3ChWWdsPDvyd5TR9aMt1PP2Mn/0
AxAGkIvCgmKb3SpM4AI3BtvXo/+NhZs+s07k4UAVQibkXPE82GhyPktyleSrEQiL
qnOmo9i/1q53P1Pv8UI5PQovtATvRPq5SzUgAN3wi9n8RtiEmnJ7v9R3NGcdvMwy
LV+X9sVSjmYt3cOfGBA0sJJjrlgDQsYM3P7kmidL8I5lzZ9TzFIcDkAf1t1oSmQI
cCY4BR8kjenn6OmxABrnLc9cpr3QV3BcqOcoin0BkaBaY3KNUOgbsQHaLbxUBiQv
kT05susDwN0u81ERBOcpzw08xFZsRJ6omGQ4ygvO+N9fHcpaHVs=
=1jaf
-----END PGP SIGNATURE-----
Merge tag 'iommu-fixes-v5.9-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu
Pull iommu fixes from Joerg Roedel:
"Two fixes for the AMD IOMMU driver:
- Fix a potential NULL-ptr dereference found by smatch
- Fix interrupt remapping when a device is assigned to a guest and
AVIC is enabled"
* tag 'iommu-fixes-v5.9-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu:
iommu/amd: Restore IRTE.RemapEn bit for amd_iommu_activate_guest_mode
iommu/amd: Fix potential @entry null deref
This commit is contained in:
commit
1fd79656f7
|
|
@ -3840,14 +3840,18 @@ int amd_iommu_activate_guest_mode(void *data)
|
|||
{
|
||||
struct amd_ir_data *ir_data = (struct amd_ir_data *)data;
|
||||
struct irte_ga *entry = (struct irte_ga *) ir_data->entry;
|
||||
u64 valid;
|
||||
|
||||
if (!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir) ||
|
||||
!entry || entry->lo.fields_vapic.guest_mode)
|
||||
return 0;
|
||||
|
||||
valid = entry->lo.fields_vapic.valid;
|
||||
|
||||
entry->lo.val = 0;
|
||||
entry->hi.val = 0;
|
||||
|
||||
entry->lo.fields_vapic.valid = valid;
|
||||
entry->lo.fields_vapic.guest_mode = 1;
|
||||
entry->lo.fields_vapic.ga_log_intr = 1;
|
||||
entry->hi.fields.ga_root_ptr = ir_data->ga_root_ptr;
|
||||
|
|
@ -3864,12 +3868,14 @@ int amd_iommu_deactivate_guest_mode(void *data)
|
|||
struct amd_ir_data *ir_data = (struct amd_ir_data *)data;
|
||||
struct irte_ga *entry = (struct irte_ga *) ir_data->entry;
|
||||
struct irq_cfg *cfg = ir_data->cfg;
|
||||
u64 valid = entry->lo.fields_remap.valid;
|
||||
u64 valid;
|
||||
|
||||
if (!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir) ||
|
||||
!entry || !entry->lo.fields_vapic.guest_mode)
|
||||
return 0;
|
||||
|
||||
valid = entry->lo.fields_remap.valid;
|
||||
|
||||
entry->lo.val = 0;
|
||||
entry->hi.val = 0;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user