* Re: [PATCH] smsc9420: Use netif_<level>
From: David Miller @ 2013-11-07 7:15 UTC (permalink / raw)
To: joe; +Cc: netdev, steve.glendinning, linux-kernel
In-Reply-To: <1383676461.4387.28.camel@joe-AO722>
From: Joe Perches <joe@perches.com>
Date: Tue, 05 Nov 2013 10:34:21 -0800
> Use a more standard logging style.
>
> Convert smsc_<level> macros to use netif_<level>.
> Remove unused #define PFX
> Add pr_fmt and neaten pr_<level> uses.
>
> Signed-off-by: Joe Perches <joe@perches.com>
Also applied, thanks Joe.
^ permalink raw reply
* Re: gso: Attempt to handle mega-GRO packets
From: Herbert Xu @ 2013-11-07 7:15 UTC (permalink / raw)
To: Eric Dumazet
Cc: Ben Hutchings, David Miller, christoph.paasch, netdev, hkchu,
mwdalton
In-Reply-To: <1383808262.9412.33.camel@edumazet-glaptop2.roam.corp.google.com>
On Wed, Nov 06, 2013 at 11:11:02PM -0800, Eric Dumazet wrote:
> On Thu, 2013-11-07 at 08:43 +0800, Herbert Xu wrote:
>
> > - if (fskb != skb_shinfo(skb)->frag_list)
> > - goto perform_csum_check;
> > + if (fskb != skb_shinfo(skb)->frag_list) {
> > + struct sk_buff *nsegs;
> > +
> > + if (nskb->len == len + doffset)
> > + goto perform_csum_check;
> > +
> > + if (skb_has_frag_list(nskb)) {
> > + net_warn_ratelimited(
> > + "skb_segment: "
> > + "nested frag_list detected\n");
> > + kfree(nskb);
> > + err = -EINVAL;
> > + goto err;
> > + }
> > +
> > + __skb_pull(nskb, doffset);
> > + skb_shinfo(nskb)->gso_size = mss;
> > + nsegs = skb_segment(nskb, features);
> > +
>
> This still assumes each skb found in frag_list has a exact multiple of
> @mss bytes, and that the initial skb also ends at a right boundary.
So what in our stack violates this assumption? We've never handled
arbitrary frag_lists in GSO and I see no reason why we need to start
doing that now.
Also GRO was designed to only merge packets that satisfy these
assumptions so that through GSO the original packets can be
recovered without losing end-to-end connectivity. This is really
important for routers/switches.
Cheers,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* Re: gso: Attempt to handle mega-GRO packets
From: Herbert Xu @ 2013-11-07 7:17 UTC (permalink / raw)
To: Eric Dumazet
Cc: Ben Hutchings, David Miller, christoph.paasch, netdev, hkchu,
mwdalton
In-Reply-To: <20131107071531.GA31857@gondor.apana.org.au>
On Thu, Nov 07, 2013 at 03:15:31PM +0800, Herbert Xu wrote:
> On Wed, Nov 06, 2013 at 11:11:02PM -0800, Eric Dumazet wrote:
> > On Thu, 2013-11-07 at 08:43 +0800, Herbert Xu wrote:
> >
> > > - if (fskb != skb_shinfo(skb)->frag_list)
> > > - goto perform_csum_check;
> > > + if (fskb != skb_shinfo(skb)->frag_list) {
> > > + struct sk_buff *nsegs;
> > > +
> > > + if (nskb->len == len + doffset)
> > > + goto perform_csum_check;
> > > +
> > > + if (skb_has_frag_list(nskb)) {
> > > + net_warn_ratelimited(
> > > + "skb_segment: "
> > > + "nested frag_list detected\n");
> > > + kfree(nskb);
> > > + err = -EINVAL;
> > > + goto err;
> > > + }
> > > +
> > > + __skb_pull(nskb, doffset);
> > > + skb_shinfo(nskb)->gso_size = mss;
> > > + nsegs = skb_segment(nskb, features);
> > > +
> >
> > This still assumes each skb found in frag_list has a exact multiple of
> > @mss bytes, and that the initial skb also ends at a right boundary.
>
> So what in our stack violates this assumption? We've never handled
> arbitrary frag_lists in GSO and I see no reason why we need to start
> doing that now.
>
> Also GRO was designed to only merge packets that satisfy these
> assumptions so that through GSO the original packets can be
> recovered without losing end-to-end connectivity. This is really
> important for routers/switches.
Or perhaps you are saying that this doesn't handle page frags?
It should because each GRO frag_list entry looks just like any
boring old GSO packet filled with frags.
Cheers,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* Re: gso: Attempt to handle mega-GRO packets
From: Eric Dumazet @ 2013-11-07 7:31 UTC (permalink / raw)
To: Herbert Xu
Cc: Ben Hutchings, David Miller, christoph.paasch, netdev, hkchu,
mwdalton
In-Reply-To: <20131107071531.GA31857@gondor.apana.org.au>
On Thu, 2013-11-07 at 15:15 +0800, Herbert Xu wrote:
> So what in our stack violates this assumption? We've never handled
> arbitrary frag_lists in GSO and I see no reason why we need to start
> doing that now.
I do see this, skb_segment() is generic.
>
> Also GRO was designed to only merge packets that satisfy these
> assumptions so that through GSO the original packets can be
> recovered without losing end-to-end connectivity. This is really
> important for routers/switches.
I think we all agree on this, and we should keep this property.
The point is : skb_segment() is not tied to GRO anymore.
My patch handles virtio_net just fine, I see nothing really malicious in
virtio_net.
In particular, each skb found in the frag_list can be of any size,
and not an exact MSS multiple.
I see frag_list as a way to extend skb capacity, not as something
tied to GRO/GSO.
I worked last year so that we no longer had the frag_list being used in
GRO stack. frag_list was no longer needed, thanks to skb->head_frag
^ permalink raw reply
* Re: [PATCH] wcn36xx: Fix logging macro with unnecessary semicolon
From: Eugene Krasnikov @ 2013-11-07 7:32 UTC (permalink / raw)
To: Joe Perches
Cc: Luis R. Rodriguez, John W. Linville, wcn36xx, linux-wireless,
netdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
ath5k-devel-xDcbHBWguxEUs3QNXV6qNA, ath9k-devel,
ath10k-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
In-Reply-To: <1383760556.7940.28.camel@joe-AO722>
Hi Joe,
I personally like the idea of making some kind of framework on top of
printing because all ath drivers are using the same printing approach
and combining all that code in one place will reduce amount of code in
each particular driver. As a true engineer i like when it's less code
= less work to do = less bugs:)
Suggestion is to send a patch with semicolon fix only and have a
second round of convincing ath guys to change printing code. How does
that sound?
On Wed, Nov 6, 2013 at 5:55 PM, Joe Perches <joe-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org> wrote:
> On Wed, 2013-11-06 at 07:49 +0000, Eugene Krasnikov wrote:
>> Hm... when it comes to semicolon the patch seems to be good. When it
>> comes to dynamic debugging i think we should have a separate
>> discussion about that.
>> I personally like the whole idea about dynamic debug but if you want
>> to change it i would suggest to have some kind of framework for all
>> ath drivers(or maybe all wireless drivers). Because obviously you can
>> find common code in every driver that defines it's own debug
>> functions/debug levels and so on. Why not to make a framework with
>> standard API/levels?
>
> You need to bring that up with the Atheros folk.
> I've tried. The view seemed to be it was more
> trouble than it was worth.
>
>
>
--
Best regards,
Eugene
--
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
* Re: gso: Attempt to handle mega-GRO packets
From: Herbert Xu @ 2013-11-07 7:33 UTC (permalink / raw)
To: Eric Dumazet
Cc: Ben Hutchings, David Miller, christoph.paasch, netdev, hkchu,
mwdalton
In-Reply-To: <1383809490.9412.50.camel@edumazet-glaptop2.roam.corp.google.com>
On Wed, Nov 06, 2013 at 11:31:30PM -0800, Eric Dumazet wrote:
> On Thu, 2013-11-07 at 15:15 +0800, Herbert Xu wrote:
>
> > So what in our stack violates this assumption? We've never handled
> > arbitrary frag_lists in GSO and I see no reason why we need to start
> > doing that now.
>
> I do see this, skb_segment() is generic.
IOW there is nothing in our stack that violates this, great!
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* [patch] 6lowpan: release device on error path
From: Dan Carpenter @ 2013-11-07 7:44 UTC (permalink / raw)
To: Alexander Smirnov, Alan Ott
Cc: Dmitry Eremin-Solenikov, David S. Miller, linux-zigbee-devel,
netdev, kernel-janitors
We recently added a new error path and it needs a dev_put().
Fixes: 7adac1ec8198 ('6lowpan: Only make 6lowpan links to IEEE802154 devices')
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
Compile tested only. Please review carefully.
diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
index 9497c6f..426b5df 100644
--- a/net/ieee802154/6lowpan.c
+++ b/net/ieee802154/6lowpan.c
@@ -1358,8 +1358,10 @@ static int lowpan_newlink(struct net *src_net, struct net_device *dev,
real_dev = dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK]));
if (!real_dev)
return -ENODEV;
- if (real_dev->type != ARPHRD_IEEE802154)
+ if (real_dev->type != ARPHRD_IEEE802154) {
+ dev_put(real_dev);
return -EINVAL;
+ }
lowpan_dev_info(dev)->real_dev = real_dev;
lowpan_dev_info(dev)->fragment_tag = 0;
^ permalink raw reply related
* [patch] net: make ndev->irq signed for error handling
From: Dan Carpenter @ 2013-11-07 7:48 UTC (permalink / raw)
To: David S. Miller; +Cc: netdev, linux-kernel, kernel-janitors
There is a bug in cpsw_probe() where we do:
ndev->irq = platform_get_irq(pdev, 0);
if (ndev->irq < 0) {
The problem is that "ndev->irq" is unsigned so the error handling
doesn't work. I have changed it to a regular int.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 9da6a04..bb011f6 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1132,7 +1132,7 @@ struct net_device {
unsigned long mem_end; /* shared mem end */
unsigned long mem_start; /* shared mem start */
unsigned long base_addr; /* device I/O address */
- unsigned int irq; /* device IRQ number */
+ int irq; /* device IRQ number */
/*
* Some hardware also needs these fields, but they are not
^ permalink raw reply related
* [patch] isdn: icn: NULL dereference printing error message
From: Dan Carpenter @ 2013-11-07 7:58 UTC (permalink / raw)
To: netdev, Karsten Keil; +Cc: David S. Miller, isdn4linux, kernel-janitors
"card2" is NULL here so I have changed it to use "id2" instead of
"card2->interface.id".
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
diff --git a/drivers/isdn/icn/icn.c b/drivers/isdn/icn/icn.c
index e74df7c..53d487f 100644
--- a/drivers/isdn/icn/icn.c
+++ b/drivers/isdn/icn/icn.c
@@ -1580,8 +1580,7 @@ icn_addcard(int port, char *id1, char *id2)
}
if (!(card2 = icn_initcard(port, id2))) {
printk(KERN_INFO
- "icn: (%s) half ICN-4B, port 0x%x added\n",
- card2->interface.id, port);
+ "icn: (%s) half ICN-4B, port 0x%x added\n", id2, port);
return 0;
}
card->doubleS0 = 1;
^ permalink raw reply related
* Re: [PATCH] smsc: replace IS_ERR and PTR_ERR with PTR_ERR_OR_ZERO
From: David Miller @ 2013-11-07 8:02 UTC (permalink / raw)
To: duanj.fnst
Cc: kernel, linux, a.zummo, airlied, dmitry.torokhov, axboe,
linux-kernel, rtc-linux, dri-devel, linux-tegra, linux-input,
devel, netdev
In-Reply-To: <1383724637-15849-1-git-send-email-duanj.fnst@cn.fujitsu.com>
From: Duan Jiong <duanj.fnst@cn.fujitsu.com>
Date: Wed, 6 Nov 2013 15:57:17 +0800
> This patch fixes coccinelle error regarding usage of IS_ERR and
> PTR_ERR instead of PTR_ERR_OR_ZERO.
>
> Signed-off-by: Duan Jiong <duanj.fnst@cn.fujitsu.com>
Applied.
^ permalink raw reply
* Re: [PATCH] net:drivers/net: replace IS_ERR and PTR_ERR with PTR_ERR_OR_ZERO
From: David Miller @ 2013-11-07 8:02 UTC (permalink / raw)
To: duanj.fnst
Cc: kernel, linux, a.zummo, airlied, dmitry.torokhov, axboe,
linux-kernel, rtc-linux, dri-devel, linux-tegra, linux-input,
devel, netdev
In-Reply-To: <1383724693-16220-1-git-send-email-duanj.fnst@cn.fujitsu.com>
From: Duan Jiong <duanj.fnst@cn.fujitsu.com>
Date: Wed, 6 Nov 2013 15:58:13 +0800
> This patch fixes coccinelle error regarding usage of IS_ERR and
> PTR_ERR instead of PTR_ERR_OR_ZERO.
>
> Signed-off-by: Duan Jiong <duanj.fnst@cn.fujitsu.com>
Applied.
^ permalink raw reply
* Re: [PATCH v2 net] qeth: avoid buffer overflow in snmp ioctl
From: David Miller @ 2013-11-07 8:02 UTC (permalink / raw)
To: blaschka; +Cc: netdev, stable
In-Reply-To: <20131106080452.GA46718@tuxmaker.boeblingen.de.ibm.com>
From: Frank Blaschka <blaschka@linux.vnet.ibm.com>
Date: Wed, 6 Nov 2013 09:04:52 +0100
> From: Ursula Braun <ursula.braun@de.ibm.com>
>
> Check user-defined length in snmp ioctl request and allow request
> only if it fits into a qeth command buffer.
>
> Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com>
> Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
> Reviewed-by: Heiko Carstens <heicars2@linux.vnet.ibm.com>
> Reported-by: Nico Golde <nico@ngolde.de>
> Reported-by: Fabian Yamaguchi <fabs@goesec.de>
> Cc: <stable@vger.kernel.org>
Applied.
^ permalink raw reply
* [PATCH] ixgbevf: use pci drvdata correctly in ixgbevf_suspend()
From: Wei Yongjun @ 2013-11-07 8:13 UTC (permalink / raw)
To: jeffrey.t.kirsher, jesse.brandeburg, bruce.w.allan,
carolyn.wyborny, donald.c.skidmore, gregory.v.rose,
peter.p.waskiewicz.jr, alexander.h.duyck, john.ronciak,
tushar.n.dave, davem, kaber, gregkh
Cc: yongjun_wei, e1000-devel, netdev
From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
We had set the pci driver-specific data in ixgbevf_probe() as a type of
struct net_device, so we should use it as netdev in ixgbevf_suspend().
Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
---
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index 59a62bb..a119ae4 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -3197,8 +3197,8 @@ static int ixgbevf_suspend(struct pci_dev *pdev, pm_message_t state)
#ifdef CONFIG_PM
static int ixgbevf_resume(struct pci_dev *pdev)
{
- struct ixgbevf_adapter *adapter = pci_get_drvdata(pdev);
- struct net_device *netdev = adapter->netdev;
+ struct net_device *netdev = pci_get_drvdata(pdev);
+ struct ixgbevf_adapter *adapter = netdev_priv(netdev);
u32 err;
pci_set_power_state(pdev, PCI_D0);
^ permalink raw reply related
* Re: [Linux-zigbee-devel] [patch] 6lowpan: release device on error path
From: Alexander Aring @ 2013-11-07 8:17 UTC (permalink / raw)
To: Dan Carpenter
Cc: Alexander Smirnov, Alan Ott, netdev, kernel-janitors,
David S. Miller, linux-zigbee-devel
In-Reply-To: <20131107074445.GD21844@elgon.mountain>
On Thu, Nov 07, 2013 at 10:44:45AM +0300, Dan Carpenter wrote:
> We recently added a new error path and it needs a dev_put().
>
> Fixes: 7adac1ec8198 ('6lowpan: Only make 6lowpan links to IEEE802154 devices')
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> Compile tested only. Please review carefully.
>
> diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
> index 9497c6f..426b5df 100644
> --- a/net/ieee802154/6lowpan.c
> +++ b/net/ieee802154/6lowpan.c
> @@ -1358,8 +1358,10 @@ static int lowpan_newlink(struct net *src_net, struct net_device *dev,
> real_dev = dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK]));
> if (!real_dev)
> return -ENODEV;
> - if (real_dev->type != ARPHRD_IEEE802154)
> + if (real_dev->type != ARPHRD_IEEE802154) {
> + dev_put(real_dev);
> return -EINVAL;
> + }
looks correct for me.
^ permalink raw reply
* Re: [PATCH] ixgbevf: use pci drvdata correctly in ixgbevf_suspend()
From: Jeff Kirsher @ 2013-11-07 8:21 UTC (permalink / raw)
To: Wei Yongjun
Cc: jesse.brandeburg, bruce.w.allan, carolyn.wyborny,
donald.c.skidmore, gregory.v.rose, peter.p.waskiewicz.jr,
alexander.h.duyck, john.ronciak, tushar.n.dave, davem, kaber,
gregkh, yongjun_wei, e1000-devel, netdev
In-Reply-To: <CAPgLHd8pjBBPwJ+Nn_Ld_YRyd4f_-cxh1U+9ARc5iDRsgXK4-A@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 502 bytes --]
On Thu, 2013-11-07 at 16:13 +0800, Wei Yongjun wrote:
> From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
>
> We had set the pci driver-specific data in ixgbevf_probe() as a type
> of
> struct net_device, so we should use it as netdev in ixgbevf_suspend().
>
> Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
> ---
> drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
Thanks Wei, I will add this patch to my queue.
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
* Re: [PATCH net-next v2 3/3] net_sched: Use pr_debug replace printk(KERN_DEBUG ...)
From: Daniel Borkmann @ 2013-11-07 8:30 UTC (permalink / raw)
To: Yang Yingliang; +Cc: davem, netdev, eric.dumazet, jhs, stephen
In-Reply-To: <1383790412-41944-4-git-send-email-yangyingliang@huawei.com>
On 11/07/2013 03:13 AM, Yang Yingliang wrote:
> Replace printk(KERN_DEBUG ...) with pr_debug() and
> replace pr_warning() with pr_warn().
>
> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
> ---
> net/sched/sch_cbq.c | 2 +-
> net/sched/sch_dsmark.c | 2 +-
> net/sched/sch_gred.c | 4 ++--
> net/sched/sch_htb.c | 6 +++---
> 4 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
> index a8f40f5..9e3a9dc 100644
> --- a/net/sched/sch_cbq.c
> +++ b/net/sched/sch_cbq.c
> @@ -1060,7 +1060,7 @@ static void cbq_normalize_quanta(struct cbq_sched_data *q, int prio)
> }
> if (cl->quantum <= 0 ||
> cl->quantum > 32*qdisc_dev(cl->qdisc)->mtu) {
> - pr_warning("CBQ: class %08x has bad quantum==%ld, repaired.\n",
> + pr_warn("CBQ: class %08x has bad quantum==%ld, repaired.\n",
> cl->common.classid, cl->quantum);
You also need to fix alignment of the second line here and in all other places
you did changes like that.
> cl->quantum = qdisc_dev(cl->qdisc)->mtu/2 + 1;
> }
> diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c
> index 3886365..190cf65 100644
> --- a/net/sched/sch_dsmark.c
> +++ b/net/sched/sch_dsmark.c
> @@ -303,7 +303,7 @@ static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
> * and don't need yet another qdisc as a bypass.
> */
> if (p->mask[index] != 0xff || p->value[index])
> - pr_warning("dsmark_dequeue: unsupported protocol %d\n",
> + pr_warn("dsmark_dequeue: unsupported protocol %d\n",
> ntohs(skb->protocol));
> break;
> }
> diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c
> index d42234c..19fa4dc 100644
> --- a/net/sched/sch_gred.c
> +++ b/net/sched/sch_gred.c
> @@ -370,7 +370,7 @@ static inline int gred_change_table_def(struct Qdisc *sch, struct nlattr *dps)
>
> for (i = table->DPs; i < MAX_DPs; i++) {
> if (table->tab[i]) {
> - pr_warning("GRED: Warning: Destroying "
> + pr_warn("GRED: Warning: Destroying "
> "shadowed VQ 0x%x\n", i);
> gred_destroy_vq(table->tab[i]);
> table->tab[i] = NULL;
> @@ -456,7 +456,7 @@ static int gred_change(struct Qdisc *sch, struct nlattr *opt)
> if (table->tab[table->def])
> def_prio = table->tab[table->def]->prio;
>
> - printk(KERN_DEBUG "GRED: DP %u does not have a prio "
> + pr_debug("GRED: DP %u does not have a prio "
> "setting default to %d\n", ctl->DP, def_prio);
>
> prio = def_prio;
> diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
> index f6e8a74..6586f3b 100644
> --- a/net/sched/sch_htb.c
> +++ b/net/sched/sch_htb.c
> @@ -712,7 +712,7 @@ static s64 htb_do_events(struct htb_sched *q, const int level,
>
> /* too much load - let's continue after a break for scheduling */
> if (!(q->warned & HTB_WARN_TOOMANYEVENTS)) {
> - pr_warning("htb: too many events!\n");
> + pr_warn("htb: too many events!\n");
> q->warned |= HTB_WARN_TOOMANYEVENTS;
> }
>
> @@ -1484,13 +1484,13 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
> if (!cl->level) {
> cl->quantum = hopt->rate.rate / q->rate2quantum;
> if (!hopt->quantum && cl->quantum < 1000) {
> - pr_warning(
> + pr_warn(
> "HTB: quantum of class %X is small. Consider r2q change.\n",
Also, this looks quite ugly, so changing into pr_warn("HTB: .....") would be better if
you're at it anyway.
> cl->common.classid);
> cl->quantum = 1000;
> }
> if (!hopt->quantum && cl->quantum > 200000) {
> - pr_warning(
> + pr_warn(
> "HTB: quantum of class %X is big. Consider r2q change.\n",
> cl->common.classid);
Ditto
> cl->quantum = 200000;
>
^ permalink raw reply
* Re: [PATCH net-next v2 2/3] net_sched: fix some checkpatch errors
From: Daniel Borkmann @ 2013-11-07 8:37 UTC (permalink / raw)
To: Yang Yingliang; +Cc: davem, netdev, eric.dumazet, jhs, stephen
In-Reply-To: <1383790412-41944-3-git-send-email-yangyingliang@huawei.com>
On 11/07/2013 03:13 AM, Yang Yingliang wrote:
> There are some checkpatch errors, fix them.
>
> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
> Suggested-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
> net/sched/act_api.c | 5 +++--
> net/sched/cls_bpf.c | 2 +-
> net/sched/cls_u32.c | 2 +-
> net/sched/sch_cbq.c | 3 ++-
> net/sched/sch_generic.c | 4 ++--
> net/sched/sch_htb.c | 13 +++++++------
> net/sched/sch_netem.c | 2 +-
> net/sched/sch_sfq.c | 10 ++++++----
> 8 files changed, 23 insertions(+), 18 deletions(-)
>
> diff --git a/net/sched/act_api.c b/net/sched/act_api.c
> index fd70728..d92a90e9 100644
> --- a/net/sched/act_api.c
> +++ b/net/sched/act_api.c
> @@ -191,7 +191,8 @@ u32 tcf_hash_new_index(u32 *idx_gen, struct tcf_hashinfo *hinfo)
> val = 1;
> } while (tcf_hash_lookup(val, hinfo));
>
> - return (*idx_gen = val);
> + *idx_gen = val;
> + return *idx_gen;
> }
> EXPORT_SYMBOL(tcf_hash_new_index);
>
> @@ -263,7 +264,7 @@ void tcf_hash_insert(struct tcf_common *p, struct tcf_hashinfo *hinfo)
> }
> EXPORT_SYMBOL(tcf_hash_insert);
>
> -static struct tc_action_ops *act_base = NULL;
> +static struct tc_action_ops *act_base;
From a readability point of view, I think this makes it worse, also the other places
where you change globals vars like that.
> static DEFINE_RWLOCK(act_mod_lock);
>
> int tcf_register_action(struct tc_action_ops *act)
> diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c
> index 1002a82..d7c72be 100644
> --- a/net/sched/cls_bpf.c
> +++ b/net/sched/cls_bpf.c
> @@ -323,7 +323,7 @@ static int cls_bpf_dump(struct tcf_proto *tp, unsigned long fh,
> if (nla == NULL)
[...]
Also, when you submit v3, I think it would be good if you separate your patch into two
sets: patch1 on its own, and then patch2 and patch3 as an own set as the last two have
not much in common from what's in the cover letter.
^ permalink raw reply
* Re: [PATCH net-next v2 3/3] net_sched: Use pr_debug replace printk(KERN_DEBUG ...)
From: Yang Yingliang @ 2013-11-07 8:43 UTC (permalink / raw)
To: Daniel Borkmann; +Cc: netdev
In-Reply-To: <527B4FA6.1080409@redhat.com>
On 2013/11/7 16:30, Daniel Borkmann wrote:
> On 11/07/2013 03:13 AM, Yang Yingliang wrote:
>> Replace printk(KERN_DEBUG ...) with pr_debug() and
>> replace pr_warning() with pr_warn().
>>
>> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
>> ---
>> net/sched/sch_cbq.c | 2 +-
>> net/sched/sch_dsmark.c | 2 +-
>> net/sched/sch_gred.c | 4 ++--
>> net/sched/sch_htb.c | 6 +++---
>> 4 files changed, 7 insertions(+), 7 deletions(-)
>>
>> diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
>> index a8f40f5..9e3a9dc 100644
>> --- a/net/sched/sch_cbq.c
>> +++ b/net/sched/sch_cbq.c
>> @@ -1060,7 +1060,7 @@ static void cbq_normalize_quanta(struct cbq_sched_data *q, int prio)
>> }
>> if (cl->quantum <= 0 ||
>> cl->quantum > 32*qdisc_dev(cl->qdisc)->mtu) {
>> - pr_warning("CBQ: class %08x has bad quantum==%ld, repaired.\n",
>> + pr_warn("CBQ: class %08x has bad quantum==%ld, repaired.\n",
>> cl->common.classid, cl->quantum);
>
> You also need to fix alignment of the second line here and in all other places
> you did changes like that.
>
>> cl->quantum = qdisc_dev(cl->qdisc)->mtu/2 + 1;
>> }
>> diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c
>> index 3886365..190cf65 100644
>> --- a/net/sched/sch_dsmark.c
>> +++ b/net/sched/sch_dsmark.c
>> @@ -303,7 +303,7 @@ static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
>> * and don't need yet another qdisc as a bypass.
>> */
>> if (p->mask[index] != 0xff || p->value[index])
>> - pr_warning("dsmark_dequeue: unsupported protocol %d\n",
>> + pr_warn("dsmark_dequeue: unsupported protocol %d\n",
>> ntohs(skb->protocol));
>> break;
>> }
>> diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c
>> index d42234c..19fa4dc 100644
>> --- a/net/sched/sch_gred.c
>> +++ b/net/sched/sch_gred.c
>> @@ -370,7 +370,7 @@ static inline int gred_change_table_def(struct Qdisc *sch, struct nlattr *dps)
>>
>> for (i = table->DPs; i < MAX_DPs; i++) {
>> if (table->tab[i]) {
>> - pr_warning("GRED: Warning: Destroying "
>> + pr_warn("GRED: Warning: Destroying "
>> "shadowed VQ 0x%x\n", i);
>> gred_destroy_vq(table->tab[i]);
>> table->tab[i] = NULL;
>> @@ -456,7 +456,7 @@ static int gred_change(struct Qdisc *sch, struct nlattr *opt)
>> if (table->tab[table->def])
>> def_prio = table->tab[table->def]->prio;
>>
>> - printk(KERN_DEBUG "GRED: DP %u does not have a prio "
>> + pr_debug("GRED: DP %u does not have a prio "
>> "setting default to %d\n", ctl->DP, def_prio);
>>
>> prio = def_prio;
>> diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
>> index f6e8a74..6586f3b 100644
>> --- a/net/sched/sch_htb.c
>> +++ b/net/sched/sch_htb.c
>> @@ -712,7 +712,7 @@ static s64 htb_do_events(struct htb_sched *q, const int level,
>>
>> /* too much load - let's continue after a break for scheduling */
>> if (!(q->warned & HTB_WARN_TOOMANYEVENTS)) {
>> - pr_warning("htb: too many events!\n");
>> + pr_warn("htb: too many events!\n");
>> q->warned |= HTB_WARN_TOOMANYEVENTS;
>> }
>>
>> @@ -1484,13 +1484,13 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
>> if (!cl->level) {
>> cl->quantum = hopt->rate.rate / q->rate2quantum;
>> if (!hopt->quantum && cl->quantum < 1000) {
>> - pr_warning(
>> + pr_warn(
>> "HTB: quantum of class %X is small. Consider r2q change.\n",
>
> Also, this looks quite ugly, so changing into pr_warn("HTB: .....") would be better if
> you're at it anyway.
Thanks, i will fix it in v3.
>
>> cl->common.classid);
>> cl->quantum = 1000;
>> }
>> if (!hopt->quantum && cl->quantum > 200000) {
>> - pr_warning(
>> + pr_warn(
>> "HTB: quantum of class %X is big. Consider r2q change.\n",
>> cl->common.classid);
>
> Ditto
>
>> cl->quantum = 200000;
>>
>
> .
>
^ permalink raw reply
* Re: [PATCH net-next 3/3] net: allow to leave the buffer fragmented in skb_cow_data()
From: Mathias Krause @ 2013-11-07 8:55 UTC (permalink / raw)
To: Herbert Xu; +Cc: David S. Miller, Steffen Klassert, Dmitry Tarnyagin, netdev
In-Reply-To: <20131106124811.GA20404@gondor.apana.org.au>
On 06.11.2013 13:48, Herbert Xu wrote:
> On Wed, Nov 06, 2013 at 01:42:03PM +0100, Mathias Krause wrote:
>> Well, skb_cow_data() will only copy, i.e. call __pskb_pull_tail(), in
>> case the skb is either cloned or fragmented. As you already said it
>> won't be cloned in your case. Does it contain fragments, i.e. is
>> skb_shinfo(skb)->nr_frags != 0? If not, we won't copy with the current
>> code either.
>
> Whenever we say page it means nr_frags != 0. So currently as
> long as we have pages in our skb we will copy. With your patch
> we will no longer copy in the case where we have pages but the
> skb isn't cloned. In fact that is the whole point of your patch.
Indeed. I want to avoid the costly memcpy() on the CPU serving the NIC
interrupt, as that is a bottleneck in my setup. The packet processing --
encrypting/decrypting of ESP packets -- gets mostly parallelized via
pcrypt, so that's fine. But the initial network processing, i.e. getting
to pcrypt, is what's throttling the throughput currently. (RPS only
partly solves this problem as for the ESP receive path most traffic ends
up on the same flow).
>> Can you please explain why this would be needed? I still don't get the
>> reasoning behind "pages are considered not writable at the moment even
>> if they are anonymous".
>
> As I said you don't know where the page in the skb came from. It
> may point to read-only memory or memory that's shared with another
> task that isn't expecting things to change underneath it.
>
> It may well turn out to most if not all cases of pages are safe to
> be written to if skb_cloned == 0. However, we'd need to do a full
> audit of every source of page frags to be sure. For example, you'd
> need to look at net drivers and splice.
Ah, okay. Now that makes sense. I'll look into it.
Thanks,
Mathias
^ permalink raw reply
* Re: [PATCH net-next 3/3] net: allow to leave the buffer fragmented in skb_cow_data()
From: Mathias Krause @ 2013-11-07 8:56 UTC (permalink / raw)
To: Eric Dumazet
Cc: Herbert Xu, David S. Miller, Steffen Klassert, Dmitry Tarnyagin,
netdev
In-Reply-To: <1383755989.4291.178.camel@edumazet-glaptop2.roam.corp.google.com>
On 06.11.2013 17:39, Eric Dumazet wrote:
> On Wed, 2013-11-06 at 20:48 +0800, Herbert Xu wrote:
>> On Wed, Nov 06, 2013 at 01:42:03PM +0100, Mathias Krause wrote:
>>> Well, skb_cow_data() will only copy, i.e. call __pskb_pull_tail(), in
>>> case the skb is either cloned or fragmented. As you already said it
>>> won't be cloned in your case. Does it contain fragments, i.e. is
>>> skb_shinfo(skb)->nr_frags != 0? If not, we won't copy with the current
>>> code either.
>> Whenever we say page it means nr_frags != 0. So currently as
>> long as we have pages in our skb we will copy. With your patch
>> we will no longer copy in the case where we have pages but the
>> skb isn't cloned. In fact that is the whole point of your patch.
>>
>>> Can you please explain why this would be needed? I still don't get the
>>> reasoning behind "pages are considered not writable at the moment even
>>> if they are anonymous".
>> As I said you don't know where the page in the skb came from. It
>> may point to read-only memory or memory that's shared with another
>> task that isn't expecting things to change underneath it.
>
> Note that we might have now a per skb flag telling is all page frags are
> owned.
>
> This is SKBTX_SHARED_FRAG
>
> If SKBTX_SHARED_FRAG is set on shared_info->tx_flags, then at least
> one frag is not safe and we must copy all frags.
>
>
> For example, this flag is set in TCP sendfile() path (vmsplice()...),
> and zero copy paths in general (macvtap, tun)
>
> I am not 100% sure, but this could be a hint.
Thanks for the hint, Eric!
Mathias
^ permalink raw reply
* Re: [PATCH net-next 3/3] net: allow to leave the buffer fragmented in skb_cow_data()
From: Herbert Xu @ 2013-11-07 9:01 UTC (permalink / raw)
To: Mathias Krause
Cc: David S. Miller, Steffen Klassert, Dmitry Tarnyagin, netdev
In-Reply-To: <527B5586.3090401@secunet.com>
On Thu, Nov 07, 2013 at 09:55:34AM +0100, Mathias Krause wrote:
>
> Indeed. I want to avoid the costly memcpy() on the CPU serving the NIC
> interrupt, as that is a bottleneck in my setup. The packet processing --
> encrypting/decrypting of ESP packets -- gets mostly parallelized via
> pcrypt, so that's fine. But the initial network processing, i.e. getting
> to pcrypt, is what's throttling the throughput currently. (RPS only
> partly solves this problem as for the ESP receive path most traffic ends
> up on the same flow).
How about this: instead of doing in-place encryption/decryption
let's allocate a new destination buffer and encrypt/decrypt into
it. Then we essentially get the copy for free.
So instead of modifying skb_cow_data you can change esp4.c, etc.
Cheers,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply
* Re: [PATCH net-next v4 3/9] static_key: WARN on usage before jump_label_init was called
From: Ingo Molnar @ 2013-11-07 9:08 UTC (permalink / raw)
To: Steven Rostedt
Cc: Hannes Frederic Sowa, netdev, linux-kernel, Peter Zijlstra,
Andi Kleen, Jason Baron
In-Reply-To: <20131106200200.7847535d@gandalf.local.home>
* Steven Rostedt <rostedt@goodmis.org> wrote:
> On Thu, 7 Nov 2013 01:50:27 +0100
> Hannes Frederic Sowa <hannes@stressinduktion.org> wrote:
>
> > On Wed, Nov 06, 2013 at 04:16:49PM -0500, Steven Rostedt wrote:
> > > Sorry for the late reply, but this was sent while I was getting ready
> > > for my two week conference trip.
> > >
> > > Note, this should not go through the net tree, but instead should go
> > > through tip, as it deals with jump labels and not networking.
> > >
> > > Otherwise, this patch looks good.
> > >
> > > Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
> >
> > Thanks for the review!
> >
> > The patch already got queued up in net-next. Is this ok or what do you
> > suggest to resolve this?
> >
>
> I'm fine, but really. Changes need to go through the trees they are
> maintained by. Would Dave Miller like it if I pushed patches that
> touched the net directory without a single Ack?
I second that concern.
Thanks,
Ingo
^ permalink raw reply
* [PATCH net] net/mlx4_en: Fixed crash when port type is changed
From: Amir Vadai @ 2013-11-07 9:08 UTC (permalink / raw)
To: David S. Miller; +Cc: netdev, Amir Vadai, Yevgeny Petrilin, Or Gerlitz
timecounter_init() was was called only after first potential
timecounter_read().
Moved mlx4_en_init_timestamp() before mlx4_en_init_netdev()
Signed-off-by: Amir Vadai <amirv@mellanox.com>
---
Please pull into -stable for kernels >= 3.10
drivers/net/ethernet/mellanox/mlx4/en_main.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_main.c b/drivers/net/ethernet/mellanox/mlx4/en_main.c
index a071cda..0d087b0 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_main.c
@@ -264,6 +264,10 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH)
mdev->port_cnt++;
+ /* Initialize time stamp mechanism */
+ if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS)
+ mlx4_en_init_timestamp(mdev);
+
mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH) {
if (!dev->caps.comp_pool) {
mdev->profile.prof[i].rx_ring_num =
@@ -301,10 +305,6 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
mdev->pndev[i] = NULL;
}
- /* Initialize time stamp mechanism */
- if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS)
- mlx4_en_init_timestamp(mdev);
-
return mdev;
err_mr:
--
1.8.3.4
^ permalink raw reply related
* [PATCH net-next] net_sched: tbf: support of 64bit rates
From: Yang Yingliang @ 2013-11-07 9:40 UTC (permalink / raw)
To: davem, netdev; +Cc: eric.dumazet, jhs
With psched_ratecfg_precompute(), tbf can deal with 64bit rates.
Add two new attributes so that tc can use them to break the 32bit
limit.
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
---
include/uapi/linux/pkt_sched.h | 2 ++
net/sched/sch_tbf.c | 22 ++++++++++++++++++----
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h
index f2624b5..307f293 100644
--- a/include/uapi/linux/pkt_sched.h
+++ b/include/uapi/linux/pkt_sched.h
@@ -171,6 +171,8 @@ enum {
TCA_TBF_PARMS,
TCA_TBF_RTAB,
TCA_TBF_PTAB,
+ TCA_TBF_RATE64,
+ TCA_TBF_PRATE64,
__TCA_TBF_MAX,
};
diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c
index b057122..b736517 100644
--- a/net/sched/sch_tbf.c
+++ b/net/sched/sch_tbf.c
@@ -266,20 +266,23 @@ static const struct nla_policy tbf_policy[TCA_TBF_MAX + 1] = {
[TCA_TBF_PARMS] = { .len = sizeof(struct tc_tbf_qopt) },
[TCA_TBF_RTAB] = { .type = NLA_BINARY, .len = TC_RTAB_SIZE },
[TCA_TBF_PTAB] = { .type = NLA_BINARY, .len = TC_RTAB_SIZE },
+ [TCA_TBF_RATE64] = { .type = NLA_U64 },
+ [TCA_TBF_PRATE64] = { .type = NLA_U64 },
};
static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
{
int err;
struct tbf_sched_data *q = qdisc_priv(sch);
- struct nlattr *tb[TCA_TBF_PTAB + 1];
+ struct nlattr *tb[TCA_TBF_MAX + 1];
struct tc_tbf_qopt *qopt;
struct qdisc_rate_table *rtab = NULL;
struct qdisc_rate_table *ptab = NULL;
struct Qdisc *child = NULL;
int max_size, n;
+ u64 rate64 = 0, prate64 = 0;
- err = nla_parse_nested(tb, TCA_TBF_PTAB, opt, tbf_policy);
+ err = nla_parse_nested(tb, TCA_TBF_MAX, opt, tbf_policy);
if (err < 0)
return err;
@@ -341,9 +344,13 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
q->tokens = q->buffer;
q->ptokens = q->mtu;
- psched_ratecfg_precompute(&q->rate, &rtab->rate, 0);
+ if (tb[TCA_TBF_RATE64])
+ rate64 = nla_get_u64(tb[TCA_TBF_RATE64]);
+ psched_ratecfg_precompute(&q->rate, &rtab->rate, rate64);
if (ptab) {
- psched_ratecfg_precompute(&q->peak, &ptab->rate, 0);
+ if (tb[TCA_TBF_PRATE64])
+ prate64 = nla_get_u64(tb[TCA_TBF_PRATE64]);
+ psched_ratecfg_precompute(&q->peak, &ptab->rate, prate64);
q->peak_present = true;
} else {
q->peak_present = false;
@@ -402,6 +409,13 @@ static int tbf_dump(struct Qdisc *sch, struct sk_buff *skb)
opt.buffer = PSCHED_NS2TICKS(q->buffer);
if (nla_put(skb, TCA_TBF_PARMS, sizeof(opt), &opt))
goto nla_put_failure;
+ if ((q->rate.rate_bytes_ps >= (1ULL << 32)) &&
+ nla_put_u64(skb, TCA_TBF_RATE64, q->rate.rate_bytes_ps))
+ goto nla_put_failure;
+ if (q->peak_present &&
+ (q->peak.rate_bytes_ps >= (1ULL << 32)) &&
+ nla_put_u64(skb, TCA_TBF_PRATE64, q->peak.rate_bytes_ps))
+ goto nla_put_failure;
nla_nest_end(skb, nest);
return skb->len;
--
1.7.12
^ permalink raw reply related
* [PATCHv2 net-next 1/3] xfrm: Try to honor policy index if it's supplied by user
From: Fan Du @ 2013-11-07 9:47 UTC (permalink / raw)
To: steffen.klassert, herbert, davem; +Cc: netdev
In-Reply-To: <1383817670-5783-1-git-send-email-fan.du@windriver.com>
xfrm code always searches for unused policy index for
newly created policy regardless whether or not user
space policy index hint supplied.
This patch enables such feature so that using
"ip xfrm ... index=xxx" can be used by user to set
specific policy index.
Currently this beahvior is broken, so this patch make
it happen as expected.
Signed-off-by: Fan Du <fan.du@windriver.com>
---
v2:
-Unchanged
---
net/xfrm/xfrm_policy.c | 16 +++++++++++-----
net/xfrm/xfrm_user.c | 10 +++++++++-
2 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index 9a91f74..a5bbdfb 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -538,7 +538,7 @@ static void xfrm_hash_resize(struct work_struct *work)
/* Generate new index... KAME seems to generate them ordered by cost
* of an absolute inpredictability of ordering of rules. This will not pass. */
-static u32 xfrm_gen_index(struct net *net, int dir)
+static u32 xfrm_gen_index(struct net *net, int dir, u32 index)
{
static u32 idx_generator;
@@ -548,8 +548,14 @@ static u32 xfrm_gen_index(struct net *net, int dir)
u32 idx;
int found;
- idx = (idx_generator | dir);
- idx_generator += 8;
+ if (!index) {
+ idx = (idx_generator | dir);
+ idx_generator += 8;
+ } else {
+ idx = index;
+ index = 0;
+ }
+
if (idx == 0)
idx = 8;
list = net->xfrm.policy_byidx + idx_hash(net, idx);
@@ -672,7 +678,7 @@ int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl)
xfrm_policy_requeue(delpol, policy);
__xfrm_policy_unlink(delpol, dir);
}
- policy->index = delpol ? delpol->index : xfrm_gen_index(net, dir);
+ policy->index = delpol ? delpol->index : xfrm_gen_index(net, dir, policy->index);
hlist_add_head(&policy->byidx, net->xfrm.policy_byidx+idx_hash(net, policy->index));
policy->curlft.add_time = get_seconds();
policy->curlft.use_time = 0;
@@ -1192,7 +1198,7 @@ int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol)
sk->sk_policy[dir] = pol;
if (pol) {
pol->curlft.add_time = get_seconds();
- pol->index = xfrm_gen_index(net, XFRM_POLICY_MAX+dir);
+ pol->index = xfrm_gen_index(net, XFRM_POLICY_MAX+dir, 0);
__xfrm_policy_link(pol, XFRM_POLICY_MAX+dir);
}
if (old_pol) {
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index f964d4c..4e0546e 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -1189,6 +1189,8 @@ static int verify_policy_type(u8 type)
static int verify_newpolicy_info(struct xfrm_userpolicy_info *p)
{
+ int ret;
+
switch (p->share) {
case XFRM_SHARE_ANY:
case XFRM_SHARE_SESSION:
@@ -1224,7 +1226,13 @@ static int verify_newpolicy_info(struct xfrm_userpolicy_info *p)
return -EINVAL;
}
- return verify_policy_dir(p->dir);
+ ret = verify_policy_dir(p->dir);
+ if (ret)
+ return ret;
+ if (p->index && ((p->index & XFRM_POLICY_MAX) != p->dir))
+ return -EINVAL;
+
+ return 0;
}
static int copy_from_user_sec_ctx(struct xfrm_policy *pol, struct nlattr **attrs)
--
1.7.9.5
^ permalink raw reply related
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