• Marc Zyngier's avatar
    Merge branch kvm-arm64/sysreg-cleanup-5.20 into kvmarm-master/next · ae98a4a9
    Marc Zyngier authored
    * kvm-arm64/sysreg-cleanup-5.20:
      : .
      : Long overdue cleanup of the sysreg userspace access,
      : with extra scrubbing on the vgic side of things.
      : From the cover letter:
      :
      : "Schspa Shi recently reported[1] that some of the vgic code interacting
      : with userspace was reading uninitialised stack memory, and although
      : that read wasn't used any further, it prompted me to revisit this part
      : of the code.
      :
      : Needless to say, this area of the kernel is pretty crufty, and shows a
      : bunch of issues in other parts of the KVM/arm64 infrastructure. This
      : series tries to remedy a bunch of them:
      :
      : - Sanitise the way we deal with sysregs from userspace: at the moment,
      :   each and every .set_user/.get_user callback has to implement its own
      :   userspace accesses (directly or indirectly). It'd be much better if
      :   that was centralised so that we can reason about it.
      :
      : - Enforce that all AArch64 sysregs are 64bit. Always. This was sort of
      :   implied by the code, but it took some effort to convince myself that
      :   this was actually the case.
      :
      : - Move the vgic-v3 sysreg userspace accessors to the userspace
      :   callbacks instead of hijacking the vcpu trap callback. This allows
      :   us to reuse the sysreg infrastructure.
      :
      : - Consolidate userspace accesses for both GICv2, GICv3 and common code
      :   as much as possible.
      :
      : - Cleanup a bunch of not-very-useful helpers, tidy up some of the code
      :   as we touch it.
      :
      : [1] https://lore.kernel.org/r/m2h740zz1i.fsf@gmail.com"
      : .
      KVM: arm64: Get rid or outdated comments
      KVM: arm64: Descope kvm_arm_sys_reg_{get,set}_reg()
      KVM: arm64: Get rid of find_reg_by_id()
      KVM: arm64: vgic: Tidy-up calls to vgic_{get,set}_common_attr()
      KVM: arm64: vgic: Consolidate userspace access for base address setting
      KVM: arm64: vgic-v2: Add helper for legacy dist/cpuif base address setting
      KVM: arm64: vgic: Use {get,put}_user() instead of copy_{from.to}_user
      KVM: arm64: vgic-v2: Consolidate userspace access for MMIO registers
      KVM: arm64: vgic-v3: Consolidate userspace access for MMIO registers
      KVM: arm64: vgic-v3: Use u32 to manage the line level from userspace
      KVM: arm64: vgic-v3: Convert userspace accessors over to FIELD_GET/FIELD_PREP
      KVM: arm64: vgic-v3: Make the userspace accessors use sysreg API
      KVM: arm64: vgic-v3: Push user access into vgic_v3_cpu_sysregs_uaccess()
      KVM: arm64: vgic-v3: Simplify vgic_v3_has_cpu_sysregs_attr()
      KVM: arm64: Get rid of reg_from/to_user()
      KVM: arm64: Consolidate sysreg userspace accesses
      KVM: arm64: Rely on index_to_param() for size checks on userspace access
      KVM: arm64: Introduce generic get_user/set_user helpers for system registers
      KVM: arm64: Reorder handling of invariant sysregs from userspace
      KVM: arm64: Add get_reg_by_id() as a sys_reg_desc retrieving helper
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    ae98a4a9
sys_regs.c 79.2 KB