Thread (3 messages) 3 messages, 2 authors, 2021-09-09

Re: [linux-next:master 12105/12116] include/linux/thread_info.h:213:4: error: call to '__bad_copy_to' declared with attribute error: copy destination size is too small

From: Kees Cook <hidden>
Date: 2021-09-09 15:54:01
Also in: oe-kbuild-all

On Thu, Sep 09, 2021 at 08:45:56AM -0700, Kees Cook wrote:
On Thu, Sep 09, 2021 at 11:49:55AM +0800, kernel test robot wrote:
quoted
tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   999569d59a0aa2509ae4a67ecc266c1134e37e7b
commit: f5b1a5d922d3199e0637349239b43aed6c7656b9 [12105/12116] mm/vmalloc: add __alloc_size attributes for better bounds checking
config: i386-randconfig-a002-20200329 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
        # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=f5b1a5d922d3199e0637349239b43aed6c7656b9
        git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout f5b1a5d922d3199e0637349239b43aed6c7656b9
        # save the attached .config to linux build tree
        mkdir build_dir
        make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/rapidio/devices/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <redacted>

All errors (new ones prefixed by >>):

   In file included from arch/x86/include/asm/preempt.h:7,
                    from include/linux/preempt.h:78,
                    from include/linux/spinlock.h:55,
                    from include/linux/mm_types.h:9,
                    from include/linux/buildid.h:5,
                    from include/linux/module.h:14,
                    from drivers/rapidio/devices/rio_mport_cdev.c:13:
   In function 'check_copy_size',
       inlined from 'copy_from_user' at include/linux/uaccess.h:191:6,
       inlined from 'rio_mport_transfer_ioctl' at drivers/rapidio/devices/rio_mport_cdev.c:983:6:
quoted
quoted
include/linux/thread_info.h:213:4: error: call to '__bad_copy_to' declared with attribute error: copy destination size is too small
     213 |    __bad_copy_to();
         |    ^~~~~~~~~~~~~~~

        transfer = vmalloc(array_size(sizeof(*transfer), transaction.count));
        if (!transfer)
                return -ENOMEM;

        if (unlikely(copy_from_user(transfer,
                                    (void __user *)(uintptr_t)transaction.block,
                                    array_size(sizeof(*transfer), transaction.count)))) {

Uhhhmm... allocation size and copy size are identical...

      array_size(sizeof(*transfer), transaction.count)
	array_size(sizeof(*transfer), transaction.count)
This appears to be an optimization(?) bug in GCC 9.3. This warning
(correctly) does not appear in later versions.

-- 
Kees Cook
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help