Commit 72557edb authored by Dmitry Safonov's avatar Dmitry Safonov Committed by Andrei Vagin

compel/ksigset: fix ksigaddset() UB and flushing mask

Found by Coverity error:
> CID 172193 (#1 of 1): Bad bit shift operation (BAD_SHIFT)
> 1. large_shift: In expression 1 << sig % 64, left shifting
> by more than 31 bits has undefined behavior. The shift amount,
> sig % 64, is as much as 63.

That is:
1. yes, UB
2. while adding a signal to mask, this has flushed all other
   signals from mask.
Signed-off-by: 's avatarDmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent cda7d6b2
......@@ -20,6 +20,6 @@ static inline void ksigemptyset(k_rtsigset_t *set)
static inline void ksigaddset(k_rtsigset_t *set, int _sig)
{
int sig = _sig - 1;
set->sig[sig / _NSIG_BPW] = 1 << (sig % _NSIG_BPW);
set->sig[sig / _NSIG_BPW] |= 1UL << (sig % _NSIG_BPW);
}
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment