The err_buf array uses 128 bytes of stack space. Move it off the stack by making it static. It's safe to use a shared buffer because klp_try_switch_task() is called under klp_mutex.
Unified · Split
| @@ -293,11 +293,11 @@ static int klp_check_stack(struct task_struct *task, char *err_buf) · 292 unmodified lines | |||
| 293 | */ | 293 | */ |
| 294 | static bool klp_try_switch_task(struct task_struct *task) | 294 | static bool klp_try_switch_task(struct task_struct *task) |
| 295 | { | 295 | { |
| 296 | static char err_buf[STACK_ERR_BUF_SIZE]; | ||
| 296 | struct rq *rq; | 297 | struct rq *rq; |
| 297 | struct rq_flags flags; | 298 | struct rq_flags flags; |
| 298 | int ret; | 299 | int ret; |
| 299 | bool success = false; | 300 | bool success = false; |
| 300 | char err_buf[STACK_ERR_BUF_SIZE]; | ||
| 301 | 301 | ||
| 302 | err_buf[0] = '\0'; | 302 | err_buf[0] = '\0'; |
| 303 | 303 | ||
| @@ -340,7 +340,6 @@ done: · 36 unmodified lines | |||
| 340 | pr_debug("%s", err_buf); | 340 | pr_debug("%s", err_buf); |
| 341 | 341 | ||
| 342 | return success; | 342 | return success; |
| 343 | |||
| 344 | } | 343 | } |
| 345 | 344 | ||
| 346 | /* | 345 | /* |