cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dawr-power9.rst (3725B)


      1=====================
      2DAWR issues on POWER9
      3=====================
      4
      5On older POWER9 processors, the Data Address Watchpoint Register (DAWR) can
      6cause a checkstop if it points to cache inhibited (CI) memory. Currently Linux
      7has no way to distinguish CI memory when configuring the DAWR, so on affected
      8systems, the DAWR is disabled.
      9
     10Affected processor revisions
     11============================
     12
     13This issue is only present on processors prior to v2.3. The revision can be
     14found in /proc/cpuinfo::
     15
     16    processor       : 0
     17    cpu             : POWER9, altivec supported
     18    clock           : 3800.000000MHz
     19    revision        : 2.3 (pvr 004e 1203)
     20
     21On a system with the issue, the DAWR is disabled as detailed below.
     22
     23Technical Details:
     24==================
     25
     26DAWR has 6 different ways of being set.
     271) ptrace
     282) h_set_mode(DAWR)
     293) h_set_dabr()
     304) kvmppc_set_one_reg()
     315) xmon
     32
     33For ptrace, we now advertise zero breakpoints on POWER9 via the
     34PPC_PTRACE_GETHWDBGINFO call. This results in GDB falling back to
     35software emulation of the watchpoint (which is slow).
     36
     37h_set_mode(DAWR) and h_set_dabr() will now return an error to the
     38guest on a POWER9 host. Current Linux guests ignore this error, so
     39they will silently not get the DAWR.
     40
     41kvmppc_set_one_reg() will store the value in the vcpu but won't
     42actually set it on POWER9 hardware. This is done so we don't break
     43migration from POWER8 to POWER9, at the cost of silently losing the
     44DAWR on the migration.
     45
     46For xmon, the 'bd' command will return an error on P9.
     47
     48Consequences for users
     49======================
     50
     51For GDB watchpoints (ie 'watch' command) on POWER9 bare metal , GDB
     52will accept the command. Unfortunately since there is no hardware
     53support for the watchpoint, GDB will software emulate the watchpoint
     54making it run very slowly.
     55
     56The same will also be true for any guests started on a POWER9
     57host. The watchpoint will fail and GDB will fall back to software
     58emulation.
     59
     60If a guest is started on a POWER8 host, GDB will accept the watchpoint
     61and configure the hardware to use the DAWR. This will run at full
     62speed since it can use the hardware emulation. Unfortunately if this
     63guest is migrated to a POWER9 host, the watchpoint will be lost on the
     64POWER9. Loads and stores to the watchpoint locations will not be
     65trapped in GDB. The watchpoint is remembered, so if the guest is
     66migrated back to the POWER8 host, it will start working again.
     67
     68Force enabling the DAWR
     69=======================
     70Kernels (since ~v5.2) have an option to force enable the DAWR via::
     71
     72  echo Y > /sys/kernel/debug/powerpc/dawr_enable_dangerous
     73
     74This enables the DAWR even on POWER9.
     75
     76This is a dangerous setting, USE AT YOUR OWN RISK.
     77
     78Some users may not care about a bad user crashing their box
     79(ie. single user/desktop systems) and really want the DAWR.  This
     80allows them to force enable DAWR.
     81
     82This flag can also be used to disable DAWR access. Once this is
     83cleared, all DAWR access should be cleared immediately and your
     84machine once again safe from crashing.
     85
     86Userspace may get confused by toggling this. If DAWR is force
     87enabled/disabled between getting the number of breakpoints (via
     88PTRACE_GETHWDBGINFO) and setting the breakpoint, userspace will get an
     89inconsistent view of what's available. Similarly for guests.
     90
     91For the DAWR to be enabled in a KVM guest, the DAWR needs to be force
     92enabled in the host AND the guest. For this reason, this won't work on
     93POWERVM as it doesn't allow the HCALL to work. Writes of 'Y' to the
     94dawr_enable_dangerous file will fail if the hypervisor doesn't support
     95writing the DAWR.
     96
     97To double check the DAWR is working, run this kernel selftest:
     98
     99  tools/testing/selftests/powerpc/ptrace/ptrace-hwbreak.c
    100
    101Any errors/failures/skips mean something is wrong.