This patch adds new helper functions to the kstackwatch module to aid in debugging and testing.
- `ksw_watch_show()`: Displays information about the currently active hardware breakpoint, such as its address and length. This is useful for verifying that a breakpoint has been correctly installed. - `ksw_watch_fire()`: Manually triggers the active hardware breakpoint. This function is for testing the breakpoint handler to ensure it correctly identifies and reports the stack corruption. Signed-off-by: Jinchao Wang <wangjinchao...@gmail.com> --- mm/kstackwatch/kstackwatch.h | 4 ++++ mm/kstackwatch/watch.c | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/mm/kstackwatch/kstackwatch.h b/mm/kstackwatch/kstackwatch.h index c24a651977c0..27c71a9391ac 100644 --- a/mm/kstackwatch/kstackwatch.h +++ b/mm/kstackwatch/kstackwatch.h @@ -2,6 +2,8 @@ #ifndef _KSTACKWATCH_H #define _KSTACKWATCH_H +#include <linux/kprobes.h> +#include <linux/perf_event.h> #include <linux/types.h> #define MAX_FUNC_NAME_LEN 64 @@ -48,5 +50,7 @@ int ksw_watch_init(struct ksw_config *config); void ksw_watch_exit(void); int ksw_watch_on(u64 watch_addr, u64 watch_len); void ksw_watch_off(void); +void ksw_watch_show(void); +void ksw_watch_fire(void); #endif /* _KSTACKWATCH_H */ diff --git a/mm/kstackwatch/watch.c b/mm/kstackwatch/watch.c index 1b4cf5d42db9..28ea24e4ae3a 100644 --- a/mm/kstackwatch/watch.c +++ b/mm/kstackwatch/watch.c @@ -218,3 +218,23 @@ void ksw_watch_off(void) ksw_watch_on((unsigned long)&marker, sizeof(marker)); pr_info("KSW: All HWBPs disarmed\n"); } + +/* Debug functions */ +void ksw_watch_show(void) +{ + struct perf_event *bp; + + bp = *this_cpu_ptr(watch_events); + pr_info("KSW: HWBP info test - bp_addr: 0x%px len:%llu\n", + (void *)bp->attr.bp_addr, bp->attr.bp_len); +} + +void ksw_watch_fire(void) +{ + struct perf_event *bp; + char *ptr; + + bp = *this_cpu_ptr(watch_events); + ptr = (char *)READ_ONCE(bp->attr.bp_addr); + *ptr = 0x42; // This should trigger immediately +} -- 2.43.0