Netdev List
 help / color / mirror / Atom feed
* Re: Active URB submitted twice in pegasus driver
From: Petko Manolov @ 2013-03-26 20:54 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: linux-usb, Greg KH, netdev, Stephen Hemminger
In-Reply-To: <20130326185218.GD10317@xanatos>

[-- Attachment #1: Type: TEXT/PLAIN, Size: 343 bytes --]

On Tue, 26 Mar 2013, Sarah Sharp wrote:

> But considering the multicast code is pretty old, I bet I'm running into
> a different bug...

The fix is rather small.  Approximately one gigabyte was transferred while 
alternating in and out of promiscuous mode.  No issues.

I guess this should move the driver out of the equation.


cheers,
Petko

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: TEXT/x-diff; name=pegasus.diff, Size: 422 bytes --]

diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c
index 73051d1..879da39 100644
--- a/drivers/net/usb/pegasus.c
+++ b/drivers/net/usb/pegasus.c
@@ -1220,8 +1220,6 @@ static void pegasus_set_multicast(struct net_device *net)
 		pegasus->eth_regs[EthCtrl2] &= ~RX_PROMISCUOUS;
 	}
 
-	pegasus->ctrl_urb->status = 0;
-
 	pegasus->flags |= ETH_REGS_CHANGE;
 	ctrl_callback(pegasus->ctrl_urb);
 }

^ permalink raw reply related

* [PATCH v2] libertas: drop maintainership
From: Dan Williams @ 2013-03-26 19:40 UTC (permalink / raw)
  To: netdev; +Cc: linux-wireless, Daniel Drake, Bing Zhao, John W. Linville

Would be better maintained by somebody who actualy has time for it.

Signed-off-by: Dan Williams <dcbw@redhat.com>
---
I'm quite happy to ACK somebody else picking libertas up, and I'm also
happy to investigate how to send my hardware cache to the new
maintainer.  (usb8388 dev modules, some CF8385s, some sd8686s, etc).
Also happy to forward along the libertas-dev moderator password.

diff --git a/MAINTAINERS b/MAINTAINERS
index c08411b..e2e32d9 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -5043,9 +5043,8 @@ S:	Maintained
 F:	drivers/net/ethernet/marvell/sk*
 
 MARVELL LIBERTAS WIRELESS DRIVER
-M:	Dan Williams <dcbw@redhat.com>
 L:	libertas-dev@lists.infradead.org
-S:	Maintained
+S:	Orphan
 F:	drivers/net/wireless/libertas/
 
 MARVELL MV643XX ETHERNET DRIVER

^ permalink raw reply related

* [GIT] Networking
From: David Miller @ 2013-03-26 19:31 UTC (permalink / raw)
  To: torvalds; +Cc: akpm, netdev, linux-kernel


1) Always increment IPV4 ID field in encapsulated GSO packets, even when DF
   is set.  Regression fix from Pravin B Shelar.

2) Fix per-net subsystem initialization in netfilter conntrack, otherwise
   we may access dynamically allocated memory before it is actually
   allocated.  From Gao Feng.

3) Fix DMA buffer lengths in iwl3945 driver, from Stanislaw Gruszka.

4) Fix race between submission of sync vs. async commands in mwifiex
   driver, from Amitkumar Karwar.

5) Add missing cancel of command timer in mwifiex driver, from Bing
   Zhao.

6) Missing SKB free in rtlwifi USB driver, from Jussi Kivilinna.

7) Thermal layer tries to use a genetlink multicast string that is
   longer than the 16 character limit.  Fix it and add a BUG check
   to prevent this kind of thing from happening in the future.

   From Masatake YAMATO.

8) Fix many bugs in the handling of the teardown of L2TP connections,
   UDP encapsulation instances, and sockets.  From Tom Parkin.

9) Missing socket release in IRDA, from Kees Cook.

10) Fix fec driver modular build, from Fabio Estevam.

11) Erroneous use of kfree() instead of free_netdev() in lantiq_etop, from
    Wei Yongjun.

12) Fix bugs in handling of queue numbers and steering rules in mlx4 driver,
    from Moshe Lazer, Hadar Hen Zion, and Or Gerlitz.

13) Some FOO_DIAG_MAX constants were defined off by one, fix from Andrey Vagin.

14) TCP segmentation deferral is unintentionally done too strongly, breaking
    ACK clocking.  Fix from Eric Dumazet.

15) net_enable_timestamp() can legitimately be invoked from software
    interrupts, and in a way that is safe, so remove the WARN_ON().
    Also from Eric Dumazet.

16) Fix use after free in VLANs, from Cong Wang.

17) Fix TCP slow start retransmit storms after SACK reneging, from
    Yuchung Cheng.

18) Unix socket release should mark a socket dead before NULL'ing
    out sock->sk, otherwise we can race.  Fix from Paul Moore.

19) IPV6 addrconf code can try to free static memory, from Hong Zhiguo.

20) Fix register mis-programming, NULL pointer derefs, and wrong PHC clock
    frequency in IGB driver.  From Lior LevyAlex Williamson, Jiri Benc, and
    Jeff Kirsher.

21) skb->ip_summed logic in pch_gbe driver is reversed, breaking packet
    forwarding.  Fix from Veaceslav Falico.

22) Bonding driver leaks 'master' sysfs file on slave sysfs file creation
    failure.  Fix also from Veaceslav Falico.

The following changes since commit 10b38669d64c757cfd927e3820292c580ed70aae:

  Merge tag 'for-linus-v3.9-rc4' of git://oss.sgi.com/xfs/xfs (2013-03-19 15:17:40 -0700)

are available in the git repository at:


  git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git master

for you to fetch changes up to 330305cc4a6b0cb75c22fc01b8826f0ad755550f:

  ipv4: Fix ip-header identification for gso packets. (2013-03-26 13:50:05 -0400)

----------------------------------------------------------------
Alex Williamson (2):
      igb: Fix null pointer dereference
      igb: SR-IOV init reordering

Amitkumar Karwar (1):
      mwifiex: fix race when queuing commands

Andrey Vagin (1):
      net: fix *_DIAG_MAX constants

Bing Zhao (2):
      mwifiex: skip pending commands after function shutdown
      mwifiex: cancel cmd timer and free curr_cmd in shutdown process

Cong Wang (1):
      8021q: fix a potential use-after-free

Daniel Borkmann (1):
      flow_keys: include thoff into flow_keys for later usage

David S. Miller (5):
      Merge branch 'master' of git://1984.lsi.us.es/nf
      Merge branch 'l2tp'
      Merge branch 'for-davem' of git://git.kernel.org/.../linville/wireless
      Merge branch 'mlx4'
      Merge branch 'master' of git://git.kernel.org/.../jkirsher/net

Eric Dumazet (2):
      tcp: preserve ACK clocking in TSO
      net: remove a WARN_ON() in net_enable_timestamp()

Fabio Estevam (2):
      net: fec: Define indexes as 'unsigned int'
      fec: Fix the build as module

Felix Fietkau (2):
      ath9k_hw: revert chainmask to user configuration after calibration
      ath9k: limit tx path hang check to normal data queues

Florian Westphal (1):
      netfilter: ip6t_NPT: restrict to mangle table

Gao feng (1):
      netfilter: nf_conntrack: register pernet subsystem before register L4 proto

Hadar Hen Zion (4):
      net/mlx4_core: Fix wrong order of flow steering resources removal
      net/mlx4_en: Remove ethtool flow steering rules before releasing QPs
      net/mlx4_core: Always use 64 bit resource ID when doing lookup
      net/mlx4_core: Disallow releasing VF QPs which have steering rules

Hong Zhiguo (1):
      ipv6: fix bad free of addrconf_init_net

Hong zhi guo (1):
      bridge: fix crash when set mac address of br interface

Jiri Benc (1):
      igb: fix PHC stopping on max freq

John W. Linville (2):
      Merge branch 'master' of git://git.kernel.org/.../bluetooth/bluetooth
      Merge branch 'master' of git://git.kernel.org/.../linville/wireless into for-davem

Julian Anastasov (3):
      ipvs: fix sctp chunk length order
      ipvs: add backup_only flag to avoid loops
      ipvs: remove extra rcu lock

Jussi Kivilinna (1):
      rtlwifi: usb: add missing freeing of skbuff

Kees Cook (1):
      net/irda: add missing error path release_sock call

Kumar Amit Mehta (1):
      bnx2x: fix assignment of signed expression to unsigned variable

Lior Levy (1):
      igb: fix i350 anti spoofing config

Lothar Waßmann (1):
      net: ethernet: cpsw: fix erroneous condition in error check

Martin Fuzzey (1):
      ipconfig: Fix newline handling in log message.

Masatake YAMATO (2):
      genetlink: trigger BUG_ON if a group name is too long
      thermal: shorten too long mcast group name

Ming Lei (2):
      Bluetooth: Add support for Dell[QCA 0cf3:0036]
      Bluetooth: Add support for Dell[QCA 0cf3:817a]

Moshe Lazer (1):
      net/mlx4_core: Fix wrong mask applied on EQ numbers in the wrapper

Pablo Neira Ayuso (1):
      netfilter: nfnetlink_queue: fix incorrect initialization of copy range field

Paul Bolle (1):
      netfilter: remove unused "config IP_NF_QUEUE"

Paul Moore (1):
      unix: fix a race condition in unix_release()

Pravin B Shelar (1):
      ipv4: Fix ip-header identification for gso packets.

Sergei Shtylyov (2):
      sh_eth: fix bitbang memory leak
      sh_eth: check TSU registers ioremap() error

Stanislaw Gruszka (1):
      iwl3945: fix length of dma buffers

Stephen Hemminger (1):
      igb: make sensor info static

Tom Parkin (12):
      udp: add encap_destroy callback
      l2tp: add udp encap socket destroy handler
      l2tp: export l2tp_tunnel_closeall
      l2tp: close sessions in ip socket destroy callback
      l2tp: close sessions before initiating tunnel delete
      l2tp: take a reference for kernel sockets in l2tp_tunnel_sock_lookup
      l2tp: don't BUG_ON sk_socket being NULL
      l2tp: add session reorder queue purge function to core
      l2tp: purge session reorder queue on delete
      l2tp: push all ppp pseudowire shutdown through .release handler
      l2tp: avoid deadlock in l2tp stats update
      l2tp: unhash l2tp sessions on delete, not on free

Veaceslav Falico (2):
      pch_gbe: fix ip_summed checksum reporting on rx
      bonding: remove already created master sysfs link on failure

Vinicius Costa Gomes (1):
      Bluetooth: Fix not closing SCO sockets in the BT_CONNECT2 state

Wei Yongjun (2):
      lpc_eth: fix error return code in lpc_eth_drv_probe()
      lantiq_etop: use free_netdev(netdev) instead of kfree()

Yuchung Cheng (1):
      tcp: undo spurious timeout after SACK reneging

dingtianhong (1):
      af_unix: dont send SCM_CREDENTIAL when dest socket is NULL

xunleer (1):
      ixgbevf: don't release the soft entries

 Documentation/networking/ipvs-sysctl.txt              |   7 +++
 drivers/bluetooth/ath3k.c                             |   4 ++
 drivers/bluetooth/btusb.c                             |   2 +
 drivers/net/bonding/bond_sysfs.c                      |   5 ++
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c       |  18 +++---
 drivers/net/ethernet/freescale/fec.c                  |   6 +-
 drivers/net/ethernet/freescale/fec_ptp.c              |   3 +
 drivers/net/ethernet/intel/igb/e1000_82575.c          |  33 +++++-----
 drivers/net/ethernet/intel/igb/igb_hwmon.c            |   2 +-
 drivers/net/ethernet/intel/igb/igb_main.c             |   4 +-
 drivers/net/ethernet/intel/igb/igb_ptp.c              |   2 +-
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c     |  24 +++++--
 drivers/net/ethernet/lantiq_etop.c                    |   2 +-
 drivers/net/ethernet/mellanox/mlx4/en_netdev.c        |  22 +++----
 drivers/net/ethernet/mellanox/mlx4/eq.c               |   2 +-
 drivers/net/ethernet/mellanox/mlx4/resource_tracker.c |  45 ++++++++++---
 drivers/net/ethernet/nxp/lpc_eth.c                    |   3 +-
 drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c  |   4 +-
 drivers/net/ethernet/renesas/sh_eth.c                 |  10 +++
 drivers/net/ethernet/renesas/sh_eth.h                 |   1 +
 drivers/net/ethernet/ti/cpsw.c                        |   2 +-
 drivers/net/wireless/ath/ath9k/ar9003_calib.c         |   4 ++
 drivers/net/wireless/ath/ath9k/link.c                 |  26 ++++----
 drivers/net/wireless/iwlegacy/3945-mac.c              |  22 ++++---
 drivers/net/wireless/mwifiex/cmdevt.c                 |  22 +++++--
 drivers/net/wireless/mwifiex/init.c                   |   8 +++
 drivers/net/wireless/mwifiex/main.h                   |   4 +-
 drivers/net/wireless/mwifiex/scan.c                   |   8 +--
 drivers/net/wireless/mwifiex/sta_ioctl.c              |  10 +--
 drivers/net/wireless/rtlwifi/usb.c                    |   1 +
 include/linux/thermal.h                               |   2 +-
 include/linux/udp.h                                   |   1 +
 include/net/flow_keys.h                               |   1 +
 include/net/ip_vs.h                                   |  12 ++++
 include/net/ipip.h                                    |  16 ++---
 include/uapi/linux/packet_diag.h                      |   4 +-
 include/uapi/linux/unix_diag.h                        |   4 +-
 net/8021q/vlan.c                                      |  14 ++---
 net/bluetooth/sco.c                                   |   1 +
 net/bridge/br_fdb.c                                   |   2 +-
 net/core/dev.c                                        |   1 -
 net/core/flow_dissector.c                             |   2 +
 net/ipv4/af_inet.c                                    |   3 +-
 net/ipv4/ipconfig.c                                   |   3 +-
 net/ipv4/netfilter/Kconfig                            |  13 ----
 net/ipv4/tcp_input.c                                  |   7 +--
 net/ipv4/tcp_output.c                                 |   7 ++-
 net/ipv4/udp.c                                        |   7 +++
 net/ipv6/addrconf.c                                   |  26 +++-----
 net/ipv6/netfilter/ip6t_NPT.c                         |   2 +
 net/ipv6/udp.c                                        |   8 +++
 net/irda/af_irda.c                                    |   6 +-
 net/l2tp/l2tp_core.c                                  | 206 +++++++++++++++++++++++++++++-------------------------------
 net/l2tp/l2tp_core.h                                  |  22 ++++---
 net/l2tp/l2tp_debugfs.c                               |  28 ++++-----
 net/l2tp/l2tp_ip.c                                    |   6 ++
 net/l2tp/l2tp_ip6.c                                   |   7 +++
 net/l2tp/l2tp_netlink.c                               |  72 +++++++++------------
 net/l2tp/l2tp_ppp.c                                   | 111 +++++++++++---------------------
 net/netfilter/ipvs/ip_vs_core.c                       |  14 +++--
 net/netfilter/ipvs/ip_vs_ctl.c                        |   7 +++
 net/netfilter/ipvs/ip_vs_proto_sctp.c                 |  16 ++---
 net/netfilter/nf_conntrack_proto_dccp.c               |  12 ++--
 net/netfilter/nf_conntrack_proto_gre.c                |  12 ++--
 net/netfilter/nf_conntrack_proto_sctp.c               |  12 ++--
 net/netfilter/nf_conntrack_proto_udplite.c            |  12 ++--
 net/netfilter/nfnetlink_queue_core.c                  |   2 +-
 net/netlink/genetlink.c                               |   1 +
 net/unix/af_unix.c                                    |  11 ++--
 69 files changed, 540 insertions(+), 459 deletions(-)

^ permalink raw reply

* Re: defxx: skb_push() failing?
From: Maciej W. Rozycki @ 2013-03-26 19:00 UTC (permalink / raw)
  To: David Oostdyk; +Cc: Eric Dumazet, netdev@vger.kernel.org
In-Reply-To: <5151ECAC.9040404@ll.mit.edu>

On Tue, 26 Mar 2013, David Oostdyk wrote:

> (Now if I could only figure out why these FDDI cards don't want to talk to
> each other... I was hoping that was it.)

 I saw 64-bit addresses in your log -- the driver is known not to be 
64-bit-clean, I've had an initial look into it recently and will be 
addressing it shortly.

  Maciej

^ permalink raw reply

* Re: [PATCH net-next] VXLAN: Precompute vin for VXLAN header.
From: Pravin Shelar @ 2013-03-26 19:02 UTC (permalink / raw)
  To: David Stevens; +Cc: davem, jesse, netdev, netdev-owner, Stephen Hemminger
In-Reply-To: <OF112514D1.BA5AC352-ON85257B3A.00666CE7-85257B3A.0066D5ED@us.ibm.com>

On Tue, Mar 26, 2013 at 11:43 AM, David Stevens <dlstevens@us.ibm.com> wrote:
> netdev-owner@vger.kernel.org wrote on 03/26/2013 02:28:59 PM:
>  Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
>
>> @@ -1006,7 +1004,7 @@ static netdev_tx_t vxlan_xmit_one(struct
>> sk_buff *skb, struct net_device *dev,
>>
>>     vxh = (struct vxlanhdr *) __skb_push(skb, sizeof(*vxh));
>>     vxh->vx_flags = htonl(VXLAN_FLAGS);
>> -   vxh->vx_vni = htonl(vni << 8);
>> +   vxh->vx_vni = vxlan->vni;
>
>         This is not correct since vni != vxlan->vni if an alternate
> vni is specified via the fdb entry. You would need to also store
> the fdb vni's as htonl(vni<<<8) and translate those back for netlink
> dump operations, too.
>
>                                                         +-DLS
>
Right I missed fdb vin , Let me send updated patch.

Thanks.

^ permalink raw reply

* Re: Active URB submitted twice in pegasus driver
From: Sarah Sharp @ 2013-03-26 18:52 UTC (permalink / raw)
  To: Petko Manolov; +Cc: linux-usb, Greg KH, netdev, Stephen Hemminger
In-Reply-To: <alpine.DEB.2.02.1303261909260.4226@fry.nucleusys.com>

On Tue, Mar 26, 2013 at 07:28:53PM +0200, Petko Manolov wrote:
> On Tue, 26 Mar 2013, Sarah Sharp wrote:
> 
> >On Tue, Mar 26, 2013 at 05:22:07PM +0200, Petko Manolov wrote:
> >>On Mon, 25 Mar 2013, Sarah Sharp wrote:
> >After taking a brief glance at the pegasus code,
> >pegasus_set_multicast looks broken.  It sets the control URB
> >status to zero and calls ctrl_callback(), which does some stuff if
> >the URB status is zero.  It doesn't look like
> >pegasus_set_multicast() is an URB callback function, so why in the
> >world is it touching a control URB that could possibly be in
> >flight else where?
> 
> Beats me, i've got nothing to do with this driver. :-P
> 
> Anyway, playing with the URB status looks rather stupid and is
> definitely a bug.  I'll make a patch that fixes the problem.
> 
> >It looks like the control URB is used to do things like get or set
> >registers, so what's stopping the upper layers from calling get
> >registers (which will submit the control URB and schedule a wait
> >queue), and then pegasus_set_multicast(), which will go overwrite
> >the active URB status?  USB device drivers should not be writing
> >or reading fields in a submitted URB until the completion
> >handler's callback function is called.
> 
> Err, see my previous comment.  It can't be me.  Maybe i've been too
> drunk. Or stupid.  Or both... :-)

Nah, everybody makes silly coding mistakes.  I was just trying to
clarify, since I don't know the driver.  Send me a patch and I'll see if
it fixes the warning.

But considering the multicast code is pretty old, I bet I'm running into
a different bug...

Sarah Sharp

^ permalink raw reply

* Re: [PATCH net-next] VXLAN: Precompute vin for VXLAN header.
From: David Stevens @ 2013-03-26 18:43 UTC (permalink / raw)
  To: Pravin B Shelar
  Cc: davem, jesse, netdev, netdev-owner, Pravin B Shelar,
	Stephen Hemminger
In-Reply-To: <1364322539-27141-1-git-send-email-pshelar@nicira.com>

netdev-owner@vger.kernel.org wrote on 03/26/2013 02:28:59 PM:
 Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
 
> @@ -1006,7 +1004,7 @@ static netdev_tx_t vxlan_xmit_one(struct 
> sk_buff *skb, struct net_device *dev,
> 
>     vxh = (struct vxlanhdr *) __skb_push(skb, sizeof(*vxh));
>     vxh->vx_flags = htonl(VXLAN_FLAGS);
> -   vxh->vx_vni = htonl(vni << 8);
> +   vxh->vx_vni = vxlan->vni;

        This is not correct since vni != vxlan->vni if an alternate
vni is specified via the fdb entry. You would need to also store
the fdb vni's as htonl(vni<<<8) and translate those back for netlink
dump operations, too.

                                                        +-DLS

^ permalink raw reply

* Re: defxx: skb_push() failing?
From: David Oostdyk @ 2013-03-26 18:45 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: netdev@vger.kernel.org, macro@linux-mips.org
In-Reply-To: <1364315410.1716.40.camel@edumazet-glaptop>

[-- Attachment #1: Type: text/plain, Size: 5964 bytes --]

On 03/26/13 12:30, Eric Dumazet wrote:
> On Tue, 2013-03-26 at 12:03 -0400, David Oostdyk wrote:
>> On 03/26/13 11:15, Eric Dumazet wrote:
>>> On Tue, 2013-03-26 at 10:29 -0400, David Oostdyk wrote:
>>>> Hello,
>>>>
>>>> In dfx_xmt_queue_pkt() in defxx.c, there is a skb_push(3) call which
>>>> makes room for 3 packet request header bytes.  There is some discussion
>>>> in the driver explaining why those three bytes will be available.  I
>>>> have an old FDDI card that I'm trying to bring up:
>>>>
>>>> 05:05.0 FDDI network controller: Digital Equipment Corporation
>>>> PCI-to-PDQ Interface Chip [PFI] (rev 02)
>>>>
>>>> Most skbuffs that come through dfx_xmit_queue_pkt() have 11 bytes
>>>> between skb->head and skb->data.  On the other hand, at almost exactly
>>>> 60-second intervals, an skb arrives that has zero bytes between
>>>> skb->head and skb->data.  This normally causes a kernel panic, and for
>>>> the time I just skip over such skb's.
>>>>
>>>> Does anyone have advice on where I should start digging to find the
>>>> cause of this?
>>>>
>>> Have you read comments in defxx.c file around line 151 ?
>>>
>>> If one skb arrives with not enough headroom, you could add a
>>>
>>> WARN_ON_ONCE(skb_headroom(skb) < 3);
>>>
>>> and report stack trace so that we can identify and fix the caller.
>>>
>>>
>>>
>> I have read the comments, and alloc_fddidev() seems to set the
>> hard_header_len as described.
>>
>> As for the stack trace, thanks for the tip!  Here is the output
>> (including various defxx debug statements):
>>
>> [  350.312482] defxx: v1.10 2006/12/14  Lawrence V. Stefani and others
>> [  350.312582] In dfx_driver_init...
>> [  350.312583] In dfx_bus_init...
>> [  350.312585] In dfx_bus_config_check...
>> [  351.699416] 0000:05:05.0: DEFPA at addr = 0xf9eeff80, IRQ = 26,
>> Hardware addr = 00-60-b0-58-48-53
>> [  351.699425] 0000:05:05.0: Descriptor block virt = FFFF8800CB834000,
>> phys = CB834000
>> [  351.699426] 0000:05:05.0: Command Request buffer virt =
>> FFFF8800CB835380, phys = CB835380
>> [  351.699427] 0000:05:05.0: Command Response buffer virt =
>> FFFF8800CB835580, phys = CB835580
>> [  351.699428] 0000:05:05.0: Receive buffer block virt =
>> FFFF8800CB835780, phys = CB835780
>> [  351.699429] 0000:05:05.0: Consumer block virt = FFFF8800CB835780,
>> phys = CB835780
>> [  351.700049] 0000:05:05.0: registered as fddi0
>> [  351.756194] In dfx_open...
>> [  351.756215] In dfx_adap_init...
>> [  353.927747] fddi0: Multicast address table updated!  Added 1 addresses.
>> [  353.930352] fddi0: Adapter filters updated!
>> [  353.975887] fddi0: Multicast address table updated!  Added 1 addresses.
>> [  353.978492] fddi0: Adapter filters updated!
>> [  354.043455] fddi0: Multicast address table updated!  Added 2 addresses.
>> [  354.046359] fddi0: Adapter filters updated!
>> [  354.097315] fddi0: Multicast address table updated!  Added 3 addresses.
>> [  354.099919] fddi0: Adapter filters updated!
>> [  354.204301] fddi0: Multicast address table updated!  Added 3 addresses.
>> [  354.207107] fddi0: Adapter filters updated!
>> [  354.257972] fddi0: Multicast address table updated!  Added 3 addresses.
>> [  354.261577] fddi0: Adapter filters updated!
>> [  362.976038] ------------[ cut here ]------------
>> [  362.976044] WARNING: at drivers/net/fddi/defxx.c:3202
>> dfx_xmt_queue_pkt+0xa2/0x2f2 [defxx]()
>> [  362.976046] Hardware name: Precision WorkStation 490
>> [  362.976047] Modules linked in: defxx snd_hda_codec_idt snd_hda_intel
>> snd_hda_codec snd_hwdep snd_pcm iTCO_wdt snd_page_alloc lpc_ich
>> snd_timer mfd_core i5000_edac rng_core i2c_i801 fddi rtc_cmos [last
>> unloaded: defxx]
>> [  362.976066] Pid: 1773, comm: aoe_tx Tainted: G          I
>> 3.7.10-hippi+ #6
>> [  362.976068] Call Trace:
>> [  362.976076]  [<ffffffff810357e7>] warn_slowpath_common+0x7e/0x96
>> [  362.976080]  [<ffffffff81035814>] warn_slowpath_null+0x15/0x17
>> [  362.976083]  [<ffffffffa0063213>] dfx_xmt_queue_pkt+0xa2/0x2f2 [defxx]
>> [  362.976088]  [<ffffffff813c3401>] ? map_single+0x45/0x45
>> [  362.976093]  [<ffffffff819175a8>] dev_hard_start_xmit+0x288/0x398
>> [  362.976097]  [<ffffffff81929d1c>] sch_direct_xmit+0x72/0x19b
>> [  362.976100]  [<ffffffff819179ec>] dev_queue_xmit+0x145/0x339
>> [  362.976105]  [<ffffffff8184ab20>] tx+0x1c/0x42
>> [  362.976108]  [<ffffffff818489a2>] kthread+0x5e/0xbf
>> [  362.976113]  [<ffffffff81056451>] ? try_to_wake_up+0x239/0x239
>> [  362.976116]  [<ffffffff81848944>] ? rexmit_timer+0x349/0x349
>> [  362.976119]  [<ffffffff8104c678>] kthread+0xb5/0xbd
>> [  362.976122]  [<ffffffff8104c5c3>] ? __kthread_parkme+0x67/0x67
>> [  362.976127]  [<ffffffff81a314ec>] ret_from_fork+0x7c/0xb0
>> [  362.976129]  [<ffffffff8104c5c3>] ? __kthread_parkme+0x67/0x67
>> [  362.976131] ---[ end trace ce553e95611628f3 ]---
>>
>>
>> Thanks again for any help!
> Are you really using AOE ?
>
> drivers/block/aoe/aoenet.c can apparently call dev_queue_xmit() with non
> compliant skbs.
>
> Please try following patch :
>
> diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c
> index 25ef5c0..92b6d7c 100644
> --- a/drivers/block/aoe/aoecmd.c
> +++ b/drivers/block/aoe/aoecmd.c
> @@ -51,8 +51,9 @@ new_skb(ulong len)
>   {
>   	struct sk_buff *skb;
>   
> -	skb = alloc_skb(len, GFP_ATOMIC);
> +	skb = alloc_skb(len + MAX_HEADER, GFP_ATOMIC);
>   	if (skb) {
> +		skb_reserve(skb, MAX_HEADER);
>   		skb_reset_mac_header(skb);
>   		skb_reset_network_header(skb);
>   		skb->protocol = __constant_htons(ETH_P_AOE);
>
>
>

Hi Eric,

This patch did remove the offending skb's.  (I'm not using AOE - not 
intentionally, anyway - so I'm not sure why this was being called.)

(Now if I could only figure out why these FDDI cards don't want to talk 
to each other... I was hoping that was it.)

Thanks for the help!



[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4567 bytes --]

^ permalink raw reply

* Re: [PATCH net-next] ptp: increase the maximum number of clocks
From: Richard Cochran @ 2013-03-26 18:44 UTC (permalink / raw)
  To: Jiri Benc; +Cc: David Miller, netdev, Ben Hutchings
In-Reply-To: <20130326104836.1379592f@griffin>

On Tue, Mar 26, 2013 at 10:48:36AM +0100, Jiri Benc wrote:
> On Mon, 25 Mar 2013 19:51:20 +0100, Richard Cochran wrote:
> > While that might work for the PTP ioctls, it won't for the main
> > clock_gettime/settime/adjtime call. As you wrote below, these take a
> > dynamic clockid_t (which comes from a file descriptor), and so each
> > device needs its own, unique file system node.
> 
> They need an unique file descriptor, not an unique file. There's nothing
> preventing you from opening the same file multiple times, using each
> obtained file descriptor to access a different PHC. Sure, there is
> currently no place to store a per-fd data in posix-clock implementation
> but that could be added.

Assume you have multiple clocks in the system. You open /dev/ptp, and
you get a FD to be passed to clock_gettime. But *which* clock's time
should be read?

(An extra ioctl to choose the active clock seems a bit gross to me.)

> > For better or worse, we are stuck with char devs, unless we want to
> > redo the clock_xyz API. I certainly don't want to. We can have over a
> > million PTP clocks on a single major number. That should be enough.
> > 
> > IIRC, it is possible to grow the range of minor numbers
> > incrementally. Perhaps you could take a look at that?
> 
> That was what I was originally thinking about. But I don't like it much
> - the overhead will increase significantly with increasing number of
> devices, as the chrdev allocations for a given major are kept in a
> linked list which has to be completely traversed on each allocation.
> We'd also need to replace the ptp_clocks_map with a different data
> structure (e.g. a linked list of bitmaps if we allocate minors in
> chunks to alleviate the chrdev allocation overhead), not helping the
> overhead.

How about using idr and then, at each clock registration, just
increase the range of minors to include the new number?

I wouldn't worry about the overhead at allocation time. It is one time
only, during device registration, and so is not performance critical.

Thanks,
Richard

^ permalink raw reply

* [PATCH net-next] VXLAN: Fix sparse warnings.
From: Pravin B Shelar @ 2013-03-26 18:29 UTC (permalink / raw)
  To: netdev; +Cc: davem, jesse, Pravin B Shelar, Stephen Hemminger

Fixes following warning:-
drivers/net/vxlan.c:471:35: warning: symbol 'dev' shadows an earlier one
drivers/net/vxlan.c:433:26: originally declared here
drivers/net/vxlan.c:794:34: warning: symbol 'vxlan' shadows an earlier one
drivers/net/vxlan.c:757:26: originally declared here

CC: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
---
 drivers/net/vxlan.c |    9 ++++-----
 1 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 7624ab1..62a4438 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -468,15 +468,15 @@ static int vxlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
 		vni = vxlan->vni;
 
 	if (tb[NDA_IFINDEX]) {
-		struct net_device *dev;
+		struct net_device *tdev;
 
 		if (nla_len(tb[NDA_IFINDEX]) != sizeof(u32))
 			return -EINVAL;
 		ifindex = nla_get_u32(tb[NDA_IFINDEX]);
-		dev = dev_get_by_index(net, ifindex);
-		if (!dev)
+		tdev = dev_get_by_index(net, ifindex);
+		if (!tdev)
 			return -EADDRNOTAVAIL;
-		dev_put(dev);
+		dev_put(tdev);
 	} else
 		ifindex = 0;
 
@@ -792,7 +792,6 @@ static int arp_reduce(struct net_device *dev, struct sk_buff *skb)
 	n = neigh_lookup(&arp_tbl, &tip, dev);
 
 	if (n) {
-		struct vxlan_dev *vxlan = netdev_priv(dev);
 		struct vxlan_fdb *f;
 		struct sk_buff	*reply;
 
-- 
1.7.1

^ permalink raw reply related

* [PATCH net-next] VXLAN: Precompute vin for VXLAN header.
From: Pravin B Shelar @ 2013-03-26 18:28 UTC (permalink / raw)
  To: netdev; +Cc: davem, jesse, Pravin B Shelar, Stephen Hemminger

Compute VXLAN vin at time of device create so that there is no need
to translate it on packet send and receive.
This patch do not change userspace interface.

CC: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
---
 drivers/net/vxlan.c |   28 ++++++++++++++--------------
 1 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 7624ab1..8faebf7 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -105,7 +105,7 @@ struct vxlan_fdb {
 struct vxlan_dev {
 	struct hlist_node hlist;
 	struct net_device *dev;
-	__u32		  vni;		/* virtual network id */
+	__be32		  vni;		/* virtual network id */
 	__be32	          gaddr;	/* multicast group */
 	__be32		  saddr;	/* source address */
 	unsigned int      link;		/* link to multicast over */
@@ -133,15 +133,15 @@ struct vxlan_dev {
 /* salt for hash table */
 static u32 vxlan_salt __read_mostly;
 
-static inline struct hlist_head *vni_head(struct net *net, u32 id)
+static inline struct hlist_head *vni_head(struct net *net, __be32 id)
 {
 	struct vxlan_net *vn = net_generic(net, vxlan_net_id);
 
-	return &vn->vni_list[hash_32(id, VNI_HASH_BITS)];
+	return &vn->vni_list[hash_32((__force u32)id, VNI_HASH_BITS)];
 }
 
 /* Look up VNI in a per net namespace table */
-static struct vxlan_dev *vxlan_find_vni(struct net *net, u32 id)
+static struct vxlan_dev *vxlan_find_vni(struct net *net, __be32 id)
 {
 	struct vxlan_dev *vxlan;
 
@@ -658,7 +658,6 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
 	struct vxlanhdr *vxh;
 	struct vxlan_dev *vxlan;
 	struct pcpu_tstats *stats;
-	__u32 vni;
 	int err;
 
 	/* pop off outer UDP header */
@@ -680,10 +679,10 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
 	__skb_pull(skb, sizeof(struct vxlanhdr));
 
 	/* Is this VNI defined? */
-	vni = ntohl(vxh->vx_vni) >> 8;
-	vxlan = vxlan_find_vni(sock_net(sk), vni);
+	vxlan = vxlan_find_vni(sock_net(sk), vxh->vx_vni);
 	if (!vxlan) {
-		netdev_dbg(skb->dev, "unknown vni %d\n", vni);
+		netdev_dbg(skb->dev, "unknown vni %d\n",
+			   (ntohl(vxh->vx_vni) >> 8));
 		goto drop;
 	}
 
@@ -1006,7 +1004,7 @@ static netdev_tx_t vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
 
 	vxh = (struct vxlanhdr *) __skb_push(skb, sizeof(*vxh));
 	vxh->vx_flags = htonl(VXLAN_FLAGS);
-	vxh->vx_vni = htonl(vni << 8);
+	vxh->vx_vni = vxlan->vni;
 
 	__skb_push(skb, sizeof(*uh));
 	skb_reset_transport_header(skb);
@@ -1359,15 +1357,17 @@ static int vxlan_newlink(struct net *net, struct net_device *dev,
 			 struct nlattr *tb[], struct nlattr *data[])
 {
 	struct vxlan_dev *vxlan = netdev_priv(dev);
-	__u32 vni;
+	__u32 id;
+	__be32 vni;
 	int err;
 
 	if (!data[IFLA_VXLAN_ID])
 		return -EINVAL;
 
-	vni = nla_get_u32(data[IFLA_VXLAN_ID]);
+	id = nla_get_u32(data[IFLA_VXLAN_ID]);
+	vni = htonl(id << 8);
 	if (vxlan_find_vni(net, vni)) {
-		pr_info("duplicate VNI %u\n", vni);
+		pr_info("duplicate VNI %u\n", id);
 		return -EEXIST;
 	}
 	vxlan->vni = vni;
@@ -1478,7 +1478,7 @@ static int vxlan_fill_info(struct sk_buff *skb, const struct net_device *dev)
 		.high = htons(vxlan->port_max),
 	};
 
-	if (nla_put_u32(skb, IFLA_VXLAN_ID, vxlan->vni))
+	if (nla_put_u32(skb, IFLA_VXLAN_ID, (ntohl(vxlan->vni) >> 8)))
 		goto nla_put_failure;
 
 	if (vxlan->gaddr && nla_put_be32(skb, IFLA_VXLAN_GROUP, vxlan->gaddr))
-- 
1.7.1

^ permalink raw reply related

* [PATCH net] ipv6: don't accept node local multicast traffic from the wire
From: Hannes Frederic Sowa @ 2013-03-26 18:13 UTC (permalink / raw)
  To: netdev; +Cc: erik.hugne, yoshfuji

Erik Hugne's errata proposal (Errata ID: 3480) to RFC4291 has been
verified: http://www.rfc-editor.org/errata_search.php?eid=3480

We have to check for pkt_type and loopback flag because either the
packets are allowed to travel over the loopback interface (in which case
pkt_type is PACKET_HOST and IFF_LOOPBACK flag is set) or they travel
over a non-loopback interface back to us (in which case PACKET_TYPE is
PACKET_LOOPBACK and IFF_LOOPBACK flag is not set).

Cc: Erik Hugne <erik.hugne@ericsson.com>
Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
---
 net/ipv6/ip6_input.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
index e33fe0a..2bab2aa 100644
--- a/net/ipv6/ip6_input.c
+++ b/net/ipv6/ip6_input.c
@@ -118,6 +118,18 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
 	    ipv6_addr_loopback(&hdr->daddr))
 		goto err;
 
+	/* RFC4291 Errata ID: 3480
+	 * Interface-Local scope spans only a single interface on a
+	 * node and is useful only for loopback transmission of
+	 * multicast.  Packets with interface-local scope received
+	 * from another node must be discarded.
+	 */
+	if (!(skb->pkt_type == PACKET_LOOPBACK ||
+	      dev->flags & IFF_LOOPBACK) &&
+	    ipv6_addr_is_multicast(&hdr->daddr) &&
+	    IPV6_ADDR_MC_SCOPE(&hdr->daddr) == 1)
+		goto err;
+
 	/* RFC4291 2.7
 	 * Nodes must not originate a packet to a multicast address whose scope
 	 * field contains the reserved value 0; if such a packet is received, it
-- 
1.8.1.4

^ permalink raw reply related

* Re: [PATCH 5/6] xen-netback: coalesce slots before copying
From: David Vrabel @ 2013-03-26 18:02 UTC (permalink / raw)
  To: Wei Liu
  Cc: xen-devel@lists.xen.org, netdev@vger.kernel.org, Ian Campbell,
	annie.li@oracle.com, konrad.wilk@oracle.com
In-Reply-To: <1364209702-12437-6-git-send-email-wei.liu2@citrix.com>

On 25/03/13 11:08, Wei Liu wrote:
> This patch tries to coalesce tx requests when constructing grant copy
> structures. It enables netback to deal with situation when frontend's
> MAX_SKB_FRAGS is larger than backend's MAX_SKB_FRAGS.
> 
> It defines max_skb_slots, which is a estimation of the maximum number of slots
> a guest can send, anything bigger than that is considered malicious. Now it is
> set to 20, which should be enough to accommodate Linux (16 to 19).
> 
> Also change variable name from "frags" to "slots" in netbk_count_requests.

It it worth summarizing an (off-line) discussion I had with Wei on this
patch.

There are two regression that need to be addressed here.

1. The reduction of the number of supported ring entries (slots) per
packet (from 18 to 17).

2. The XSA-39 security fix turning "too many frags" errors from just
dropping the packet to a fatal error and disabling the VIF.

The key root cause of the problem is that the protocol is poorly
specified using a property external to the netback/netfront drivers
(i.e., MAX_SKB_FRAGS).

A secondary problem is some frontends have used a max slots per packet
value that is larger than netback as supported. e.g., the Windows GPLPV
drivers use up to 19.  These packets have always been dropped.

The first step is to properly specify the maximum slots per-packet as
part of the interface.  This should be specified as 18 (the historical
value).

The second step is to define a threshold for slots per packet, above
which the guest is considered to be malicious and the error is fatal.
20 seems a sensible value here.

The behavior of netback for packet is thus:

    1-18 slots: valid
   19-20 slots: drop and respond with an error
   21+   slots: fatal error

Note that we do not make 19-20 valid as this is a change to the protocol
and guests may end up relying on this which would then break the guests
if they migrate or start on host with a limit of 18.

A third (and future) step would be to investigate whether increasing the
slots per-packet limit is sensible.  There would then need to be a
mechanism to negotiate this limit between the front and back ends.

David

^ permalink raw reply

* Re: [PATCH net 3/3] ipv4: Fix ip-header identification for gso packets.
From: David Miller @ 2013-03-26 17:50 UTC (permalink / raw)
  To: pshelar; +Cc: netdev, amwang
In-Reply-To: <CALnjE+qAo5GsnTP=EU87N7KHWXE8UWnhn4HtV16tDJ00SnsKzw@mail.gmail.com>

From: Pravin Shelar <pshelar@nicira.com>
Date: Tue, 26 Mar 2013 10:34:17 -0700

> This issue is present in net-tree. Can you apply this patch net-tree?

Good point, applied to 'net', thanks.

^ permalink raw reply

* Re: [PATCH net 3/3] ipv4: Fix ip-header identification for gso packets.
From: Pravin Shelar @ 2013-03-26 17:34 UTC (permalink / raw)
  To: davem, netdev; +Cc: amwang
In-Reply-To: <1364182589-1766-1-git-send-email-pshelar@nicira.com>

This issue is present in net-tree. Can you apply this patch net-tree?

Thanks.

On Sun, Mar 24, 2013 at 8:36 PM, Pravin B Shelar <pshelar@nicira.com> wrote:
> ip-header id needs to be incremented even if IP_DF flag is set.
> This behaviour was changed in commit 490ab08127cebc25e3a26
> (IP_GRE: Fix IP-Identification).
>
> Following patch fixes it so that identification is always
> incremented.
>
> Reported-by: Cong Wang <amwang@redhat.com>
> Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
> ---
>  include/net/ipip.h |   16 ++++++----------
>  net/ipv4/af_inet.c |    3 +--
>  2 files changed, 7 insertions(+), 12 deletions(-)
>
> diff --git a/include/net/ipip.h b/include/net/ipip.h
> index 0c046e3..483b91a 100644
> --- a/include/net/ipip.h
> +++ b/include/net/ipip.h
> @@ -74,15 +74,11 @@ static inline void tunnel_ip_select_ident(struct sk_buff *skb,
>  {
>         struct iphdr *iph = ip_hdr(skb);
>
> -       if (iph->frag_off & htons(IP_DF))
> -               iph->id = 0;
> -       else {
> -               /* Use inner packet iph-id if possible. */
> -               if (skb->protocol == htons(ETH_P_IP) && old_iph->id)
> -                       iph->id = old_iph->id;
> -               else
> -                       __ip_select_ident(iph, dst,
> -                                         (skb_shinfo(skb)->gso_segs ?: 1) - 1);
> -       }
> +       /* Use inner packet iph-id if possible. */
> +       if (skb->protocol == htons(ETH_P_IP) && old_iph->id)
> +               iph->id = old_iph->id;
> +       else
> +               __ip_select_ident(iph, dst,
> +                                 (skb_shinfo(skb)->gso_segs ?: 1) - 1);
>  }
>  #endif
> diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
> index 9e5882c..70b2d4c 100644
> --- a/net/ipv4/af_inet.c
> +++ b/net/ipv4/af_inet.c
> @@ -1334,8 +1334,7 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
>                                 iph->frag_off |= htons(IP_MF);
>                         offset += (skb->len - skb->mac_len - iph->ihl * 4);
>                 } else  {
> -                       if (!(iph->frag_off & htons(IP_DF)))
> -                               iph->id = htons(id++);
> +                       iph->id = htons(id++);
>                 }
>                 iph->tot_len = htons(skb->len - skb->mac_len);
>                 iph->check = 0;
> --
> 1.7.1
>

^ permalink raw reply

* Re: Active URB submitted twice in pegasus driver
From: Petko Manolov @ 2013-03-26 17:28 UTC (permalink / raw)
  To: Sarah Sharp; +Cc: linux-usb, Greg KH, netdev, Stephen Hemminger
In-Reply-To: <20130326170140.GC10317@xanatos>

On Tue, 26 Mar 2013, Sarah Sharp wrote:

> On Tue, Mar 26, 2013 at 05:22:07PM +0200, Petko Manolov wrote:
>> On Mon, 25 Mar 2013, Sarah Sharp wrote:
>>
>>> Hi Petko,
>>>
>>> I'm testing a USB to ethernet adapter with Greg's usb-linus branch (based
>>> on 3.9-rc4).  I'm seeing an odd behavior, and I'm suspicious that a
>>> second behavior found by Stephen Hemminger may also be related:
>>>
>>> http://marc.info/?l=linux-usb&m=136364625519235&w=2
>>>
>>> When I load the pegasus driver for this adapter (without an ethernet
>>> cable hooked to it), and this is on a cold system boot or a complete
>>> unloading and reloading of the usbcore, I get the following warning:
>>
>> Unfortunately the machine i ran my tests on does not have xHCI nor i
>> used Greg's tree.  I did not observe this warning on both 3.8.4 and
>> Linus' 3.9-rc4.  It looks like to me that the issue is outside the
>> driver code.
>
> Or it could be a race condition that's only triggered by the xHCI driver
> (or me having xHCI debugging turned on).  Control transfer completions
> may be delayed when I have debug turned on.

They most likely are.  However, considering the stuff below these delays 
may not be the real cause.

> The only other USB to ethernet adapter I have is also an ADMteck device:
>
> Bus 001 Device 008: ID 07a6:8513 ADMtek, Inc. AN8513 Ethernet

I've got another one, rtl8150 based adapter.  The way things look i'll 
have to do some testing on my own.

> What do you mean by an asynchronous call?  Do you mean that
> xxx_set_multicast() could be called at any time?

Yep.  The first call to pegasus_set_multicast() is done by the network 
layer upon device insertion and those often happen outside process 
context.

> After taking a brief glance at the pegasus code, pegasus_set_multicast 
> looks broken.  It sets the control URB status to zero and calls 
> ctrl_callback(), which does some stuff if the URB status is zero.  It 
> doesn't look like pegasus_set_multicast() is an URB callback function, 
> so why in the world is it touching a control URB that could possibly be 
> in flight else where?

Beats me, i've got nothing to do with this driver. :-P

Anyway, playing with the URB status looks rather stupid and is definitely 
a bug.  I'll make a patch that fixes the problem.

> It looks like the control URB is used to do things like get or set 
> registers, so what's stopping the upper layers from calling get 
> registers (which will submit the control URB and schedule a wait queue), 
> and then pegasus_set_multicast(), which will go overwrite the active URB 
> status?  USB device drivers should not be writing or reading fields in a 
> submitted URB until the completion handler's callback function is 
> called.

Err, see my previous comment.  It can't be me.  Maybe i've been too drunk. 
Or stupid.  Or both... :-)

^ permalink raw reply

* [PATCH 12/86] net: calxedaxgmac: throw away overrun frames
From: Steven Rostedt @ 2013-03-26 17:21 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Rob Herring, netdev, David S. Miller
In-Reply-To: <20130326172059.136127374@goodmis.org>

[-- Attachment #1: 0012-net-calxedaxgmac-throw-away-overrun-frames.patch --]
[-- Type: text/plain, Size: 1404 bytes --]

3.6.11.1 stable review patch.
If anyone has any objections, please let me know.

------------------

From: Rob Herring <rob.herring@calxeda.com>

[ Upstream commit d6fb3be544b46a7611a3373fcaa62b5b0be01888 ]

The xgmac driver assumes 1 frame per descriptor. If a frame larger than
the descriptor's buffer size is received, the frame will spill over into
the next descriptor. So check for received frames that span more than one
descriptor and discard them. This prevents a crash if we receive erroneous
large packets.

Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Cc: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
---
 drivers/net/ethernet/calxeda/xgmac.c |    4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/net/ethernet/calxeda/xgmac.c b/drivers/net/ethernet/calxeda/xgmac.c
index 16814b3..e29c1b6 100644
--- a/drivers/net/ethernet/calxeda/xgmac.c
+++ b/drivers/net/ethernet/calxeda/xgmac.c
@@ -546,6 +546,10 @@ static int desc_get_rx_status(struct xgmac_priv *priv, struct xgmac_dma_desc *p)
 		return -1;
 	}
 
+	/* All frames should fit into a single buffer */
+	if (!(status & RXDESC_FIRST_SEG) || !(status & RXDESC_LAST_SEG))
+		return -1;
+
 	/* Check if packet has checksum already */
 	if ((status & RXDESC_FRAME_TYPE) && (status & RXDESC_EXT_STATUS) &&
 		!(ext_status & RXDESC_IP_PAYLOAD_MASK))
-- 
1.7.10.4

^ permalink raw reply related

* [PATCH 02/86] batman-adv: fix random jitter calculation
From: Steven Rostedt @ 2013-03-26 17:21 UTC (permalink / raw)
  To: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	stable-u79uwXL29TY76Z2rM5mHXA
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
	b.a.t.m.a.n-ZwoEplunGu2X36UT3dwllkB+6BGkLq7r, Akinobu Mita,
	Simon Wunderlich, Marek Lindner, David S. Miller
In-Reply-To: <20130326172059.136127374@goodmis.org>

[-- Attachment #1: 0002-batman-adv-fix-random-jitter-calculation.patch --]
[-- Type: text/plain, Size: 1968 bytes --]

3.6.11.1 stable review patch.
If anyone has any objections, please let me know.

------------------

From: Akinobu Mita <akinobu.mita-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

[ Upstream commit 143cdd8f33909ff5a153e3f02048738c5964ba26 ]

batadv_iv_ogm_emit_send_time() attempts to calculates a random integer
in the range of 'orig_interval +- BATADV_JITTER' by the below lines.

        msecs = atomic_read(&bat_priv->orig_interval) - BATADV_JITTER;
        msecs += (random32() % 2 * BATADV_JITTER);

But it actually gets 'orig_interval' or 'orig_interval - BATADV_JITTER'
because '%' and '*' have same precedence and associativity is
left-to-right.

This adds the parentheses at the appropriate position so that it matches
original intension.

Signed-off-by: Akinobu Mita <akinobu.mita-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Acked-by: Antonio Quartulli <ordex-GaUfNO9RBHfsrOwW+9ziJQ@public.gmane.org>
Cc: Marek Lindner <lindner_marek-LWAfsSFWpa4@public.gmane.org>
Cc: Simon Wunderlich <siwu-MaAgPAbsBIVS8oHt8HbXEIQuADTiUCJX@public.gmane.org>
Cc: Antonio Quartulli <ordex-GaUfNO9RBHfsrOwW+9ziJQ@public.gmane.org>
Cc: b.a.t.m.a.n-ZwoEplunGu2X36UT3dwllkB+6BGkLq7r@public.gmane.org
Cc: "David S. Miller" <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Signed-off-by: David S. Miller <davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
---
 net/batman-adv/bat_iv_ogm.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
index 469daab..1476f26 100644
--- a/net/batman-adv/bat_iv_ogm.c
+++ b/net/batman-adv/bat_iv_ogm.c
@@ -119,7 +119,7 @@ batadv_iv_ogm_emit_send_time(const struct batadv_priv *bat_priv)
 	unsigned int msecs;
 
 	msecs = atomic_read(&bat_priv->orig_interval) - BATADV_JITTER;
-	msecs += (random32() % 2 * BATADV_JITTER);
+	msecs += random32() % (2 * BATADV_JITTER);
 
 	return jiffies + msecs_to_jiffies(msecs);
 }
-- 
1.7.10.4

^ permalink raw reply related

* Re: Active URB submitted twice in pegasus driver
From: Sarah Sharp @ 2013-03-26 17:01 UTC (permalink / raw)
  To: Petko Manolov
  Cc: Petko Manolov, linux-usb, Greg KH, netdev, Stephen Hemminger
In-Reply-To: <alpine.DEB.2.02.1303261655450.3724@fry.nucleusys.com>

On Tue, Mar 26, 2013 at 05:22:07PM +0200, Petko Manolov wrote:
> On Mon, 25 Mar 2013, Sarah Sharp wrote:
> 
> >Hi Petko,
> >
> >I'm testing a USB to ethernet adapter with Greg's usb-linus branch (based
> >on 3.9-rc4).  I'm seeing an odd behavior, and I'm suspicious that a
> >second behavior found by Stephen Hemminger may also be related:
> >
> >http://marc.info/?l=linux-usb&m=136364625519235&w=2
> >
> >When I load the pegasus driver for this adapter (without an ethernet
> >cable hooked to it), and this is on a cold system boot or a complete
> >unloading and reloading of the usbcore, I get the following warning:
> 
> Unfortunately the machine i ran my tests on does not have xHCI nor i
> used Greg's tree.  I did not observe this warning on both 3.8.4 and
> Linus' 3.9-rc4.  It looks like to me that the issue is outside the
> driver code.

Or it could be a race condition that's only triggered by the xHCI driver
(or me having xHCI debugging turned on).  Control transfer completions
may be delayed when I have debug turned on.

> However, i am curious whether you experience the same problem with
> other (non-ADMtek based) usb-to-lan adapters which support
> xxx_set_multicast().

The only other USB to ethernet adapter I have is also an ADMteck device:

Bus 001 Device 008: ID 07a6:8513 ADMtek, Inc. AN8513 Ethernet

> These calls are asynchronous by nature and should also trigger this
> warning.  Please let me know if this is not the case so i start
> digging into pegasus.c.

What do you mean by an asynchronous call?  Do you mean that
xxx_set_multicast() could be called at any time?

After taking a brief glance at the pegasus code, pegasus_set_multicast
looks broken.  It sets the control URB status to zero and calls
ctrl_callback(), which does some stuff if the URB status is zero.  It
doesn't look like pegasus_set_multicast() is an URB callback function,
so why in the world is it touching a control URB that could possibly be
in flight else where?

It looks like the control URB is used to do things like get or set
registers, so what's stopping the upper layers from calling get
registers (which will submit the control URB and schedule a wait queue),
and then pegasus_set_multicast(), which will go overwrite the active URB
status?  USB device drivers should not be writing or reading fields in
a submitted URB until the completion handler's callback function is
called.

Sarah Sharp

^ permalink raw reply

* Re: [PATCH] bonding: remove already created master sysfs link on failure
From: David Miller @ 2013-03-26 17:00 UTC (permalink / raw)
  To: vfalico; +Cc: netdev, andy, fubar
In-Reply-To: <1364316208-1068-1-git-send-email-vfalico@redhat.com>

From: Veaceslav Falico <vfalico@redhat.com>
Date: Tue, 26 Mar 2013 17:43:28 +0100

> If slave sysfs symlink failes to be created - we end up without removing
> the master sysfs symlink. Remove it in case of failure.
> 
> Signed-off-by: Veaceslav Falico <vfalico@redhat.com>

Applied and queued up for -stable, thanks.

^ permalink raw reply

* Re: [PATCH] phy: Elimination the forced speed reduction algorithm.
From: David Miller @ 2013-03-26 16:59 UTC (permalink / raw)
  To: kapranoff
  Cc: netdev, bhutchings, peppe.cavallaro, joe, bruce.w.allan,
	linux-kernel
In-Reply-To: <1364304872-6408-1-git-send-email-kapranoff@inbox.ru>

From: Kirill Kapranov <kapranoff@inbox.ru>
Date: Tue, 26 Mar 2013 17:34:32 +0400

> -					phy_force_reduction(phydev);
> +				if (0 == phydev->link_timeout--) 
                                                                ^^^^

Trailing whitespace, please remove.

Also, for whatever reason this patch didn't make it to the mailing
list, that's critical because we automate the tracking of patches by
catching the patch postings made to the list.

^ permalink raw reply

* Re: [PATCH 0/2] sky2: Bug fixes
From: David Miller @ 2013-03-26 16:57 UTC (permalink / raw)
  To: mlindner; +Cc: netdev, shemminger
In-Reply-To: <6676087.yBMeFJ6grC@mlindner-lin>

From: Mirko Lindner <mlindner@marvell.com>
Date: Tue, 26 Mar 2013 17:38:28 +0100

> Please find here 2 bug fixes related to the sky2 driver
> 
> These are both patches against net-next but should be
> applied to -stable as well.
> 
> Mirko Lindner (2):
>   Receive Overflows not counted
>   Threshold for Pause Packet is set wrong

Stephen, these look very straight-forward and correct, please
review.

^ permalink raw reply

* Re: [PATCH net-next 1/1] net: fec: TX Buffer incorrectly initialized
From: David Miller @ 2013-03-26 16:56 UTC (permalink / raw)
  To: jim_baxter; +Cc: Frank.Li, fabio.estevam, netdev
In-Reply-To: <1364311507-7489-1-git-send-email-jim_baxter@mentor.com>

From: Jim Baxter <jim_baxter@mentor.com>
Date: Tue, 26 Mar 2013 15:25:07 +0000

> The TX Buffer in fec_enet_alloc_buffers was being initialized
> with the receive register define BD_ENET_RX_INT instead of
> the transmit register define BD_ENET_TX_INT
> 
> Signed-off-by: Jim Baxter <jim_baxter@mentor.com>

Applied.

^ permalink raw reply

* Re: [PATCH net-next] MAINTAINERS: Update qlge maintainers list
From: David Miller @ 2013-03-26 16:55 UTC (permalink / raw)
  To: shahed.shaikh; +Cc: netdev, ron.mercer, Dept_NX_Linux_NIC_Driver
In-Reply-To: <1364312095-21886-1-git-send-email-shahed.shaikh@qlogic.com>

From: Shahed Shaikh <shahed.shaikh@qlogic.com>
Date: Tue, 26 Mar 2013 11:34:55 -0400

> From: Shahed Shaikh <shahed.shaikh@qlogic.com>
> 
> Add myself to qlge maintainers list.
> 
> Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>

Applied.

^ permalink raw reply

* [PATCH] bonding: remove already created master sysfs link on failure
From: Veaceslav Falico @ 2013-03-26 16:43 UTC (permalink / raw)
  To: netdev; +Cc: vfalico, andy, fubar

If slave sysfs symlink failes to be created - we end up without removing
the master sysfs symlink. Remove it in case of failure.

Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
---
 drivers/net/bonding/bond_sysfs.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
index 1c9e09f..db103e0 100644
--- a/drivers/net/bonding/bond_sysfs.c
+++ b/drivers/net/bonding/bond_sysfs.c
@@ -183,6 +183,11 @@ int bond_create_slave_symlinks(struct net_device *master,
 	sprintf(linkname, "slave_%s", slave->name);
 	ret = sysfs_create_link(&(master->dev.kobj), &(slave->dev.kobj),
 				linkname);
+
+	/* free the master link created earlier in case of error */
+	if (ret)
+		sysfs_remove_link(&(slave->dev.kobj), "master");
+
 	return ret;
 
 }
-- 
1.7.1

^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox