Ubuntu-focal-kernel/include
Kees Cook f96afdb3a3 uaccess: Add minimum bounds check on kernel buffer size
BugLink: https://bugs.launchpad.net/bugs/2017706

[ Upstream commit 04ffde1319a715bd0550ded3580d4ea3bc003776 ]

While there is logic about the difference between ksize and usize,
copy_struct_from_user() didn't check the size of the destination buffer
(when it was known) against ksize. Add this check so there is an upper
bounds check on the possible memset() call, otherwise lower bounds
checks made by callers will trigger bounds warnings under -Warray-bounds.
Seen under GCC 13:

In function 'copy_struct_from_user',
    inlined from 'iommufd_fops_ioctl' at
../drivers/iommu/iommufd/main.c:333:8:
../include/linux/fortify-string.h:59:33: warning: '__builtin_memset' offset [57, 4294967294] is out of the bounds [0, 56] of object 'buf' with type 'union ucmd_buffer' [-Warray-bounds=]
   59 | #define __underlying_memset     __builtin_memset
      |                                 ^
../include/linux/fortify-string.h:453:9: note: in expansion of macro '__underlying_memset'
  453 |         __underlying_memset(p, c, __fortify_size); \
      |         ^~~~~~~~~~~~~~~~~~~
../include/linux/fortify-string.h:461:25: note: in expansion of macro '__fortify_memset_chk'
  461 | #define memset(p, c, s) __fortify_memset_chk(p, c, s, \
      |                         ^~~~~~~~~~~~~~~~~~~~
../include/linux/uaccess.h:334:17: note: in expansion of macro 'memset'
  334 |                 memset(dst + size, 0, rest);
      |                 ^~~~~~
../drivers/iommu/iommufd/main.c: In function 'iommufd_fops_ioctl':
../drivers/iommu/iommufd/main.c:311:27: note: 'buf' declared here
  311 |         union ucmd_buffer buf;
      |                           ^~~

Cc: Christian Brauner <brauner@kernel.org>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Dinh Nguyen <dinguyen@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Alexander Potapenko <glider@google.com>
Acked-by: Aleksa Sarai <cyphar@cyphar.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/lkml/20230203193523.never.667-kees@kernel.org/
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
2023-05-12 17:15:07 +02:00
..
acpi
asm-generic mm/khugepaged: fix GUP-fast interaction by sending IPI 2023-02-01 15:21:52 +01:00
clocksource
crypto
drm drm: Initialize struct drm_crtc_state.no_vblank from device settings 2023-05-12 17:15:03 +02:00
dt-bindings
keys
kvm
linux uaccess: Add minimum bounds check on kernel buffer size 2023-05-12 17:15:07 +02:00
math-emu
media media: dvbdev: fix build warning due to comments 2023-02-01 15:23:18 +01:00
misc
net net: add sock_init_data_uid() 2023-05-12 17:15:01 +02:00
pcmcia
ras
rdma
scsi
soc
sound ASoC: soc-dapm.h: fixup warning struct snd_pcm_substream not declared 2023-05-12 17:15:04 +02:00
target
trace jbd2: use the correct print format 2023-02-01 15:23:46 +01:00
uapi netfilter: conntrack: unify established states for SCTP paths 2023-03-21 10:09:01 +01:00
vdso
video
xen