Hello Petr Mladek, The patch e91c2518a5d2: "livepatch: Initialize shadow variables safely by a custom callback" from Apr 16, 2018, leads to the following static checker warning: samples/livepatch/livepatch-shadow-fix1.c:86 livepatch_fix1_dummy_alloc() error: 'klp_shadow_alloc()' 'leak' too small (4 vs 8) samples/livepatch/livepatch-shadow-fix1.c 53 static int shadow_leak_ctor(void *obj, void *shadow_data, void *ctor_data) 54 { 55 void **shadow_leak = shadow_data; 56 void *leak = ctor_data; 57 58 *shadow_leak = leak; 59 return 0; 60 } 61 62 static struct dummy *livepatch_fix1_dummy_alloc(void) 63 { 64 struct dummy *d; 65 void *leak; 66 67 d = kzalloc(sizeof(*d), GFP_KERNEL); 68 if (!d) 69 return NULL; 70 71 d->jiffies_expire = jiffies + 72 msecs_to_jiffies(1000 * EXPIRE_PERIOD); 73 74 /* 75 * Patch: save the extra memory location into a SV_LEAK shadow 76 * variable. A patched dummy_free routine can later fetch this 77 * pointer to handle resource release. 78 */ 79 leak = kzalloc(sizeof(int), GFP_KERNEL); 80 if (!leak) { 81 kfree(d); 82 return NULL; 83 } 84 85 klp_shadow_alloc(d, SV_LEAK, sizeof(leak), GFP_KERNEL, ^^^^^^^^^^^^ This doesn't seem right at all? Leak is a pointer. Why is leak a void pointer instead of an int pointer? 86 shadow_leak_ctor, leak); 87 88 pr_info("%s: dummy @ %p, expires @ %lx\n", 89 __func__, d, d->jiffies_expire); 90 91 return d; 92 } regards, dan carpenter