It's not valid to pass a pointer to a stack variable through the
stack_hop() call (because the call changes the stack segment). This
bug was probably not noticed before because by default
(CONFIG_ENTRY_EXTRASTACK) SeaBIOS uses the extra stack on all 16bit
entry points, and the internal stack_hop() with that config option is
effectively a no-op.
This reverts commit d488a7683d90bf8fae7ceb8c3ad9e95fbbd92079.
Signed-off-by: Kevin O'Connor <kevin(a)koconnor.net>
---
src/kbd.c | 6 +++---
src/mouse.c | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/kbd.c b/src/kbd.c
index 3677a12..a5a1ad9 100644
--- a/src/kbd.c
+++ b/src/kbd.c
@@ -11,7 +11,7 @@
#include "hw/ps2port.h" // ps2_kbd_command
#include "hw/usb-hid.h" // usb_kbd_command
#include "output.h" // debug_enter
-#include "stacks.h" // stack_hop
+#include "stacks.h" // yield
#include "string.h" // memset
#include "util.h" // kbd_init
@@ -117,8 +117,8 @@ static int
kbd_command(int command, u8 *param)
{
if (usb_kbd_active())
- return stack_hop(command, (u32)param, usb_kbd_command);
- return stack_hop(command, (u32)param, ps2_kbd_command);
+ return usb_kbd_command(command, param);
+ return ps2_kbd_command(command, param);
}
// read keyboard input
diff --git a/src/mouse.c b/src/mouse.c
index 83e499d..6d1f5b7 100644
--- a/src/mouse.c
+++ b/src/mouse.c
@@ -10,7 +10,7 @@
#include "hw/ps2port.h" // ps2_mouse_command
#include "hw/usb-hid.h" // usb_mouse_command
#include "output.h" // dprintf
-#include "stacks.h" // stack_hop
+#include "stacks.h" // stack_hop_back
#include "util.h" // mouse_init
void
@@ -27,8 +27,8 @@ static int
mouse_command(int command, u8 *param)
{
if (usb_mouse_active())
- return stack_hop(command, (u32)param, usb_mouse_command);
- return stack_hop(command, (u32)param, ps2_mouse_command);
+ return usb_mouse_command(command, param);
+ return ps2_mouse_command(command, param);
}
#define RET_SUCCESS 0x00
--
1.9.3