On 02/16/2015 05:44 AM, Rusty Russell wrote: > Andrey Ryabinin <a.ryabi...@samsung.com> writes: >> MODULE_DEVICE_TABLE() macro used to create aliases to device tables. >> Normally alias should have the same type as aliased symbol. >> >> Device tables are arrays, so they have 'struct type##_device_id[x]' >> types. Alias created by MODULE_DEVICE_TABLE() will have non-array type - >> 'struct type##_device_id'. >> >> This inconsistency confuses compiler, it could make a wrong >> assumption about variable's size which leads KASan to >> produce a false positive report about out of bounds access. > > Hmm, as Andrew Morton points out, this breaks some usage; if we just > fix the type (struct type##_device_id[]) will that work instead? > > I'm guessing not, since typeof(x) will presumably preserve sizing > information? >
Yes, this won't work. In this particular case 'struct type##_device_id[]' would be equivalent to 'struct type##_device_id[1]' $ cat test.c struct d { int a; int b; }; struct d arr[] = { {1, 2}, {3, 4}, {} }; extern struct d arr_alias[] __attribute__((alias("arr"))); $ gcc -c test.c test.c:8:17: warning: array ‘arr_alias’ assumed to have one element extern struct d arr_alias[] __attribute__((alias("arr"))); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/