24 Oct, 2005

12 commits

  • 1. cleanup_timers() sets timer->task = NULL under tasklist + ->sighand locks.
    That means that this code in posix_cpu_timer_del() and posix_cpu_timer_set()

    lock_timer(timer);
    if (timer->task == NULL)
    return;
    read_lock(tasklist);
    put_task_struct(timer->task)

    is racy. With this patch timer->task modified and accounted only under
    timer->it_lock. Sadly, this means that dead task_struct won't be freed
    until timer deleted or armed.

    2. run_posix_cpu_timers() collects expired timers into local list under
    tasklist + ->sighand again. That means that posix_cpu_timer_del()
    should check timer->it.cpu.firing under these locks too.

    Signed-off-by: Oleg Nesterov
    Signed-off-by: Linus Torvalds

    Oleg Nesterov
     
  • Linus Torvalds
     
  • We should always re-arm an event queue's interrupt in
    mthca_tavor_interrupt() if the corresponding bit is set in the event cause
    register (ECR), even if we didn't find any entries in the EQ. If we don't,
    then there's a window where we miss an EQ entry and then get stuck because
    we don't get another EQ event.

    Signed-off-by: Roland Dreier
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roland Dreier
     
  • Fix a bug which was reported and diagnosed by
    Stefan Jones

    IDR trees include a cache of idr_layer objects. There's no way to destroy
    this cache, so when we discard an overall idr tree we end up leaking some
    memory.

    Add and use idr_destroy() for this. v9fs and infiniband also need to use
    idr_destroy() to avoid leaks.

    Or, we make the cache global, like radix_tree_preload(). Which is probably
    better. Later.

    Cc: Eric Van Hensbergen
    Cc: Roland Dreier
    Cc: Robert Love
    Cc: John McCutchan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • On 2005-05-01, Gerd Knorr sent in a patch to add cx22702 to cx88-dvb:

    [PATCH] dvb: cx22702 frontend driver update
    http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9990d744bea7d28e83c420e2c9d524c7a8a2d136

    ...but as we can see, the Kconfig portion of his patch was incorrectly
    applied to saa7134-dvb instead of cx88-dvb.

    On 2005-06-24, Adrian bunk fixed cx88-dvb:

    [PATCH] VIDEO_CX88_DVB must select DVB_CX22702
    http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d6988588e13616587aa879c2e0bd7cd811705e5d

    ...but we never removed the original patch from Gerd.

    This patch sets things straight:

    saa7134-dvb should not select cx22702

    Signed-off-by: Michael Krufky
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Krufky
     
  • This patch fixes error handling in sel_make_bools(), where currently we'd
    get a memory leak via security_get_bools() and try to kfree() the wrong
    pointer if called again.

    Signed-off-by: James Morris
    Acked-by: Stephen Smalley
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Davi Arnaut
     
  • This patch fixes a possible NULL dereference in policydb_destroy, where
    p->type_attr_map can be NULL if policydb_destroy is called to clean up a
    partially loaded policy upon an error during policy load. Please apply.

    Signed-off-by: Stephen Smalley
    Acked-by: James Morris
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Stephen Smalley
     
  • Another case of missing call to security_file_permission: aio functions
    (namely, io_submit) does not check credentials with security modules.

    Below is the simple patch to the problem. It seems that it is enough to
    check for rights at the request submission time.

    Signed-off-by: Kostik Belousov
    Signed-off-by: Chris Wright
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kostik Belousov
     
  • Fix typos & trailing whitespace.
    Add blank lines in a few places.
    Remove "AM53C974=" option: driver does not exist.
    Restrict to < 80 columns in most places (but don't split formatted
    command-line arguments).
    Add a few option arguments for completeness.

    Signed-off-by: Randy Dunlap
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     
  • That's what we've always historically done, and bigger windows seem to
    confuse some cardbus bridges. Or something.

    Alan reports that this makes the ThinkPad 600x series work properly
    again: the 4kB IO window for some reason made IDE DMA not work, which
    makes IDE painfully slow even if it works after DMA timeouts.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • Linus Torvalds
     
  • Bursty timers aren't good for anybody, very much including latency for
    other programs when we trigger lots of timers in interrupt context. So
    set a random limit, after which we'll handle the rest on the next timer
    tick.

    Noted by Oleg Nesterov

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

23 Oct, 2005

6 commits

  • neigh_changeaddr attempts to delete neighbour timers without setting
    nud_state. This doesn't work because the timer may have already fired
    when we acquire the write lock in neigh_changeaddr. The result is that
    the timer may keep firing for quite a while until the entry reaches
    NEIGH_FAILED.

    It should be setting the nud_state straight away so that if the timer
    has already fired it can simply exit once we relinquish the lock.

    In fact, this whole function is simply duplicating the logic in
    neigh_ifdown which in turn is already doing the right thing when
    it comes to deleting timers and setting nud_state.

    So all we have to do is take that code out and put it into a common
    function and make both neigh_changeaddr and neigh_ifdown call it.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • neigh_add_timer cannot use add_timer unconditionally. The reason is that
    by the time it has obtained the write lock someone else (e.g., neigh_update)
    could have already added a new timer.

    So it should only use mod_timer and deal with its return value accordingly.

    This bug would have led to rare neighbour cache entry leaks.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • Stack traces are very helpful in determining the exact nature of a bug.
    So let's print a stack trace when the timer is added twice.

    Signed-off-by: Herbert Xu

    Herbert Xu
     
  • As stated in Documentation/atomic_ops.txt, atomic functions
    returning values must have the memory barriers both before and after
    the operation.

    Thanks to DaveM for pointing that out.

    Signed-off-by: Ivan Kokshaysky
    Signed-off-by: Linus Torvalds

    Ivan Kokshaysky
     
  • On architectures where the char type defaults to unsigned some of the
    arithmetic in the AX.25 stack to fail, resulting in some packets being dropped
    on receive.

    Credits for tracking this down and the original patch to
    Bob Brose N0QBJ .

    Signed-off-by: Ralf Baechle DL5RB
    Signed-off-by: Arnaldo Carvalho de Melo

    Ralf Baechle
     
  • IPVS used flag NFC_IPVS_PROPERTY in nfcache but as now nfcache was removed the
    new flag 'ipvs_property' still needs to be copied. This patch should be
    included in 2.6.14.

    Further comments from Harald Welte:

    Sorry, seems like the bug was introduced by me.

    Signed-off-by: Julian Anastasov
    Signed-off-by: Harald Welte
    Signed-off-by: Arnaldo Carvalho de Melo

    Julian Anastasov
     

22 Oct, 2005

11 commits

  • Not sure how it slipped by, but here's a trivial typo fix for powernow.

    Signed-off-by: Chris Wright
    [ It's "nurter" backwards.. Maybe we have a hillbilly The Shining fan? ]
    Signed-off-by: Linus Torvalds

    Chris Wright
     
  • When I originally moved exit_itimers into __exit_signal, that was the only
    place where we could reliably know it was the last thread in the group
    dying, without races. Since then we've gotten the signal_struct.live
    counter, and do_exit can reliably do group-wide cleanup work.

    This patch moves the call to do_exit, where it's made without locks. This
    avoids the deadlock issues that the old __exit_signal code's comment talks
    about, and the one that Oleg found recently with process CPU timers.

    [ This replaces e03d13e985d48ac4885382c9e3b1510c78bd047f, which is why
    it was just reverted. ]

    Signed-off-by: Roland McGrath
    Signed-off-by: Linus Torvalds

    Roland McGrath
     
  • Revert commit e03d13e985d48ac4885382c9e3b1510c78bd047f, to be replaced
    by a much nicer fix from Roland.

    Linus Torvalds
     
  • AMD recently discovered that on some hardware, there is a race condition
    possible when a C-state change request goes onto the bus at the same
    time as a P-state change request.

    Both requests happen, but the southbridge hardware only acknowledges the
    C-state change. The PowerNow! driver is then stuck in a loop, waiting
    for the P-state change acknowledgement. The driver eventually times
    out, but can no longer perform P-state changes.

    It turns out the solution is to resend the P-state change, which the
    southbridge will acknowledge normally.

    Thanks to Johannes Winkelmann for reporting this and testing the fix.

    Signed-off-by: Mark Langsdorf
    Signed-off-by: Dave Jones
    Signed-off-by: Linus Torvalds

    Dave Jones
     
  • This fixes a stupid typo bug in the iSeries hash table code.

    When we place a hash PTE in the secondary bucket, instead of setting the
    SECONDARY flag bit, as we should, we (redundantly) set the VALID flag.

    This was introduced with the patch abolishing bitfields from the hash
    table code. Mea culpa, oops. It hasn't been noticed until now because
    in practice we don't hit the secondary bucket terribly often.

    Signed-off-by: David Gibson
    Signed-off-by: Linus Torvalds

    David Gibson
     
  • Linus Torvalds
     
  • Linus Torvalds
     
  • The wrong state emission routines were being called for G550, and
    consistent maps weren't correctly mapped...

    Signed-off-by: Dave Airlie
    Signed-off-by: Linus Torvalds

    Dave Airlie
     
  • While working on 64K pages, I found this little buglet in our
    update_mmu_cache() implementation.

    The code calls __hash_page() passing it an "access" parameter (the type
    of access that triggers the hash) containing the bits _PAGE_RW and
    _PAGE_USER of the linux PTE. The latter is useless in this case and the
    former is wrong. In fact, if we have a writeable PTE and we pass
    _PAGE_RW to hash_page(), it will set _PAGE_DIRTY (since we track dirty
    that way, by hash faulting !dirty) which is not what we want.

    In fact, the correct fix is to always pass 0. That means that only
    read-only or already dirty read write PTEs will be preloaded. The
    (hopefully rare) case of a non dirty read write PTE can't be preloaded
    this way, it will have to fault in hash_page on the actual access.

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Linus Torvalds

    Benjamin Herrenschmidt
     
  • This fixes a typo in the div128_by_32 function used in the timekeeping
    calculations on ppc64. If you look at the code it's quite obvious
    that we need (rb + c) rather than (rb + b). The "b" is clearly just a
    typo.

    Signed-off-by: Paul Mackerras
    Signed-off-by: Linus Torvalds

    Paul Mackerras
     
  • This fixes handling of the phy identifiers in mptsas.

    Signed-off-by: Eric Moore
    [ split it a pre-2.6.14 portion from Eric's bigger patch ]
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Linus Torvalds

    Eric Moore
     

21 Oct, 2005

10 commits

  • Signed-off-by: Russell King

    Russell King
     
  • Patch from Ben Dooks

    From: Guillaume Gourat

    Add MASK definitions for DCLK0 and DCLK1

    Signed-off-by: Guillaume Gourat
    Signed-off-by: Ben Dooks
    Signed-off-by: Russell King

    Ben Dooks
     
  • Patch from Ben Dooks

    The current Simtec BAST nand area timings are a little
    too slow to be obtained by a 2410 running at 266MHz,
    so reduce the timings slightly to bring them into the
    acceptable range.

    Signed-off-by: Ben Dooks
    Signed-off-by: Russell King

    Ben Dooks
     
  • Patch from Ben Dooks

    Avoid the possiblity that if the board is using
    a 16.9334 or higher crystal with a high PLL
    multiplier, then the pll value could overflow
    the capability of an int.

    Also fix the value types of the intermediate
    variables to unsigned int.

    Rewrite of patch from Guillaume Gourat

    Signed-off-by: Ben Dooks
    Signed-off-by: Russell King

    Ben Dooks
     
  • Patch from Matt Reimer

    Adds an I2S platform_device for PXA. I2S is used to interface
    with sound chips on systems like iPAQ h1910/h2200/hx4700 and
    Asus 716.

    Signed-off-by: mreimer@vpop.net
    Signed-off-by: Russell King

    Matt Reimer
     
  • It is legitimate to call tcp_fragment with len == skb->len since
    that is done for FIN packets and the FIN flag counts as one byte.
    So we should only check for the len > skb->len case.

    Signed-off-by: Herbert Xu
    Signed-off-by: Arnaldo Carvalho de Melo

    Herbert Xu
     
  • Turns out the problem has nothing to do with use-after-free or double-free.
    It's just that we're not clearing the CB area and DCCP unlike TCP uses a CB
    format that's incompatible with IP.

    Signed-off-by: Herbert Xu
    Signed-off-by: Ian McDonald
    Signed-off-by: Arnaldo Carvalho de Melo

    Herbert Xu
     
  • icmp_send doesn't use skb->sk at all so even if skb->sk has already
    been freed it can't cause crash there (it would've crashed somewhere
    else first, e.g., ip_queue_xmit).

    I found a double-free on an skb that could explain this though.
    dccp_sendmsg and dccp_write_xmit are a little confused as to what
    should free the packet when something goes wrong. Sometimes they
    both go for the ball and end up in each other's way.

    This patch makes dccp_write_xmit always free the packet no matter
    what. This makes sense since dccp_transmit_skb which in turn comes
    from the fact that ip_queue_xmit always frees the packet.

    Signed-off-by: Herbert Xu
    Signed-off-by: Arnaldo Carvalho de Melo

    Herbert Xu
     
  • David S. Miller wrote:
    > One thing you can probably do for this bug is to mark data packets
    > explicitly somehow, perhaps in the SKB control block DCCP already
    > uses for other data. Put some boolean in there, set it true for
    > data packets. Then change the test in dccp_transmit_skb() as
    > appropriate to test the boolean flag instead of "skb_cloned(skb)".

    I agree. In fact we already have that flag, it's called skb->sk.
    So here is patch to test that instead of skb_cloned().

    Signed-off-by: Herbert Xu
    Acked-by: Ian McDonald
    Signed-off-by: Arnaldo Carvalho de Melo

    Herbert Xu
     
  • This reverts commit 3359b54c8c07338f3a863d1109b42eebccdcf379 and
    replaces it with a cleaner version that is purely based on page table
    operations, so that the synchronization between inode size and hugetlb
    mappings becomes moot.

    Signed-off-by: Hugh Dickins
    Signed-off-by: Linus Torvalds

    Hugh Dickins
     

20 Oct, 2005

1 commit