mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del
@ 2016-11-14 21:49 Vince Weaver
  2016-11-15  5:57 ` Vince Weaver
  0 siblings, 1 reply; 9+ messages in thread
From: Vince Weaver @ 2016-11-14 21:49 UTC (permalink / raw)
  To: linux-kernel
  Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, davej,
	dvyukov, Stephane Eranian


After turning modversions off I finally managed to get a 4.9-rc kernel to 
boot.

Anyway as per the suggestion at Linux Plumbers I enabled KASAN and on my 
haswell machine it falls over in a few minutes of running the perf_fuzzer.

[  205.740194] ==================================================================
[  205.748005] BUG: KASAN: slab-out-of-bounds in snb_uncore_imc_event_del+0x6c/0xa0 at addr ffff8800caa43768
[  205.758324] Read of size 8 by task perf_fuzzer/6618
[  205.763589] CPU: 0 PID: 6618 Comm: perf_fuzzer Not tainted 4.9.0-rc5 #4
[  205.770721] Hardware name: LENOVO 10AM000AUS/SHARKBAY, BIOS FBKT72AUS 01/26/2014
[  205.778689]  ffff8800c3c479b8 ffffffff816bb796 ffff88011ec00600 ffff8800caa43580
[  205.786759]  ffff8800c3c479e0 ffffffff812fb961 ffff8800c3c47a78 ffff8800caa43580
[  205.794850]  ffff8800caa43580 ffff8800c3c47a68 ffffffff812fbbd8 ffff8800c3c47a28
[  205.802911] Call Trace:
[  205.805559]  [<ffffffff816bb796>] dump_stack+0x63/0x8d
[  205.811135]  [<ffffffff812fb961>] kasan_object_err+0x21/0x70
[  205.817267]  [<ffffffff812fbbd8>] kasan_report_error+0x1d8/0x4c0
[  205.823752]  [<ffffffff81133275>] ? __lock_is_held+0x75/0xc0
[  205.829868]  [<ffffffff81025b12>] ? snb_uncore_imc_read_counter+0x42/0x50
[  205.837198]  [<ffffffff810222e2>] ? uncore_perf_event_update+0xe2/0x160
[  205.844337]  [<ffffffff812fc319>] kasan_report+0x39/0x40
[  205.850085]  [<ffffffff81025e3c>] ? snb_uncore_imc_event_del+0x6c/0xa0
[  205.857114]  [<ffffffff812fa8fe>] __asan_load8+0x5e/0x70
[  205.862874]  [<ffffffff81025e3c>] snb_uncore_imc_event_del+0x6c/0xa0
[  205.869727]  [<ffffffff81241bd2>] event_sched_out.isra.89+0x192/0x690
[  205.876664]  [<ffffffff81242167>] group_sched_out+0x97/0x170
[  205.882760]  [<ffffffff81242810>] __perf_event_disable+0x140/0x1b0
[  205.889395]  [<ffffffff812384e7>] event_function+0x117/0x1f0
[  205.895503]  [<ffffffff812426d0>] ? task_ctx_sched_out+0x60/0x60
[  205.901959]  [<ffffffff812383d0>] ? update_group_times+0x50/0x50
[  205.908425]  [<ffffffff8123b020>] ? perf_cgroup_attach+0xb0/0xb0
[  205.914937]  [<ffffffff8123b096>] remote_function+0x76/0xa0
[  205.920955]  [<ffffffff8118da7c>] generic_exec_single+0xfc/0x170
[  205.927434]  [<ffffffff8123b020>] ? perf_cgroup_attach+0xb0/0xb0
[  205.933883]  [<ffffffff8118dc30>] smp_call_function_single+0x140/0x1b0
[  205.940967]  [<ffffffff8118daf0>] ? generic_exec_single+0x170/0x170
[  205.947776]  [<ffffffff81238e48>] event_function_call+0x268/0x270
[  205.954336]  [<ffffffff812426d0>] ? task_ctx_sched_out+0x60/0x60
[  205.960806]  [<ffffffff81238be0>] ? task_function_call+0xc0/0xc0
[  205.967276]  [<ffffffff812426d0>] ? task_ctx_sched_out+0x60/0x60
[  205.973740]  [<ffffffff81238e79>] ? _perf_event_disable+0x29/0x70
[  205.980300]  [<ffffffff812383d0>] ? update_group_times+0x50/0x50
[  205.986750]  [<ffffffff81238e97>] ? _perf_event_disable+0x47/0x70
[  205.993338]  [<ffffffff8113a4d7>] ? do_raw_spin_unlock+0x97/0x130
[  205.999906]  [<ffffffff81238e50>] ? event_function_call+0x270/0x270
[  206.006674]  [<ffffffff81238ea8>] _perf_event_disable+0x58/0x70
[  206.013069]  [<ffffffff812386a3>] perf_event_for_each_child+0x53/0xd0
[  206.019990]  [<ffffffff81247a51>] perf_event_task_disable+0x61/0xc0
[  206.026759]  [<ffffffff810daee2>] SyS_prctl+0x3f2/0x690
[  206.032409]  [<ffffffff810daaf0>] ? SyS_umask+0x40/0x40
[  206.038059]  [<ffffffff81b8dabb>] entry_SYSCALL_64_fastpath+0x1e/0xb2
[  206.045007] Object at ffff8800caa43580, in cache kmalloc-512 size: 512
[  206.052015] Allocated:
[  206.054565] PID = 1
[  206.056842]  [  206.058367] [<ffffffff8105fcdb>] save_stack_trace+0x1b/0x20
[  206.064410]  [  206.065933] [<ffffffff812facc6>] save_stack+0x46/0xd0
[  206.071416]  [  206.072953] [<ffffffff812faf3d>] kasan_kmalloc+0xad/0xe0
[  206.078683]  [  206.080214] [<ffffffff812f7e3a>] __kmalloc_node+0x4a/0x60
[  206.086061]  [  206.087590] [<ffffffff81020799>] uncore_alloc_box+0x39/0x150
[  206.093685]  [  206.095208] [<ffffffff81020b8f>] uncore_pci_probe+0xff/0x4f0
[  206.101357]  [  206.102879] [<ffffffff8172bc7a>] local_pci_probe+0x7a/0xd0
[  206.108816]  [  206.110347] [<ffffffff8172df6e>] pci_device_probe+0x19e/0x1f0
[  206.116553]  [  206.118073] [<ffffffff818a9a1d>] driver_probe_device+0x25d/0x400
[  206.124566]  [  206.126087] [<ffffffff818a9c9c>] __driver_attach+0xdc/0xe0
[  206.132021]  [  206.133534] [<ffffffff818a653b>] bus_for_each_dev+0xeb/0x150
[  206.139654]  [  206.141184] [<ffffffff818a8f2b>] driver_attach+0x2b/0x30
[  206.146948]  [  206.148493] [<ffffffff818a8900>] bus_add_driver+0x2b0/0x330
[  206.154519]  [  206.156042] [<ffffffff818aa9f3>] driver_register+0xd3/0x190
[  206.164160]  [  206.165688] [<ffffffff8172b2b4>] __pci_register_driver+0xb4/0xc0
[  206.174265]  [  206.175783] [<ffffffff8261553b>] intel_uncore_init+0x2f3/0x388
[  206.184162]  [  206.185672] [<ffffffff81002258>] do_one_initcall+0xa8/0x210
[  206.193721]  [  206.195261] [<ffffffff8260e4c2>] kernel_init_freeable+0x27c/0x312
[  206.203821]  [  206.205349] [<ffffffff81b80b13>] kernel_init+0x13/0x120
[  206.212889]  [  206.214439] [<ffffffff81b8dd35>] ret_from_fork+0x25/0x30
[  206.222067] Freed:
[  206.226172] PID = 0
[  206.230341] (stack is not available)
[  206.236044] Memory state around the buggy address:
[  206.243157]  ffff8800caa43600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[  206.252788]  ffff8800caa43680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[  206.262437] >ffff8800caa43700: 00 00 00 00 00 00 00 00 00 00 00 00 00 fc fc fc
[  206.272071]                                                           ^
[  206.281005]  ffff8800caa43780: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[  206.290640]  ffff8800caa43800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[  206.300302] 
==================================================================

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del
  2016-11-14 21:49 perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del Vince Weaver
@ 2016-11-15  5:57 ` Vince Weaver
  2016-11-15  6:13   ` Dmitry Vyukov
  2016-11-15 14:04   ` Peter Zijlstra
  0 siblings, 2 replies; 9+ messages in thread
From: Vince Weaver @ 2016-11-15  5:57 UTC (permalink / raw)
  To: Vince Weaver
  Cc: linux-kernel, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, davej, dvyukov, Stephane Eranian

On Mon, 14 Nov 2016, Vince Weaver wrote:

> Anyway as per the suggestion at Linux Plumbers I enabled KASAN and on my 
> haswell machine it falls over in a few minutes of running the perf_fuzzer.
> 
> [  205.740194] ==================================================================
> [  205.748005] BUG: KASAN: slab-out-of-bounds in snb_uncore_imc_event_del+0x6c/0xa0 at addr ffff8800caa43768
> [  205.758324] Read of size 8 by task perf_fuzzer/6618
> [  205.763589] CPU: 0 PID: 6618 Comm: perf_fuzzer Not tainted 4.9.0-rc5 #4
> [  205.770721] Hardware name: LENOVO 10AM000AUS/SHARKBAY, BIOS FBKT72AUS 01/26/2014
> [  205.778689]  ffff8800c3c479b8 ffffffff816bb796 ffff88011ec00600 ffff8800caa43580
> [  205.786759]  ffff8800c3c479e0 ffffffff812fb961 ffff8800c3c47a78 ffff8800caa43580
> [  205.794850]  ffff8800caa43580 ffff8800c3c47a68 ffffffff812fbbd8 ffff8800c3c47a28
> [  205.802911] Call Trace:
> [  205.805559]  [<ffffffff816bb796>] dump_stack+0x63/0x8d
> [  205.811135]  [<ffffffff812fb961>] kasan_object_err+0x21/0x70
> [  205.817267]  [<ffffffff812fbbd8>] kasan_report_error+0x1d8/0x4c0
> [  205.823752]  [<ffffffff81133275>] ? __lock_is_held+0x75/0xc0
> [  205.829868]  [<ffffffff81025b12>] ? snb_uncore_imc_read_counter+0x42/0x50
> [  205.837198]  [<ffffffff810222e2>] ? uncore_perf_event_update+0xe2/0x160
> [  205.844337]  [<ffffffff812fc319>] kasan_report+0x39/0x40
> [  205.850085]  [<ffffffff81025e3c>] ? snb_uncore_imc_event_del+0x6c/0xa0

The best I can tell this maps to:

static void snb_uncore_imc_event_del(struct perf_event *event, int flags)
{
        struct intel_uncore_box *box = uncore_event_to_box(event);
        int i;

        snb_uncore_imc_event_stop(event, PERF_EF_UPDATE);

        for (i = 0; i < box->n_events; i++) {
>>>             if (event == box->event_list[i]) {
                        --box->n_events;
                        break;
                }
        }
}

Can this code be right?  Does it actually remove the event?
The similar code in 

static void uncore_pmu_event_del(struct perf_event *event, int flags)

....

	for (i = 0; i < box->n_events; i++) {
                if (event == box->event_list[i]) {
                        uncore_put_event_constraint(box, event);

                        for (++i; i < box->n_events; i++)
                                box->event_list[i - 1] = box->event_list[i];

                        --box->n_events;
                        break;
                }
        }


seems like it is more likely to be correct.

Vince

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del
  2016-11-15  5:57 ` Vince Weaver
@ 2016-11-15  6:13   ` Dmitry Vyukov
  2016-11-15 13:52     ` Vince Weaver
  2016-11-15 14:04   ` Peter Zijlstra
  1 sibling, 1 reply; 9+ messages in thread
From: Dmitry Vyukov @ 2016-11-15  6:13 UTC (permalink / raw)
  To: Vince Weaver
  Cc: LKML, Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Dave Jones, Stephane Eranian

On Tue, Nov 15, 2016 at 6:57 AM, Vince Weaver <vincent.weaver@maine.edu> wrote:
> On Mon, 14 Nov 2016, Vince Weaver wrote:
>
>> Anyway as per the suggestion at Linux Plumbers I enabled KASAN and on my
>> haswell machine it falls over in a few minutes of running the perf_fuzzer.
>>
>> [  205.740194] ==================================================================
>> [  205.748005] BUG: KASAN: slab-out-of-bounds in snb_uncore_imc_event_del+0x6c/0xa0 at addr ffff8800caa43768
>> [  205.758324] Read of size 8 by task perf_fuzzer/6618
>> [  205.763589] CPU: 0 PID: 6618 Comm: perf_fuzzer Not tainted 4.9.0-rc5 #4
>> [  205.770721] Hardware name: LENOVO 10AM000AUS/SHARKBAY, BIOS FBKT72AUS 01/26/2014
>> [  205.778689]  ffff8800c3c479b8 ffffffff816bb796 ffff88011ec00600 ffff8800caa43580
>> [  205.786759]  ffff8800c3c479e0 ffffffff812fb961 ffff8800c3c47a78 ffff8800caa43580
>> [  205.794850]  ffff8800caa43580 ffff8800c3c47a68 ffffffff812fbbd8 ffff8800c3c47a28
>> [  205.802911] Call Trace:
>> [  205.805559]  [<ffffffff816bb796>] dump_stack+0x63/0x8d
>> [  205.811135]  [<ffffffff812fb961>] kasan_object_err+0x21/0x70
>> [  205.817267]  [<ffffffff812fbbd8>] kasan_report_error+0x1d8/0x4c0
>> [  205.823752]  [<ffffffff81133275>] ? __lock_is_held+0x75/0xc0
>> [  205.829868]  [<ffffffff81025b12>] ? snb_uncore_imc_read_counter+0x42/0x50
>> [  205.837198]  [<ffffffff810222e2>] ? uncore_perf_event_update+0xe2/0x160
>> [  205.844337]  [<ffffffff812fc319>] kasan_report+0x39/0x40
>> [  205.850085]  [<ffffffff81025e3c>] ? snb_uncore_imc_event_del+0x6c/0xa0


If you pipe the report through
https://github.com/google/sanitizers/blob/master/address-sanitizer/tools/kasan_symbolize.py
it will give you line numbers and inlined frames.

> The best I can tell this maps to:
>
> static void snb_uncore_imc_event_del(struct perf_event *event, int flags)
> {
>         struct intel_uncore_box *box = uncore_event_to_box(event);
>         int i;
>
>         snb_uncore_imc_event_stop(event, PERF_EF_UPDATE);
>
>         for (i = 0; i < box->n_events; i++) {
>>>>             if (event == box->event_list[i]) {
>                         --box->n_events;
>                         break;
>                 }
>         }
> }
>
> Can this code be right?  Does it actually remove the event?
> The similar code in
>
> static void uncore_pmu_event_del(struct perf_event *event, int flags)
>
> ....
>
>         for (i = 0; i < box->n_events; i++) {
>                 if (event == box->event_list[i]) {
>                         uncore_put_event_constraint(box, event);
>
>                         for (++i; i < box->n_events; i++)
>                                 box->event_list[i - 1] = box->event_list[i];
>
>                         --box->n_events;
>                         break;
>                 }
>         }
>
>
> seems like it is more likely to be correct.
>
> Vince

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del
  2016-11-15  6:13   ` Dmitry Vyukov
@ 2016-11-15 13:52     ` Vince Weaver
  2016-11-15 13:56       ` Dmitry Vyukov
  0 siblings, 1 reply; 9+ messages in thread
From: Vince Weaver @ 2016-11-15 13:52 UTC (permalink / raw)
  To: Dmitry Vyukov
  Cc: Vince Weaver, LKML, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Dave Jones, Stephane Eranian

On Tue, 15 Nov 2016, Dmitry Vyukov wrote:

> If you pipe the report through
> https://github.com/google/sanitizers/blob/master/address-sanitizer/tools/kasan_symbolize.py
> it will give you line numbers and inlined frames.

is there any documentation for that program?   If I run the dump through 
it, it removes the timestamps and as far as I can see doesn't do anything 
else.

Vince

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del
  2016-11-15 13:52     ` Vince Weaver
@ 2016-11-15 13:56       ` Dmitry Vyukov
  0 siblings, 0 replies; 9+ messages in thread
From: Dmitry Vyukov @ 2016-11-15 13:56 UTC (permalink / raw)
  To: Vince Weaver
  Cc: LKML, Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Dave Jones, Stephane Eranian

On Tue, Nov 15, 2016 at 2:52 PM, Vince Weaver <vincent.weaver@maine.edu> wrote:
> On Tue, 15 Nov 2016, Dmitry Vyukov wrote:
>
>> If you pipe the report through
>> https://github.com/google/sanitizers/blob/master/address-sanitizer/tools/kasan_symbolize.py
>> it will give you line numbers and inlined frames.
>
> is there any documentation for that program?

the source code...

> If I run the dump through
> it, it removes the timestamps and as far as I can see doesn't do anything
> else.

There are 4 flags:
https://github.com/google/sanitizers/blob/master/address-sanitizer/tools/kasan_symbolize.py#L315

The only important one is --linux which should point to a dir with
vmlinux. Default value is cwd.
Also do you have kernel built with debug info? No debug info, no lines.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del
  2016-11-15  5:57 ` Vince Weaver
  2016-11-15  6:13   ` Dmitry Vyukov
@ 2016-11-15 14:04   ` Peter Zijlstra
  2016-11-15 17:04     ` Liang, Kan
  1 sibling, 1 reply; 9+ messages in thread
From: Peter Zijlstra @ 2016-11-15 14:04 UTC (permalink / raw)
  To: Vince Weaver
  Cc: linux-kernel, Ingo Molnar, Arnaldo Carvalho de Melo, davej,
	dvyukov, Stephane Eranian, Liang, Kan

On Tue, Nov 15, 2016 at 12:57:31AM -0500, Vince Weaver wrote:
> On Mon, 14 Nov 2016, Vince Weaver wrote:
> 
> > Anyway as per the suggestion at Linux Plumbers I enabled KASAN and on my 
> > haswell machine it falls over in a few minutes of running the perf_fuzzer.
> > 
> > [  205.740194] ==================================================================
> > [  205.748005] BUG: KASAN: slab-out-of-bounds in snb_uncore_imc_event_del+0x6c/0xa0 at addr ffff8800caa43768
> > [  205.758324] Read of size 8 by task perf_fuzzer/6618
> > [  205.763589] CPU: 0 PID: 6618 Comm: perf_fuzzer Not tainted 4.9.0-rc5 #4
> > [  205.770721] Hardware name: LENOVO 10AM000AUS/SHARKBAY, BIOS FBKT72AUS 01/26/2014
> > [  205.778689]  ffff8800c3c479b8 ffffffff816bb796 ffff88011ec00600 ffff8800caa43580
> > [  205.786759]  ffff8800c3c479e0 ffffffff812fb961 ffff8800c3c47a78 ffff8800caa43580
> > [  205.794850]  ffff8800caa43580 ffff8800c3c47a68 ffffffff812fbbd8 ffff8800c3c47a28
> > [  205.802911] Call Trace:
> > [  205.805559]  [<ffffffff816bb796>] dump_stack+0x63/0x8d
> > [  205.811135]  [<ffffffff812fb961>] kasan_object_err+0x21/0x70
> > [  205.817267]  [<ffffffff812fbbd8>] kasan_report_error+0x1d8/0x4c0
> > [  205.823752]  [<ffffffff81133275>] ? __lock_is_held+0x75/0xc0
> > [  205.829868]  [<ffffffff81025b12>] ? snb_uncore_imc_read_counter+0x42/0x50
> > [  205.837198]  [<ffffffff810222e2>] ? uncore_perf_event_update+0xe2/0x160
> > [  205.844337]  [<ffffffff812fc319>] kasan_report+0x39/0x40
> > [  205.850085]  [<ffffffff81025e3c>] ? snb_uncore_imc_event_del+0x6c/0xa0
> 
> The best I can tell this maps to:
> 
> static void snb_uncore_imc_event_del(struct perf_event *event, int flags)
> {
>         struct intel_uncore_box *box = uncore_event_to_box(event);
>         int i;
> 
>         snb_uncore_imc_event_stop(event, PERF_EF_UPDATE);
> 
>         for (i = 0; i < box->n_events; i++) {
> >>>             if (event == box->event_list[i]) {
>                         --box->n_events;
>                         break;
>                 }
>         }
> }
> 
> Can this code be right?  Does it actually remove the event?
> The similar code in 
> 
> static void uncore_pmu_event_del(struct perf_event *event, int flags)
> 
> ....
> 
> 	for (i = 0; i < box->n_events; i++) {
>                 if (event == box->event_list[i]) {
>                         uncore_put_event_constraint(box, event);
> 
>                         for (++i; i < box->n_events; i++)
>                                 box->event_list[i - 1] = box->event_list[i];
> 
>                         --box->n_events;
>                         break;
>                 }
>         }
> 
> 
> seems like it is more likely to be correct.

Kan, can you look at this?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del
  2016-11-15 14:04   ` Peter Zijlstra
@ 2016-11-15 17:04     ` Liang, Kan
  2016-11-15 17:38       ` Vince Weaver
  0 siblings, 1 reply; 9+ messages in thread
From: Liang, Kan @ 2016-11-15 17:04 UTC (permalink / raw)
  To: Peter Zijlstra, Vince Weaver
  Cc: linux-kernel, Ingo Molnar, Arnaldo Carvalho de Melo, davej,
	dvyukov, Stephane Eranian

> 
> On Tue, Nov 15, 2016 at 12:57:31AM -0500, Vince Weaver wrote:
> > On Mon, 14 Nov 2016, Vince Weaver wrote:
> >
> > > Anyway as per the suggestion at Linux Plumbers I enabled KASAN and
> > > on my haswell machine it falls over in a few minutes of running the
> perf_fuzzer.
> > >
> > > [  205.740194]
> > >
> ===============================================================
> ===
> > > [  205.748005] BUG: KASAN: slab-out-of-bounds in
> > > snb_uncore_imc_event_del+0x6c/0xa0 at addr ffff8800caa43768 [
> > > 205.758324] Read of size 8 by task perf_fuzzer/6618 [  205.763589]
> > > CPU: 0 PID: 6618 Comm: perf_fuzzer Not tainted 4.9.0-rc5 #4 [
> > > 205.770721] Hardware name: LENOVO 10AM000AUS/SHARKBAY, BIOS
> > > FBKT72AUS 01/26/2014 [  205.778689]  ffff8800c3c479b8
> > > ffffffff816bb796 ffff88011ec00600 ffff8800caa43580 [  205.786759]
> > > ffff8800c3c479e0 ffffffff812fb961 ffff8800c3c47a78 ffff8800caa43580
> [  205.794850]  ffff8800caa43580 ffff8800c3c47a68 ffffffff812fbbd8
> ffff8800c3c47a28 [  205.802911] Call Trace:
> > > [  205.805559]  [<ffffffff816bb796>] dump_stack+0x63/0x8d [
> > > 205.811135]  [<ffffffff812fb961>] kasan_object_err+0x21/0x70 [
> > > 205.817267]  [<ffffffff812fbbd8>] kasan_report_error+0x1d8/0x4c0 [
> > > 205.823752]  [<ffffffff81133275>] ? __lock_is_held+0x75/0xc0 [
> > > 205.829868]  [<ffffffff81025b12>] ?
> > > snb_uncore_imc_read_counter+0x42/0x50
> > > [  205.837198]  [<ffffffff810222e2>] ?
> > > uncore_perf_event_update+0xe2/0x160
> > > [  205.844337]  [<ffffffff812fc319>] kasan_report+0x39/0x40 [
> > > 205.850085]  [<ffffffff81025e3c>] ?
> > > snb_uncore_imc_event_del+0x6c/0xa0
> >
> > The best I can tell this maps to:
> >
> > static void snb_uncore_imc_event_del(struct perf_event *event, int
> > flags) {
> >         struct intel_uncore_box *box = uncore_event_to_box(event);
> >         int i;
> >
> >         snb_uncore_imc_event_stop(event, PERF_EF_UPDATE);
> >
> >         for (i = 0; i < box->n_events; i++) {
> > >>>             if (event == box->event_list[i]) {
> >                         --box->n_events;
> >                         break;
> >                 }
> >         }
> > }
> >
> > Can this code be right?  Does it actually remove the event?
> > The similar code in
> >
> > static void uncore_pmu_event_del(struct perf_event *event, int flags)
> >
> > ....
> >
> > 	for (i = 0; i < box->n_events; i++) {
> >                 if (event == box->event_list[i]) {
> >                         uncore_put_event_constraint(box, event);
> >
> >                         for (++i; i < box->n_events; i++)
> >                                 box->event_list[i - 1] =
> > box->event_list[i];
> >
> >                         --box->n_events;
> >                         break;
> >                 }
> >         }
> >
> >
> > seems like it is more likely to be correct.
> 
> Kan, can you look at this?

For client IMC, there is no generic counters.
Current implementation defines its own fixed free running counters. 
event_list and n_events are unused.  
I think we can just remove them.

Vince, could you please try the patch as below?

------

diff --git a/arch/x86/events/intel/uncore_snb.c b/arch/x86/events/intel/uncore_snb.c
index 81195cc..a3dcc12 100644
--- a/arch/x86/events/intel/uncore_snb.c
+++ b/arch/x86/events/intel/uncore_snb.c
@@ -490,24 +490,12 @@ static int snb_uncore_imc_event_add(struct perf_event *event, int flags)
 
 	snb_uncore_imc_event_start(event, 0);
 
-	box->n_events++;
-
 	return 0;
 }
 
 static void snb_uncore_imc_event_del(struct perf_event *event, int flags)
 {
-	struct intel_uncore_box *box = uncore_event_to_box(event);
-	int i;
-
 	snb_uncore_imc_event_stop(event, PERF_EF_UPDATE);
-
-	for (i = 0; i < box->n_events; i++) {
-		if (event == box->event_list[i]) {
-			--box->n_events;
-			break;
-		}
-	}
 }
 
 int snb_pci2phy_map_init(int devid)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del
  2016-11-15 17:04     ` Liang, Kan
@ 2016-11-15 17:38       ` Vince Weaver
  2016-11-15 18:18         ` Liang, Kan
  0 siblings, 1 reply; 9+ messages in thread
From: Vince Weaver @ 2016-11-15 17:38 UTC (permalink / raw)
  To: Liang, Kan
  Cc: Peter Zijlstra, Vince Weaver, linux-kernel, Ingo Molnar,
	Arnaldo Carvalho de Melo, davej, dvyukov, Stephane Eranian

On Tue, 15 Nov 2016, Liang, Kan wrote:

> For client IMC, there is no generic counters.
> Current implementation defines its own fixed free running counters. 
> event_list and n_events are unused.  
> I think we can just remove them.
> 
> Vince, could you please try the patch as below?
> 

With this patch I have not been able to trigger the imc/uncore issue.

Or at least I used to be able to trigger it within 5 minutes, now I go 
longer (maybe 10 minutes) before hitting an unrelated issue.

Vince

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del
  2016-11-15 17:38       ` Vince Weaver
@ 2016-11-15 18:18         ` Liang, Kan
  0 siblings, 0 replies; 9+ messages in thread
From: Liang, Kan @ 2016-11-15 18:18 UTC (permalink / raw)
  To: Vince Weaver
  Cc: Peter Zijlstra, linux-kernel, Ingo Molnar,
	Arnaldo Carvalho de Melo, davej, dvyukov, Stephane Eranian



> -----Original Message-----
> From: Vince Weaver [mailto:vincent.weaver@maine.edu]
> Sent: Tuesday, November 15, 2016 12:39 PM
> To: Liang, Kan <kan.liang@intel.com>
> Cc: Peter Zijlstra <peterz@infradead.org>; Vince Weaver
> <vincent.weaver@maine.edu>; linux-kernel@vger.kernel.org; Ingo Molnar
> <mingo@redhat.com>; Arnaldo Carvalho de Melo <acme@kernel.org>;
> davej@codemonkey.org.uk; dvyukov@google.com; Stephane Eranian
> <eranian@gmail.com>
> Subject: RE: perf: fuzzer KASAN slab-out-of-bounds in
> snb_uncore_imc_event_del
> 
> On Tue, 15 Nov 2016, Liang, Kan wrote:
> 
> > For client IMC, there is no generic counters.
> > Current implementation defines its own fixed free running counters.
> > event_list and n_events are unused.
> > I think we can just remove them.
> >
> > Vince, could you please try the patch as below?
> >
> 
> With this patch I have not been able to trigger the imc/uncore issue.
> 
> Or at least I used to be able to trigger it within 5 minutes, now I go longer
> (maybe 10 minutes) before hitting an unrelated issue.
> 

Thanks a lot for the test.
I will submit the patch then.

Thanks,
Kan

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-11-15 18:18 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-14 21:49 perf: fuzzer KASAN slab-out-of-bounds in snb_uncore_imc_event_del Vince Weaver
2016-11-15  5:57 ` Vince Weaver
2016-11-15  6:13   ` Dmitry Vyukov
2016-11-15 13:52     ` Vince Weaver
2016-11-15 13:56       ` Dmitry Vyukov
2016-11-15 14:04   ` Peter Zijlstra
2016-11-15 17:04     ` Liang, Kan
2016-11-15 17:38       ` Vince Weaver
2016-11-15 18:18         ` Liang, Kan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome