The patch titled Subject: fs/select.c: fix memory corruption in compat_get_fd_set() has been removed from the -mm tree. Its filename was fs-select-fix-memory-corruption-in-compat_get_fd_set.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ From: Helge Deller <deller@xxxxxx> Subject: fs/select.c: fix memory corruption in compat_get_fd_set() 464d62421cb8 ("select: switch compat_{get,put}_fd_set() to compat_{get,put}_bitmap()") changed the calculation on how many bytes need to be zeroed when userspace handed over a NULL pointer for a fdset array in the select syscall. The calculation was changed in compat_get_fd_set() wrongly from memset(fdset, 0, ((nr + 1) & ~1)*sizeof(compat_ulong_t)); to memset(fdset, 0, ALIGN(nr, BITS_PER_LONG)); The ALIGN(nr, BITS_PER_LONG) calculates the number of bits which need to be zeroed in the target fdset array (rounded up to the next full bits for an unsigned long). But the memset() call expects the number of bytes to be zeroed. This leads to clearing more memory than wanted (on the stack area or even at kmalloc()ed memory areas) and to random kernel crashes as we have seen them on the parisc platform. The correct change should have been memset(fdset, 0, (ALIGN(nr, BITS_PER_LONG) / BITS_PER_LONG) * BYTES_PER_LONG); which is the same as can be archieved with a call to zero_fd_set(nr, fdset). Link: http://lkml.kernel.org/r/20170823203700.GA29614@xxxxxxxxxxxxxxxx Fixes: 464d62421cb8 ("select: switch compat_{get,put}_fd_set() to compat_{get,put}_bitmap()" Signed-off-by: Helge Deller <deller@xxxxxx> Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/select.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff -puN fs/select.c~fs-select-fix-memory-corruption-in-compat_get_fd_set fs/select.c --- a/fs/select.c~fs-select-fix-memory-corruption-in-compat_get_fd_set +++ a/fs/select.c @@ -1164,11 +1164,7 @@ int compat_get_fd_set(unsigned long nr, if (ufdset) { return compat_get_bitmap(fdset, ufdset, nr); } else { - /* Tricky, must clear full unsigned long in the - * kernel fdset at the end, ALIGN makes sure that - * actually happens. - */ - memset(fdset, 0, ALIGN(nr, BITS_PER_LONG)); + zero_fd_set(nr, fdset); return 0; } } _ Patches currently in -mm which might be from deller@xxxxxx are -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html