21 Mar, 2012

25 commits


19 Mar, 2012

2 commits

  • Linus Torvalds
     
  • Commit 28d82dc1c4ed ("epoll: limit paths") that I did to limit the
    number of possible wakeup paths in epoll is causing a few applications
    to longer work (dovecot for one).

    The original patch is really about limiting the amount of epoll nesting
    (since epoll fds can be attached to other fds). Thus, we probably can
    allow an unlimited number of paths of depth 1. My current patch limits
    it at 1000. And enforce the limits on paths that have a greater depth.

    This is captured in: https://bugzilla.redhat.com/show_bug.cgi?id=681578

    Signed-off-by: Jason Baron
    Cc: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jason Baron
     

18 Mar, 2012

2 commits

  • Pull networking changes from David Miller:
    "1) icmp6_dst_alloc() returns NULL instead of ERR_PTR() leading to
    crashes, particularly during shutdown. Reported by Dave Jones and
    fixed by Eric Dumazet.

    2) hyperv and wimax/i2400m return NETDEV_TX_BUSY when they have
    already freed the SKB, which causes crashes as to the caller this
    means requeue the packet. Fixes from Eric Dumazet.

    3) usbnet driver doesn't allocate the right amount of headroom on
    fresh RX SKBs, fix from Eric Dumazet.

    4) Fix regression in ip6_mc_find_dev_rcu(), as an RCU lookup it
    abolutely should not take a reference to 'dev', this leads to
    leaks. Fix from RonQing Li.

    5) Fix netfilter ctnetlink race between delete and timeout expiration.
    From Pablo Neira Ayuso.

    6) Revert SFQ change which causes regressions, specifically queueing
    to tail can lead to unavoidable flow starvation. From Eric
    Dumazet.

    7) Fix a memory leak and a crash on corrupt firmware files in bnx2x,
    from Michal Schmidt."

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net:
    netfilter: ctnetlink: fix race between delete and timeout expiration
    ipv6: Don't dev_hold(dev) in ip6_mc_find_dev_rcu.
    wimax/i2400m: fix erroneous NETDEV_TX_BUSY use
    net/hyperv: fix erroneous NETDEV_TX_BUSY use
    net/usbnet: reserve headroom on rx skbs
    bnx2x: fix memory leak in bnx2x_init_firmware()
    bnx2x: fix a crash on corrupt firmware file
    sch_sfq: revert dont put new flow at the end of flows
    ipv6: fix icmp6_dst_alloc()

    Linus Torvalds
     
  • Pull perf fixes from Ingo Molnar.

    * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    perf tools, x86: Build perf on older user-space as well
    perf tools: Use scnprintf where applicable
    perf tools: Incorrect use of snprintf results in SEGV

    Linus Torvalds
     

17 Mar, 2012

9 commits

  • Kerin Millar reported hardlockups while running `conntrackd -c'
    in a busy firewall. That system (with several processors) was
    acting as backup in a primary-backup setup.

    After several tries, I found a race condition between the deletion
    operation of ctnetlink and timeout expiration. This patch fixes
    this problem.

    Tested-by: Kerin Millar
    Reported-by: Kerin Millar
    Signed-off-by: Pablo Neira Ayuso
    Signed-off-by: David S. Miller

    Pablo Neira Ayuso
     
  • ip6_mc_find_dev_rcu() is called with rcu_read_lock(), so don't
    need to dev_hold().
    With dev_hold(), not corresponding dev_put(), will lead to leak.

    [ bug introduced in 96b52e61be1 (ipv6: mcast: RCU conversions) ]

    Signed-off-by: RongQing.Li
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller

    RongQing.Li
     
  • Merge some more email patches from Andrew Morton:
    "A couple of nilfs fixes"

    * emailed from Andrew Morton :
    nilfs2: fix NULL pointer dereference in nilfs_load_super_block()
    nilfs2: clamp ns_r_segments_percentage to [1, 99]

    Linus Torvalds
     
  • According to the report from Slicky Devil, nilfs caused kernel oops at
    nilfs_load_super_block function during mount after he shrank the
    partition without resizing the filesystem:

    BUG: unable to handle kernel NULL pointer dereference at 00000048
    IP: [] nilfs_load_super_block+0x17e/0x280 [nilfs2]
    *pde = 00000000
    Oops: 0000 [#1] PREEMPT SMP
    ...
    Call Trace:
    [] init_nilfs+0x4b/0x2e0 [nilfs2]
    [] nilfs_mount+0x447/0x5b0 [nilfs2]
    [] mount_fs+0x36/0x180
    [] vfs_kern_mount+0x51/0xa0
    [] do_kern_mount+0x3e/0xe0
    [] do_mount+0x169/0x700
    [] sys_mount+0x6b/0xa0
    [] sysenter_do_call+0x12/0x28
    Code: 53 18 8b 43 20 89 4b 18 8b 4b 24 89 53 1c 89 43 24 89 4b 20 8b 43
    20 c7 43 2c 00 00 00 00 23 75 e8 8b 50 68 89 53 28 8b 54 b3 20 72
    48 8b 7a 4c 8b 55 08 89 b3 84 00 00 00 89 bb 88 00 00 00
    EIP: [] nilfs_load_super_block+0x17e/0x280 [nilfs2] SS:ESP 0068:ca9bbdcc
    CR2: 0000000000000048

    This turned out due to a defect in an error path which runs if the
    calculated location of the secondary super block was invalid.

    This patch fixes it and eliminates the reported oops.

    Reported-by: Slicky Devil
    Signed-off-by: Ryusuke Konishi
    Tested-by: Slicky Devil
    Cc: [2.6.30+]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ryusuke Konishi
     
  • ns_r_segments_percentage is read from the disk. Bogus or malicious
    value could cause integer overflow and malfunction due to meaningless
    disk usage calculation. This patch reports error when mounting such
    bogus volumes.

    Signed-off-by: Haogang Chen
    Signed-off-by: Ryusuke Konishi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Haogang Chen
     
  • Pull maintainer update from James Morris:
    "Please pull this patch which adds Serge as maintainer of the
    capabilities code, as discussed on lwn and the lsm list.

    New capabilities must be signed off by the maintainer, and new uses of
    any capabilities should at be cc'd to the maintainer."

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security:
    MAINTAINERS: Add Serge as maintainer of capabilities

    Linus Torvalds
     
  • Pull c6x bugfix from Mark Salter:
    "Remove dead code from entry.S which causes a build failure when using
    a newer assembler (v2.22 complains about it, v2.20 ignores it)."

    * tag 'for-linus' of git://linux-c6x.org/git/projects/linux-c6x-upstreaming:
    C6X: remove dead code from entry.S

    Linus Torvalds
     
  • When writing files to afs I sometimes hit a BUG:

    kernel BUG at fs/afs/rxrpc.c:179!

    With a backtrace of:

    afs_free_call
    afs_make_call
    afs_fs_store_data
    afs_vnode_store_data
    afs_write_back_from_locked_page
    afs_writepages_region
    afs_writepages

    The cause is:

    ASSERT(skb_queue_empty(&call->rx_queue));

    Looking at a tcpdump of the session the abort happens because we
    are exceeding our disk quota:

    rx abort fs reply store-data error diskquota exceeded (32)

    So the abort error is valid. We hit the BUG because we haven't
    freed all the resources for the call.

    By freeing any skbs in call->rx_queue before calling afs_free_call
    we avoid hitting leaking memory and avoid hitting the BUG.

    Signed-off-by: Anton Blanchard
    Signed-off-by: David Howells
    Cc:
    Signed-off-by: Linus Torvalds

    Anton Blanchard
     
  • A read of a large file on an afs mount failed:

    # cat junk.file > /dev/null
    cat: junk.file: Bad message

    Looking at the trace, call->offset wrapped since it is only an
    unsigned short. In afs_extract_data:

    _enter("{%u},{%zu},%d,,%zu", call->offset, len, last, count);
    ...

    if (call->offset < count) {
    if (last) {
    _leave(" = -EBADMSG [%d < %zu]", call->offset, count);
    return -EBADMSG;
    }

    Which matches the trace:

    [cat ] ==> afs_extract_data({65132},{524},1,,65536)
    [cat ] < 65536]

    call->offset went from 65132 to 0. Fix this by making call->offset an
    unsigned int.

    Signed-off-by: Anton Blanchard
    Signed-off-by: David Howells
    Cc:
    Signed-off-by: Linus Torvalds

    Anton Blanchard
     

16 Mar, 2012

2 commits

  • The ENDPROC() on sys_fadvise64_c6x() in arch/c6x/kernel/entry.S is
    outside of the conditional block with the matching ENTRY() macro. This
    leads a newer (v2.22 vs. v2.20) assembler to complain:

    /tmp/ccGZBaPT.s: Assembler messages:
    /tmp/ccGZBaPT.s: Error: .size expression for sys_fadvise64_c6x does not evaluate to a constant

    The conditional block became dead code when c6x switched to generic
    unistd.h and should be removed along with the offending ENDPROC().

    Signed-off-by: Mark Salter
    Acked-by: David Howells

    Mark Salter
     
  • A driver start_xmit() method cannot free skb and return NETDEV_TX_BUSY,
    since caller is going to reuse freed skb.

    In fact netif_tx_stop_queue() / netif_stop_queue() is needed before
    returning NETDEV_TX_BUSY or you can trigger a ksoftirqd fatal loop.

    In case of memory allocation error, only safe way is to drop the packet
    and return NETDEV_TX_OK

    Also increments tx_dropped counter

    Signed-off-by: Eric Dumazet
    Cc: Inaky Perez-Gonzalez
    Signed-off-by: David S. Miller

    Eric Dumazet