Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

wait: using uninitialized member of wait queue

The "flags" member of "struct wait_queue_t" is used in several places in
the kernel code without beeing initialized by init_wait(). "flags" is
used in bitwise operations.

If "flags" not initialized then unexpected behaviour may take place.
Incorrect flags might used later in code.

Added initialization of "wait_queue_t.flags" with zero value into
"init_wait".

Signed-off-by: Evgeny Kuznetsov <EXT-Eugeny.Kuznetsov@nokia.com>
[ The bit we care about does end up being initialized by both
prepare_to_wait() and add_to_wait_queue(), so this doesn't seem to
cause actual bugs, but is definitely the right thing to do -Linus ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Evgeny Kuznetsov and committed by
Linus Torvalds
231d0aef 5336377d

+1
+1
include/linux/wait.h
··· 614 614 (wait)->private = current; \ 615 615 (wait)->func = autoremove_wake_function; \ 616 616 INIT_LIST_HEAD(&(wait)->task_list); \ 617 + (wait)->flags = 0; \ 617 618 } while (0) 618 619 619 620 /**