Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[S390] sparse: fix access past end of array warnings

Remove unnecessary code to avoid false positives from sparse, e.g.

arch/s390/kernel/compat_signal.c:221:61: warning: invalid access past the end of 'set32' (8 8)

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

+9 -42
+5 -18
arch/s390/kernel/compat_linux.c
··· 362 362 if (set) { 363 363 if (copy_from_user (&s32, set, sizeof(compat_sigset_t))) 364 364 return -EFAULT; 365 - switch (_NSIG_WORDS) { 366 - case 4: s.sig[3] = s32.sig[6] | (((long)s32.sig[7]) << 32); 367 - case 3: s.sig[2] = s32.sig[4] | (((long)s32.sig[5]) << 32); 368 - case 2: s.sig[1] = s32.sig[2] | (((long)s32.sig[3]) << 32); 369 - case 1: s.sig[0] = s32.sig[0] | (((long)s32.sig[1]) << 32); 370 - } 365 + s.sig[0] = s32.sig[0] | (((long)s32.sig[1]) << 32); 371 366 } 372 367 set_fs (KERNEL_DS); 373 368 ret = sys_rt_sigprocmask(how, ··· 372 377 set_fs (old_fs); 373 378 if (ret) return ret; 374 379 if (oset) { 375 - switch (_NSIG_WORDS) { 376 - case 4: s32.sig[7] = (s.sig[3] >> 32); s32.sig[6] = s.sig[3]; 377 - case 3: s32.sig[5] = (s.sig[2] >> 32); s32.sig[4] = s.sig[2]; 378 - case 2: s32.sig[3] = (s.sig[1] >> 32); s32.sig[2] = s.sig[1]; 379 - case 1: s32.sig[1] = (s.sig[0] >> 32); s32.sig[0] = s.sig[0]; 380 - } 380 + s32.sig[1] = (s.sig[0] >> 32); 381 + s32.sig[0] = s.sig[0]; 381 382 if (copy_to_user (oset, &s32, sizeof(compat_sigset_t))) 382 383 return -EFAULT; 383 384 } ··· 392 401 ret = sys_rt_sigpending((sigset_t __force __user *) &s, sigsetsize); 393 402 set_fs (old_fs); 394 403 if (!ret) { 395 - switch (_NSIG_WORDS) { 396 - case 4: s32.sig[7] = (s.sig[3] >> 32); s32.sig[6] = s.sig[3]; 397 - case 3: s32.sig[5] = (s.sig[2] >> 32); s32.sig[4] = s.sig[2]; 398 - case 2: s32.sig[3] = (s.sig[1] >> 32); s32.sig[2] = s.sig[1]; 399 - case 1: s32.sig[1] = (s.sig[0] >> 32); s32.sig[0] = s.sig[0]; 400 - } 404 + s32.sig[1] = (s.sig[0] >> 32); 405 + s32.sig[0] = s.sig[0]; 401 406 if (copy_to_user (set, &s32, sizeof(compat_sigset_t))) 402 407 return -EFAULT; 403 408 }
+4 -24
arch/s390/kernel/compat_signal.c
··· 213 213 ret = get_user(sa_handler, &act->sa_handler); 214 214 ret |= __copy_from_user(&set32, &act->sa_mask, 215 215 sizeof(compat_sigset_t)); 216 - switch (_NSIG_WORDS) { 217 - case 4: new_ka.sa.sa_mask.sig[3] = set32.sig[6] 218 - | (((long)set32.sig[7]) << 32); 219 - case 3: new_ka.sa.sa_mask.sig[2] = set32.sig[4] 220 - | (((long)set32.sig[5]) << 32); 221 - case 2: new_ka.sa.sa_mask.sig[1] = set32.sig[2] 222 - | (((long)set32.sig[3]) << 32); 223 - case 1: new_ka.sa.sa_mask.sig[0] = set32.sig[0] 224 - | (((long)set32.sig[1]) << 32); 225 - } 216 + new_ka.sa.sa_mask.sig[0] = 217 + set32.sig[0] | (((long)set32.sig[1]) << 32); 226 218 ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); 227 219 228 220 if (ret) ··· 225 233 ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); 226 234 227 235 if (!ret && oact) { 228 - switch (_NSIG_WORDS) { 229 - case 4: 230 - set32.sig[7] = (old_ka.sa.sa_mask.sig[3] >> 32); 231 - set32.sig[6] = old_ka.sa.sa_mask.sig[3]; 232 - case 3: 233 - set32.sig[5] = (old_ka.sa.sa_mask.sig[2] >> 32); 234 - set32.sig[4] = old_ka.sa.sa_mask.sig[2]; 235 - case 2: 236 - set32.sig[3] = (old_ka.sa.sa_mask.sig[1] >> 32); 237 - set32.sig[2] = old_ka.sa.sa_mask.sig[1]; 238 - case 1: 239 - set32.sig[1] = (old_ka.sa.sa_mask.sig[0] >> 32); 240 - set32.sig[0] = old_ka.sa.sa_mask.sig[0]; 241 - } 236 + set32.sig[1] = (old_ka.sa.sa_mask.sig[0] >> 32); 237 + set32.sig[0] = old_ka.sa.sa_mask.sig[0]; 242 238 ret = put_user((unsigned long)old_ka.sa.sa_handler, &oact->sa_handler); 243 239 ret |= __copy_to_user(&oact->sa_mask, &set32, 244 240 sizeof(compat_sigset_t));