linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Pavel Machek <pavel@ucw.cz>
To: Sasha Levin <sasha.levin@oracle.com>, vojtech@suse.cz
Cc: gregkh@linuxfoundation.org, jslaby@suse.com,
	dmitry.torokhov@gmail.com, LKML <linux-kernel@vger.kernel.org>
Subject: Re: tty/vt/keyboard: out of bounds access in do_compute_shiftstate
Date: Sun, 29 May 2016 21:04:17 +0200	[thread overview]
Message-ID: <20160529190417.GA1576@amd> (raw)
In-Reply-To: <574B2C6C.7060402@oracle.com>

Hi!

(Vojtech added to cc list. This is history.)

> I've hit the following while fuzzing with syzkaller inside a KVM tools guest
> running the latest -next kernel:

What does syzkaller do? Random syscalls?



> [ 2662.777566] BUG: KASAN: global-out-of-bounds in do_compute_shiftstate+0x161/0x370 at addr ffffffffb2e686a0
> 
> [ 2662.777592] Read of size 2 by task syz-executor/30576
> 
> [ 2662.777676] Address belongs to variable plain_map+0x200/0x3540
>

/*
 * Called after returning from RAW mode or when changing consoles - recompute
 * shift_down[] and shift_state from key_down[] maybe called when keymap is
 * undefined, so that shiftkey release is seen. The caller must hold the
 * kbd_event_lock.
 */

static void do_compute_shiftstate(void)
{
	unsigned int i, j, k, sym, val;

	shift_state = 0;
	memset(shift_down, 0, sizeof(shift_down));

	for (i = 0; i < ARRAY_SIZE(key_down); i++) {

		if (!key_down[i])
			continue;

		k = i * BITS_PER_LONG;

		for (j = 0; j < BITS_PER_LONG; j++, k++) {

			if (!test_bit(k, key_down))
				continue;

			sym = U(key_maps[0][k]);
			if (KTYP(sym) != KT_SHIFT && KTYP(sym) != KT_SLOCK)
				continue;

			val = KVAL(sym);
			if (val == KVAL(K_CAPSSHIFT))
				val = KVAL(K_SHIFT);

			shift_down[val]++;
			shift_state |= (1 << val);
		}
	}
}

Best regards,
									Pavel

> [ 2662.777727] CPU: 2 PID: 30576 Comm: syz-executor Tainted: G    B           4.6.0-next-20160527-sasha-00024-g6ab0dc9-dirty #3098
> 
> [ 2662.777792]  1ffff1001635bde7 00000000dc4d92d7 ffff8800b1adefc0 ffffffffa3fd0b37
> 
> [ 2662.777826]  ffffffff00000002 fffffbfff5deeda4 0000000041b58ab3 ffffffffae8dd830
> 
> [ 2662.777862]  ffffffffa3fd09c8 ffffffffa23fa2e8 ffff8800b1adef98 ffff8801d42a20f8
> 
> [ 2662.777868] Call Trace:
> 
> [ 2662.777935] dump_stack (lib/dump_stack.c:53)
> [ 2662.778136] kasan_report_error (include/linux/kasan.h:28 mm/kasan/report.c:211 mm/kasan/report.c:277)
> [ 2662.778265] __asan_report_load2_noabort (mm/kasan/report.c:317)
> [ 2662.778318] do_compute_shiftstate (drivers/tty/vt/keyboard.c:386)
> [ 2662.778332] fn_null (drivers/tty/vt/keyboard.c:625)
> [ 2662.778345] k_spec (drivers/tty/vt/keyboard.c:645)
> [ 2662.778361] kbd_event (drivers/tty/vt/keyboard.c:1459 drivers/tty/vt/keyboard.c:1475)
> [ 2662.778907] input_to_handler (drivers/input/input.c:120 (discriminator 3))
> [ 2662.778926] input_pass_values (drivers/input/input.c:148)
> [ 2662.778944] input_handle_event (drivers/input/input.c:406)
> [ 2662.779015] input_inject_event (include/linux/rcupdate.h:910 drivers/input/input.c:467)
> [ 2662.779034] evdev_do_ioctl (drivers/input/evdev.c:1102)
> [ 2662.779271] evdev_ioctl_handler (drivers/input/evdev.c:1302)
> [ 2662.779305] evdev_ioctl (drivers/input/evdev.c:1312)
> [ 2662.779320] do_vfs_ioctl (fs/ioctl.c:44 fs/ioctl.c:674)
> [ 2662.779463] SyS_ioctl (fs/ioctl.c:689 fs/ioctl.c:680)
> [ 2662.779511] do_syscall_64 (arch/x86/entry/common.c:350)
> [ 2662.779530] entry_SYSCALL64_slow_path (arch/x86/entry/entry_64.S:251)
> [ 2662.779535] Memory state around the buggy address:
> 
> [ 2662.779566]  ffffffffb2e68580: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> [ 2662.779579]  ffffffffb2e68600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> [ 2662.779589] >ffffffffb2e68680: 00 00 00 00 fa fa fa fa 00 00 00 00 00 00 00 00
> 
> [ 2662.779594]                                ^
> 
> [ 2662.779604]  ffffffffb2e68700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> [ 2662.779615]  ffffffffb2e68780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> 
> Thanks,
> Sasha

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

  reply	other threads:[~2016-05-29 19:04 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-29 17:52 tty/vt/keyboard: out of bounds access in do_compute_shiftstate Sasha Levin
2016-05-29 19:04 ` Pavel Machek [this message]
2016-06-26 18:31 ` Greg KH
2016-06-27 21:27 ` Dmitry Torokhov
2016-07-12  3:06   ` Dmitry Torokhov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160529190417.GA1576@amd \
    --to=pavel@ucw.cz \
    --cc=dmitry.torokhov@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sasha.levin@oracle.com \
    --cc=vojtech@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).