<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/net/bluetooth/sco.c, branch v4.10</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>Bluetooth: Fix using the correct source address type</title>
<updated>2016-11-22T21:50:46+00:00</updated>
<author>
<name>Johan Hedberg</name>
<email>johan.hedberg@intel.com</email>
</author>
<published>2016-11-12T15:03:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=39385cb5f3274735b03ed1f8e7ff517b02a0beed'/>
<id>39385cb5f3274735b03ed1f8e7ff517b02a0beed</id>
<content type='text'>
The hci_get_route() API is used to look up local HCI devices, however
so far it has been incapable of dealing with anything else than the
public address of HCI devices. This completely breaks with LE-only HCI
devices that do not come with a public address, but use a static
random address instead.

This patch exteds the hci_get_route() API with a src_type parameter
that's used for comparing with the right address of each HCI device.

Signed-off-by: Johan Hedberg &lt;johan.hedberg@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The hci_get_route() API is used to look up local HCI devices, however
so far it has been incapable of dealing with anything else than the
public address of HCI devices. This completely breaks with LE-only HCI
devices that do not come with a public address, but use a static
random address instead.

This patch exteds the hci_get_route() API with a src_type parameter
that's used for comparing with the right address of each HCI device.

Signed-off-by: Johan Hedberg &lt;johan.hedberg@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>bluetooth: Validate socket address length in sco_sock_bind().</title>
<updated>2015-12-15T20:39:08+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2015-12-15T20:39:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=5233252fce714053f0151680933571a2da9cbfb4'/>
<id>5233252fce714053f0151680933571a2da9cbfb4</id>
<content type='text'>
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Bluetooth: Fix crash on fast disconnect of SCO</title>
<updated>2015-10-27T05:00:07+00:00</updated>
<author>
<name>Kuba Pawlak</name>
<email>kubax.t.pawlak@intel.com</email>
</author>
<published>2015-10-26T16:17:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=2c501cdd6823a644cf35ac594c635310bf077125'/>
<id>2c501cdd6823a644cf35ac594c635310bf077125</id>
<content type='text'>
Fix a crash that may happen when a connection is closed before it was fully
established. Mapping conn-&gt;hcon was released by shutdown function, but it
is still referenced in (not yet finished) connection established handling
function.

[ 4635.254073] BUG: unable to handle kernel NULL pointer dereference at 00000013
[ 4635.262058] IP: [&lt;c11659f0&gt;] memcmp+0xe/0x25
[ 4635.266835] *pdpt = 0000000024190001 *pde = 0000000000000000
[ 4635.273261] Oops: 0000 [#1] PREEMPT SMP
[ 4635.277652] Modules linked in: evdev ecb vfat fat libcomposite usb2380 isofs zlib_inflate rfcomm(O) udc_core bnep(O) btusb(O) btbcm(O) btintel(O) bluetooth(O) cdc_acm arc4 uinput hid_mule
[ 4635.321761] Pid: 363, comm: kworker/u:2H Tainted: G           O 3.8.0-119.1-plk-adaptation-byt-ivi-brd #1
[ 4635.332642] EIP: 0060:[&lt;c11659f0&gt;] EFLAGS: 00010206 CPU: 0
[ 4635.338767] EIP is at memcmp+0xe/0x25
[ 4635.342852] EAX: e4720678 EBX: 00000000 ECX: 00000006 EDX: 00000013
[ 4635.349849] ESI: 00000000 EDI: fb85366c EBP: e40c7dc0 ESP: e40c7db4
[ 4635.356846]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[ 4635.362873] CR0: 8005003b CR2: 00000013 CR3: 24191000 CR4: 001007f0
[ 4635.369869] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
[ 4635.376865] DR6: ffff0ff0 DR7: 00000400
[ 4635.381143] Process kworker/u:2H (pid: 363, ti=e40c6000 task=e40c5510 task.ti=e40c6000)
[ 4635.390080] Stack:
[ 4635.392319]  e4720400 00000000 fb85366c e40c7df4 fb842285 e40c7de2 fb853200 00000013
[ 4635.401003]  e3f101c4 e4720678 e3f101c0 e403be0a e40c7dfc e416a000 e403be0a fb85366c
[ 4635.409692]  e40c7e1c fb820186 020f6c00 e47c49ac e47c4008 00000000 e416a000 e47c402c
[ 4635.418380] Call Trace:
[ 4635.421153]  [&lt;fb842285&gt;] sco_connect_cfm+0xff/0x236 [bluetooth]
[ 4635.427893]  [&lt;fb820186&gt;] hci_sync_conn_complete_evt.clone.101+0x227/0x268 [bluetooth]
[ 4635.436758]  [&lt;fb82370f&gt;] hci_event_packet+0x1caa/0x21d3 [bluetooth]
[ 4635.443859]  [&lt;c106231f&gt;] ? trace_hardirqs_on+0xb/0xd
[ 4635.449502]  [&lt;c1375b8a&gt;] ? _raw_spin_unlock_irqrestore+0x42/0x59
[ 4635.456340]  [&lt;fb814b67&gt;] hci_rx_work+0xb9/0x350 [bluetooth]
[ 4635.462663]  [&lt;c1039f1e&gt;] ? process_one_work+0x17b/0x2e6
[ 4635.468596]  [&lt;c1039f77&gt;] process_one_work+0x1d4/0x2e6
[ 4635.474333]  [&lt;c1039f1e&gt;] ? process_one_work+0x17b/0x2e6
[ 4635.480294]  [&lt;fb814aae&gt;] ? hci_cmd_work+0xda/0xda [bluetooth]
[ 4635.486810]  [&lt;c103a3fa&gt;] worker_thread+0x171/0x20f
[ 4635.492257]  [&lt;c10456c5&gt;] ? complete+0x34/0x3e
[ 4635.497219]  [&lt;c103ea06&gt;] kthread+0x90/0x95
[ 4635.501888]  [&lt;c103a289&gt;] ? manage_workers+0x1df/0x1df
[ 4635.507628]  [&lt;c1376537&gt;] ret_from_kernel_thread+0x1b/0x28
[ 4635.513755]  [&lt;c103e976&gt;] ? __init_kthread_worker+0x42/0x42
[ 4635.519975] Code: 74 0d 3c 79 74 04 3c 59 75 0c c6 02 01 eb 03 c6 02 00 31 c0 eb 05 b8 ea ff ff ff 5d c3 55 89 e5 57 56 53 31 db eb 0e 0f b6 34 18 &lt;0f&gt; b6 3c 1a 43 29 fe 75 07 49 85 c9 7f
[ 4635.541264] EIP: [&lt;c11659f0&gt;] memcmp+0xe/0x25 SS:ESP 0068:e40c7db4
[ 4635.548166] CR2: 0000000000000013
[ 4635.552177] ---[ end trace e05ce9b8ce6182f6 ]---

Signed-off-by: Kuba Pawlak &lt;kubax.t.pawlak@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fix a crash that may happen when a connection is closed before it was fully
established. Mapping conn-&gt;hcon was released by shutdown function, but it
is still referenced in (not yet finished) connection established handling
function.

[ 4635.254073] BUG: unable to handle kernel NULL pointer dereference at 00000013
[ 4635.262058] IP: [&lt;c11659f0&gt;] memcmp+0xe/0x25
[ 4635.266835] *pdpt = 0000000024190001 *pde = 0000000000000000
[ 4635.273261] Oops: 0000 [#1] PREEMPT SMP
[ 4635.277652] Modules linked in: evdev ecb vfat fat libcomposite usb2380 isofs zlib_inflate rfcomm(O) udc_core bnep(O) btusb(O) btbcm(O) btintel(O) bluetooth(O) cdc_acm arc4 uinput hid_mule
[ 4635.321761] Pid: 363, comm: kworker/u:2H Tainted: G           O 3.8.0-119.1-plk-adaptation-byt-ivi-brd #1
[ 4635.332642] EIP: 0060:[&lt;c11659f0&gt;] EFLAGS: 00010206 CPU: 0
[ 4635.338767] EIP is at memcmp+0xe/0x25
[ 4635.342852] EAX: e4720678 EBX: 00000000 ECX: 00000006 EDX: 00000013
[ 4635.349849] ESI: 00000000 EDI: fb85366c EBP: e40c7dc0 ESP: e40c7db4
[ 4635.356846]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[ 4635.362873] CR0: 8005003b CR2: 00000013 CR3: 24191000 CR4: 001007f0
[ 4635.369869] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
[ 4635.376865] DR6: ffff0ff0 DR7: 00000400
[ 4635.381143] Process kworker/u:2H (pid: 363, ti=e40c6000 task=e40c5510 task.ti=e40c6000)
[ 4635.390080] Stack:
[ 4635.392319]  e4720400 00000000 fb85366c e40c7df4 fb842285 e40c7de2 fb853200 00000013
[ 4635.401003]  e3f101c4 e4720678 e3f101c0 e403be0a e40c7dfc e416a000 e403be0a fb85366c
[ 4635.409692]  e40c7e1c fb820186 020f6c00 e47c49ac e47c4008 00000000 e416a000 e47c402c
[ 4635.418380] Call Trace:
[ 4635.421153]  [&lt;fb842285&gt;] sco_connect_cfm+0xff/0x236 [bluetooth]
[ 4635.427893]  [&lt;fb820186&gt;] hci_sync_conn_complete_evt.clone.101+0x227/0x268 [bluetooth]
[ 4635.436758]  [&lt;fb82370f&gt;] hci_event_packet+0x1caa/0x21d3 [bluetooth]
[ 4635.443859]  [&lt;c106231f&gt;] ? trace_hardirqs_on+0xb/0xd
[ 4635.449502]  [&lt;c1375b8a&gt;] ? _raw_spin_unlock_irqrestore+0x42/0x59
[ 4635.456340]  [&lt;fb814b67&gt;] hci_rx_work+0xb9/0x350 [bluetooth]
[ 4635.462663]  [&lt;c1039f1e&gt;] ? process_one_work+0x17b/0x2e6
[ 4635.468596]  [&lt;c1039f77&gt;] process_one_work+0x1d4/0x2e6
[ 4635.474333]  [&lt;c1039f1e&gt;] ? process_one_work+0x17b/0x2e6
[ 4635.480294]  [&lt;fb814aae&gt;] ? hci_cmd_work+0xda/0xda [bluetooth]
[ 4635.486810]  [&lt;c103a3fa&gt;] worker_thread+0x171/0x20f
[ 4635.492257]  [&lt;c10456c5&gt;] ? complete+0x34/0x3e
[ 4635.497219]  [&lt;c103ea06&gt;] kthread+0x90/0x95
[ 4635.501888]  [&lt;c103a289&gt;] ? manage_workers+0x1df/0x1df
[ 4635.507628]  [&lt;c1376537&gt;] ret_from_kernel_thread+0x1b/0x28
[ 4635.513755]  [&lt;c103e976&gt;] ? __init_kthread_worker+0x42/0x42
[ 4635.519975] Code: 74 0d 3c 79 74 04 3c 59 75 0c c6 02 01 eb 03 c6 02 00 31 c0 eb 05 b8 ea ff ff ff 5d c3 55 89 e5 57 56 53 31 db eb 0e 0f b6 34 18 &lt;0f&gt; b6 3c 1a 43 29 fe 75 07 49 85 c9 7f
[ 4635.541264] EIP: [&lt;c11659f0&gt;] memcmp+0xe/0x25 SS:ESP 0068:e40c7db4
[ 4635.548166] CR2: 0000000000000013
[ 4635.552177] ---[ end trace e05ce9b8ce6182f6 ]---

Signed-off-by: Kuba Pawlak &lt;kubax.t.pawlak@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Bluetooth: Fix some obvious coding style issues in the SCO module</title>
<updated>2015-10-26T06:22:00+00:00</updated>
<author>
<name>Marcel Holtmann</name>
<email>marcel@holtmann.org</email>
</author>
<published>2015-10-26T01:08:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=c4297e8f7f453c83a75c2cbd93e57d8d9f36a316'/>
<id>c4297e8f7f453c83a75c2cbd93e57d8d9f36a316</id>
<content type='text'>
Lets fix this obvious coding style issues in the SCO module and bring it
in line with the rest of the Bluetooth subsystem.

Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
Signed-off-by: Johan Hedberg &lt;johan.hedberg@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Lets fix this obvious coding style issues in the SCO module and bring it
in line with the rest of the Bluetooth subsystem.

Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
Signed-off-by: Johan Hedberg &lt;johan.hedberg@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Bluetooth: Fix locking issue during fast SCO reconnection.</title>
<updated>2015-10-25T20:06:39+00:00</updated>
<author>
<name>Kuba Pawlak</name>
<email>kubax.t.pawlak@intel.com</email>
</author>
<published>2015-10-05T16:44:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=1da5537eccd865b83fedbbb7ea704669f6d255fd'/>
<id>1da5537eccd865b83fedbbb7ea704669f6d255fd</id>
<content type='text'>
When SCO connection is requested and disconnected fast, there is a change
that sco_sock_shutdown is going to preempt thread started in sco_connect_cfm.
When this happens struct sock sk may be removed but a pointer to it is still
held in sco_conn_ready, where embedded spinlock is used. If it is used, but
struct sock has been removed, it will crash.

Block connection object, which will prevent struct sock from being removed
and give connection process chance to finish.

BUG: spinlock bad magic on CPU#0, kworker/u:2H/319
 lock: 0xe3e99434, .magic: f3000000, .owner: (���/0, .owner_cpu: -203804160
Pid: 319, comm: kworker/u:2H Tainted: G           O 3.8.0-115.1-plk-adaptation-byt-ivi-brd #1
Call Trace:
 [&lt;c1155659&gt;] ? do_raw_spin_lock+0x19/0xe9
 [&lt;fb75354f&gt;] ? sco_connect_cfm+0x92/0x236 [bluetooth]
 [&lt;fb731dbc&gt;] ? hci_sync_conn_complete_evt.clone.101+0x18b/0x1cb [bluetooth]
 [&lt;fb734ee7&gt;] ? hci_event_packet+0x1acd/0x21a6 [bluetooth]
 [&lt;c1041095&gt;] ? finish_task_switch+0x50/0x89
 [&lt;c1349a2e&gt;] ? __schedule+0x638/0x6b8
 [&lt;fb727918&gt;] ? hci_rx_work+0xb9/0x2b8 [bluetooth]
 [&lt;c103760a&gt;] ? queue_delayed_work_on+0x21/0x2a
 [&lt;c1035df9&gt;] ? process_one_work+0x157/0x21b
 [&lt;fb72785f&gt;] ? hci_cmd_work+0xef/0xef [bluetooth]
 [&lt;c1036217&gt;] ? worker_thread+0x16e/0x20a
 [&lt;c10360a9&gt;] ? manage_workers+0x1cf/0x1cf
 [&lt;c103a0ef&gt;] ? kthread+0x8d/0x92
 [&lt;c134adf7&gt;] ? ret_from_kernel_thread+0x1b/0x28
 [&lt;c103a062&gt;] ? __init_kthread_worker+0x24/0x24
BUG: unable to handle kernel NULL pointer dereference at   (null)
IP: [&lt;  (null)&gt;]   (null)
*pdpt = 00000000244e1001 *pde = 0000000000000000
Oops: 0010 [#1] PREEMPT SMP
Modules linked in: evdev ecb rfcomm(O) libcomposite usb2380 udc_core bnep(O) btusb(O) btbcm(O) cdc_acm btintel(O) bluetooth(O) arc4 uinput hid_multitouch usbhid hid iwlmvm(O)e
Pid: 319, comm: kworker/u:2H Tainted: G           O 3.8.0-115.1-plk-adaptation-byt-ivi-brd #1
EIP: 0060:[&lt;00000000&gt;] EFLAGS: 00010246 CPU: 0
EIP is at 0x0
EAX: e3e99400 EBX: e3e99400 ECX: 00000100 EDX: 00000000
ESI: e3e99434 EDI: fb763ce0 EBP: e49b9e44 ESP: e49b9e14
 DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
CR0: 8005003b CR2: 00000000 CR3: 24444000 CR4: 001007f0
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: ffff0ff0 DR7: 00000400
Process kworker/u:2H (pid: 319, ti=e49b8000 task=e4ab9030 task.ti=e49b8000)
Stack:
 fb75355b 00000246 fb763900 22222222 22222222 22222222 e3f94460 e3ca7c0a
 e49b9e4c e3f34c00 e3ca7c0a fb763ce0 e49b9e6c fb731dbc 02000246 e4cec85c
 e4cec008 00000000 e3f34c00 e4cec000 e3c2ce00 0000002c e49b9ed0 fb734ee7
Call Trace:
 [&lt;fb75355b&gt;] ? sco_connect_cfm+0x9e/0x236 [bluetooth]
 [&lt;fb731dbc&gt;] ? hci_sync_conn_complete_evt.clone.101+0x18b/0x1cb [bluetooth]
 [&lt;fb734ee7&gt;] ? hci_event_packet+0x1acd/0x21a6 [bluetooth]
 [&lt;c1041095&gt;] ? finish_task_switch+0x50/0x89
 [&lt;c1349a2e&gt;] ? __schedule+0x638/0x6b8
 [&lt;fb727918&gt;] ? hci_rx_work+0xb9/0x2b8 [bluetooth]
 [&lt;c103760a&gt;] ? queue_delayed_work_on+0x21/0x2a
 [&lt;c1035df9&gt;] ? process_one_work+0x157/0x21b
 [&lt;fb72785f&gt;] ? hci_cmd_work+0xef/0xef [bluetooth]
 [&lt;c1036217&gt;] ? worker_thread+0x16e/0x20a
 [&lt;c10360a9&gt;] ? manage_workers+0x1cf/0x1cf
 [&lt;c103a0ef&gt;] ? kthread+0x8d/0x92
 [&lt;c134adf7&gt;] ? ret_from_kernel_thread+0x1b/0x28
 [&lt;c103a062&gt;] ? __init_kthread_worker+0x24/0x24
Code:  Bad EIP value.
EIP: [&lt;00000000&gt;] 0x0 SS:ESP 0068:e49b9e14
CR2: 0000000000000000
---[ end trace 942a6577c0abd725 ]---

Signed-off-by: Kuba Pawlak &lt;kubax.t.pawlak@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When SCO connection is requested and disconnected fast, there is a change
that sco_sock_shutdown is going to preempt thread started in sco_connect_cfm.
When this happens struct sock sk may be removed but a pointer to it is still
held in sco_conn_ready, where embedded spinlock is used. If it is used, but
struct sock has been removed, it will crash.

Block connection object, which will prevent struct sock from being removed
and give connection process chance to finish.

BUG: spinlock bad magic on CPU#0, kworker/u:2H/319
 lock: 0xe3e99434, .magic: f3000000, .owner: (���/0, .owner_cpu: -203804160
Pid: 319, comm: kworker/u:2H Tainted: G           O 3.8.0-115.1-plk-adaptation-byt-ivi-brd #1
Call Trace:
 [&lt;c1155659&gt;] ? do_raw_spin_lock+0x19/0xe9
 [&lt;fb75354f&gt;] ? sco_connect_cfm+0x92/0x236 [bluetooth]
 [&lt;fb731dbc&gt;] ? hci_sync_conn_complete_evt.clone.101+0x18b/0x1cb [bluetooth]
 [&lt;fb734ee7&gt;] ? hci_event_packet+0x1acd/0x21a6 [bluetooth]
 [&lt;c1041095&gt;] ? finish_task_switch+0x50/0x89
 [&lt;c1349a2e&gt;] ? __schedule+0x638/0x6b8
 [&lt;fb727918&gt;] ? hci_rx_work+0xb9/0x2b8 [bluetooth]
 [&lt;c103760a&gt;] ? queue_delayed_work_on+0x21/0x2a
 [&lt;c1035df9&gt;] ? process_one_work+0x157/0x21b
 [&lt;fb72785f&gt;] ? hci_cmd_work+0xef/0xef [bluetooth]
 [&lt;c1036217&gt;] ? worker_thread+0x16e/0x20a
 [&lt;c10360a9&gt;] ? manage_workers+0x1cf/0x1cf
 [&lt;c103a0ef&gt;] ? kthread+0x8d/0x92
 [&lt;c134adf7&gt;] ? ret_from_kernel_thread+0x1b/0x28
 [&lt;c103a062&gt;] ? __init_kthread_worker+0x24/0x24
BUG: unable to handle kernel NULL pointer dereference at   (null)
IP: [&lt;  (null)&gt;]   (null)
*pdpt = 00000000244e1001 *pde = 0000000000000000
Oops: 0010 [#1] PREEMPT SMP
Modules linked in: evdev ecb rfcomm(O) libcomposite usb2380 udc_core bnep(O) btusb(O) btbcm(O) cdc_acm btintel(O) bluetooth(O) arc4 uinput hid_multitouch usbhid hid iwlmvm(O)e
Pid: 319, comm: kworker/u:2H Tainted: G           O 3.8.0-115.1-plk-adaptation-byt-ivi-brd #1
EIP: 0060:[&lt;00000000&gt;] EFLAGS: 00010246 CPU: 0
EIP is at 0x0
EAX: e3e99400 EBX: e3e99400 ECX: 00000100 EDX: 00000000
ESI: e3e99434 EDI: fb763ce0 EBP: e49b9e44 ESP: e49b9e14
 DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
CR0: 8005003b CR2: 00000000 CR3: 24444000 CR4: 001007f0
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: ffff0ff0 DR7: 00000400
Process kworker/u:2H (pid: 319, ti=e49b8000 task=e4ab9030 task.ti=e49b8000)
Stack:
 fb75355b 00000246 fb763900 22222222 22222222 22222222 e3f94460 e3ca7c0a
 e49b9e4c e3f34c00 e3ca7c0a fb763ce0 e49b9e6c fb731dbc 02000246 e4cec85c
 e4cec008 00000000 e3f34c00 e4cec000 e3c2ce00 0000002c e49b9ed0 fb734ee7
Call Trace:
 [&lt;fb75355b&gt;] ? sco_connect_cfm+0x9e/0x236 [bluetooth]
 [&lt;fb731dbc&gt;] ? hci_sync_conn_complete_evt.clone.101+0x18b/0x1cb [bluetooth]
 [&lt;fb734ee7&gt;] ? hci_event_packet+0x1acd/0x21a6 [bluetooth]
 [&lt;c1041095&gt;] ? finish_task_switch+0x50/0x89
 [&lt;c1349a2e&gt;] ? __schedule+0x638/0x6b8
 [&lt;fb727918&gt;] ? hci_rx_work+0xb9/0x2b8 [bluetooth]
 [&lt;c103760a&gt;] ? queue_delayed_work_on+0x21/0x2a
 [&lt;c1035df9&gt;] ? process_one_work+0x157/0x21b
 [&lt;fb72785f&gt;] ? hci_cmd_work+0xef/0xef [bluetooth]
 [&lt;c1036217&gt;] ? worker_thread+0x16e/0x20a
 [&lt;c10360a9&gt;] ? manage_workers+0x1cf/0x1cf
 [&lt;c103a0ef&gt;] ? kthread+0x8d/0x92
 [&lt;c134adf7&gt;] ? ret_from_kernel_thread+0x1b/0x28
 [&lt;c103a062&gt;] ? __init_kthread_worker+0x24/0x24
Code:  Bad EIP value.
EIP: [&lt;00000000&gt;] 0x0 SS:ESP 0068:e49b9e14
CR2: 0000000000000000
---[ end trace 942a6577c0abd725 ]---

Signed-off-by: Kuba Pawlak &lt;kubax.t.pawlak@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Bluetooth: Fix locking issue on SCO disconnection</title>
<updated>2015-10-25T20:06:39+00:00</updated>
<author>
<name>Kuba Pawlak</name>
<email>kubax.t.pawlak@intel.com</email>
</author>
<published>2015-10-05T16:44:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=435c513369768f5840cd57101e398bc450fd26de'/>
<id>435c513369768f5840cd57101e398bc450fd26de</id>
<content type='text'>
Thread handling SCO disconnection may get preempted in '__sco_sock_close'
after dropping a reference to hci_conn but before marking this as NULL
in associated struct sco_conn. When execution returs to this thread,
this connection will possibly be released, resulting in kernel crash

Lock connection before this point.

BUG: unable to handle kernel NULL pointer dereference at   (null)
IP: [&lt;fb770ab9&gt;] __sco_sock_close+0x194/0x1ff [bluetooth]
*pdpt = 0000000023da6001 *pde = 0000000000000000
Oops: 0002 [#1] PREEMPT SMP
Modules linked in: evdev ecb rfcomm(O) libcomposite usb2380 udc_core bnep(O) btusb(O) btbcm(O) cdc_acm btintel(O) bluetooth(O) arc4 uinput hid_multitouch usbhid iwlmvm(O) hide
Pid: 984, comm: bluetooth Tainted: G           O 3.8.0-115.1-plk-adaptation-byt-ivi-brd #1
EIP: 0060:[&lt;fb770ab9&gt;] EFLAGS: 00010282 CPU: 2
EIP is at __sco_sock_close+0x194/0x1ff [bluetooth]
EAX: 00000000 EBX: e49d7600 ECX: ef1ec3c2 EDX: 000000c3
ESI: e4c12000 EDI: 00000000 EBP: ef1edf5c ESP: ef1edf4c
 DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
CR0: 80050033 CR2: 00000000 CR3: 23da7000 CR4: 001007f0
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: ffff0ff0 DR7: 00000400
Process bluetooth (pid: 984, ti=ef1ec000 task=e47f2550 task.ti=ef1ec000)
Stack:
 e4c120d0 e49d7600 00000000 08421a40 ef1edf70 fb770b7a 00000002 e8a4cc80
 08421a40 ef1ec000 c12966b1 00000001 00000000 0000000b 084954c8 c1296b6c
 0000001b 00000002 0000001b 00000002 00000000 00000002 b2524880 00000046
Call Trace:
 [&lt;fb770b7a&gt;] ? sco_sock_shutdown+0x56/0x95 [bluetooth]
 [&lt;c12966b1&gt;] ? sys_shutdown+0x37/0x53
 [&lt;c1296b6c&gt;] ? sys_socketcall+0x12e/0x1be
 [&lt;c134ae7e&gt;] ? sysenter_do_call+0x12/0x26
 [&lt;c1340000&gt;] ? ip_vs_control_net_cleanup+0x46/0xb1
Code: e8 90 6b 8c c5 f6 05 72 5d 78 fb 04 74 17 8b 46 08 50 56 68 0a fd 77 fb 68 60 5d 78 fb e8 68 95 9e c5 83 c4 10 8b 83 fc 01 00 00 &lt;c7&gt; 00 00 00 00 00 eb 32 ba 68 00 00 0b
EIP: [&lt;fb770ab9&gt;] __sco_sock_close+0x194/0x1ff [bluetooth] SS:ESP 0068:ef1edf4c
CR2: 0000000000000000
---[ end trace 47fa2f55a9544e69 ]---

Signed-off-by: Kuba Pawlak &lt;kubax.t.pawlak@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Thread handling SCO disconnection may get preempted in '__sco_sock_close'
after dropping a reference to hci_conn but before marking this as NULL
in associated struct sco_conn. When execution returs to this thread,
this connection will possibly be released, resulting in kernel crash

Lock connection before this point.

BUG: unable to handle kernel NULL pointer dereference at   (null)
IP: [&lt;fb770ab9&gt;] __sco_sock_close+0x194/0x1ff [bluetooth]
*pdpt = 0000000023da6001 *pde = 0000000000000000
Oops: 0002 [#1] PREEMPT SMP
Modules linked in: evdev ecb rfcomm(O) libcomposite usb2380 udc_core bnep(O) btusb(O) btbcm(O) cdc_acm btintel(O) bluetooth(O) arc4 uinput hid_multitouch usbhid iwlmvm(O) hide
Pid: 984, comm: bluetooth Tainted: G           O 3.8.0-115.1-plk-adaptation-byt-ivi-brd #1
EIP: 0060:[&lt;fb770ab9&gt;] EFLAGS: 00010282 CPU: 2
EIP is at __sco_sock_close+0x194/0x1ff [bluetooth]
EAX: 00000000 EBX: e49d7600 ECX: ef1ec3c2 EDX: 000000c3
ESI: e4c12000 EDI: 00000000 EBP: ef1edf5c ESP: ef1edf4c
 DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
CR0: 80050033 CR2: 00000000 CR3: 23da7000 CR4: 001007f0
DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
DR6: ffff0ff0 DR7: 00000400
Process bluetooth (pid: 984, ti=ef1ec000 task=e47f2550 task.ti=ef1ec000)
Stack:
 e4c120d0 e49d7600 00000000 08421a40 ef1edf70 fb770b7a 00000002 e8a4cc80
 08421a40 ef1ec000 c12966b1 00000001 00000000 0000000b 084954c8 c1296b6c
 0000001b 00000002 0000001b 00000002 00000000 00000002 b2524880 00000046
Call Trace:
 [&lt;fb770b7a&gt;] ? sco_sock_shutdown+0x56/0x95 [bluetooth]
 [&lt;c12966b1&gt;] ? sys_shutdown+0x37/0x53
 [&lt;c1296b6c&gt;] ? sys_socketcall+0x12e/0x1be
 [&lt;c134ae7e&gt;] ? sysenter_do_call+0x12/0x26
 [&lt;c1340000&gt;] ? ip_vs_control_net_cleanup+0x46/0xb1
Code: e8 90 6b 8c c5 f6 05 72 5d 78 fb 04 74 17 8b 46 08 50 56 68 0a fd 77 fb 68 60 5d 78 fb e8 68 95 9e c5 83 c4 10 8b 83 fc 01 00 00 &lt;c7&gt; 00 00 00 00 00 eb 32 ba 68 00 00 0b
EIP: [&lt;fb770ab9&gt;] __sco_sock_close+0x194/0x1ff [bluetooth] SS:ESP 0068:ef1edf4c
CR2: 0000000000000000
---[ end trace 47fa2f55a9544e69 ]---

Signed-off-by: Kuba Pawlak &lt;kubax.t.pawlak@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Bluetooth: Fix crash on SCO disconnect</title>
<updated>2015-10-25T20:06:39+00:00</updated>
<author>
<name>Kuba Pawlak</name>
<email>kubax.t.pawlak@intel.com</email>
</author>
<published>2015-10-05T16:44:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=75e34f5cf69bd731d3b7375a786d4a15494fb8c6'/>
<id>75e34f5cf69bd731d3b7375a786d4a15494fb8c6</id>
<content type='text'>
When disconnecting audio from the phone's side, it may happen, that
a thread handling HCI message 'disconnection complete' will get preempted
in 'sco_conn_del' before calling 'sco_sock_kill', still holding a pointer
to struct sock sk. Interrupting thread started in 'sco_sock_shutdown' will
carry on releasing resources and will eventually release struct sock.
When execution goes back to first thread it will call sco_sock_kill using
now invalid pointer to already destroyed socket.

Fix is to grab a reference to the socket a release it after calling
'sco_sock_kill'.

[  166.358213] BUG: unable to handle kernel paging request at 7541203a
[  166.365228] IP: [&lt;fb6e8bfb&gt;] bt_sock_unlink+0x1a/0x38 [bluetooth]
[  166.372068] *pdpt = 0000000024b19001 *pde = 0000000000000000
[  166.378483] Oops: 0002 [#1] PREEMPT SMP
[  166.382871] Modules linked in: evdev ecb rfcomm(O) libcomposite usb2380 udc_core bnep(O) btusb(O) btbcm(O) btintel(O) cdc_acm bluetooth(O) arc4 uinput hid_multitouch iwlmvm(O) usbhid hide
[  166.424233] Pid: 338, comm: kworker/u:2H Tainted: G           O 3.8.0-115.1-plk-adaptation-byt-ivi-brd #1
[  166.435112] EIP: 0060:[&lt;fb6e8bfb&gt;] EFLAGS: 00010206 CPU: 0
[  166.441259] EIP is at bt_sock_unlink+0x1a/0x38 [bluetooth]
[  166.447382] EAX: 632e6563 EBX: e4bfc600 ECX: e466d4d3 EDX: 7541203a
[  166.454369] ESI: fb7278ac EDI: e4d52000 EBP: e4669e20 ESP: e4669e0c
[  166.461366]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[  166.467391] CR0: 8005003b CR2: 7541203a CR3: 24aba000 CR4: 001007f0
[  166.474387] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
[  166.481375] DR6: ffff0ff0 DR7: 00000400
[  166.485654] Process kworker/u:2H (pid: 338, ti=e4668000 task=e466e030 task.ti=e4668000)
[  166.494591] Stack:
[  166.496830]  e4bfc600 e4bfc600 fb715c28 e4717ee0 e4d52000 e4669e3c fb715cf3 e4bfc634
[  166.505518]  00000068 e4d52000 e4c32000 fb7277c0 e4669e6c fb6f2019 0000004a 00000216
[  166.514205]  e4660101 e4c32008 02000001 00000013 e4d52000 e4c32000 e3dc9240 00000005
[  166.522891] Call Trace:
[  166.525654]  [&lt;fb715c28&gt;] ? sco_sock_kill+0x73/0x9a [bluetooth]
[  166.532295]  [&lt;fb715cf3&gt;] ? sco_conn_del+0xa4/0xbf [bluetooth]
[  166.538836]  [&lt;fb6f2019&gt;] ? hci_disconn_complete_evt.clone.55+0x1bd/0x205 [bluetooth]
[  166.547609]  [&lt;fb6f73d3&gt;] ? hci_event_packet+0x297/0x223c [bluetooth]
[  166.554805]  [&lt;c10416da&gt;] ? dequeue_task+0xaf/0xb7
[  166.560154]  [&lt;c1041095&gt;] ? finish_task_switch+0x50/0x89
[  166.566086]  [&lt;c1349a2e&gt;] ? __schedule+0x638/0x6b8
[  166.571460]  [&lt;fb6eb906&gt;] ? hci_rx_work+0xb9/0x2b8 [bluetooth]
[  166.577975]  [&lt;c1035df9&gt;] ? process_one_work+0x157/0x21b
[  166.583933]  [&lt;fb6eb84d&gt;] ? hci_cmd_work+0xef/0xef [bluetooth]
[  166.590448]  [&lt;c1036217&gt;] ? worker_thread+0x16e/0x20a
[  166.596088]  [&lt;c10360a9&gt;] ? manage_workers+0x1cf/0x1cf
[  166.601826]  [&lt;c103a0ef&gt;] ? kthread+0x8d/0x92
[  166.606691]  [&lt;c134adf7&gt;] ? ret_from_kernel_thread+0x1b/0x28
[  166.613010]  [&lt;c103a062&gt;] ? __init_kthread_worker+0x24/0x24
[  166.619230] Code: 85 63 ff ff ff 31 db 8d 65 f4 89 d8 5b 5e 5f 5d c3 56 8d 70 04 53 89 f0 89 d3 e8 7e 17 c6 c5 8b 53 28 85 d2 74 1a 8b 43 24 85 c0 &lt;89&gt; 02 74 03 89 50 04 c7 43 28 00 00 00
[  166.640501] EIP: [&lt;fb6e8bfb&gt;] bt_sock_unlink+0x1a/0x38 [bluetooth] SS:ESP 0068:e4669e0c
[  166.649474] CR2: 000000007541203a
[  166.653420] ---[ end trace 0181ff2c9e42d51e ]---
[  166.658609] note: kworker/u:2H[338] exited with preempt_count 1

Signed-off-by: Kuba Pawlak &lt;kubax.t.pawlak@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When disconnecting audio from the phone's side, it may happen, that
a thread handling HCI message 'disconnection complete' will get preempted
in 'sco_conn_del' before calling 'sco_sock_kill', still holding a pointer
to struct sock sk. Interrupting thread started in 'sco_sock_shutdown' will
carry on releasing resources and will eventually release struct sock.
When execution goes back to first thread it will call sco_sock_kill using
now invalid pointer to already destroyed socket.

Fix is to grab a reference to the socket a release it after calling
'sco_sock_kill'.

[  166.358213] BUG: unable to handle kernel paging request at 7541203a
[  166.365228] IP: [&lt;fb6e8bfb&gt;] bt_sock_unlink+0x1a/0x38 [bluetooth]
[  166.372068] *pdpt = 0000000024b19001 *pde = 0000000000000000
[  166.378483] Oops: 0002 [#1] PREEMPT SMP
[  166.382871] Modules linked in: evdev ecb rfcomm(O) libcomposite usb2380 udc_core bnep(O) btusb(O) btbcm(O) btintel(O) cdc_acm bluetooth(O) arc4 uinput hid_multitouch iwlmvm(O) usbhid hide
[  166.424233] Pid: 338, comm: kworker/u:2H Tainted: G           O 3.8.0-115.1-plk-adaptation-byt-ivi-brd #1
[  166.435112] EIP: 0060:[&lt;fb6e8bfb&gt;] EFLAGS: 00010206 CPU: 0
[  166.441259] EIP is at bt_sock_unlink+0x1a/0x38 [bluetooth]
[  166.447382] EAX: 632e6563 EBX: e4bfc600 ECX: e466d4d3 EDX: 7541203a
[  166.454369] ESI: fb7278ac EDI: e4d52000 EBP: e4669e20 ESP: e4669e0c
[  166.461366]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[  166.467391] CR0: 8005003b CR2: 7541203a CR3: 24aba000 CR4: 001007f0
[  166.474387] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
[  166.481375] DR6: ffff0ff0 DR7: 00000400
[  166.485654] Process kworker/u:2H (pid: 338, ti=e4668000 task=e466e030 task.ti=e4668000)
[  166.494591] Stack:
[  166.496830]  e4bfc600 e4bfc600 fb715c28 e4717ee0 e4d52000 e4669e3c fb715cf3 e4bfc634
[  166.505518]  00000068 e4d52000 e4c32000 fb7277c0 e4669e6c fb6f2019 0000004a 00000216
[  166.514205]  e4660101 e4c32008 02000001 00000013 e4d52000 e4c32000 e3dc9240 00000005
[  166.522891] Call Trace:
[  166.525654]  [&lt;fb715c28&gt;] ? sco_sock_kill+0x73/0x9a [bluetooth]
[  166.532295]  [&lt;fb715cf3&gt;] ? sco_conn_del+0xa4/0xbf [bluetooth]
[  166.538836]  [&lt;fb6f2019&gt;] ? hci_disconn_complete_evt.clone.55+0x1bd/0x205 [bluetooth]
[  166.547609]  [&lt;fb6f73d3&gt;] ? hci_event_packet+0x297/0x223c [bluetooth]
[  166.554805]  [&lt;c10416da&gt;] ? dequeue_task+0xaf/0xb7
[  166.560154]  [&lt;c1041095&gt;] ? finish_task_switch+0x50/0x89
[  166.566086]  [&lt;c1349a2e&gt;] ? __schedule+0x638/0x6b8
[  166.571460]  [&lt;fb6eb906&gt;] ? hci_rx_work+0xb9/0x2b8 [bluetooth]
[  166.577975]  [&lt;c1035df9&gt;] ? process_one_work+0x157/0x21b
[  166.583933]  [&lt;fb6eb84d&gt;] ? hci_cmd_work+0xef/0xef [bluetooth]
[  166.590448]  [&lt;c1036217&gt;] ? worker_thread+0x16e/0x20a
[  166.596088]  [&lt;c10360a9&gt;] ? manage_workers+0x1cf/0x1cf
[  166.601826]  [&lt;c103a0ef&gt;] ? kthread+0x8d/0x92
[  166.606691]  [&lt;c134adf7&gt;] ? ret_from_kernel_thread+0x1b/0x28
[  166.613010]  [&lt;c103a062&gt;] ? __init_kthread_worker+0x24/0x24
[  166.619230] Code: 85 63 ff ff ff 31 db 8d 65 f4 89 d8 5b 5e 5f 5d c3 56 8d 70 04 53 89 f0 89 d3 e8 7e 17 c6 c5 8b 53 28 85 d2 74 1a 8b 43 24 85 c0 &lt;89&gt; 02 74 03 89 50 04 c7 43 28 00 00 00
[  166.640501] EIP: [&lt;fb6e8bfb&gt;] bt_sock_unlink+0x1a/0x38 [bluetooth] SS:ESP 0068:e4669e0c
[  166.649474] CR2: 000000007541203a
[  166.653420] ---[ end trace 0181ff2c9e42d51e ]---
[  166.658609] note: kworker/u:2H[338] exited with preempt_count 1

Signed-off-by: Kuba Pawlak &lt;kubax.t.pawlak@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Bluetooth: Make the function sco_conn_del have a return type of void</title>
<updated>2015-08-28T19:00:37+00:00</updated>
<author>
<name>Nicholas Krause</name>
<email>xerofoify@gmail.com</email>
</author>
<published>2015-08-19T01:23:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=df945360ce07ca592464e44fdd2ce61ee1536e1e'/>
<id>df945360ce07ca592464e44fdd2ce61ee1536e1e</id>
<content type='text'>
This makes the function sco_conn_del have a return type of void now
due to this function always running successfully and thus never
needing to signal its caller when a non recoverable internal failure
occurs by returning a error code to its respective caller.

Signed-off-by: Nicholas Krause &lt;xerofoify@gmail.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This makes the function sco_conn_del have a return type of void now
due to this function always running successfully and thus never
needing to signal its caller when a non recoverable internal failure
occurs by returning a error code to its respective caller.

Signed-off-by: Nicholas Krause &lt;xerofoify@gmail.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Bluetooth: Make l2cap_recv_acldata() and sco_recv_scodata() return void</title>
<updated>2015-06-09T11:41:36+00:00</updated>
<author>
<name>Arron Wang</name>
<email>arron.wang@intel.com</email>
</author>
<published>2015-06-09T09:47:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9b4c33364eb653a824c58e637c73caa6feb9879c'/>
<id>9b4c33364eb653a824c58e637c73caa6feb9879c</id>
<content type='text'>
The return value of l2cap_recv_acldata() and sco_recv_scodata()
are not used, then change it to return void

Signed-off-by: Arron Wang &lt;arron.wang@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The return value of l2cap_recv_acldata() and sco_recv_scodata()
are not used, then change it to return void

Signed-off-by: Arron Wang &lt;arron.wang@intel.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: Pass kern from net_proto_family.create to sk_alloc</title>
<updated>2015-05-11T14:50:17+00:00</updated>
<author>
<name>Eric W. Biederman</name>
<email>ebiederm@xmission.com</email>
</author>
<published>2015-05-09T02:09:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=11aa9c28b4209242a9de0a661a7b3405adb568a0'/>
<id>11aa9c28b4209242a9de0a661a7b3405adb568a0</id>
<content type='text'>
In preparation for changing how struct net is refcounted
on kernel sockets pass the knowledge that we are creating
a kernel socket from sock_create_kern through to sk_alloc.

Signed-off-by: "Eric W. Biederman" &lt;ebiederm@xmission.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In preparation for changing how struct net is refcounted
on kernel sockets pass the knowledge that we are creating
a kernel socket from sock_create_kern through to sk_alloc.

Signed-off-by: "Eric W. Biederman" &lt;ebiederm@xmission.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
</feed>
