]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
livepatch/sample: Use the right type for the leaking data pointer
authorPetr Mladek <pmladek@suse.com>
Thu, 16 Jan 2020 15:31:42 +0000 (16:31 +0100)
committerJiri Kosina <jkosina@suse.cz>
Fri, 17 Jan 2020 10:12:06 +0000 (11:12 +0100)
The "leak" pointer, in the sample of shadow variable API, is allocated
as sizeof(int). Let's help developers and static analyzers with
understanding the code by using the appropriate pointer type.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Reviewed-by: Joe Lawrence <joe.lawrence@redhat.com>
Acked-by: Miroslav Benes <mbenes@suse.cz>
Reviewed-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
samples/livepatch/livepatch-shadow-fix1.c
samples/livepatch/livepatch-shadow-fix2.c
samples/livepatch/livepatch-shadow-mod.c

index e89ca4546114e9bee9105a91f1aa9ee554dd1427..bab12bdb753fc48020ceb7e8eb3786db34e03f4d 100644 (file)
@@ -52,8 +52,8 @@ struct dummy {
  */
 static int shadow_leak_ctor(void *obj, void *shadow_data, void *ctor_data)
 {
-       void **shadow_leak = shadow_data;
-       void *leak = ctor_data;
+       int **shadow_leak = shadow_data;
+       int *leak = ctor_data;
 
        *shadow_leak = leak;
        return 0;
@@ -62,7 +62,7 @@ static int shadow_leak_ctor(void *obj, void *shadow_data, void *ctor_data)
 static struct dummy *livepatch_fix1_dummy_alloc(void)
 {
        struct dummy *d;
-       void *leak;
+       int *leak;
 
        d = kzalloc(sizeof(*d), GFP_KERNEL);
        if (!d)
@@ -76,7 +76,7 @@ static struct dummy *livepatch_fix1_dummy_alloc(void)
         * variable.  A patched dummy_free routine can later fetch this
         * pointer to handle resource release.
         */
-       leak = kzalloc(sizeof(int), GFP_KERNEL);
+       leak = kzalloc(sizeof(*leak), GFP_KERNEL);
        if (!leak) {
                kfree(d);
                return NULL;
@@ -94,7 +94,7 @@ static struct dummy *livepatch_fix1_dummy_alloc(void)
 static void livepatch_fix1_dummy_leak_dtor(void *obj, void *shadow_data)
 {
        void *d = obj;
-       void **shadow_leak = shadow_data;
+       int **shadow_leak = shadow_data;
 
        kfree(*shadow_leak);
        pr_info("%s: dummy @ %p, prevented leak @ %p\n",
@@ -103,7 +103,7 @@ static void livepatch_fix1_dummy_leak_dtor(void *obj, void *shadow_data)
 
 static void livepatch_fix1_dummy_free(struct dummy *d)
 {
-       void **shadow_leak;
+       int **shadow_leak;
 
        /*
         * Patch: fetch the saved SV_LEAK shadow variable, detach and
index 50d223b82e8b5643cb8ced9b04c6baa8df7d511b..29fe5cd420472ad2e9e81188132d0ce47b6a55b8 100644 (file)
@@ -59,7 +59,7 @@ static bool livepatch_fix2_dummy_check(struct dummy *d, unsigned long jiffies)
 static void livepatch_fix2_dummy_leak_dtor(void *obj, void *shadow_data)
 {
        void *d = obj;
-       void **shadow_leak = shadow_data;
+       int **shadow_leak = shadow_data;
 
        kfree(*shadow_leak);
        pr_info("%s: dummy @ %p, prevented leak @ %p\n",
@@ -68,7 +68,7 @@ static void livepatch_fix2_dummy_leak_dtor(void *obj, void *shadow_data)
 
 static void livepatch_fix2_dummy_free(struct dummy *d)
 {
-       void **shadow_leak;
+       int **shadow_leak;
        int *shadow_count;
 
        /* Patch: copy the memory leak patch from the fix1 module. */
index ecfe83a943a79d4178de48121bf5467a2561d43e..7e753b0d2fa611524c9e2adbe02c8fa3e9b6015e 100644 (file)
@@ -95,7 +95,7 @@ struct dummy {
 static __used noinline struct dummy *dummy_alloc(void)
 {
        struct dummy *d;
-       void *leak;
+       int *leak;
 
        d = kzalloc(sizeof(*d), GFP_KERNEL);
        if (!d)
@@ -105,7 +105,7 @@ static __used noinline struct dummy *dummy_alloc(void)
                msecs_to_jiffies(1000 * EXPIRE_PERIOD);
 
        /* Oops, forgot to save leak! */
-       leak = kzalloc(sizeof(int), GFP_KERNEL);
+       leak = kzalloc(sizeof(*leak), GFP_KERNEL);
        if (!leak) {
                kfree(d);
                return NULL;