<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/net/mac80211/key.c, branch v3.0.98</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>Revert "mac80211: Skip tailroom reservation for full HW-crypto devices"</title>
<updated>2011-06-06T19:23:53+00:00</updated>
<author>
<name>John W. Linville</name>
<email>linville@tuxdriver.com</email>
</author>
<published>2011-06-06T18:35:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=ab6a44ce1da48d35fe7ec95fa068aa617bd7e8dd'/>
<id>ab6a44ce1da48d35fe7ec95fa068aa617bd7e8dd</id>
<content type='text'>
This reverts commit aac6af5534fade2b18682a0b9efad1a6c04c34c6.

Conflicts:

	net/mac80211/key.c

That commit has a race that causes a warning, as documented in the thread
here:

	http://marc.info/?l=linux-wireless&amp;m=130717684914101&amp;w=2

Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit aac6af5534fade2b18682a0b9efad1a6c04c34c6.

Conflicts:

	net/mac80211/key.c

That commit has a race that causes a warning, as documented in the thread
here:

	http://marc.info/?l=linux-wireless&amp;m=130717684914101&amp;w=2

Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: sparse RCU annotations</title>
<updated>2011-05-16T18:10:41+00:00</updated>
<author>
<name>Johannes Berg</name>
<email>johannes.berg@intel.com</email>
</author>
<published>2011-05-13T12:15:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=40b275b69ee660274b77fb612b0db31fd282fc3f'/>
<id>40b275b69ee660274b77fb612b0db31fd282fc3f</id>
<content type='text'>
This adds sparse RCU annotations to most of
mac80211, only the mesh code remains to be
done.

Due the the previous patches, the annotations
are pretty simple. The only thing that this
actually changes is removing the RCU usage of
key-&gt;sta in debugfs since this pointer isn't
actually an RCU-managed pointer (it only has
a single assignment done before the key even
goes live). As that is otherwise harmless, I
decided to make it part of this patch.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This adds sparse RCU annotations to most of
mac80211, only the mesh code remains to be
done.

Due the the previous patches, the annotations
are pretty simple. The only thing that this
actually changes is removing the RCU usage of
key-&gt;sta in debugfs since this pointer isn't
actually an RCU-managed pointer (it only has
a single assignment done before the key even
goes live). As that is otherwise harmless, I
decided to make it part of this patch.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: make key locking clearer</title>
<updated>2011-05-12T18:10:53+00:00</updated>
<author>
<name>Johannes Berg</name>
<email>johannes.berg@intel.com</email>
</author>
<published>2011-05-12T12:31:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=5c0c36412b2dc6b1e243c7e9115306fe286583b7'/>
<id>5c0c36412b2dc6b1e243c7e9115306fe286583b7</id>
<content type='text'>
The code in ieee80211_del_key() doesn't acquire the
key_mtx properly when it dereferences the keys. It
turns out that isn't actually necessary since the
key_mtx itself seems to be redundant since all key
manipulations are done under the RTNL, but as long
as we have the key_mtx we should use it the right
way too.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The code in ieee80211_del_key() doesn't acquire the
key_mtx properly when it dereferences the keys. It
turns out that isn't actually necessary since the
key_mtx itself seems to be redundant since all key
manipulations are done under the RTNL, but as long
as we have the key_mtx we should use it the right
way too.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: Fix a warning due to skipping tailroom reservation for IV</title>
<updated>2011-05-05T14:57:23+00:00</updated>
<author>
<name>Mohammed Shafi Shajakhan</name>
<email>mshajakhan@atheros.com</email>
</author>
<published>2011-05-05T05:29:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=eaef6a93bd52a2cc47b9fce201310010707afdb4'/>
<id>eaef6a93bd52a2cc47b9fce201310010707afdb4</id>
<content type='text'>
The devices that require IV generation in software need tailroom
reservation  for ICVs used in TKIP or WEP encryptions.
Currently, decision to skip the tailroom reservation in the tx
path was taken only on whether driver wants MMIC to be generated
in software or not. Following patch appends IV generation check for
such decisions and fixes the following warning.

WARNING: at net/mac80211/wep.c:101 ieee80211_wep_add_iv+0x56/0xf3()
Hardware name: 64756D6
Modules linked in: ath9k ath9k_common ath9k_hw
Pid: 0, comm: swapper Tainted: G        W   2.6.39-rc5-wl
 Call Trace:
[&lt;c102fd29&gt;] warn_slowpath_common+0x65/0x7a
[&lt;c1465c4e&gt;] ? ieee80211_wep_add_iv+0x56/0xf3
[&lt;c102fd4d&gt;] warn_slowpath_null+0xf/0x13
[&lt;c1465c4e&gt;] ieee80211_wep_add_iv+0x56/0xf3
[&lt;c1466007&gt;] ieee80211_crypto_wep_encrypt+0x63/0x88
[&lt;c1478bf3&gt;] ieee80211_tx_h_encrypt+0x2f/0x63
[&lt;c1478cba&gt;] invoke_tx_handlers+0x93/0xe1
[&lt;c1478eda&gt;] ieee80211_tx+0x4b/0x6d
[&lt;c147907c&gt;] ieee80211_xmit+0x180/0x188
[&lt;c147779d&gt;] ? ieee80211_skb_resize+0x95/0xd9
[&lt;c1479edf&gt;] ieee80211_subif_start_xmit+0x64f/0x668
[&lt;c13956fc&gt;] dev_hard_start_xmit+0x368/0x48c
[&lt;c13a8bd6&gt;] sch_direct_xmit+0x4d/0x101
[&lt;c1395ae1&gt;] dev_queue_xmit+0x2c1/0x43f
[&lt;c13a74a2&gt;] ? eth_header+0x1e/0x90
[&lt;c13a7400&gt;] ? eth_type_trans+0x91/0xc2
[&lt;c13a7484&gt;] ? eth_rebuild_header+0x53/0x53
[&lt;c139f079&gt;] neigh_resolve_output+0x223/0x27e
[&lt;c13c6b23&gt;] ip_finish_output2+0x1d4/0x1fe
[&lt;c13c6bc6&gt;] ip_finish_output+0x79/0x7d
[&lt;c13c6cbe&gt;] T.1075+0x43/0x48
[&lt;c13c6e6e&gt;] ip_output+0x75/0x7b
[&lt;c13c4970&gt;] dst_output+0xc/0xe
[&lt;c13c62c9&gt;] ip_local_out+0x17/0x1a
[&lt;c13c67bb&gt;] ip_queue_xmit+0x2aa/0x2f8
[&lt;c138b742&gt;] ? sk_setup_caps+0x21/0x92
[&lt;c13d95ea&gt;] ? __tcp_v4_send_check+0x7e/0xb7
[&lt;c13d5d2e&gt;] tcp_transmit_skb+0x6a1/0x6d7
[&lt;c13d533b&gt;] ? tcp_established_options+0x20/0x8b
[&lt;c13d6f28&gt;] tcp_retransmit_skb+0x43a/0x527
[&lt;c13d8d6d&gt;] tcp_retransmit_timer+0x32e/0x45d
[&lt;c13d8f23&gt;] tcp_write_timer+0x87/0x16c
[&lt;c103a030&gt;] run_timer_softirq+0x156/0x1f9
[&lt;c13d8e9c&gt;] ? tcp_retransmit_timer+0x45d/0x45d
[&lt;c1034d65&gt;] __do_softirq+0x97/0x14a
[&lt;c1034cce&gt;] ? irq_enter+0x4d/0x4d

Cc: Yogesh Powar &lt;yogeshp@marvell.com&gt;
Reported-by: Fabio Rossi &lt;rossi.f@inwind.it&gt;
Tested-by: Fabio Rossi &lt;rossi.f@inwind.it&gt;
Signed-off-by: Mohammed Shafi Shajakhan &lt;mshajakhan@atheros.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The devices that require IV generation in software need tailroom
reservation  for ICVs used in TKIP or WEP encryptions.
Currently, decision to skip the tailroom reservation in the tx
path was taken only on whether driver wants MMIC to be generated
in software or not. Following patch appends IV generation check for
such decisions and fixes the following warning.

WARNING: at net/mac80211/wep.c:101 ieee80211_wep_add_iv+0x56/0xf3()
Hardware name: 64756D6
Modules linked in: ath9k ath9k_common ath9k_hw
Pid: 0, comm: swapper Tainted: G        W   2.6.39-rc5-wl
 Call Trace:
[&lt;c102fd29&gt;] warn_slowpath_common+0x65/0x7a
[&lt;c1465c4e&gt;] ? ieee80211_wep_add_iv+0x56/0xf3
[&lt;c102fd4d&gt;] warn_slowpath_null+0xf/0x13
[&lt;c1465c4e&gt;] ieee80211_wep_add_iv+0x56/0xf3
[&lt;c1466007&gt;] ieee80211_crypto_wep_encrypt+0x63/0x88
[&lt;c1478bf3&gt;] ieee80211_tx_h_encrypt+0x2f/0x63
[&lt;c1478cba&gt;] invoke_tx_handlers+0x93/0xe1
[&lt;c1478eda&gt;] ieee80211_tx+0x4b/0x6d
[&lt;c147907c&gt;] ieee80211_xmit+0x180/0x188
[&lt;c147779d&gt;] ? ieee80211_skb_resize+0x95/0xd9
[&lt;c1479edf&gt;] ieee80211_subif_start_xmit+0x64f/0x668
[&lt;c13956fc&gt;] dev_hard_start_xmit+0x368/0x48c
[&lt;c13a8bd6&gt;] sch_direct_xmit+0x4d/0x101
[&lt;c1395ae1&gt;] dev_queue_xmit+0x2c1/0x43f
[&lt;c13a74a2&gt;] ? eth_header+0x1e/0x90
[&lt;c13a7400&gt;] ? eth_type_trans+0x91/0xc2
[&lt;c13a7484&gt;] ? eth_rebuild_header+0x53/0x53
[&lt;c139f079&gt;] neigh_resolve_output+0x223/0x27e
[&lt;c13c6b23&gt;] ip_finish_output2+0x1d4/0x1fe
[&lt;c13c6bc6&gt;] ip_finish_output+0x79/0x7d
[&lt;c13c6cbe&gt;] T.1075+0x43/0x48
[&lt;c13c6e6e&gt;] ip_output+0x75/0x7b
[&lt;c13c4970&gt;] dst_output+0xc/0xe
[&lt;c13c62c9&gt;] ip_local_out+0x17/0x1a
[&lt;c13c67bb&gt;] ip_queue_xmit+0x2aa/0x2f8
[&lt;c138b742&gt;] ? sk_setup_caps+0x21/0x92
[&lt;c13d95ea&gt;] ? __tcp_v4_send_check+0x7e/0xb7
[&lt;c13d5d2e&gt;] tcp_transmit_skb+0x6a1/0x6d7
[&lt;c13d533b&gt;] ? tcp_established_options+0x20/0x8b
[&lt;c13d6f28&gt;] tcp_retransmit_skb+0x43a/0x527
[&lt;c13d8d6d&gt;] tcp_retransmit_timer+0x32e/0x45d
[&lt;c13d8f23&gt;] tcp_write_timer+0x87/0x16c
[&lt;c103a030&gt;] run_timer_softirq+0x156/0x1f9
[&lt;c13d8e9c&gt;] ? tcp_retransmit_timer+0x45d/0x45d
[&lt;c1034d65&gt;] __do_softirq+0x97/0x14a
[&lt;c1034cce&gt;] ? irq_enter+0x4d/0x4d

Cc: Yogesh Powar &lt;yogeshp@marvell.com&gt;
Reported-by: Fabio Rossi &lt;rossi.f@inwind.it&gt;
Tested-by: Fabio Rossi &lt;rossi.f@inwind.it&gt;
Signed-off-by: Mohammed Shafi Shajakhan &lt;mshajakhan@atheros.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: Skip tailroom reservation for full HW-crypto devices</title>
<updated>2011-04-28T18:53:21+00:00</updated>
<author>
<name>Yogesh Ashok Powar</name>
<email>yogeshp@marvell.com</email>
</author>
<published>2011-04-27T13:10:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=aac6af5534fade2b18682a0b9efad1a6c04c34c6'/>
<id>aac6af5534fade2b18682a0b9efad1a6c04c34c6</id>
<content type='text'>
In xmit path, devices that do full hardware crypto (including
TKIP MMIC) need no tailroom. For such devices, tailroom
reservation can be skipped if all the keys are programmed into
the hardware (i.e software crypto is not used for any of the
keys) and none of the keys wants software to generate Michael
MIC.

Signed-off-by: Yogesh Ashok Powar &lt;yogeshp@marvell.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In xmit path, devices that do full hardware crypto (including
TKIP MMIC) need no tailroom. For such devices, tailroom
reservation can be skipped if all the keys are programmed into
the hardware (i.e software crypto is not used for any of the
keys) and none of the keys wants software to generate Michael
MIC.

Signed-off-by: Yogesh Ashok Powar &lt;yogeshp@marvell.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: fix possible NULL pointer dereference</title>
<updated>2011-03-28T19:42:02+00:00</updated>
<author>
<name>Mariusz Kozlowski</name>
<email>mk@lab.zgora.pl</email>
</author>
<published>2011-03-26T17:58:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=67aa030c0dff6095128bcb4e8043b48360f32331'/>
<id>67aa030c0dff6095128bcb4e8043b48360f32331</id>
<content type='text'>
This patch moves 'key' dereference after BUG_ON(!key) so that when key is NULL
we will see proper trace instead of oops.

Signed-off-by: Mariusz Kozlowski &lt;mk@lab.zgora.pl&gt;
Acked-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch moves 'key' dereference after BUG_ON(!key) so that when key is NULL
we will see proper trace instead of oops.

Signed-off-by: Mariusz Kozlowski &lt;mk@lab.zgora.pl&gt;
Acked-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: fix NULL pointer dereference in ieee80211_key_alloc()</title>
<updated>2011-03-28T19:42:02+00:00</updated>
<author>
<name>Petr Štetiar</name>
<email>ynezz@true.cz</email>
</author>
<published>2011-03-27T11:31:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=1f951a7f8ba05192291f781ef99a892697e47d62'/>
<id>1f951a7f8ba05192291f781ef99a892697e47d62</id>
<content type='text'>
The ieee80211_key struct can be kfree()d several times in the function, for
example if some of the key setup functions fails beforehand, but there's no
check if the struct is still valid before we call memcpy() and INIT_LIST_HEAD()
on it.  In some cases (like it was in my case), if there's missing aes-generic
module it could lead to the following kernel OOPS:

	Unable to handle kernel NULL pointer dereference at virtual address 0000018c
	....
	PC is at memcpy+0x80/0x29c
	...
	Backtrace:
	[&lt;bf11c5e4&gt;] (ieee80211_key_alloc+0x0/0x234 [mac80211]) from [&lt;bf1148b4&gt;] (ieee80211_add_key+0x70/0x12c [mac80211])
	[&lt;bf114844&gt;] (ieee80211_add_key+0x0/0x12c [mac80211]) from [&lt;bf070cc0&gt;] (__cfg80211_set_encryption+0x2a8/0x464 [cfg80211])

Signed-off-by: Petr Štetiar &lt;ynezz@true.cz&gt;
Reviewed-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The ieee80211_key struct can be kfree()d several times in the function, for
example if some of the key setup functions fails beforehand, but there's no
check if the struct is still valid before we call memcpy() and INIT_LIST_HEAD()
on it.  In some cases (like it was in my case), if there's missing aes-generic
module it could lead to the following kernel OOPS:

	Unable to handle kernel NULL pointer dereference at virtual address 0000018c
	....
	PC is at memcpy+0x80/0x29c
	...
	Backtrace:
	[&lt;bf11c5e4&gt;] (ieee80211_key_alloc+0x0/0x234 [mac80211]) from [&lt;bf1148b4&gt;] (ieee80211_add_key+0x70/0x12c [mac80211])
	[&lt;bf114844&gt;] (ieee80211_add_key+0x0/0x12c [mac80211]) from [&lt;bf070cc0&gt;] (__cfg80211_set_encryption+0x2a8/0x464 [cfg80211])

Signed-off-by: Petr Štetiar &lt;ynezz@true.cz&gt;
Reviewed-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6</title>
<updated>2011-01-05T19:35:41+00:00</updated>
<author>
<name>John W. Linville</name>
<email>linville@tuxdriver.com</email>
</author>
<published>2011-01-05T19:35:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=6303710d7aa62bfb154cd13ab5ab12cfa8baaf91'/>
<id>6303710d7aa62bfb154cd13ab5ab12cfa8baaf91</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: fix some key comments and code</title>
<updated>2011-01-04T19:46:14+00:00</updated>
<author>
<name>Johannes Berg</name>
<email>johannes.berg@intel.com</email>
</author>
<published>2011-01-03T18:51:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=b5c34f662a3519d34f9634a14d8de638fdbe0ca3'/>
<id>b5c34f662a3519d34f9634a14d8de638fdbe0ca3</id>
<content type='text'>
The key documentation is slightly out of date, fix
that. Also, the list entry in the key struct is no
longer used that way, so list_del_init() isn't
necessary any more there.

Finally, ieee80211_key_link() is no longer invoked
under RCU read lock, but rather with an appropriate
station lock held.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The key documentation is slightly out of date, fix
that. Also, the list entry in the key struct is no
longer used that way, so list_del_init() isn't
necessary any more there.

Finally, ieee80211_key_link() is no longer invoked
under RCU read lock, but rather with an appropriate
station lock held.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: add missing synchronize_rcu</title>
<updated>2011-01-04T19:17:23+00:00</updated>
<author>
<name>Johannes Berg</name>
<email>johannes.berg@intel.com</email>
</author>
<published>2011-01-03T18:42:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d2460f4b2fa6dbdeec800414f9cf5b1fc8b71197'/>
<id>d2460f4b2fa6dbdeec800414f9cf5b1fc8b71197</id>
<content type='text'>
commit ad0e2b5a00dbec303e4682b403bb6703d11dcdb2
Author: Johannes Berg &lt;johannes.berg@intel.com&gt;
Date:   Tue Jun 1 10:19:19 2010 +0200

    mac80211: simplify key locking

removed the synchronization against RCU and thus
opened a race window where we can use a key for
TX while it is already freed. Put a synchronisation
into the right place to close that window.

Reported-by: Jussi Kivilinna &lt;jussi.kivilinna@mbnet.fi&gt;
Cc: stable@kernel.org [2.6.36+]
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit ad0e2b5a00dbec303e4682b403bb6703d11dcdb2
Author: Johannes Berg &lt;johannes.berg@intel.com&gt;
Date:   Tue Jun 1 10:19:19 2010 +0200

    mac80211: simplify key locking

removed the synchronization against RCU and thus
opened a race window where we can use a key for
TX while it is already freed. Put a synchronisation
into the right place to close that window.

Reported-by: Jussi Kivilinna &lt;jussi.kivilinna@mbnet.fi&gt;
Cc: stable@kernel.org [2.6.36+]
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
