* Re: [PATCH net-next] net/mlx4_en: remove redundant code
From: Amir Vadai @ 2013-01-20 14:48 UTC (permalink / raw)
To: Eric Dumazet
Cc: David S. Miller, netdev, Or Gerlitz, Yevgeny Petrilin,
Eugenia Emantayev
In-Reply-To: <1358436367.29723.49.camel@edumazet-glaptop>
On 17/01/2013 17:26, Eric Dumazet wrote:
> From: Eric Dumazet <edumazet@google.com>
>
> remove redundant code from build_inline_wqe()
>
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> ---
> Amir, reviewing this driver, it looks like following could be done,
> could you test the patch for me ?
>
> Thanks
>
> diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
> index 2b799f4..16af338 100644
> --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
> +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
> @@ -515,10 +515,6 @@ static void build_inline_wqe(struct mlx4_en_tx_desc *tx_desc, struct sk_buff *sk
> wmb();
> inl->byte_count = cpu_to_be32(1 << 31 | (skb->len - spc));
> }
> - tx_desc->ctrl.vlan_tag = cpu_to_be16(*vlan_tag);
> - tx_desc->ctrl.ins_vlan = MLX4_WQE_CTRL_INS_VLAN *
> - (!!vlan_tx_tag_present(skb));
> - tx_desc->ctrl.fence_size = (real_size / 16) & 0x3f;
> }
>
> u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb)
>
>
Acked-By: Amir Vadai <amirv@mellanox.com>
^ permalink raw reply
* Re: [PATCH] firewire net: Ensure checksumming in upper layer.
From: Stephan Gatzka @ 2013-01-20 14:46 UTC (permalink / raw)
To: YOSHIFUJI Hideaki; +Cc: Stefan Richter, linux1394-devel, netdev, linux-kernel
In-Reply-To: <50FBC8D5.50205@linux-ipv6.org>
>> Indeed neither the device nor the lower drivers check protocol checksums.
>> But the CRCs of the encapsulating 1394 packets are checked in hardware.
>> Shall protocol checksums be verified regardless?
>
> Yes, because packets may come from off-link source.
>
Hm, I can't see any off-link packets coming from
fwnet_finish_incoming_packet()
So I wont verify checksums in the driver.
Stephan
^ permalink raw reply
* Re: IPsec AH use of ahash
From: Mike Galbraith @ 2013-01-20 14:11 UTC (permalink / raw)
To: Tom St Denis
Cc: Eric Dumazet, Waskiewicz Jr, Peter P, David Miller,
steffen klassert, herbert, linux-kernel, netdev, Michal Kubecek
In-Reply-To: <1331637866.93068.1358686536347.JavaMail.root@elliptictech.com>
On Sun, 2013-01-20 at 07:55 -0500, Tom St Denis wrote:
>
> ----- Original Message -----
> > From: "Mike Galbraith" <bitbucket@online.de>
> > To: "Tom St Denis" <tstdenis@elliptictech.com>
> > Cc: "Eric Dumazet" <erdnetdev@gmail.com>, "Waskiewicz Jr, Peter P" <peter.p.waskiewicz.jr@intel.com>, "David Miller"
> > <davem@davemloft.net>, "steffen klassert" <steffen.klassert@secunet.com>, herbert@gondor.apana.org.au,
> > linux-kernel@vger.kernel.org, netdev@vger.kernel.org, "Michal Kubecek" <mkubecek@suse.cz>
> > Sent: Sunday, 20 January, 2013 12:06:21 AM
> > Subject: Re: IPsec AH use of ahash
> >
> > On Sat, 2013-01-19 at 05:30 -0500, Tom St Denis wrote:
> >
> > > For those of us who do Kernel development during business hours
> > > it's
> > > hard to justify the work when the path to mainline is convoluted
> > > and
> > > landmined.
> >
> > Sounds as though any patches you submit land on your dinner plate
> > just
> > like potatoes. Hand the cook a pot of half peeled potatoes, he/she
> > may
> > say try again. The result of a little extra effort is tastier taters
> > for everybody feasting at the common table.. including you.
>
> No, in reality what happened is the chef made potatos [incorrectly]
> got busy and asked others to help out and make more potatos. Then
> came back and said ...
Bottom line: either you grit your teeth and try again or you don't.
Calling the chef a big meanie doesn't put taters on dinner plates.
-Mike
^ permalink raw reply
* Re: IPsec AH use of ahash
From: Tom St Denis @ 2013-01-20 13:54 UTC (permalink / raw)
To: Alexander Holler
Cc: Borislav Petkov, Eric Dumazet, Waskiewicz Jr, Peter P,
David Miller, steffen klassert, herbert, linux-kernel, netdev,
Michal Kubecek, Mike Galbraith
In-Reply-To: <50FBF25C.4030604@ahsoftware.de>
----- Original Message -----
> From: "Alexander Holler" <holler@ahsoftware.de>
> To: "Tom St Denis" <tstdenis@elliptictech.com>
> Cc: "Borislav Petkov" <bp@alien8.de>, "Eric Dumazet" <erdnetdev@gmail.com>, "Waskiewicz Jr, Peter P"
> <peter.p.waskiewicz.jr@intel.com>, "David Miller" <davem@davemloft.net>, "steffen klassert"
> <steffen.klassert@secunet.com>, herbert@gondor.apana.org.au, linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
> "Michal Kubecek" <mkubecek@suse.cz>, "Mike Galbraith" <bitbucket@online.de>
> Sent: Sunday, 20 January, 2013 8:34:20 AM
> Subject: Re: IPsec AH use of ahash
>
> Am 20.01.2013 13:56, schrieb Tom St Denis:
>
> > You should really try running checkpatch.pl over code that's
> > already in the kernel before you call out new contributors on it.
> >
> > How is this supposed to not be adversarial when I can't even use
> > the Kernel source itself as a reference?
>
> In case of the kernel the chicken and egg problem can be answered
> without any questions, most source existed before checkpatch.pl
> (evolved
> to the current state).
We clearly have different interpretations of the word "maintainer" then... If they're not maintaining the code then are they really the maintainers of it?
Point is I copied accepted kernel code and was rejected because of "errors" that are in existing kernel code. Similarly if I did the upgrade to AH to use AEAD I suspect it would be rejected for the same reason.
Tom
^ permalink raw reply
* Re: IPsec AH use of ahash
From: Alexander Holler @ 2013-01-20 13:34 UTC (permalink / raw)
To: Tom St Denis
Cc: Borislav Petkov, Eric Dumazet, Waskiewicz Jr, Peter P,
David Miller, steffen klassert, herbert, linux-kernel, netdev,
Michal Kubecek, Mike Galbraith
In-Reply-To: <313650836.93071.1358686587647.JavaMail.root@elliptictech.com>
Am 20.01.2013 13:56, schrieb Tom St Denis:
> You should really try running checkpatch.pl over code that's already in the kernel before you call out new contributors on it.
>
> How is this supposed to not be adversarial when I can't even use the Kernel source itself as a reference?
In case of the kernel the chicken and egg problem can be answered
without any questions, most source existed before checkpatch.pl (evolved
to the current state).
Regards,
Alexander
^ permalink raw reply
* Re: surprising memory request
From: Ben Hutchings @ 2013-01-20 13:06 UTC (permalink / raw)
To: David Woodhouse; +Cc: Eric Dumazet, Dirk Hohndel, Jason Wang, netdev
In-Reply-To: <1358531946.2397.265.camel@shinybook.infradead.org>
On Fri, 2013-01-18 at 17:59 +0000, David Woodhouse wrote:
> On Fri, 2013-01-18 at 09:46 -0800, Eric Dumazet wrote:
> >
> > #define MAX_TAP_QUEUES 1024
> >
> > Thats crazy if your machine has say 8 cpus.
>
> Even crazier if your userspace is never going to *use* MQ. Can't we
> default to one queue unless userspace explicitly requests more?
I don't know about tun's internal TX queue structures but the core TX
queue structures immediately follow struct net_device and you have to
set a maximum when allocating it.
Ben.
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply
* Re: IPsec AH use of ahash
From: Tom St Denis @ 2013-01-20 12:56 UTC (permalink / raw)
To: Borislav Petkov
Cc: Eric Dumazet, Waskiewicz Jr, Peter P, David Miller,
steffen klassert, herbert, linux-kernel, netdev, Michal Kubecek,
Mike Galbraith
In-Reply-To: <20130120103132.GA16800@pd.tnic>
----- Original Message -----
> From: "Borislav Petkov" <bp@alien8.de>
> To: "Mike Galbraith" <bitbucket@online.de>
> Cc: "Tom St Denis" <tstdenis@elliptictech.com>, "Eric Dumazet" <erdnetdev@gmail.com>, "Waskiewicz Jr, Peter P"
> <peter.p.waskiewicz.jr@intel.com>, "David Miller" <davem@davemloft.net>, "steffen klassert"
> <steffen.klassert@secunet.com>, herbert@gondor.apana.org.au, linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
> "Michal Kubecek" <mkubecek@suse.cz>
> Sent: Sunday, 20 January, 2013 5:31:32 AM
> Subject: Re: IPsec AH use of ahash
>
> On Sun, Jan 20, 2013 at 06:06:21AM +0100, Mike Galbraith wrote:
> > Sounds as though any patches you submit land on your dinner plate
> > just
> > like potatoes. Hand the cook a pot of half peeled potatoes, he/she
> > may
> > say try again.
>
> And how he/she would say it! I've seen serious fights spring up from
> half-peeled potatoes so people better peel them right the first time.
You should really try running checkpatch.pl over code that's already in the kernel before you call out new contributors on it.
How is this supposed to not be adversarial when I can't even use the Kernel source itself as a reference?
Tom
^ permalink raw reply
* Re: IPsec AH use of ahash
From: Tom St Denis @ 2013-01-20 12:55 UTC (permalink / raw)
To: Mike Galbraith
Cc: Eric Dumazet, Waskiewicz Jr, Peter P, David Miller,
steffen klassert, herbert, linux-kernel, netdev, Michal Kubecek
In-Reply-To: <1358658381.5743.44.camel@marge.simpson.net>
----- Original Message -----
> From: "Mike Galbraith" <bitbucket@online.de>
> To: "Tom St Denis" <tstdenis@elliptictech.com>
> Cc: "Eric Dumazet" <erdnetdev@gmail.com>, "Waskiewicz Jr, Peter P" <peter.p.waskiewicz.jr@intel.com>, "David Miller"
> <davem@davemloft.net>, "steffen klassert" <steffen.klassert@secunet.com>, herbert@gondor.apana.org.au,
> linux-kernel@vger.kernel.org, netdev@vger.kernel.org, "Michal Kubecek" <mkubecek@suse.cz>
> Sent: Sunday, 20 January, 2013 12:06:21 AM
> Subject: Re: IPsec AH use of ahash
>
> On Sat, 2013-01-19 at 05:30 -0500, Tom St Denis wrote:
>
> > For those of us who do Kernel development during business hours
> > it's
> > hard to justify the work when the path to mainline is convoluted
> > and
> > landmined.
>
> Sounds as though any patches you submit land on your dinner plate
> just
> like potatoes. Hand the cook a pot of half peeled potatoes, he/she
> may
> say try again. The result of a little extra effort is tastier taters
> for everybody feasting at the common table.. including you.
No, in reality what happened is the chef made potatos [incorrectly] got busy and asked others to help out and make more potatos. Then came back and said ...
from ah4.c (which I copied into foo4.c to prove a point) ... that is currently in the kernel
WARNING: networking block comments put the trailing */ on a separate line
#94: FILE: net/ipv4/foo4.c:76:
+ * for validity, so paranoia is not required. */
ERROR: spaces required around that '<' (ctx:VxV)
#112: FILE: net/ipv4/foo4.c:94:
+ if (optlen<2 || optlen>l)
^
ERROR: spaces required around that '>' (ctx:VxV)
#112: FILE: net/ipv4/foo4.c:94:
+ if (optlen<2 || optlen>l)
^
ERROR: do not use assignment in if condition
#180: FILE: net/ipv4/foo4.c:162:
+ if ((err = skb_cow_data(skb, 0, &trailer)) < 0)
WARNING: line over 80 characters
#223: FILE: net/ipv4/foo4.c:205:
+ ah->hdrlen = (XFRM_ALIGN4(sizeof(*ah) + ahp->icv_trunc_len) >> 2) - 2;
WARNING: line over 80 characters
#225: FILE: net/ipv4/foo4.c:207:
+ ah->hdrlen = (XFRM_ALIGN8(sizeof(*ah) + ahp->icv_trunc_len) >> 2) - 2;
ERROR: spaces required around that ':' (ctx:VxW)
#281: FILE: net/ipv4/foo4.c:263:
+ err = memcmp(icv, auth_data, ahp->icv_trunc_len) ? -EBADMSG: 0;
^
WARNING: networking block comments put the trailing */ on a separate line
#337: FILE: net/ipv4/foo4.c:319:
+ * so... Later this can change. */
ERROR: do not use assignment in if condition
#345: FILE: net/ipv4/foo4.c:327:
+ if ((err = skb_cow_data(skb, 0, &trailer)) < 0)
ERROR: spaces required around that ':' (ctx:VxW)
#395: FILE: net/ipv4/foo4.c:377:
+ err = memcmp(icv, auth_data, ahp->icv_trunc_len) ? -EBADMSG: 0;
^
WARNING: space prohibited between function name and open parenthesis '('
#407: FILE: net/ipv4/foo4.c:389:
+ kfree (work_iph);
WARNING: line over 80 characters
#416: FILE: net/ipv4/foo4.c:398:
+ struct ip_auth_hdr *ah = (struct ip_auth_hdr *)(skb->data+(iph->ihl<<2));
WARNING: line over 80 characters
#429: FILE: net/ipv4/foo4.c:411:
+ x = xfrm_state_lookup(net, skb->mark, (const xfrm_address_t *)&iph->daddr,
WARNING: networking block comments don't use an empty /* line, use /* Comment...
#466: FILE: net/ipv4/foo4.c:448:
+
+ /*
ERROR: that open brace { should be on the previous line
#522: FILE: net/ipv4/foo4.c:504:
+static const struct xfrm_type ah_type =
+{
WARNING: please, no space before tabs
#525: FILE: net/ipv4/foo4.c:507:
+^I.proto^I ^I= IPPROTO_AH,$
total: 7 errors, 9 warnings, 547 lines checked
So going back to my original point ... Had I upgraded AH4/AH6 to use AEAD you guys would have rejected it because of style issues too?
The maintainers are not MAINTAINING the code. Then they call out sous-chef's that come by offering to contribute because the recipe is not being followed...
Tom
^ permalink raw reply
* RESPONSE
From: John Adams @ 2013-01-20 10:06 UTC (permalink / raw)
I am John Adams I have a Business Proposal for you and it is for real,
contact me on my private email address for details:-
johnadams@wss-id.org
^ permalink raw reply
* Re: [PATCH] drivers/net/wireless/iwlegacy: use strlcpy instead of strncpy
From: Chen Gang F T @ 2013-01-20 10:45 UTC (permalink / raw)
To: Chen Gang; +Cc: sgruszka, linville, linux-wireless, netdev
In-Reply-To: <50FBB977.7080805@asianux.com>
[-- Attachment #1: Type: text/plain, Size: 1595 bytes --]
oh, sorry, it is my fault.
according to fill_write_buffer in fs/sysfs/file.c,
we can assume that 'const char *buf' must be '\0' based string.
please skip original reply.
gchen.
于 2013年01月20日 17:31, Chen Gang 写道:
> Hello all:
>
> sorry, after checking the details:
> I think this patch is incorrect.
> we can not assume that the parameter "char *buf" is terminated by '\0'
> so we should only use strlcpy instead of strncpy, without touching 'min(...'
>
> since it is already integrated into main branch (at least, in next-20130118).
> I should send additional patch to fix it.
>
> please help to check, thanks.
>
>
> gchen.
>
>
> 于 2013年01月07日 12:42, Chen Gang 写道:
>>
>> The fields must be null-terminated, or simple_strtoul will cause issue.
>>
>> Signed-off-by: Chen Gang <gang.chen@asianux.com>
>> ---
>> drivers/net/wireless/iwlegacy/3945-mac.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/wireless/iwlegacy/3945-mac.c b/drivers/net/wireless/iwlegacy/3945-mac.c
>> index d604b40..3726cd6 100644
>> --- a/drivers/net/wireless/iwlegacy/3945-mac.c
>> +++ b/drivers/net/wireless/iwlegacy/3945-mac.c
>> @@ -3273,7 +3273,7 @@ il3945_store_measurement(struct device *d, struct device_attribute *attr,
>>
>> if (count) {
>> char *p = buffer;
>> - strncpy(buffer, buf, min(sizeof(buffer), count));
>> + strlcpy(buffer, buf, sizeof(buffer));
>> channel = simple_strtoul(p, NULL, 0);
>> if (channel)
>> params.channel = channel;
>>
>
>
--
Chen Gang
Flying Transformer
[-- Attachment #2: chen_gang_flying_transformer.vcf --]
[-- Type: text/x-vcard, Size: 67 bytes --]
begin:vcard
fn:Chen Gang
n:;Chen Gang
version:2.1
end:vcard
^ permalink raw reply
* Re: [suggestion] drivers/net/wireless/iwlegacy: the parameter 'const char *buf' may be not '\0' base string for DINFO
From: Chen Gang F T @ 2013-01-20 10:44 UTC (permalink / raw)
To: Chen Gang
Cc: Stanislaw Gruszka, John W. Linville,
linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev
In-Reply-To: <50FBC180.2090003-bOixZGp5f+dBDgjK7y7TUQ@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 2080 bytes --]
oh, sorry, it is my fault.
according to fill_write_buffer in fs/sysfs/file.c,
we can assume that 'const char *buf' must be '\0' based string.
please skip this suggestion.
gchen.
于 2013年01月20日 18:05, Chen Gang 写道:
> Hello Stanislaw, John
>
> we can not assume that the parameter 'const char *buf' is '\0' base string.
> and DINOF uses '%s' for buf (in line 3288..3289)
> so it will cause issue.
>
> I am not quite familiar with the detail features.
> so I send mail as a suggestion.
> please help checking, if this suggestion is valid, please help fixing, thanks.
>
> Regards
>
> gchen.
>
> 3260 static ssize_t
> 3261 il3945_store_measurement(struct device *d, struct device_attribute *attr,
> 3262 const char *buf, size_t count)
> 3263 {
> 3264 struct il_priv *il = dev_get_drvdata(d);
> 3265 struct ieee80211_measurement_params params = {
> 3266 .channel = le16_to_cpu(il->active.channel),
> 3267 .start_time = cpu_to_le64(il->_3945.last_tsf),
> 3268 .duration = cpu_to_le16(1),
> 3269 };
> 3270 u8 type = IL_MEASURE_BASIC;
> 3271 u8 buffer[32];
> 3272 u8 channel;
> 3273
> 3274 if (count) {
> 3275 char *p = buffer;
> 3276 strlcpy(buffer, buf, min(sizeof(buffer), count));
> 3277 channel = simple_strtoul(p, NULL, 0);
> 3278 if (channel)
> 3279 params.channel = channel;
> 3280
> 3281 p = buffer;
> 3282 while (*p && *p != ' ')
> 3283 p++;
> 3284 if (*p)
> 3285 type = simple_strtoul(p + 1, NULL, 0);
> 3286 }
> 3287
> 3288 D_INFO("Invoking measurement of type %d on " "channel %d (for '%s')\n",
> 3289 type, params.channel, buf);
> 3290 il3945_get_measurement(il, ¶ms, type);
> 3291
> 3292 return count;
> 3293 }
> 3294
>
>
>
>
--
Chen Gang
Flying Transformer
[-- Attachment #2: chen_gang_flying_transformer.vcf --]
[-- Type: text/x-vcard, Size: 67 bytes --]
begin:vcard
fn:Chen Gang
n:;Chen Gang
version:2.1
end:vcard
^ permalink raw reply
* Re: [PATCH] drivers/net/wireless/iwlegacy: adding check length for parameter buf
From: Chen Gang F T @ 2013-01-20 10:43 UTC (permalink / raw)
To: Chen Gang
Cc: Stanislaw Gruszka, John W. Linville,
linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev
In-Reply-To: <50FBBEB2.2000306-bOixZGp5f+dBDgjK7y7TUQ@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 1359 bytes --]
oh, sorry, it is my fault.
according to fill_write_buffer in fs/sysfs/file.c,
we can assume that 'const char *buf' must be '\0' based string.
please skip this patch.
gchen.
于 2013年01月20日 17:53, Chen Gang 写道:
>
> the parameter 'const char *buf' may be not '\0' based string.
> so need check the length before use it.
>
> additinal info:
> originally, it had the relative checking.
> but it was deleted when fix another issues (using strlcpy instead of
> strncpy)
> and now, we need restore the checking (but still keep strlcpy)
>
> Signed-off-by: Chen Gang <gang.chen-bOixZGp5f+dBDgjK7y7TUQ@public.gmane.org>
> ---
> drivers/net/wireless/iwlegacy/3945-mac.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/iwlegacy/3945-mac.c
> b/drivers/net/wireless/iwlegacy/3945-mac.c
> index 050ce7c..71cdbac 100644
> --- a/drivers/net/wireless/iwlegacy/3945-mac.c
> +++ b/drivers/net/wireless/iwlegacy/3945-mac.c
> @@ -3273,7 +3273,7 @@ il3945_store_measurement(struct device *d, struct
> device_attribute *attr,
>
> if (count) {
> char *p = buffer;
> - strlcpy(buffer, buf, sizeof(buffer));
> + strlcpy(buffer, buf, min(sizeof(buffer), count));
> channel = simple_strtoul(p, NULL, 0);
> if (channel)
> params.channel = channel;
>
--
Chen Gang
Flying Transformer
[-- Attachment #2: chen_gang_flying_transformer.vcf --]
[-- Type: text/x-vcard, Size: 67 bytes --]
begin:vcard
fn:Chen Gang
n:;Chen Gang
version:2.1
end:vcard
^ permalink raw reply
* Re: [PATCH] firewire net: Ensure checksumming in upper layer.
From: YOSHIFUJI Hideaki @ 2013-01-20 10:37 UTC (permalink / raw)
To: Stefan Richter; +Cc: linux1394-devel, netdev, linux-kernel, YOSHIFUJI Hideaki
In-Reply-To: <20130120105058.1aee26c4@stein>
Stefan Richter wrote:
> On Jan 20 YOSHIFUJI Hideaki wrote:
>> It is wrong to set skb->ip_summed to CHECKSUM_UNNECESSARY unless
>> the device has already checked it.
>>
>> Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
>> ---
>> drivers/firewire/net.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c
>> index e7a711f5..df6a1ca 100644
>> --- a/drivers/firewire/net.c
>> +++ b/drivers/firewire/net.c
>> @@ -520,7 +520,7 @@ static int fwnet_finish_incoming_packet(struct net_device *net,
>> dev = netdev_priv(net);
>> /* Write metadata, and then pass to the receive level */
>> skb->dev = net;
>> - skb->ip_summed = CHECKSUM_UNNECESSARY; /* don't check it */
>> + skb->ip_summed = CHECKSUM_NONE;
>>
>> /*
>> * Parse the encapsulation header. This actually does the job of
>
> Indeed neither the device nor the lower drivers check protocol checksums.
> But the CRCs of the encapsulating 1394 packets are checked in hardware.
> Shall protocol checksums be verified regardless?
Yes, because packets may come from off-link source.
--yoshfuji
^ permalink raw reply
* Re: IPsec AH use of ahash
From: Borislav Petkov @ 2013-01-20 10:31 UTC (permalink / raw)
To: Mike Galbraith
Cc: Tom St Denis, Eric Dumazet, Waskiewicz Jr, Peter P, David Miller,
steffen klassert, herbert, linux-kernel, netdev, Michal Kubecek
In-Reply-To: <1358658381.5743.44.camel@marge.simpson.net>
On Sun, Jan 20, 2013 at 06:06:21AM +0100, Mike Galbraith wrote:
> Sounds as though any patches you submit land on your dinner plate just
> like potatoes. Hand the cook a pot of half peeled potatoes, he/she may
> say try again.
And how he/she would say it! I've seen serious fights spring up from
half-peeled potatoes so people better peel them right the first time.
:-)
--
Regards/Gruss,
Boris.
Sent from a fat crate under my desk. Formatting is fine.
--
^ permalink raw reply
* [suggestion] drivers/net/wireless/iwlegacy: the parameter 'const char *buf' may be not '\0' base string for DINFO
From: Chen Gang @ 2013-01-20 10:05 UTC (permalink / raw)
To: Stanislaw Gruszka, John W. Linville
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev
Hello Stanislaw, John
we can not assume that the parameter 'const char *buf' is '\0' base string.
and DINOF uses '%s' for buf (in line 3288..3289)
so it will cause issue.
I am not quite familiar with the detail features.
so I send mail as a suggestion.
please help checking, if this suggestion is valid, please help fixing, thanks.
Regards
gchen.
3260 static ssize_t
3261 il3945_store_measurement(struct device *d, struct device_attribute *attr,
3262 const char *buf, size_t count)
3263 {
3264 struct il_priv *il = dev_get_drvdata(d);
3265 struct ieee80211_measurement_params params = {
3266 .channel = le16_to_cpu(il->active.channel),
3267 .start_time = cpu_to_le64(il->_3945.last_tsf),
3268 .duration = cpu_to_le16(1),
3269 };
3270 u8 type = IL_MEASURE_BASIC;
3271 u8 buffer[32];
3272 u8 channel;
3273
3274 if (count) {
3275 char *p = buffer;
3276 strlcpy(buffer, buf, min(sizeof(buffer), count));
3277 channel = simple_strtoul(p, NULL, 0);
3278 if (channel)
3279 params.channel = channel;
3280
3281 p = buffer;
3282 while (*p && *p != ' ')
3283 p++;
3284 if (*p)
3285 type = simple_strtoul(p + 1, NULL, 0);
3286 }
3287
3288 D_INFO("Invoking measurement of type %d on " "channel %d (for '%s')\n",
3289 type, params.channel, buf);
3290 il3945_get_measurement(il, ¶ms, type);
3291
3292 return count;
3293 }
3294
--
Chen Gang
Asianux Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [PATCH] drivers/net/wireless/iwlegacy: adding check length for parameter buf
From: Chen Gang @ 2013-01-20 9:53 UTC (permalink / raw)
To: Stanislaw Gruszka, John W. Linville
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev
the parameter 'const char *buf' may be not '\0' based string.
so need check the length before use it.
additinal info:
originally, it had the relative checking.
but it was deleted when fix another issues (using strlcpy instead of
strncpy)
and now, we need restore the checking (but still keep strlcpy)
Signed-off-by: Chen Gang <gang.chen-bOixZGp5f+dBDgjK7y7TUQ@public.gmane.org>
---
drivers/net/wireless/iwlegacy/3945-mac.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/iwlegacy/3945-mac.c
b/drivers/net/wireless/iwlegacy/3945-mac.c
index 050ce7c..71cdbac 100644
--- a/drivers/net/wireless/iwlegacy/3945-mac.c
+++ b/drivers/net/wireless/iwlegacy/3945-mac.c
@@ -3273,7 +3273,7 @@ il3945_store_measurement(struct device *d, struct
device_attribute *attr,
if (count) {
char *p = buffer;
- strlcpy(buffer, buf, sizeof(buffer));
+ strlcpy(buffer, buf, min(sizeof(buffer), count));
channel = simple_strtoul(p, NULL, 0);
if (channel)
params.channel = channel;
--
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related
* Re: [PATCH] firewire net: Ensure checksumming in upper layer.
From: Stefan Richter @ 2013-01-20 9:50 UTC (permalink / raw)
To: YOSHIFUJI Hideaki; +Cc: netdev, linux1394-devel, linux-kernel
In-Reply-To: <50FBA02C.9030203@linux-ipv6.org>
On Jan 20 YOSHIFUJI Hideaki wrote:
> It is wrong to set skb->ip_summed to CHECKSUM_UNNECESSARY unless
> the device has already checked it.
>
> Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
> ---
> drivers/firewire/net.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c
> index e7a711f5..df6a1ca 100644
> --- a/drivers/firewire/net.c
> +++ b/drivers/firewire/net.c
> @@ -520,7 +520,7 @@ static int fwnet_finish_incoming_packet(struct net_device *net,
> dev = netdev_priv(net);
> /* Write metadata, and then pass to the receive level */
> skb->dev = net;
> - skb->ip_summed = CHECKSUM_UNNECESSARY; /* don't check it */
> + skb->ip_summed = CHECKSUM_NONE;
>
> /*
> * Parse the encapsulation header. This actually does the job of
Indeed neither the device nor the lower drivers check protocol checksums.
But the CRCs of the encapsulating 1394 packets are checked in hardware.
Shall protocol checksums be verified regardless?
--
Stefan Richter
-=====-===-= ---= =-=--
http://arcgraph.de/sr/
------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnmore_123012
^ permalink raw reply
* Re: [PATCH] drivers/net/wireless/iwlegacy: use strlcpy instead of strncpy
From: Chen Gang @ 2013-01-20 9:31 UTC (permalink / raw)
To: sgruszka-H+wXaHxf7aLQT0dZR+AlfA, linville-2XuSBdqkA4R54TAoqtyWWQ
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA, netdev
In-Reply-To: <50EA5246.8060206-bOixZGp5f+dBDgjK7y7TUQ@public.gmane.org>
Hello all:
sorry, after checking the details:
I think this patch is incorrect.
we can not assume that the parameter "char *buf" is terminated by '\0'
so we should only use strlcpy instead of strncpy, without touching 'min(...'
since it is already integrated into main branch (at least, in next-20130118).
I should send additional patch to fix it.
please help to check, thanks.
gchen.
于 2013年01月07日 12:42, Chen Gang 写道:
>
> The fields must be null-terminated, or simple_strtoul will cause issue.
>
> Signed-off-by: Chen Gang <gang.chen-bOixZGp5f+dBDgjK7y7TUQ@public.gmane.org>
> ---
> drivers/net/wireless/iwlegacy/3945-mac.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/iwlegacy/3945-mac.c b/drivers/net/wireless/iwlegacy/3945-mac.c
> index d604b40..3726cd6 100644
> --- a/drivers/net/wireless/iwlegacy/3945-mac.c
> +++ b/drivers/net/wireless/iwlegacy/3945-mac.c
> @@ -3273,7 +3273,7 @@ il3945_store_measurement(struct device *d, struct device_attribute *attr,
>
> if (count) {
> char *p = buffer;
> - strncpy(buffer, buf, min(sizeof(buffer), count));
> + strlcpy(buffer, buf, sizeof(buffer));
> channel = simple_strtoul(p, NULL, 0);
> if (channel)
> params.channel = channel;
>
--
Chen Gang
Asianux Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [PATCH] firewire net: Use LL_RESERVED_SPACE(), HH_DATA_OFF().
From: YOSHIFUJI Hideaki @ 2013-01-20 8:03 UTC (permalink / raw)
To: linux1394-devel, netdev; +Cc: linux-kernel
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
---
drivers/firewire/net.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c
index df6a1ca..2b27bff 100644
--- a/drivers/firewire/net.c
+++ b/drivers/firewire/net.c
@@ -270,7 +270,7 @@ static int fwnet_header_cache(const struct neighbour *neigh,
if (type == cpu_to_be16(ETH_P_802_3))
return -1;
net = neigh->dev;
- h = (struct fwnet_header *)((u8 *)hh->hh_data + 16 - sizeof(*h));
+ h = (struct fwnet_header *)((u8 *)hh->hh_data + HH_DATA_OFF(sizeof(*h)));
h->h_proto = type;
memcpy(h->h_dest, neigh->ha, net->addr_len);
hh->hh_len = FWNET_HLEN;
@@ -282,7 +282,7 @@ static int fwnet_header_cache(const struct neighbour *neigh,
static void fwnet_header_cache_update(struct hh_cache *hh,
const struct net_device *net, const unsigned char *haddr)
{
- memcpy((u8 *)hh->hh_data + 16 - FWNET_HLEN, haddr, net->addr_len);
+ memcpy((u8 *)hh->hh_data + HH_DATA_OFF(FWNET_HLEN), haddr, net->addr_len);
}
static int fwnet_header_parse(const struct sk_buff *skb, unsigned char *haddr)
@@ -398,11 +398,11 @@ static struct fwnet_partial_datagram *fwnet_pd_new(struct net_device *net,
new->datagram_label = datagram_label;
new->datagram_size = dg_size;
- new->skb = dev_alloc_skb(dg_size + net->hard_header_len + 15);
+ new->skb = dev_alloc_skb(dg_size + LL_RESERVED_SPACE(net));
if (new->skb == NULL)
goto fail_w_fi;
- skb_reserve(new->skb, (net->hard_header_len + 15) & ~15);
+ skb_reserve(new->skb, LL_RESERVED_SPACE(net));
new->pbuf = skb_put(new->skb, dg_size);
memcpy(new->pbuf + frag_off, frag_buf, frag_len);
list_add_tail(&new->pd_link, &peer->pd_list);
@@ -690,14 +690,14 @@ static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len,
buf++;
len -= RFC2374_UNFRAG_HDR_SIZE;
- skb = dev_alloc_skb(len + net->hard_header_len + 15);
+ skb = dev_alloc_skb(len + LL_RESERVED_SPACE(net));
if (unlikely(!skb)) {
dev_err(&net->dev, "out of memory\n");
net->stats.rx_dropped++;
return -ENOMEM;
}
- skb_reserve(skb, (net->hard_header_len + 15) & ~15);
+ skb_reserve(skb, LL_RESERVED_SPACE(net));
memcpy(skb_put(skb, len), buf, len);
return fwnet_finish_incoming_packet(net, skb, source_node_id,
--
1.7.9.5
^ permalink raw reply related
* [PATCH] firewire net: Ensure checksumming in upper layer.
From: YOSHIFUJI Hideaki @ 2013-01-20 7:43 UTC (permalink / raw)
To: linux1394-devel, netdev; +Cc: linux-kernel
It is wrong to set skb->ip_summed to CHECKSUM_UNNECESSARY unless
the device has already checked it.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
---
drivers/firewire/net.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c
index e7a711f5..df6a1ca 100644
--- a/drivers/firewire/net.c
+++ b/drivers/firewire/net.c
@@ -520,7 +520,7 @@ static int fwnet_finish_incoming_packet(struct net_device *net,
dev = netdev_priv(net);
/* Write metadata, and then pass to the receive level */
skb->dev = net;
- skb->ip_summed = CHECKSUM_UNNECESSARY; /* don't check it */
+ skb->ip_summed = CHECKSUM_NONE;
/*
* Parse the encapsulation header. This actually does the job of
--
1.7.9.5
^ permalink raw reply related
* Re: [PATCH] drivers/net/wireless: need consider the not '\0' terminated string.
From: Chen Gang @ 2013-01-20 7:21 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, netdev
In-Reply-To: <50EBAF8F.7030704@asianux.com>
Hello John W. Linville:
when you have free time, could you give a glance for this patch ?
thanks.
gchen.
于 2013年01月08日 13:33, Chen Gang 写道:
>
> in ray_cs.c:
> the a_current_ess_id is "Null terminated unless ESSID_SIZE long"
> so we need buffer it with '\0' firstly, before using strlen or %s.
>
> additional information:
> in drivers/net/wireless/rayctl.h:
> "NULL terminated unless 32 long" is a comment at line 616, 664
> ESSID_SIZE is 32, at line 190
> in include/uapi/linux/wireless.h:
> IW_ESSID_MAX_SIZE is also 32
> in drivers/net/wireless/ray_cs.c:
> use strncpy for it, without '\0' terminated, at line 639
> use memcpy for it, assume not '\0' terminated in line 1092..1097
> buffer it with '\0' firstly, before using %s, in line 2576, 2598..2600
>
> Signed-off-by: Chen Gang <gang.chen@asianux.com>
> ---
> drivers/net/wireless/ray_cs.c | 19 ++++++++++++++-----
> 1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
> index 598ca1c..e7cf37f 100644
> --- a/drivers/net/wireless/ray_cs.c
> +++ b/drivers/net/wireless/ray_cs.c
> @@ -1107,12 +1107,15 @@ static int ray_get_essid(struct net_device *dev, struct iw_request_info *info,
> union iwreq_data *wrqu, char *extra)
> {
> ray_dev_t *local = netdev_priv(dev);
> + UCHAR tmp[IW_ESSID_MAX_SIZE + 1];
>
> /* Get the essid that was set */
> memcpy(extra, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE);
> + memcpy(tmp, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE);
> + tmp[IW_ESSID_MAX_SIZE] = '\0';
>
> /* Push it out ! */
> - wrqu->essid.length = strlen(extra);
> + wrqu->essid.length = strlen(tmp);
> wrqu->essid.flags = 1; /* active */
>
> return 0;
> @@ -1842,6 +1845,8 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
> UCHAR tmp;
> UCHAR cmd;
> UCHAR status;
> + UCHAR memtmp[ESSID_SIZE + 1];
> +
>
> if (dev == NULL) /* Note that we want interrupts with dev->start == 0 */
> return IRQ_NONE;
> @@ -1901,17 +1906,21 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
> break;
> case CCS_START_NETWORK:
> case CCS_JOIN_NETWORK:
> + memcpy(memtmp, local->sparm.b4.a_current_ess_id,
> + ESSID_SIZE);
> + memtmp[ESSID_SIZE] = '\0';
> +
> if (status == CCS_COMMAND_COMPLETE) {
> if (readb
> (&pccs->var.start_network.net_initiated) ==
> 1) {
> dev_dbg(&link->dev,
> "ray_cs interrupt network \"%s\" started\n",
> - local->sparm.b4.a_current_ess_id);
> + memtmp);
> } else {
> dev_dbg(&link->dev,
> "ray_cs interrupt network \"%s\" joined\n",
> - local->sparm.b4.a_current_ess_id);
> + memtmp);
> }
> memcpy_fromio(&local->bss_id,
> pccs->var.start_network.bssid,
> @@ -1939,12 +1948,12 @@ static irqreturn_t ray_interrupt(int irq, void *dev_id)
> if (status == CCS_START_NETWORK) {
> dev_dbg(&link->dev,
> "ray_cs interrupt network \"%s\" start failed\n",
> - local->sparm.b4.a_current_ess_id);
> + memtmp);
> local->timer.function = start_net;
> } else {
> dev_dbg(&link->dev,
> "ray_cs interrupt network \"%s\" join failed\n",
> - local->sparm.b4.a_current_ess_id);
> + memtmp);
> local->timer.function = join_net;
> }
> add_timer(&local->timer);
>
--
Chen Gang
Asianux Corporation
^ permalink raw reply
* [PATCH 2/2] CDC_NCM: adding support FLAG_NOARP for Infineon modem platform
From: Wei Shuai @ 2013-01-20 6:12 UTC (permalink / raw)
To: dcbw, davem, peter, oneukum, sshtylyov, gregkh, alexey.orishko,
bjorn
Cc: linux-usb, netdev, Wei Shuai
In-Reply-To: <1358662329-8294-1-git-send-email-cpuwolf@gmail.com>
Infineon(now Intel) HSPA Modem platform NCM cannot support ARP. we can define a new common structure wwan_noarp_info.
Then more similiar NO ARP devices can be handled easily
Signed-off-by: Wei Shuai <cpuwolf@gmail.com>
---
drivers/net/usb/cdc_ncm.c | 21 +++++++++++++++++++++
1 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
index 71b6e92..2d699b6 100644
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -1155,6 +1155,20 @@ static const struct driver_info wwan_info = {
.tx_fixup = cdc_ncm_tx_fixup,
};
+/* Same as wwan_info, but with IFF_NOARP */
+static const struct driver_info wwan_noarp_info = {
+ .description = "Mobile Broadband Network Device (NO ARP)",
+ .flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT | FLAG_MULTI_PACKET
+ | FLAG_WWAN | FLAG_NOARP,
+ .bind = cdc_ncm_bind,
+ .unbind = cdc_ncm_unbind,
+ .check_connect = cdc_ncm_check_connect,
+ .manage_power = usbnet_manage_power,
+ .status = cdc_ncm_status,
+ .rx_fixup = cdc_ncm_rx_fixup,
+ .tx_fixup = cdc_ncm_tx_fixup,
+};
+
static const struct usb_device_id cdc_devs[] = {
/* Ericsson MBM devices like F5521gw */
{ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO
@@ -1194,6 +1208,13 @@ static const struct usb_device_id cdc_devs[] = {
.driver_info = (unsigned long)&wwan_info,
},
+ /* Infineon(now Intel) HSPA Modem platform */
+ { USB_DEVICE_AND_INTERFACE_INFO(0x1519, 0x0443,
+ USB_CLASS_COMM,
+ USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
+ .driver_info = (unsigned long)&wwan_noarp_info,
+ },
+
/* Generic CDC-NCM devices */
{ USB_INTERFACE_INFO(USB_CLASS_COMM,
USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE),
--
1.7.6.5
^ permalink raw reply related
* [PATCH 1/2] usbnet: add flag FLAG_NOARP for usb net devices
From: Wei Shuai @ 2013-01-20 6:12 UTC (permalink / raw)
To: dcbw, davem, peter, oneukum, sshtylyov, gregkh, alexey.orishko,
bjorn
Cc: linux-usb, netdev, Wei Shuai
we do have some USB net devices, which cannot do ARP. so we can introduce a new flag
FLAG_NOARP, then client drivers can easily handle these kind of devices
Signed-off-by: Wei Shuai <cpuwolf@gmail.com>
---
drivers/net/usb/usbnet.c | 4 ++++
include/linux/usb/usbnet.h | 1 +
2 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 3d4bf01..f34b2eb 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1448,6 +1448,10 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
if ((dev->driver_info->flags & FLAG_WWAN) != 0)
strcpy(net->name, "wwan%d");
+ /* devices that cannot do ARP */
+ if ((dev->driver_info->flags & FLAG_NOARP) != 0)
+ net->flags |= IFF_NOARP;
+
/* maybe the remote can't receive an Ethernet MTU */
if (net->mtu > (dev->hard_mtu - net->hard_header_len))
net->mtu = dev->hard_mtu - net->hard_header_len;
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index bd45eb7..5de7a22 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -100,6 +100,7 @@ struct driver_info {
#define FLAG_LINK_INTR 0x0800 /* updates link (carrier) status */
#define FLAG_POINTTOPOINT 0x1000 /* possibly use "usb%d" names */
+#define FLAG_NOARP 0x2000 /* device can't do ARP */
/*
* Indicates to usbnet, that USB driver accumulates multiple IP packets.
--
1.7.6.5
^ permalink raw reply related
* Re: [PATCH 1/2] usbnet: introduce flag FLAG_NOARP for usb net devices
From: David Miller @ 2013-01-20 5:33 UTC (permalink / raw)
To: cpuwolf
Cc: dcbw, peter, oneukum, sshtylyov, gregkh, alexey.orishko, bjorn,
linux-usb, netdev
In-Reply-To: <1358644608-2118-1-git-send-email-cpuwolf@gmail.com>
When any patch is discarded, the whole series is tossed.
Therefore you must resubmit the entire series, not just one
part of it.
^ permalink raw reply
* Re: IPsec AH use of ahash
From: Mike Galbraith @ 2013-01-20 5:06 UTC (permalink / raw)
To: Tom St Denis
Cc: Eric Dumazet, Waskiewicz Jr, Peter P, David Miller,
steffen klassert, herbert, linux-kernel, netdev, Michal Kubecek
In-Reply-To: <1325444527.92017.1358591457919.JavaMail.root@elliptictech.com>
On Sat, 2013-01-19 at 05:30 -0500, Tom St Denis wrote:
> For those of us who do Kernel development during business hours it's
> hard to justify the work when the path to mainline is convoluted and
> landmined.
Sounds as though any patches you submit land on your dinner plate just
like potatoes. Hand the cook a pot of half peeled potatoes, he/she may
say try again. The result of a little extra effort is tastier taters
for everybody feasting at the common table.. including you.
-Mike
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox