[lxc-devel] [PATCH] exclude non-existing signals from the loop

Qiang Huang h.huangqiang at huawei.com
Fri Jan 17 03:27:10 UTC 2014


On 2014/1/17 5:38, Serge Hallyn wrote:
> Quoting S.Çağlar Onur (caglar at 10ur.org):
>> On Thu, Jan 16, 2014 at 4:24 PM, Serge Hallyn <serge.hallyn at ubuntu.com> wrote:
>>> Quoting S.Çağlar Onur (caglar at 10ur.org):
>>>> 32 and 33 are not defined and causing sigaction to fail. "kill -l" shows following
>>>> on my system
>>>>
>>>>  1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
>>>>  6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
>>>> 11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
>>>> 16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
>>>> 21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
>>>> 26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
>>>> 31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
>>>> 38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
>>>> 43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
>>>> 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
>>>> 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
>>>> 58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
>>>> 63) SIGRTMAX-1  64) SIGRTMAX
>>>>
>>>> Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
>>>
>>> Odd...  on my system NSIG is 32, so these should never hit (since it is
>>> in a while i<NSIG loop)
>>
>> Printing NSIG via ERROR shows that its 64 on my system.
> 
> So a header file is #defining NSIG, which is already defined to 32
> in kernel headers, to _NSIG, which is 64.
> 
> Looking around the current state of kernel headers, i wonder whether
> we should imply use min(SIGRTMIN, NSIG).

My box is x86_64, and I got the same result as S.Çağlar.

People may use signal number bigger than SIGRTMIN, so min(SIGRTMIN, NSIG)
would miss them. Isn't that cause any problems?

Maybe we should just bypass there non-existent signals.

> 
>>> Does 32 show up in /usr/include/asm-generic/signal.h or
>>> /usr/include/`arch`-linux-gnu/asm/signal.h ?
>>
>> [caglar at qp:~/Projects/lxc(master)] find /usr/include/ -name signal.h |
>> xargs grep NSIG
>> /usr/include/asm-generic/signal.h:#define _NSIG         64
>> /usr/include/asm-generic/signal.h:#define _NSIG_BPW     __BITS_PER_LONG
>> /usr/include/asm-generic/signal.h:#define _NSIG_WORDS   (_NSIG / _NSIG_BPW)
>> /usr/include/asm-generic/signal.h:#define SIGRTMAX      _NSIG
>> /usr/include/asm-generic/signal.h:#define MINSIGSTKSZ   2048
>> /usr/include/asm-generic/signal.h:      unsigned long sig[_NSIG_WORDS];
>> /usr/include/x86_64-linux-gnu/asm/signal.h:#define NSIG         32
>> /usr/include/x86_64-linux-gnu/asm/signal.h:#define SIGRTMAX     _NSIG
>> /usr/include/x86_64-linux-gnu/asm/signal.h:#define MINSIGSTKSZ  2048
>> /usr/include/signal.h:# define NSIG     _NSIG
>> /usr/include/signal.h:extern const char *const _sys_siglist[_NSIG];
>> /usr/include/signal.h:extern const char *const sys_siglist[_NSIG];
>>
>>>> ---
>>>>  src/lxc/lxc_init.c | 3 ++-
>>>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/src/lxc/lxc_init.c b/src/lxc/lxc_init.c
>>>> index a59dd9c..ae64af8 100644
>>>> --- a/src/lxc/lxc_init.c
>>>> +++ b/src/lxc/lxc_init.c
>>>> @@ -143,7 +143,8 @@ int main(int argc, char *argv[])
>>>>                   i == SIGSEGV ||
>>>>                   i == SIGBUS ||
>>>>                   i == SIGSTOP ||
>>>> -                 i == SIGKILL)
>>>> +                 i == SIGKILL ||
>>>> +                 i == 32 || i == 33)
>>>>                       continue;
>>>>
>>>>               if (sigfillset(&act.sa_mask) ||
>>>> --
>>>> 1.8.3.2
>>>>




More information about the lxc-devel mailing list