Re: [PATCH] consider stack access while checking for alternatesignal stack

From: Sebastian Andrzej Siewior
Date: Mon Oct 19 2009 - 15:32:27 EST


* Roland McGrath | 2009-10-19 11:08:10 [-0700]:

>AFAICT all you want is the following, and I'm not sure it requires all that
>much explanation. I've probably missed some subtlety.

>Thanks,
>Roland
>
>--- a/include/linux/sched.h
>+++ b/include/linux/sched.h
>@@ -2090,7 +2090,13 @@ static inline int is_si_special(const struct siginfo *info)
>
> static inline int on_sig_stack(unsigned long sp)
> {
>- return (sp - current->sas_ss_sp < current->sas_ss_size);
>+#ifdef CONFIG_STACK_GROWSUP
>+ return sp >= current->sas_ss_sp &&
>+ sp - current->sas_ss_sp < current->sas_ss_size;

CONFIG_STACK_GROWSUP is wrong: If your stack grows up and sp ==
sas_ss_sp + size than you are using the last entry in your sig stack
which will be not recognized correctly. The case where sp == sas_ss_sp
is also not detected correctly but this should not happen in real life.

>+#else
>+ return sp > current->sas_ss_sp &&
>+ sp - current->sas_ss_sp <= current->sas_ss_size;
>+#endif
That is the PRE case which is the only relevant since we don't have any
POST architectures. The check here produces the same results as my
variant so it is okay :)
So you prefer the smaller patch with comments around it?
> }
>

Sebastian
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/