20 Sep, 2008

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    e100: Use pci_pme_active to clear PME_Status and disable PME#
    e1000: prevent corruption of EEPROM/NVM
    forcedeth: call restore mac addr in nv_shutdown path
    bnx2: Promote vector field in bnx2_irq structure from u16 to unsigned int
    sctp: Fix oops when INIT-ACK indicates that peer doesn't support AUTH
    sctp: do not enable peer features if we can't do them.
    sctp: set the skb->ip_summed correctly when sending over loopback.
    udp: Fix rcv socket locking

    Linus Torvalds
     

19 Sep, 2008

2 commits

  • If INIT-ACK is received with SupportedExtensions parameter which
    indicates that the peer does not support AUTH, the packet will be
    silently ignore, and sctp_process_init() do cleanup all of the
    transports in the association.
    When T1-Init timer is expires, OOPS happen while we try to choose
    a different init transport.

    The solution is to only clean up the non-active transports, i.e
    the ones that the peer added. However, that introduces a problem
    with sctp_connectx(), because we don't mark the proper state for
    the transports provided by the user. So, we'll simply mark
    user-provided transports as ACTIVE. That will allow INIT
    retransmissions to work properly in the sctp_connectx() context
    and prevent the crash.

    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • Do not enable peer features like addip and auth, if they
    are administratively disabled localy. If the peer resports
    that he supports something that we don't, neither end can
    use it so enabling it is pointless. This solves a problem
    when talking to a peer that has auth and addip enabled while
    we do not. Found by Andrei Pelinescu-Onciul .

    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     

18 Sep, 2008

1 commit


17 Sep, 2008

1 commit

  • this patch turns the netdev timeout WARN_ON_ONCE() into a WARN_ONCE(),
    so that the device and driver names are inside the warning message.
    This helps automated tools like kerneloops.org to collect the data
    and do statistics, as well as making it more likely that humans
    cut-n-paste the important message as part of a bugreport.

    Signed-off-by: Arjan van de Ven
    Signed-off-by: Linus Torvalds

    Arjan van de Ven
     

16 Sep, 2008

1 commit

  • The previous patch in response to the recursive locking on IPsec
    reception is broken as it tries to drop the BH socket lock while in
    user context.

    This patch fixes it by shrinking the section protected by the
    socket lock to sock_queue_rcv_skb only. The only reason we added
    the lock is for the accounting which happens in that function.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     

12 Sep, 2008

1 commit

  • To speed up the Simple Pairing connection setup, the support for the
    default link policy has been enabled. This is in contrast to settings
    the link policy on every connection setup. Using the default link policy
    is the preferred way since there is no need to dynamically change it for
    every connection.

    For backward compatibility reason and to support old userspace the
    HCISETLINKPOL ioctl has been switched over to using hci_request() to
    issue the HCI command for setting the default link policy instead of
    just storing it in the HCI device structure.

    However the hci_request() can only be issued when the device is
    brought up. If used on a device that is registered, but still down
    it will timeout and fail. This is problematic since the command is
    put on the TX queue and the Bluetooth core tries to submit it to
    hardware that is not ready yet. The timeout for these requests is
    10 seconds and this causes a significant regression when setting up
    a new device.

    The userspace can perfectly handle a failure of the HCISETLINKPOL
    ioctl and will re-submit it later, but the 10 seconds delay causes
    a problem. So in case hci_request() is called on a device that is
    still down, just fail it with ENETDOWN to indicate what happens.

    Signed-off-by: Marcel Holtmann

    Marcel Holtmann
     

10 Sep, 2008

1 commit

  • This fixes kernel bugzilla 11469: "TUN with 1024 neighbours:
    ip6_dst_lookup_tail NULL crash"

    dst->neighbour is not necessarily hooked up at this point
    in the processing path, so blindly dereferencing it is
    the wrong thing to do. This NULL check exists in other
    similar paths and this case was just an oversight.

    Also fix the completely wrong and confusing indentation
    here while we're at it.

    Based upon a patch by Evgeniy Polyakov.

    Signed-off-by: Neil Horman
    Signed-off-by: David S. Miller

    Neil Horman
     

09 Sep, 2008

8 commits

  • The commit commit 4c563f7669c10a12354b72b518c2287ffc6ebfb3 ("[XFRM]:
    Speed up xfrm_policy and xfrm_state walking") inadvertently removed
    larval states and socket policies from netlink dumps. This patch
    restores them.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     
  • David S. Miller
     
  • The Security Mode 4 of the Bluetooth 2.1 specification has strict
    authentication and encryption requirements. It is the initiators job
    to create a secure ACL link. However in case of malicious devices, the
    acceptor has to make sure that the ACL is encrypted before allowing
    any kind of L2CAP connection. The only exception here is the PSM 1 for
    the service discovery protocol, because that is allowed to run on an
    insecure ACL link.

    Previously it was enough to reject a L2CAP connection during the
    connection setup phase, but with Bluetooth 2.1 it is forbidden to
    do any L2CAP protocol exchange on an insecure link (except SDP).

    The new hci_conn_check_link_mode() function can be used to check the
    integrity of an ACL link. This functions also takes care of the cases
    where Security Mode 4 is disabled or one of the devices is based on
    an older specification.

    Signed-off-by: Marcel Holtmann

    Marcel Holtmann
     
  • With the introduction of Security Mode 4 and Simple Pairing from the
    Bluetooth 2.1 specification it became mandatory that the initiator
    requires authentication and encryption before any L2CAP channel can
    be established. The only exception here is PSM 1 for the service
    discovery protocol (SDP). It is meant to be used without any encryption
    since it contains only public information. This is how Bluetooth 2.0
    and before handle connections on PSM 1.

    For Bluetooth 2.1 devices the pairing procedure differentiates between
    no bonding, general bonding and dedicated bonding. The L2CAP layer
    wrongly uses always general bonding when creating new connections, but it
    should not do this for SDP connections. In this case the authentication
    requirement should be no bonding and the just-works model should be used,
    but in case of non-SDP connection it is required to use general bonding.

    If the new connection requires man-in-the-middle (MITM) protection, it
    also first wrongly creates an unauthenticated link key and then later on
    requests an upgrade to an authenticated link key to provide full MITM
    protection. With Simple Pairing the link key generation is an expensive
    operation (compared to Bluetooth 2.0 and before) and doing this twice
    during a connection setup causes a noticeable delay when establishing
    a new connection. This should be avoided to not regress from the expected
    Bluetooth 2.0 connection times. The authentication requirements are known
    up-front and so enforce them.

    To fulfill these requirements the hci_connect() function has been extended
    with an authentication requirement parameter that will be stored inside
    the connection information and can be retrieved by userspace at any
    time. This allows the correct IO capabilities exchange and results in
    the expected behavior.

    Signed-off-by: Marcel Holtmann

    Marcel Holtmann
     
  • The ACL config stage keeps holding a reference count on incoming
    connections when requesting the extended features. This results in
    keeping an ACL link up without any users. The problem here is that
    the Bluetooth specification doesn't define an ownership of the ACL
    link and thus it can happen that the implementation on the initiator
    side doesn't care about disconnecting unused links. In this case the
    acceptor needs to take care of this.

    Signed-off-by: Marcel Holtmann

    Marcel Holtmann
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    bridge: don't allow setting hello time to zero
    netns : fix kernel panic in timewait socket destruction
    pkt_sched: Fix qdisc state in net_tx_action()
    netfilter: nf_conntrack_irc: make sure string is terminated before calling simple_strtoul
    netfilter: nf_conntrack_gre: nf_ct_gre_keymap_flush() fixlet
    netfilter: nf_conntrack_gre: more locking around keymap list
    netfilter: nf_conntrack_sip: de-static helper pointers

    Linus Torvalds
     
  • Dushan Tcholich reports that on his system ksoftirqd can consume
    between %6 to %10 of cpu time, and cause ~200 context switches per
    second.

    He then correlated this with a report by bdupree@techfinesse.com:

    http://marc.info/?l=linux-kernel&m=119613299024398&w=2

    and the culprit cause seems to be starting the bridge interface.
    In particular, when starting the bridge interface, his scripts
    are specifying a hello timer interval of "0".

    The bridge hello time can't be safely set to values less than 1
    second, otherwise it is possible to end up with a runaway timer.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Stephen Hemminger
     
  • How to reproduce ?
    - create a network namespace
    - use tcp protocol and get timewait socket
    - exit the network namespace
    - after a moment (when the timewait socket is destroyed), the kernel
    panics.

    # BUG: unable to handle kernel NULL pointer dereference at
    0000000000000007
    IP: [] inet_twdr_do_twkill_work+0x6e/0xb8
    PGD 119985067 PUD 11c5c0067 PMD 0
    Oops: 0000 [1] SMP
    CPU 1
    Modules linked in: ipv6 button battery ac loop dm_mod tg3 libphy ext3 jbd
    edd fan thermal processor thermal_sys sg sata_svw libata dock serverworks
    sd_mod scsi_mod ide_disk ide_core [last unloaded: freq_table]
    Pid: 0, comm: swapper Not tainted 2.6.27-rc2 #3
    RIP: 0010:[] []
    inet_twdr_do_twkill_work+0x6e/0xb8
    RSP: 0018:ffff88011ff7fed0 EFLAGS: 00010246
    RAX: ffffffffffffffff RBX: ffffffff82339420 RCX: ffff88011ff7ff30
    RDX: 0000000000000001 RSI: ffff88011a4d03c0 RDI: ffff88011ac2fc00
    RBP: ffffffff823392e0 R08: 0000000000000000 R09: ffff88002802a200
    R10: ffff8800a5c4b000 R11: ffffffff823e4080 R12: ffff88011ac2fc00
    R13: 0000000000000001 R14: 0000000000000001 R15: 0000000000000000
    FS: 0000000041cbd940(0000) GS:ffff8800bff839c0(0000)
    knlGS:0000000000000000
    CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
    CR2: 0000000000000007 CR3: 00000000bd87c000 CR4: 00000000000006e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process swapper (pid: 0, threadinfo ffff8800bff9e000, task
    ffff88011ff76690)
    Stack: ffffffff823392e0 0000000000000100 ffffffff821e3a3a
    0000000000000008
    0000000000000000 ffffffff821e3a61 ffff8800bff7c000 ffffffff8203c7e7
    ffff88011ff7ff10 ffff88011ff7ff10 0000000000000021 ffffffff82351108
    Call Trace:
    [] ? inet_twdr_hangman+0x0/0x9e
    [] ? inet_twdr_hangman+0x27/0x9e
    [] ? run_timer_softirq+0x12c/0x193
    [] ? __do_softirq+0x5e/0xcd
    [] ? call_softirq+0x1c/0x28
    [] ? do_softirq+0x2c/0x68
    [] ? smp_apic_timer_interrupt+0x8e/0xa9
    [] ? apic_timer_interrupt+0x66/0x70
    [] ? default_idle+0x27/0x3b
    [] ? cpu_idle+0x5f/0x7d

    Code: e8 01 00 00 4c 89 e7 41 ff c5 e8 8d fd ff ff 49 8b 44 24 38 4c 89 e7
    65 8b 14 25 24 00 00 00 89 d2 48 8b 80 e8 00 00 00 48 f7 d0 8b 04 d0
    48 ff 40 58 e8 fc fc ff ff 48 89 df e8 c0 5f 04 00
    RIP [] inet_twdr_do_twkill_work+0x6e/0xb8
    RSP
    CR2: 0000000000000007

    This patch provides a function to purge all timewait sockets related
    to a network namespace. The timewait sockets life cycle is not tied with
    the network namespace, that means the timewait sockets stay alive while
    the network namespace dies. The timewait sockets are for avoiding to
    receive a duplicate packet from the network, if the network namespace is
    freed, the network stack is removed, so no chance to receive any packets
    from the outside world. Furthermore, having a pending destruction timer
    on these sockets with a network namespace freed is not safe and will lead
    to an oops if the timer callback which try to access data belonging to
    the namespace like for example in:
    inet_twdr_do_twkill_work
    -> NET_INC_STATS_BH(twsk_net(tw), LINUX_MIB_TIMEWAITED);

    Purging the timewait sockets at the network namespace destruction will:
    1) speed up memory freeing for the namespace
    2) fix kernel panic on asynchronous timewait destruction

    Signed-off-by: Daniel Lezcano
    Acked-by: Denis V. Lunev
    Acked-by: Eric W. Biederman
    Signed-off-by: David S. Miller

    Daniel Lezcano
     

08 Sep, 2008

5 commits


06 Sep, 2008

1 commit

  • This reverts commit 087d833e5a9f67ba933cb32eaf5a2279c1a5b47c, which was
    reported to break wireless at least in some combinations with 32bit user
    space and a 64bit kernel. Alex Williamnson bisected it to this commit.

    Reported-and-bisected-by: Alex Williamson
    Acked-by: John W. Linville
    Cc: David Miller
    Cc: Jouni Malinen
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

04 Sep, 2008

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    bnx2x: Accessing un-mapped page
    ath9k: Fix TX control flag use for no ACK and RTS/CTS
    ath9k: Fix TX status reporting
    iwlwifi: fix STATUS_EXIT_PENDING is not set on pci_remove
    iwlwifi: call apm stop on exit
    iwlwifi: fix Tx cmd memory allocation failure handling
    iwlwifi: fix rx_chain computation
    iwlwifi: fix station mimo power save values
    iwlwifi: remove false rxon if rx chain changes
    iwlwifi: fix hidden ssid discovery in passive channels
    iwlwifi: W/A for the TSF correction in IBSS
    netxen: Remove workaround for chipset quirk
    pcnet-cs, axnet_cs: add new IDs, remove dup ID with less info
    ixgbe: initialize interrupt throttle rate
    net/usb/pegasus: avoid hundreds of diagnostics
    tipc: Don't use structure names which easily globally conflict.

    Linus Torvalds
     

03 Sep, 2008

8 commits

  • Andrew Morton reported a build failure on sparc32, because TIPC
    uses names like "struct node" and there is a like named data
    structure defined in linux/node.h

    This just regexp replaces "struct node*" to "struct tipc_node*"
    to avoid this and any future similar problems.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    ipsec: Fix deadlock in xfrm_state management.
    ipv: Re-enable IP when MTU > 68
    net/xfrm: Use an IS_ERR test rather than a NULL test
    ath9: Fix ath_rx_flush_tid() for IRQs disabled kernel warning message.
    ath9k: Incorrect key used when group and pairwise ciphers are different.
    rt2x00: Compiler warning unmasked by fix of BUILD_BUG_ON
    mac80211: Fix debugfs union misuse and pointer corruption
    wireless/libertas/if_cs.c: fix memory leaks
    orinoco: Multicast to the specified addresses
    iwlwifi: fix 64bit platform firmware loading
    iwlwifi: fix apm_stop (wrong bit polarity for FLAG_INIT_DONE)
    iwlwifi: workaround interrupt handling no some platforms
    iwlwifi: do not use GFP_DMA in iwl_tx_queue_init
    net/wireless/Kconfig: clarify the description for CONFIG_WIRELESS_EXT_SYSFS
    net: Unbreak userspace usage of linux/mroute.h
    pkt_sched: Fix locking of qdisc_root with qdisc_root_sleeping_lock()
    ipv6: When we droped a packet, we should return NET_RX_DROP instead of 0

    Linus Torvalds
     
  • Ever since commit 4c563f7669c10a12354b72b518c2287ffc6ebfb3
    ("[XFRM]: Speed up xfrm_policy and xfrm_state walking") it is
    illegal to call __xfrm_state_destroy (and thus xfrm_state_put())
    with xfrm_state_lock held. If we do, we'll deadlock since we
    have the lock already and __xfrm_state_destroy() tries to take
    it again.

    Fix this by pushing the xfrm_state_put() calls after the lock
    is dropped.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Re-enable IP when the MTU gets back to a valid size.

    This patch just checks if the in_dev is NULL on a NETDEV_CHANGEMTU event
    and if MTU is valid (bigger than 68), then re-enable in_dev.

    Also a function that checks valid MTU size was created.

    Signed-off-by: Breno Leitao
    Signed-off-by: David S. Miller

    Breno Leitao
     
  • In case of error, the function xfrm_bundle_create returns an ERR
    pointer, but never returns a NULL pointer. So a NULL test that comes
    after an IS_ERR test should be deleted.

    The semantic match that finds this problem is as follows:
    (http://www.emn.fr/x-info/coccinelle/)

    //
    @match_bad_null_test@
    expression x, E;
    statement S1,S2;
    @@
    x = xfrm_bundle_create(...)
    ... when != x = E
    * if (x != NULL)
    S1 else S2
    //

    Signed-off-by: Julien Brunel
    Signed-off-by: Julia Lawall
    Signed-off-by: David S. Miller

    Julien Brunel
     
  • debugfs union in struct ieee80211_sub_if_data is misused by including a
    common default_key dentry as a union member. This ends occupying the same
    memory area with the first dentry in other union members (structures;
    usually drop_unencrypted). Consequently, debugfs operations on
    default_key symlinks and drop_unencrypted entry are using the same
    dentry pointer even though they are supposed to be separate ones. This
    can lead to removing entries incorrectly or potentially leaving
    something behind since one of the dentry pointers gets lost.

    Fix this by moving the default_key dentry to a new struct
    (common_debugfs) that contains dentries (more to be added in future)
    that are shared by all vif types. The debugfs union must only be used
    for vif type-specific entries to avoid this type of pointer corruption.

    Signed-off-by: Jouni Malinen
    Acked-by: Johannes Berg
    Signed-off-by: John W. Linville

    Jouni Malinen
     
  • Current setup with hal and NetworkManager will fail to work
    without newest hal version with this config option disabled.

    Although this will solve itself by time, at the moment it is
    dishonest to say that we don't know any software that uses it,
    if there are many many people relying on old hal versions.

    Signed-off-by: Florian Mickler
    Signed-off-by: John W. Linville

    Florian Mickler
     
  • * 'for-2.6.27' of git://linux-nfs.org/~bfields/linux:
    nfsd: fix buffer overrun decoding NFSv4 acl
    sunrpc: fix possible overrun on read of /proc/sys/sunrpc/transports
    nfsd: fix compound state allocation error handling
    svcrdma: Fix race between svc_rdma_recvfrom thread and the dto_tasklet

    Linus Torvalds
     

02 Sep, 2008

1 commit

  • Vegard Nossum reported
    ----------------------
    > I noticed that something weird is going on with /proc/sys/sunrpc/transports.
    > This file is generated in net/sunrpc/sysctl.c, function proc_do_xprt(). When
    > I "cat" this file, I get the expected output:
    > $ cat /proc/sys/sunrpc/transports
    > tcp 1048576
    > udp 32768

    > But I think that it does not check the length of the buffer supplied by
    > userspace to read(). With my original program, I found that the stack was
    > being overwritten by the characters above, even when the length given to
    > read() was just 1.

    David Wagner added (among other things) that copy_to_user could be
    probably used here.

    Ingo Oeser suggested to use simple_read_from_buffer() here.

    The conclusion is that proc_do_xprt doesn't check for userside buffer
    size indeed so fix this by using Ingo's suggestion.

    Reported-by: Vegard Nossum
    Signed-off-by: Cyrill Gorcunov
    CC: Ingo Oeser
    Cc: Neil Brown
    Cc: Chuck Lever
    Cc: Greg Banks
    Cc: Tom Tucker
    Signed-off-by: J. Bruce Fields

    Cyrill Gorcunov
     

30 Aug, 2008

2 commits


28 Aug, 2008

2 commits


27 Aug, 2008

4 commits