1. 24 4月, 2007 20 次提交
  2. 22 4月, 2007 4 次提交
  3. 21 4月, 2007 12 次提交
  4. 20 4月, 2007 4 次提交
    • 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
    • A
      [MIPS] Disallow CpU exception in kernel again. · 5323180d
      Atsushi Nemoto 提交于
      The commit 4d40bff7110e9e1a97ff8c01bdd6350e9867cc10 ("Allow CpU
      exception in kernel partially") was broken.  The commit was to fix
      theoretical problem but broke usual case.  Revert it for now.
      Signed-off-by: NAtsushi Nemoto <anemo@mba.ocn.ne.jp>
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      5323180d