Re: [PATCH v2] selftests/livepatch: introduce tests

From: kbuild test robot
Date: Tue Apr 10 2018 - 23:46:28 EST


Hi Joe,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on v4.16]
[also build test ERROR on next-20180410]
[cannot apply to linus/master jikos-livepatching/for-next]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Joe-Lawrence/selftests-livepatch-introduce-tests/20180411-093112
config: x86_64-allmodconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

All error/warnings (new ones prefixed by >>):

lib/livepatch/test_klp_shadow_vars.c:76:9: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:76:9: sparse: got "\001"
lib/livepatch/test_klp_shadow_vars.c:79:9: sparse: Trying to use reserved word 'return' as identifier
lib/livepatch/test_klp_shadow_vars.c:79:16: sparse: Expected ; at end of declaration
lib/livepatch/test_klp_shadow_vars.c:79:16: sparse: got ret
lib/livepatch/test_klp_shadow_vars.c:80:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:80:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:88:9: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:88:9: sparse: got "\001"
lib/livepatch/test_klp_shadow_vars.c:91:9: sparse: Trying to use reserved word 'return' as identifier
lib/livepatch/test_klp_shadow_vars.c:91:16: sparse: Expected ; at end of declaration
lib/livepatch/test_klp_shadow_vars.c:91:16: sparse: got ret
lib/livepatch/test_klp_shadow_vars.c:92:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:92:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:97:9: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:97:9: sparse: got "\001"
lib/livepatch/test_klp_shadow_vars.c:99:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:99:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:104:9: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:104:9: sparse: got "\001"
lib/livepatch/test_klp_shadow_vars.c:106:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:106:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:114:9: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:114:9: sparse: got "\001"
lib/livepatch/test_klp_shadow_vars.c:117:9: sparse: Trying to use reserved word 'return' as identifier
lib/livepatch/test_klp_shadow_vars.c:117:16: sparse: Expected ; at end of declaration
lib/livepatch/test_klp_shadow_vars.c:117:16: sparse: got 0
lib/livepatch/test_klp_shadow_vars.c:118:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:118:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:124:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:124:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:138:16: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:138:16: sparse: got 0
lib/livepatch/test_klp_shadow_vars.c:139:16: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:139:16: sparse: got &
lib/livepatch/test_klp_shadow_vars.c:140:16: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:140:16: sparse: got &
lib/livepatch/test_klp_shadow_vars.c:141:16: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:141:16: sparse: got &
lib/livepatch/test_klp_shadow_vars.c:142:16: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:142:16: sparse: got &
lib/livepatch/test_klp_shadow_vars.c:149:13: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:149:13: sparse: got !
lib/livepatch/test_klp_shadow_vars.c:149:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:164:17: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:164:17: sparse: got ==
lib/livepatch/test_klp_shadow_vars.c:164:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:168:17: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:168:17: sparse: got ==
lib/livepatch/test_klp_shadow_vars.c:168:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:172:17: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:172:17: sparse: got ==
lib/livepatch/test_klp_shadow_vars.c:172:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:182:17: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:182:17: sparse: got ==
lib/livepatch/test_klp_shadow_vars.c:182:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:192:13: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:192:13: sparse: got !
lib/livepatch/test_klp_shadow_vars.c:192:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:195:25: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:195:25: sparse: got +
lib/livepatch/test_klp_shadow_vars.c:197:13: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:197:13: sparse: got !
lib/livepatch/test_klp_shadow_vars.c:197:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:200:25: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:200:25: sparse: got +
lib/livepatch/test_klp_shadow_vars.c:202:13: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:202:13: sparse: got !
lib/livepatch/test_klp_shadow_vars.c:202:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:209:17: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:209:17: sparse: got ==
lib/livepatch/test_klp_shadow_vars.c:209:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:216:28: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:216:28: sparse: got +
lib/livepatch/test_klp_shadow_vars.c:218:13: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:218:13: sparse: got !
lib/livepatch/test_klp_shadow_vars.c:218:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:224:9: sparse: Trying to use reserved word 'return' as identifier
lib/livepatch/test_klp_shadow_vars.c:224:16: sparse: Expected ; at end of declaration
lib/livepatch/test_klp_shadow_vars.c:224:16: sparse: got 0
lib/livepatch/test_klp_shadow_vars.c:225:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:225:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:231:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:231:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:113:23: sparse: undefined identifier 'ctor_data'
lib/livepatch/test_klp_shadow_vars.c:148:26: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:148:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types
lib/livepatch/test_klp_shadow_vars.c:155:28: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:155:9: sparse: symbol 'sv1' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types
lib/livepatch/test_klp_shadow_vars.c:156:28: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:156:9: sparse: symbol 'sv2' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types
lib/livepatch/test_klp_shadow_vars.c:157:28: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:157:9: sparse: symbol 'sv3' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types
lib/livepatch/test_klp_shadow_vars.c:163:26: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:163:9: sparse: symbol 'ret' has multiple initializers (originally initialized at lib/livepatch/test_klp_shadow_vars.c:148)
lib/livepatch/test_klp_shadow_vars.c:163:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types
lib/livepatch/test_klp_shadow_vars.c:167:26: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:167:9: sparse: symbol 'ret' has multiple initializers (originally initialized at lib/livepatch/test_klp_shadow_vars.c:163)
lib/livepatch/test_klp_shadow_vars.c:167:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types
lib/livepatch/test_klp_shadow_vars.c:171:26: sparse: too many errors
>> lib/livepatch/test_klp_shadow_vars.c:72:6: error: unknown type name 'klp_shadow_ctor_t'
klp_shadow_ctor_t ctor, void *ctor_data)
^~~~~~~~~~~~~~~~~
lib/livepatch/test_klp_shadow_vars.c:83:23: error: unknown type name 'klp_shadow_ctor_t'
gfp_t gfp_flags, klp_shadow_ctor_t ctor,
^~~~~~~~~~~~~~~~~
>> lib/livepatch/test_klp_shadow_vars.c:94:47: error: unknown type name 'klp_shadow_dtor_t'
void shadow_free(void *obj, unsigned long id, klp_shadow_dtor_t dtor)
^~~~~~~~~~~~~~~~~
lib/livepatch/test_klp_shadow_vars.c:101:40: error: unknown type name 'klp_shadow_dtor_t'
void shadow_free_all(unsigned long id, klp_shadow_dtor_t dtor)
^~~~~~~~~~~~~~~~~
lib/livepatch/test_klp_shadow_vars.c: In function 'test_klp_shadow_vars_init':
>> lib/livepatch/test_klp_shadow_vars.c:155:8: error: implicit declaration of function 'shadow_alloc'; did you mean 'shadow_dtor'? [-Werror=implicit-function-declaration]
sv1 = shadow_alloc(obj, id, size, gfp_flags, shadow_ctor, &var1);
^~~~~~~~~~~~
shadow_dtor
>> lib/livepatch/test_klp_shadow_vars.c:155:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
sv1 = shadow_alloc(obj, id, size, gfp_flags, shadow_ctor, &var1);
^
lib/livepatch/test_klp_shadow_vars.c:156:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
sv2 = shadow_alloc(obj + 1, id, size, gfp_flags, shadow_ctor, &var2);
^
lib/livepatch/test_klp_shadow_vars.c:157:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
sv3 = shadow_alloc(obj, id + 1, size, gfp_flags, shadow_ctor, &var3);
^
>> lib/livepatch/test_klp_shadow_vars.c:180:8: error: implicit declaration of function 'shadow_get_or_alloc'; did you mean 'klp_shadow_get_or_alloc'? [-Werror=implicit-function-declaration]
sv4 = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4);
^~~~~~~~~~~~~~~~~~~
klp_shadow_get_or_alloc
lib/livepatch/test_klp_shadow_vars.c:180:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
sv4 = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4);
^
lib/livepatch/test_klp_shadow_vars.c:181:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
ret = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4);
^
>> lib/livepatch/test_klp_shadow_vars.c:190:2: error: implicit declaration of function 'shadow_free'; did you mean 'shadow_get'? [-Werror=implicit-function-declaration]
shadow_free(obj, id, shadow_dtor); /* sv1 */
^~~~~~~~~~~
shadow_get
>> lib/livepatch/test_klp_shadow_vars.c:216:2: error: implicit declaration of function 'shadow_free_all'; did you mean 'klp_shadow_free_all'? [-Werror=implicit-function-declaration]
shadow_free_all(id + 1, shadow_dtor); /* sv3 */
^~~~~~~~~~~~~~~
klp_shadow_free_all
In file included from lib/livepatch/test_klp_shadow_vars.c:6:0:
lib/livepatch/test_klp_shadow_vars.c: At top level:
include/linux/module.h:130:42: error: redefinition of '__inittest'
static inline initcall_t __maybe_unused __inittest(void) \
^
>> lib/livepatch/test_klp_shadow_vars.c:232:1: note: in expansion of macro 'module_init'
module_init(test_klp_shadow_vars_exit);
^~~~~~~~~~~
include/linux/module.h:130:42: note: previous definition of '__inittest' was here
static inline initcall_t __maybe_unused __inittest(void) \
^
lib/livepatch/test_klp_shadow_vars.c:231:1: note: in expansion of macro 'module_init'
module_init(test_klp_shadow_vars_init);
^~~~~~~~~~~
lib/livepatch/test_klp_shadow_vars.c: In function '__inittest':
>> lib/livepatch/test_klp_shadow_vars.c:232:13: error: return from incompatible pointer type [-Werror=incompatible-pointer-types]
module_init(test_klp_shadow_vars_exit);
^
include/linux/module.h:131:11: note: in definition of macro 'module_init'
{ return initfn; } \
^~~~~~
lib/livepatch/test_klp_shadow_vars.c: At top level:
include/linux/module.h:132:6: error: redefinition of 'init_module'
int init_module(void) __attribute__((alias(#initfn)));
^
>> lib/livepatch/test_klp_shadow_vars.c:232:1: note: in expansion of macro 'module_init'
module_init(test_klp_shadow_vars_exit);
^~~~~~~~~~~
include/linux/module.h:132:6: note: previous definition of 'init_module' was here
int init_module(void) __attribute__((alias(#initfn)));
^
lib/livepatch/test_klp_shadow_vars.c:231:1: note: in expansion of macro 'module_init'
module_init(test_klp_shadow_vars_init);
^~~~~~~~~~~
cc1: some warnings being treated as errors

sparse warnings: (new ones prefixed by >>)

lib/livepatch/test_klp_atomic_replace.c:46:14: sparse: no member 'replace' in struct klp_patch
>> lib/livepatch/test_klp_atomic_replace.c:46:14: sparse: generating address of non-lvalue (8)
lib/livepatch/test_klp_atomic_replace.c: In function 'test_klp_atomic_replace_init':
lib/livepatch/test_klp_atomic_replace.c:46:7: error: 'struct klp_patch' has no member named 'replace'
patch.replace = replace;
^
--
lib/livepatch/test_klp_callbacks_demo2.c:81:14: sparse: no member 'replace' in struct klp_patch
>> lib/livepatch/test_klp_callbacks_demo2.c:81:14: sparse: generating address of non-lvalue (8)
lib/livepatch/test_klp_callbacks_demo2.c: In function 'test_klp_callbacks_demo2_init':
lib/livepatch/test_klp_callbacks_demo2.c:81:7: error: 'struct klp_patch' has no member named 'replace'
patch.replace = replace;
^
--
lib/livepatch/test_klp_shadow_vars.c:72:38: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:72:38: sparse: got ctor
lib/livepatch/test_klp_shadow_vars.c:76:9: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:76:9: sparse: got "001"
>> lib/livepatch/test_klp_shadow_vars.c:79:9: sparse: Trying to use reserved word 'return' as identifier
lib/livepatch/test_klp_shadow_vars.c:79:16: sparse: Expected ; at end of declaration
lib/livepatch/test_klp_shadow_vars.c:79:16: sparse: got ret
lib/livepatch/test_klp_shadow_vars.c:80:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:80:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:88:9: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:88:9: sparse: got "001"
lib/livepatch/test_klp_shadow_vars.c:91:9: sparse: Trying to use reserved word 'return' as identifier
lib/livepatch/test_klp_shadow_vars.c:91:16: sparse: Expected ; at end of declaration
lib/livepatch/test_klp_shadow_vars.c:91:16: sparse: got ret
lib/livepatch/test_klp_shadow_vars.c:92:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:92:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:97:9: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:97:9: sparse: got "001"
lib/livepatch/test_klp_shadow_vars.c:99:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:99:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:104:9: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:104:9: sparse: got "001"
lib/livepatch/test_klp_shadow_vars.c:106:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:106:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:114:9: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:114:9: sparse: got "001"
lib/livepatch/test_klp_shadow_vars.c:117:9: sparse: Trying to use reserved word 'return' as identifier
lib/livepatch/test_klp_shadow_vars.c:117:16: sparse: Expected ; at end of declaration
lib/livepatch/test_klp_shadow_vars.c:117:16: sparse: got 0
lib/livepatch/test_klp_shadow_vars.c:118:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:118:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:124:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:124:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:138:16: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:138:16: sparse: got 0
lib/livepatch/test_klp_shadow_vars.c:139:16: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:139:16: sparse: got &
lib/livepatch/test_klp_shadow_vars.c:140:16: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:140:16: sparse: got &
lib/livepatch/test_klp_shadow_vars.c:141:16: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:141:16: sparse: got &
lib/livepatch/test_klp_shadow_vars.c:142:16: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:142:16: sparse: got &
lib/livepatch/test_klp_shadow_vars.c:149:13: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:149:13: sparse: got !
>> lib/livepatch/test_klp_shadow_vars.c:149:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:164:17: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:164:17: sparse: got ==
lib/livepatch/test_klp_shadow_vars.c:164:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:168:17: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:168:17: sparse: got ==
lib/livepatch/test_klp_shadow_vars.c:168:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:172:17: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:172:17: sparse: got ==
lib/livepatch/test_klp_shadow_vars.c:172:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:182:17: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:182:17: sparse: got ==
lib/livepatch/test_klp_shadow_vars.c:182:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:192:13: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:192:13: sparse: got !
lib/livepatch/test_klp_shadow_vars.c:192:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:195:25: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:195:25: sparse: got +
lib/livepatch/test_klp_shadow_vars.c:197:13: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:197:13: sparse: got !
lib/livepatch/test_klp_shadow_vars.c:197:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:200:25: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:200:25: sparse: got +
lib/livepatch/test_klp_shadow_vars.c:202:13: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:202:13: sparse: got !
lib/livepatch/test_klp_shadow_vars.c:202:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:209:17: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:209:17: sparse: got ==
lib/livepatch/test_klp_shadow_vars.c:209:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:216:28: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:216:28: sparse: got +
lib/livepatch/test_klp_shadow_vars.c:218:13: sparse: Expected ) in function declarator
lib/livepatch/test_klp_shadow_vars.c:218:13: sparse: got !
lib/livepatch/test_klp_shadow_vars.c:218:9: sparse: Trying to use reserved word 'if' as identifier
lib/livepatch/test_klp_shadow_vars.c:224:9: sparse: Trying to use reserved word 'return' as identifier
lib/livepatch/test_klp_shadow_vars.c:224:16: sparse: Expected ; at end of declaration
lib/livepatch/test_klp_shadow_vars.c:224:16: sparse: got 0
lib/livepatch/test_klp_shadow_vars.c:225:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:225:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:231:1: sparse: Expected ; at the end of type declaration
lib/livepatch/test_klp_shadow_vars.c:231:1: sparse: got }
lib/livepatch/test_klp_shadow_vars.c:113:23: sparse: undefined identifier 'ctor_data'
lib/livepatch/test_klp_shadow_vars.c:148:26: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:148:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types
lib/livepatch/test_klp_shadow_vars.c:155:28: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:155:9: sparse: symbol 'sv1' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types
lib/livepatch/test_klp_shadow_vars.c:156:28: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:156:9: sparse: symbol 'sv2' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types
lib/livepatch/test_klp_shadow_vars.c:157:28: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:157:9: sparse: symbol 'sv3' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:134) - different base types
lib/livepatch/test_klp_shadow_vars.c:163:26: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:163:9: sparse: symbol 'ret' has multiple initializers (originally initialized at lib/livepatch/test_klp_shadow_vars.c:148)
lib/livepatch/test_klp_shadow_vars.c:163:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types
lib/livepatch/test_klp_shadow_vars.c:167:26: sparse: undefined identifier 'obj'
lib/livepatch/test_klp_shadow_vars.c:167:9: sparse: symbol 'ret' has multiple initializers (originally initialized at lib/livepatch/test_klp_shadow_vars.c:163)
lib/livepatch/test_klp_shadow_vars.c:167:9: sparse: symbol 'ret' redeclared with different type (originally declared at lib/livepatch/test_klp_shadow_vars.c:136) - different base types
>> lib/livepatch/test_klp_shadow_vars.c:171:26: sparse: too many errors
lib/livepatch/test_klp_shadow_vars.c:72:6: error: unknown type name 'klp_shadow_ctor_t'
klp_shadow_ctor_t ctor, void *ctor_data)
^~~~~~~~~~~~~~~~~
lib/livepatch/test_klp_shadow_vars.c:83:23: error: unknown type name 'klp_shadow_ctor_t'
gfp_t gfp_flags, klp_shadow_ctor_t ctor,
^~~~~~~~~~~~~~~~~
lib/livepatch/test_klp_shadow_vars.c:94:47: error: unknown type name 'klp_shadow_dtor_t'
void shadow_free(void *obj, unsigned long id, klp_shadow_dtor_t dtor)
^~~~~~~~~~~~~~~~~
lib/livepatch/test_klp_shadow_vars.c:101:40: error: unknown type name 'klp_shadow_dtor_t'
void shadow_free_all(unsigned long id, klp_shadow_dtor_t dtor)
^~~~~~~~~~~~~~~~~
lib/livepatch/test_klp_shadow_vars.c: In function 'test_klp_shadow_vars_init':
lib/livepatch/test_klp_shadow_vars.c:155:8: error: implicit declaration of function 'shadow_alloc'; did you mean 'shadow_dtor'? [-Werror=implicit-function-declaration]
sv1 = shadow_alloc(obj, id, size, gfp_flags, shadow_ctor, &var1);
^~~~~~~~~~~~
shadow_dtor
lib/livepatch/test_klp_shadow_vars.c:155:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
sv1 = shadow_alloc(obj, id, size, gfp_flags, shadow_ctor, &var1);
^
lib/livepatch/test_klp_shadow_vars.c:156:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
sv2 = shadow_alloc(obj + 1, id, size, gfp_flags, shadow_ctor, &var2);
^
lib/livepatch/test_klp_shadow_vars.c:157:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
sv3 = shadow_alloc(obj, id + 1, size, gfp_flags, shadow_ctor, &var3);
^
lib/livepatch/test_klp_shadow_vars.c:180:8: error: implicit declaration of function 'shadow_get_or_alloc'; did you mean 'klp_shadow_get_or_alloc'? [-Werror=implicit-function-declaration]
sv4 = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4);
^~~~~~~~~~~~~~~~~~~
klp_shadow_get_or_alloc
lib/livepatch/test_klp_shadow_vars.c:180:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
sv4 = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4);
^
lib/livepatch/test_klp_shadow_vars.c:181:6: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
ret = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4);
^
lib/livepatch/test_klp_shadow_vars.c:190:2: error: implicit declaration of function 'shadow_free'; did you mean 'shadow_get'? [-Werror=implicit-function-declaration]
shadow_free(obj, id, shadow_dtor); /* sv1 */
^~~~~~~~~~~
shadow_get
lib/livepatch/test_klp_shadow_vars.c:216:2: error: implicit declaration of function 'shadow_free_all'; did you mean 'klp_shadow_free_all'? [-Werror=implicit-function-declaration]
shadow_free_all(id + 1, shadow_dtor); /* sv3 */
^~~~~~~~~~~~~~~
klp_shadow_free_all
In file included from lib/livepatch/test_klp_shadow_vars.c:6:0:
lib/livepatch/test_klp_shadow_vars.c: At top level:
include/linux/module.h:130:42: error: redefinition of '__inittest'
static inline initcall_t __maybe_unused __inittest(void) 151- ^
lib/livepatch/test_klp_shadow_vars.c:232:1: note: in expansion of macro 'module_init'
module_init(test_klp_shadow_vars_exit);
^~~~~~~~~~~
include/linux/module.h:130:42: note: previous definition of '__inittest' was here
static inline initcall_t __maybe_unused __inittest(void) 157- ^
lib/livepatch/test_klp_shadow_vars.c:231:1: note: in expansion of macro 'module_init'
module_init(test_klp_shadow_vars_init);
^~~~~~~~~~~
lib/livepatch/test_klp_shadow_vars.c: In function '__inittest':
lib/livepatch/test_klp_shadow_vars.c:232:13: error: return from incompatible pointer type [-Werror=incompatible-pointer-types]
module_init(test_klp_shadow_vars_exit);
^
include/linux/module.h:131:11: note: in definition of macro 'module_init'
{ return initfn; } 167- ^~~~~~
lib/livepatch/test_klp_shadow_vars.c: At top level:
include/linux/module.h:132:6: error: redefinition of 'init_module'
int init_module(void) __attribute__((alias(#initfn)));
^
lib/livepatch/test_klp_shadow_vars.c:232:1: note: in expansion of macro 'module_init'
module_init(test_klp_shadow_vars_exit);
^~~~~~~~~~~
include/linux/module.h:132:6: note: previous definition of 'init_module' was here
int init_module(void) __attribute__((alias(#initfn)));
^
lib/livepatch/test_klp_shadow_vars.c:231:1: note: in expansion of macro 'module_init'
module_init(test_klp_shadow_vars_init);
^~~~~~~~~~~
cc1: some warnings being treated as errors

vim +/klp_shadow_ctor_t +72 lib/livepatch/test_klp_shadow_vars.c

70
71 void *shadow_alloc(void *obj, unsigned long id, size_t size, gfp_t gfp_flags,
> 72 klp_shadow_ctor_t ctor, void *ctor_data)
73 {
74 void *ret = klp_shadow_alloc(obj, id, size, gfp_flags, ctor,
75 ctor_data);
76 pr_info("klp_%s(obj=PTR%d, id=0x%lx, size=%zx, gfp_flags=%pGg), ctor=PTR%d, ctor_data=PTR%d = PTR%d\n",
77 __func__, ptr_id(obj), id, size, &gfp_flags, ptr_id(ctor),
78 ptr_id(ctor_data), ptr_id(ret));
> 79 return ret;
80 }
81
82 void *shadow_get_or_alloc(void *obj, unsigned long id, size_t size,
83 gfp_t gfp_flags, klp_shadow_ctor_t ctor,
84 void *ctor_data)
85 {
86 void *ret = klp_shadow_get_or_alloc(obj, id, size, gfp_flags, ctor,
87 ctor_data);
88 pr_info("klp_%s(obj=PTR%d, id=0x%lx, size=%zx, gfp_flags=%pGg), ctor=PTR%d, ctor_data=PTR%d = PTR%d\n",
89 __func__, ptr_id(obj), id, size, &gfp_flags, ptr_id(ctor),
90 ptr_id(ctor_data), ptr_id(ret));
91 return ret;
92 }
93
> 94 void shadow_free(void *obj, unsigned long id, klp_shadow_dtor_t dtor)
95 {
96 klp_shadow_free(obj, id, dtor);
97 pr_info("klp_%s(obj=PTR%d, id=0x%lx, dtor=PTR%d)\n",
98 __func__, ptr_id(obj), id, ptr_id(dtor));
99 }
100
> 101 void shadow_free_all(unsigned long id, klp_shadow_dtor_t dtor)
102 {
103 klp_shadow_free_all(id, dtor);
104 pr_info("klp_%s(id=0x%lx, dtor=PTR%d)\n",
105 __func__, id, ptr_id(dtor));
106 }
107
108
109 /* Shadow variable constructor - remember simple pointer data */
110 static int shadow_ctor(void *obj, void *shadow_data, void *ctor_data)
111 {
112 int **shadow_int = shadow_data;
113 *shadow_int = ctor_data;
114 pr_info("%s: PTR%d -> PTR%d\n",
115 __func__, ptr_id(shadow_int), ptr_id(ctor_data));
116
117 return 0;
118 }
119
120 static void shadow_dtor(void *obj, void *shadow_data)
121 {
122 pr_info("%s(obj=PTR%d, shadow_data=PTR%d)\n",
123 __func__, ptr_id(obj), ptr_id(shadow_data));
124 }
125
126 static int test_klp_shadow_vars_init(void)
127 {
128 void *obj = THIS_MODULE;
129 int id = 0x1234;
130 size_t size = sizeof(int *);
131 gfp_t gfp_flags = GFP_KERNEL;
132
133 int var1, var2, var3, var4;
134 int **sv1, **sv2, **sv3, **sv4;
135
136 void *ret;
137
138 ptr_id(0);
> 139 ptr_id(&var1);
140 ptr_id(&var2);
141 ptr_id(&var3);
142 ptr_id(&var4);
143
144 /*
145 * With an empty shadow variable hash table, expect not to find
146 * any matches.
147 */
148 ret = shadow_get(obj, id);
> 149 if (!ret)
150 pr_info(" got expected NULL result\n");
151
152 /*
153 * Allocate a few shadow variables with different <obj> and <id>.
154 */
> 155 sv1 = shadow_alloc(obj, id, size, gfp_flags, shadow_ctor, &var1);
> 156 sv2 = shadow_alloc(obj + 1, id, size, gfp_flags, shadow_ctor, &var2);
> 157 sv3 = shadow_alloc(obj, id + 1, size, gfp_flags, shadow_ctor, &var3);
158
159 /*
160 * Verify we can find our new shadow variables and that they point
161 * to expected data.
162 */
163 ret = shadow_get(obj, id);
164 if (ret == sv1 && *sv1 == &var1)
165 pr_info(" got expected PTR%d -> PTR%d result\n",
166 ptr_id(sv1), ptr_id(*sv1));
> 167 ret = shadow_get(obj + 1, id);
168 if (ret == sv2 && *sv2 == &var2)
169 pr_info(" got expected PTR%d -> PTR%d result\n",
170 ptr_id(sv2), ptr_id(*sv2));
> 171 ret = shadow_get(obj, id + 1);
172 if (ret == sv3 && *sv3 == &var3)
173 pr_info(" got expected PTR%d -> PTR%d result\n",
174 ptr_id(sv3), ptr_id(*sv3));
175
176 /*
177 * Allocate or get a few more, this time with the same <obj>, <id>.
178 * The second invocation should return the same shadow var.
179 */
> 180 sv4 = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4);
> 181 ret = shadow_get_or_alloc(obj + 2, id, size, gfp_flags, shadow_ctor, &var4);
182 if (ret == sv4 && *sv4 == &var4)
183 pr_info(" got expected PTR%d -> PTR%d result\n",
184 ptr_id(sv4), ptr_id(*sv4));
185
186 /*
187 * Free the <obj=*, id> shadow variables and check that we can no
188 * longer find them.
189 */
> 190 shadow_free(obj, id, shadow_dtor); /* sv1 */
191 ret = shadow_get(obj, id);
192 if (!ret)
193 pr_info(" got expected NULL result\n");
194
195 shadow_free(obj + 1, id, shadow_dtor); /* sv2 */
196 ret = shadow_get(obj + 1, id);
197 if (!ret)
198 pr_info(" got expected NULL result\n");
199
200 shadow_free(obj + 2, id, shadow_dtor); /* sv4 */
201 ret = shadow_get(obj + 2, id);
202 if (!ret)
203 pr_info(" got expected NULL result\n");
204
205 /*
206 * We should still find an <id+1> variable.
207 */
208 ret = shadow_get(obj, id + 1);
209 if (ret == sv3 && *sv3 == &var3)
210 pr_info(" got expected PTR%d -> PTR%d result\n",
211 ptr_id(sv3), ptr_id(*sv3));
212
213 /*
214 * Free all the <id+1> variables, too.
215 */
> 216 shadow_free_all(id + 1, shadow_dtor); /* sv3 */
217 ret = shadow_get(obj, id);
218 if (!ret)
219 pr_info(" shadow_get() got expected NULL result\n");
220
221
222 free_ptr_list();
223
224 return 0;
225 }
226
227 static void test_klp_shadow_vars_exit(void)
228 {
229 }
230
> 231 module_init(test_klp_shadow_vars_init);
> 232 module_init(test_klp_shadow_vars_exit);

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

Attachment: .config.gz
Description: application/gzip