~jakub/helenos/cht-preintegration

Viewing all changes in revision 2290.

  • Committer: Jakub Jermar
  • Date: 2014-11-19 22:16:11 UTC
  • Revision ID: jakub@jermar.eu-20141119221611-uyylr85xy4csxz4f
Spill uspace windows to uspace wbuf in PREEMPTIBLE_HANDLER_KERNEL

PREEMPTIBLE_HANDLER_KERNEL checks the value of the CANSAVE register to
see whether the imminent SAVE instruction would generate a window spill
trap or not. If CANSAVE is zero, it uses the INLINE_SPILL macro to spill
a register window without generating the spill trap. INLINE_SPILL
assumes a kernel window, but it is also possible to have a uspace window
at this point. In this case, INLINE_SPILL will wrongly interpret the
window's uspace stack address as a kernel stack address, leading to a
random memory corruption.

It is therefore necessary to also check the value in the OTHERWIN
register to see whether the spilled window would be a uspace window. In
such case, INLINE_SPILL_TO_WBUF needs to be used instead of INLINE_SPILL
to spill the uspace window to the uspace window buffer.

expand all expand all

Show diffs side-by-side

added added

removed removed

Lines of Context: