Re: [PATCH v2 1/4] lib: introduce copy_struct_from_user() helper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Aleksa,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[cannot apply to v5.3 next-20190924]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Aleksa-Sarai/lib-introduce-copy_struct_from_user-helper/20190926-071752
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gcc (GCC) 7.4.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.4.0 make.cross ARCH=sh 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

   In file included from include/linux/printk.h:7:0,
                    from include/linux/kernel.h:15,
                    from include/asm-generic/bug.h:18,
                    from arch/sh/include/asm/bug.h:112,
                    from include/linux/bug.h:5,
                    from include/linux/mmdebug.h:5,
                    from include/linux/mm.h:9,
                    from include/linux/mman.h:5,
                    from lib/test_user_copy.c:13:
   lib/test_user_copy.c: In function 'test_is_zeroed_user':
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 5 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:12:22: note: in expansion of macro 'KERN_SOH'
    #define KERN_WARNING KERN_SOH "4" /* warning conditions */
                         ^~~~~~~~
   include/linux/printk.h:306:9: note: in expansion of macro 'KERN_WARNING'
     printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~~~~~
   include/linux/printk.h:307:17: note: in expansion of macro 'pr_warning'
    #define pr_warn pr_warning
                    ^~~~~~~~~~
>> lib/test_user_copy.c:38:3: note: in expansion of macro 'pr_warn'
      pr_warn("[%d] " msg "\n", __LINE__, ##__VA_ARGS__); \
      ^~~~~~~
>> lib/test_user_copy.c:77:11: note: in expansion of macro 'test'
       ret |= test(retval != expected,
              ^~~~
   include/linux/kern_levels.h:5:18: warning: format '%lu' expects argument of type 'long unsigned int', but argument 6 has type 'size_t {aka unsigned int}' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   include/linux/kern_levels.h:12:22: note: in expansion of macro 'KERN_SOH'
    #define KERN_WARNING KERN_SOH "4" /* warning conditions */
                         ^~~~~~~~
   include/linux/printk.h:306:9: note: in expansion of macro 'KERN_WARNING'
     printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~~~~~
   include/linux/printk.h:307:17: note: in expansion of macro 'pr_warning'
    #define pr_warn pr_warning
                    ^~~~~~~~~~
>> lib/test_user_copy.c:38:3: note: in expansion of macro 'pr_warn'
      pr_warn("[%d] " msg "\n", __LINE__, ##__VA_ARGS__); \
      ^~~~~~~
>> lib/test_user_copy.c:77:11: note: in expansion of macro 'test'
       ret |= test(retval != expected,
              ^~~~

vim +/pr_warn +38 lib/test_user_copy.c

    33	
    34	#define test(condition, msg, ...)					\
    35	({									\
    36		int cond = (condition);						\
    37		if (cond)							\
  > 38			pr_warn("[%d] " msg "\n", __LINE__, ##__VA_ARGS__);	\
    39		cond;								\
    40	})
    41	
    42	static int test_is_zeroed_user(char *kmem, char __user *umem, size_t size)
    43	{
    44		int ret = 0;
    45		size_t start, end, i;
    46		size_t zero_start = size / 4;
    47		size_t zero_end = size - zero_start;
    48	
    49		/*
    50		 * We conduct a series of is_zeroed_user() tests on a block of memory
    51		 * with the following byte-pattern (trying every possible [start,end]
    52		 * pair):
    53		 *
    54		 *   [ 00 ff 00 ff ... 00 00 00 00 ... ff 00 ff 00 ]
    55		 *
    56		 * And we verify that is_zeroed_user() acts identically to memchr_inv().
    57		 */
    58	
    59		for (i = 0; i < zero_start; i += 2)
    60			kmem[i] = 0x00;
    61		for (i = 1; i < zero_start; i += 2)
    62			kmem[i] = 0xff;
    63	
    64		for (i = zero_end; i < size; i += 2)
    65			kmem[i] = 0xff;
    66		for (i = zero_end + 1; i < size; i += 2)
    67			kmem[i] = 0x00;
    68	
    69		ret |= test(copy_to_user(umem, kmem, size),
    70			    "legitimate copy_to_user failed");
    71	
    72		for (start = 0; start <= size; start++) {
    73			for (end = start; end <= size; end++) {
    74				int retval = is_zeroed_user(umem + start, end - start);
    75				int expected = memchr_inv(kmem + start, 0, end - start) == NULL;
    76	
  > 77				ret |= test(retval != expected,
    78					    "is_zeroed_user(=%d) != memchr_inv(=%d) mismatch (start=%lu, end=%lu)",
    79					    retval, expected, start, end);
    80			}
    81		}
    82	
    83		return ret;
    84	}
    85	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux