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 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