1. 24 4月, 2007 21 次提交
  2. 22 4月, 2007 4 次提交
  3. 21 4月, 2007 12 次提交
  4. 20 4月, 2007 3 次提交
    • D
      [MIPS] Fix wrong checksum for split TCP packets on 64-bit MIPS · 1d464c26
      Dave Johnson 提交于
      I've traced down an off-by-one TCP checksum calculation error under
      the following conditions:
      
      1) The TCP code needs to split a full-sized packet due to a reduced
         MSS (typically due to the addition of TCP options mid-stream like
         SACK).
         _AND_
      2) The checksum of the 2nd fragment is larger than the checksum of the
         original packet.  After subtraction this results in a checksum for
         the 1st fragment with bits 16..31 set to 1. (this is ok)
         _AND_
      3) The checksum of the 1st fragment's TCP header plus the previously
         32bit checksum of the 1st fragment DOES NOT cause a 32bit overflow
         when added together.  This results in a checksum of the TCP header
         plus TCP data that still has the upper 16 bits as 1's.
         _THEN_
      4) The TCP+data checksum is added to the checksum of the pseudo IP
         header with csum_tcpudp_nofold() incorrectly (the bug).
          
      The problem is the checksum of the TCP+data is passed to
      csum_tcpudp_nofold() as an 32bit unsigned value, however the assembly
      code acts on it as if it is a 64bit unsigned value.
      
      This causes an incorrect 32->64bit extension if the sum has bit 31
      set.  The resulting checksum is off by one.
          
      This problems is data and TCP header dependent due to #2 and #3
      above so it doesn't occur on every TCP packet split.
      Signed-off-by: NDave Johnson <djohnson+linux-mips@sw.starentnetworks.com>
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      1d464c26
    • A
      [MIPS] Fix BUG(), BUG_ON() handling · ba755f8e
      Atsushi Nemoto 提交于
      With commit 63dc68a8, kernel can not
      handle BUG() and BUG_ON() properly since get_user() returns false for
      kernel code.  Use __get_user() to skip unnecessary access_ok().  This
      patch also make BRK_BUG code encoded in the TNE instruction.
      Signed-off-by: NAtsushi Nemoto <anemo@mba.ocn.ne.jp>
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      ba755f8e
    • A
      [MIPS] Retry {save,restore}_fp_context if failed in atomic context. · faea6234
      Atsushi Nemoto 提交于
      The save_fp_context()/restore_fp_context() might sleep on accessing
      user stack and therefore might lose FPU ownership in middle of them.
      
      If these function failed due to "in_atomic" test in do_page_fault,
      touch the sigcontext area in non-atomic context and retry these
      save/restore operation.
      
      This is a replacement of a (broken) fix which was titled "Allow CpU
      exception in kernel partially".
      Signed-off-by: NAtsushi Nemoto <anemo@mba.ocn.ne.jp>
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      faea6234