lkdtm: clean up sparse warnings
authorKees Cook <keescook@chromium.org>
Mon, 11 Nov 2013 19:23:49 +0000 (11:23 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 9 Dec 2013 06:39:51 +0000 (22:39 -0800)
Since lkdtm intentionally does "bad" things, we need to convince sparse
that we're doing these things on purpose. This adds an explicit cast
to the call to copy_to_user() and marks the spin lock as expecting
to dead-lock.

Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/lkdtm.c

index a2edb2e..a9a203d 100644 (file)
@@ -334,9 +334,10 @@ static void execute_location(void *dst)
 
 static void execute_user_location(void *dst)
 {
+       /* Intentionally crossing kernel/user memory boundary. */
        void (*func)(void) = dst;
 
-       if (copy_to_user(dst, do_nothing, EXEC_SIZE))
+       if (copy_to_user((void __user *)dst, do_nothing, EXEC_SIZE))
                return;
        func();
 }
@@ -408,6 +409,8 @@ static void lkdtm_do_action(enum ctype which)
        case CT_SPINLOCKUP:
                /* Must be called twice to trigger. */
                spin_lock(&lock_me_up);
+               /* Let sparse know we intended to exit holding the lock. */
+               __release(&lock_me_up);
                break;
        case CT_HUNG_TASK:
                set_current_state(TASK_UNINTERRUPTIBLE);