<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/sound/drivers/dummy.c, branch linux-5.0.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.0.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.0.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2018-05-28T09:27:20Z</updated>
<entry>
<title>sound: Use octal not symbolic permissions</title>
<updated>2018-05-28T09:27:20Z</updated>
<author>
<name>Joe Perches</name>
</author>
<published>2018-05-23T19:20:59Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=6a73cf46ce9d1b382ea14d74ce4bc9aa0c52337a'/>
<id>urn:sha1:6a73cf46ce9d1b382ea14d74ce4bc9aa0c52337a</id>
<content type='text'>
Convert the S_&lt;FOO&gt; symbolic permissions to their octal equivalents as
using octal and not symbolic permissions is preferred by many as more
readable.

see: https://lkml.org/lkml/2016/8/2/1945

Done with automated conversion via:
$ ./scripts/checkpatch.pl -f --types=SYMBOLIC_PERMS --fix-inplace &lt;files...&gt;

Miscellanea:

o Wrapped one multi-line call to a single line

Signed-off-by: Joe Perches &lt;joe@perches.com&gt;
Acked-by: Vinod Koul &lt;vkoul@kernel.org&gt;
Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
</content>
</entry>
<entry>
<title>Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip</title>
<updated>2018-01-30T00:50:58Z</updated>
<author>
<name>Linus Torvalds</name>
</author>
<published>2018-01-30T00:50:58Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a46d3f9b1c9888a244ed1ce8da0eca98c3f378e2'/>
<id>urn:sha1:a46d3f9b1c9888a244ed1ce8da0eca98c3f378e2</id>
<content type='text'>
Pull timer updates from Thomas Gleixner:
 "The timer departement presents:

   - A rather large rework of the hrtimer infrastructure which
     introduces softirq based hrtimers to replace the spread of
     hrtimer/tasklet combos which force the actual callback execution
     into softirq context. The approach is completely different from the
     initial implementation which you cursed at 10 years ago rightfully.

     The softirq based timers have their own queues and there is no
     nasty indirection and list reshuffling in the hard interrupt
     anymore. This comes with conversion of some of the hrtimer/tasklet
     users, the rest and the final removal of that horrible interface
     will come towards the end of the merge window or go through the
     relevant maintainer trees.

     Note: The top commit merged the last minute bugfix for the 10 years
     old CPU hotplug bug as I wanted to make sure that I fatfinger the
     merge conflict resolution myself.

   - The overhaul of the STM32 clocksource/clockevents driver

   - A new driver for the Spreadtrum SC9860 timer

   - A new driver dor the Actions Semi S700 timer

   - The usual set of fixes and updates all over the place"

* 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (53 commits)
  usb/gadget/NCM: Replace tasklet with softirq hrtimer
  ALSA/dummy: Replace tasklet with softirq hrtimer
  hrtimer: Implement SOFT/HARD clock base selection
  hrtimer: Implement support for softirq based hrtimers
  hrtimer: Prepare handling of hard and softirq based hrtimers
  hrtimer: Add clock bases and hrtimer mode for softirq context
  hrtimer: Use irqsave/irqrestore around __run_hrtimer()
  hrtimer: Factor out __hrtimer_next_event_base()
  hrtimer: Factor out __hrtimer_start_range_ns()
  hrtimer: Remove the 'base' parameter from hrtimer_reprogram()
  hrtimer: Make remote enqueue decision less restrictive
  hrtimer: Unify remote enqueue handling
  hrtimer: Unify hrtimer removal handling
  hrtimer: Make hrtimer_force_reprogramm() unconditionally available
  hrtimer: Make hrtimer_reprogramm() unconditional
  hrtimer: Make hrtimer_cpu_base.next_timer handling unconditional
  hrtimer: Make the remote enqueue check unconditional
  hrtimer: Use accesor functions instead of direct access
  hrtimer: Make the hrtimer_cpu_base::hres_active field unconditional, to simplify the code
  hrtimer: Make room in 'struct hrtimer_cpu_base'
  ...
</content>
</entry>
<entry>
<title>ALSA/dummy: Replace tasklet with softirq hrtimer</title>
<updated>2018-01-16T08:51:22Z</updated>
<author>
<name>Thomas Gleixner</name>
</author>
<published>2017-12-21T10:42:03Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b03bbbe08ff04d80136b6aac152954ef308a4909'/>
<id>urn:sha1:b03bbbe08ff04d80136b6aac152954ef308a4909</id>
<content type='text'>
The tasklet is used to defer the execution of snd_pcm_period_elapsed() to
the softirq context. Using the HRTIMER_MODE_SOFT mode invokes the timer
callback in softirq context as well which renders the tasklet useless.

[o-takashi: avoid stall due to a call of hrtimer_cancel() on a callback of hrtimer]

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Signed-off-by: Anna-Maria Gleixner &lt;anna-maria@linutronix.de&gt;
Reviewed-by: Takashi Iwai &lt;tiwai@suse.de&gt;
Cc: Christoph Hellwig &lt;hch@lst.de&gt;
Cc: Jaroslav Kysela &lt;perex@perex.cz&gt;
Cc: John Stultz &lt;john.stultz@linaro.org&gt;
Cc: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Peter Zijlstra &lt;peterz@infradead.org&gt;
Cc: Takashi Iwai &lt;tiwai@suse.com&gt;
Cc: Takashi Sakamoto &lt;o-takashi@sakamocchi.jp&gt;
Cc: alsa-devel@alsa-project.org
Cc: keescook@chromium.org
Link: http://lkml.kernel.org/r/20171221104205.7269-35-anna-maria@linutronix.de
Signed-off-by: Ingo Molnar &lt;mingo@kernel.org&gt;
</content>
</entry>
<entry>
<title>ALSA: drivers: make array 'names' const, reduces object code size</title>
<updated>2017-11-29T08:28:27Z</updated>
<author>
<name>Colin Ian King</name>
</author>
<published>2017-11-27T12:58:51Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a4a1b737032daf42e1e2ccd70bfceca56464ccac'/>
<id>urn:sha1:a4a1b737032daf42e1e2ccd70bfceca56464ccac</id>
<content type='text'>
Don't populate array 'names' on the stack but instead make them static.
Makes the object code smaller by 50 bytes:

Before:
   text	   data	    bss	    dec	    hex	filename
  21237	   9192	   1120	  31549	   7b3d	linux/sound/drivers/dummy.o

After:
   text	   data	    bss	    dec	    hex	filename
  21095	   9280	   1120	  31495	   7b07	linux/sound/drivers/dummy.o

(gcc version 7.2.0 x86_64)

Signed-off-by: Colin Ian King &lt;colin.king@canonical.com&gt;
Reviewed-by: Takashi Sakamoto &lt;o-takashi@sakamocchi.jp&gt;
Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
</content>
</entry>
<entry>
<title>ALSA: drivers: Convert timers to use timer_setup()</title>
<updated>2017-10-24T19:01:16Z</updated>
<author>
<name>Kees Cook</name>
</author>
<published>2017-10-24T15:34:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bc47ba90b01afe468cdd586b0dbe59b64862e2b7'/>
<id>urn:sha1:bc47ba90b01afe468cdd586b0dbe59b64862e2b7</id>
<content type='text'>
In preparation for unconditionally passing the struct timer_list pointer to
all timer callbacks, switch to using the new timer_setup() and from_timer()
to pass the timer pointer explicitly.

Signed-off-by: Kees Cook &lt;keescook@chromium.org&gt;
Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
</content>
</entry>
<entry>
<title>ALSA: drivers: make snd_pcm_hardware const</title>
<updated>2017-08-17T10:44:09Z</updated>
<author>
<name>Bhumika Goyal</name>
</author>
<published>2017-08-17T09:15:51Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b6c0b7156167b8a0f82576adaaa9d7287296bbfc'/>
<id>urn:sha1:b6c0b7156167b8a0f82576adaaa9d7287296bbfc</id>
<content type='text'>
Make these const as they are only used in a copy operation.
Done using Coccinelle.

Signed-off-by: Bhumika Goyal &lt;bhumirks@gmail.com&gt;
Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
</content>
</entry>
<entry>
<title>ALSA: dummy: Convert to new PCM copy ops</title>
<updated>2017-06-02T17:37:56Z</updated>
<author>
<name>Takashi Iwai</name>
</author>
<published>2017-05-10T18:15:40Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d53611d21ef6000619e87f6cfc1f6d870c10cd93'/>
<id>urn:sha1:d53611d21ef6000619e87f6cfc1f6d870c10cd93</id>
<content type='text'>
It's a dummy ops, so just replacing it.

Reviewed-by: Takashi Sakamoto &lt;o-takashi@sakamocchi.jp&gt;
Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
</content>
</entry>
<entry>
<title>ALSA: dummy: Fix a use-after-free at closing</title>
<updated>2016-06-24T13:18:32Z</updated>
<author>
<name>Takashi Iwai</name>
</author>
<published>2016-06-24T13:15:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d5dbbe6569481bf12dcbe3e12cff72c5f78d272c'/>
<id>urn:sha1:d5dbbe6569481bf12dcbe3e12cff72c5f78d272c</id>
<content type='text'>
syzkaller fuzzer spotted a potential use-after-free case in snd-dummy
driver when hrtimer is used as backend:
&gt; ==================================================================
&gt; BUG: KASAN: use-after-free in rb_erase+0x1b17/0x2010 at addr ffff88005e5b6f68
&gt;  Read of size 8 by task syz-executor/8984
&gt; =============================================================================
&gt; BUG kmalloc-192 (Not tainted): kasan: bad access detected
&gt; -----------------------------------------------------------------------------
&gt;
&gt; Disabling lock debugging due to kernel taint
&gt; INFO: Allocated in 0xbbbbbbbbbbbbbbbb age=18446705582212484632
&gt; ....
&gt; [&lt;      none      &gt;] dummy_hrtimer_create+0x49/0x1a0 sound/drivers/dummy.c:464
&gt; ....
&gt; INFO: Freed in 0xfffd8e09 age=18446705496313138713 cpu=2164287125 pid=-1
&gt; [&lt;      none      &gt;] dummy_hrtimer_free+0x68/0x80 sound/drivers/dummy.c:481
&gt; ....
&gt; Call Trace:
&gt;  [&lt;ffffffff8179e59e&gt;] __asan_report_load8_noabort+0x3e/0x40 mm/kasan/report.c:333
&gt;  [&lt;     inline     &gt;] rb_set_parent include/linux/rbtree_augmented.h:111
&gt;  [&lt;     inline     &gt;] __rb_erase_augmented include/linux/rbtree_augmented.h:218
&gt;  [&lt;ffffffff82ca5787&gt;] rb_erase+0x1b17/0x2010 lib/rbtree.c:427
&gt;  [&lt;ffffffff82cb02e8&gt;] timerqueue_del+0x78/0x170 lib/timerqueue.c:86
&gt;  [&lt;ffffffff814d0c80&gt;] __remove_hrtimer+0x90/0x220 kernel/time/hrtimer.c:903
&gt;  [&lt;     inline     &gt;] remove_hrtimer kernel/time/hrtimer.c:945
&gt;  [&lt;ffffffff814d23da&gt;] hrtimer_try_to_cancel+0x22a/0x570 kernel/time/hrtimer.c:1046
&gt;  [&lt;ffffffff814d2742&gt;] hrtimer_cancel+0x22/0x40 kernel/time/hrtimer.c:1066
&gt;  [&lt;ffffffff85420531&gt;] dummy_hrtimer_stop+0x91/0xb0 sound/drivers/dummy.c:417
&gt;  [&lt;ffffffff854228bf&gt;] dummy_pcm_trigger+0x17f/0x1e0 sound/drivers/dummy.c:507
&gt;  [&lt;ffffffff85392170&gt;] snd_pcm_do_stop+0x160/0x1b0 sound/core/pcm_native.c:1106
&gt;  [&lt;ffffffff85391b26&gt;] snd_pcm_action_single+0x76/0x120 sound/core/pcm_native.c:956
&gt;  [&lt;ffffffff85391e01&gt;] snd_pcm_action+0x231/0x290 sound/core/pcm_native.c:974
&gt;  [&lt;     inline     &gt;] snd_pcm_stop sound/core/pcm_native.c:1139
&gt;  [&lt;ffffffff8539754d&gt;] snd_pcm_drop+0x12d/0x1d0 sound/core/pcm_native.c:1784
&gt;  [&lt;ffffffff8539d3be&gt;] snd_pcm_common_ioctl1+0xfae/0x2150 sound/core/pcm_native.c:2805
&gt;  [&lt;ffffffff8539ee91&gt;] snd_pcm_capture_ioctl1+0x2a1/0x5e0 sound/core/pcm_native.c:2976
&gt;  [&lt;ffffffff8539f2ec&gt;] snd_pcm_kernel_ioctl+0x11c/0x160 sound/core/pcm_native.c:3020
&gt;  [&lt;ffffffff853d9a44&gt;] snd_pcm_oss_sync+0x3a4/0xa30 sound/core/oss/pcm_oss.c:1693
&gt;  [&lt;ffffffff853da27d&gt;] snd_pcm_oss_release+0x1ad/0x280 sound/core/oss/pcm_oss.c:2483
&gt;  .....

A workaround is to call hrtimer_cancel() in dummy_hrtimer_sync() which
is called certainly before other blocking ops.

Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
Tested-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
Cc: &lt;stable@vger.kernel.org&gt;
Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
</content>
</entry>
<entry>
<title>ALSA: dummy: Implement timer backend switching more safely</title>
<updated>2016-02-08T07:15:35Z</updated>
<author>
<name>Takashi Iwai</name>
</author>
<published>2016-02-02T14:27:36Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ddce57a6f0a2d8d1bfacfa77f06043bc760403c2'/>
<id>urn:sha1:ddce57a6f0a2d8d1bfacfa77f06043bc760403c2</id>
<content type='text'>
Currently the selected timer backend is referred at any moment from
the running PCM callbacks.  When the backend is switched, it's
possible to lead to inconsistency from the running backend.  This was
pointed by syzkaller fuzzer, and the commit [7ee96216c31a: ALSA:
dummy: Disable switching timer backend via sysfs] disabled the dynamic
switching for avoiding the crash.

This patch improves the handling of timer backend switching.  It keeps
the reference to the selected backend during the whole operation of an
opened stream so that it won't be changed by other streams.

Together with this change, the hrtimer parameter is reenabled as
writable now.

NOTE: this patch also turned out to fix the still remaining race.
Namely, ops was still replaced dynamically at dummy_pcm_open:

  static int dummy_pcm_open(struct snd_pcm_substream *substream)
  {
  ....
          dummy-&gt;timer_ops = &amp;dummy_systimer_ops;
          if (hrtimer)
                  dummy-&gt;timer_ops = &amp;dummy_hrtimer_ops;

Since dummy-&gt;timer_ops is common among all streams, and when the
replacement happens during accesses of other streams, it may lead to a
crash.  This was actually triggered by syzkaller fuzzer and KASAN.

This patch rewrites the code not to use the ops shared by all streams
any longer, too.

BugLink: http://lkml.kernel.org/r/CACT4Y+aZ+xisrpuM6cOXbL21DuM0yVxPYXf4cD4Md9uw0C3dBQ@mail.gmail.com
Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
Cc: &lt;stable@vger.kernel.org&gt;
Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
</content>
</entry>
<entry>
<title>ALSA: dummy: Disable switching timer backend via sysfs</title>
<updated>2016-01-28T07:13:54Z</updated>
<author>
<name>Takashi Iwai</name>
</author>
<published>2016-01-28T06:54:16Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=7ee96216c31aabe1eb42fb91ff50dae9fcd014b2'/>
<id>urn:sha1:7ee96216c31aabe1eb42fb91ff50dae9fcd014b2</id>
<content type='text'>
ALSA dummy driver can switch the timer backend between system timer
and hrtimer via its hrtimer module option.  This can be also switched
dynamically via sysfs, but it may lead to a memory corruption when
switching is done while a PCM stream is running; the stream instance
for the newly switched timer method tries to access the memory that
was allocated by another timer method although the sizes differ.

As the simplest fix, this patch just disables the switch via sysfs by
dropping the writable bit.

BugLink: http://lkml.kernel.org/r/CACT4Y+ZGEeEBntHW5WHn2GoeE0G_kRrCmUh6=dWyy-wfzvuJLg@mail.gmail.com
Reported-by: Dmitry Vyukov &lt;dvyukov@google.com&gt;
Cc: &lt;stable@vger.kernel.org&gt;
Signed-off-by: Takashi Iwai &lt;tiwai@suse.de&gt;
</content>
</entry>
</feed>
