1. 07 10月, 2009 1 次提交
    • S
      [CIFS] Fixing to avoid invalid kfree() in cifs_get_tcp_session() · 8347a5cd
      Steve French 提交于
      trivial bug in fs/cifs/connect.c .
      The bug is caused by fail of extract_hostname()
      when mounting cifs file system.
      
      This is the situation when I noticed this bug.
      
      % sudo mount -t cifs //192.168.10.208 mountpoint -o options...
      
      Then my kernel says,
      
      [ 1461.807776] ------------[ cut here ]------------
      [ 1461.807781] kernel BUG at mm/slab.c:521!
      [ 1461.807784] invalid opcode: 0000 [#2] PREEMPT SMP
      [ 1461.807790] last sysfs file:
      /sys/devices/pci0000:00/0000:00:1e.0/0000:09:02.0/resource
      [ 1461.807793] CPU 0
      [ 1461.807796] Modules linked in: nls_iso8859_1 usbhid sbp2 uhci_hcd
      ehci_hcd i2c_i801 ohci1394 ieee1394 psmouse serio_raw pcspkr sky2 usbcore
      evdev
      [ 1461.807816] Pid: 3446, comm: mount Tainted: G      D 2.6.32-rc2-vanilla
      [ 1461.807820] RIP: 0010:[<ffffffff810b888e>]  [<ffffffff810b888e>]
      kfree+0x63/0x156
      [ 1461.807829] RSP: 0018:ffff8800b4f7fbb8  EFLAGS: 00010046
      [ 1461.807832] RAX: ffffea00033fff98 RBX: ffff8800afbae7e2 RCX:
      0000000000000000
      [ 1461.807836] RDX: ffffea0000000000 RSI: 000000000000005c RDI:
      ffffffffffffffea
      [ 1461.807839] RBP: ffff8800b4f7fbf8 R08: 0000000000000001 R09:
      0000000000000000
      [ 1461.807842] R10: 0000000000000000 R11: ffff8800b4f7fbf8 R12:
      00000000ffffffea
      [ 1461.807845] R13: ffff8800afb23000 R14: ffff8800b4f87bc0 R15:
      ffffffffffffffea
      [ 1461.807849] FS:  00007f52b6f187c0(0000) GS:ffff880007600000(0000)
      knlGS:0000000000000000
      [ 1461.807852] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      [ 1461.807855] CR2: 0000000000613000 CR3: 00000000af8f9000 CR4:
      00000000000006f0
      [ 1461.807858] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
      0000000000000000
      [ 1461.807861] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7:
      0000000000000400
      [ 1461.807865] Process mount (pid: 3446, threadinfo ffff8800b4f7e000, task
      ffff8800950e4380)
      [ 1461.807867] Stack:
      [ 1461.807869]  0000000000000202 0000000000000282 ffff8800b4f7fbf8
      ffff8800afbae7e2
      [ 1461.807876] <0> 00000000ffffffea ffff8800afb23000 ffff8800b4f87bc0
      ffff8800b4f7fc28
      [ 1461.807884] <0> ffff8800b4f7fcd8 ffffffff81159f6d ffffffff81147bc2
      ffffffff816bfb48
      [ 1461.807892] Call Trace:
      [ 1461.807899]  [<ffffffff81159f6d>] cifs_get_tcp_session+0x440/0x44b
      [ 1461.807904]  [<ffffffff81147bc2>] ? find_nls+0x1c/0xe9
      [ 1461.807909]  [<ffffffff8115b889>] cifs_mount+0x16bc/0x2167
      [ 1461.807917]  [<ffffffff814455bd>] ? _spin_unlock+0x30/0x4b
      [ 1461.807923]  [<ffffffff81150da9>] cifs_get_sb+0xa5/0x1a8
      [ 1461.807928]  [<ffffffff810c1b94>] vfs_kern_mount+0x56/0xc9
      [ 1461.807933]  [<ffffffff810c1c64>] do_kern_mount+0x47/0xe7
      [ 1461.807938]  [<ffffffff810d8632>] do_mount+0x712/0x775
      [ 1461.807943]  [<ffffffff810d671f>] ? copy_mount_options+0xcf/0x132
      [ 1461.807948]  [<ffffffff810d8714>] sys_mount+0x7f/0xbf
      [ 1461.807953]  [<ffffffff8144509a>] ? lockdep_sys_exit_thunk+0x35/0x67
      [ 1461.807960]  [<ffffffff81011cc2>] system_call_fastpath+0x16/0x1b
      [ 1461.807963] Code: 00 00 00 00 ea ff ff 48 c1 e8 0c 48 6b c0 68 48 01 d0
      66 83 38 00 79 04 48 8b 40 10 66 83 38 00 79 04 48 8b 40 10 80 38 00 78 04
      <0f> 0b eb fe 4c 8b 70 58 4c 89 ff 41 8b 76 4c e8 b8 49 fb ff e8
      [ 1461.808022] RIP  [<ffffffff810b888e>] kfree+0x63/0x156
      [ 1461.808027]  RSP <ffff8800b4f7fbb8>
      [ 1461.808031] ---[ end trace ffe26fcdc72c0ce4 ]---
      
      The reason of this bug is that the error handling code of
      cifs_get_tcp_session()
      calls kfree() when corresponding kmalloc() failed.
      (The kmalloc() is called by extract_hostname().)
      Signed-off-by: NHitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
      CC: Stable <stable@kernel.org>
      Reviewed-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      8347a5cd
  2. 26 9月, 2009 1 次提交
  3. 25 9月, 2009 5 次提交
  4. 24 9月, 2009 2 次提交
  5. 22 9月, 2009 2 次提交
  6. 21 9月, 2009 1 次提交
  7. 16 9月, 2009 5 次提交
  8. 03 9月, 2009 1 次提交
  9. 02 9月, 2009 7 次提交
  10. 31 8月, 2009 1 次提交
  11. 04 8月, 2009 3 次提交
  12. 02 8月, 2009 1 次提交
  13. 30 7月, 2009 1 次提交
  14. 28 7月, 2009 1 次提交
  15. 23 7月, 2009 3 次提交
    • S
      [CIFS] fix sparse warning · f1230c97
      Steve French 提交于
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      f1230c97
    • J
      cifs: fix sb->s_maxbytes so that it casts properly to a signed value · 03aa3a49
      Jeff Layton 提交于
      This off-by-one bug causes sendfile() to not work properly. When a task
      calls sendfile() on a file on a CIFS filesystem, the syscall returns -1
      and sets errno to EOVERFLOW.
      
      do_sendfile uses s_maxbytes to verify the returned offset of the file.
      The problem there is that this value is cast to a signed value (loff_t).
      When this is done on the s_maxbytes value that cifs uses, it becomes
      negative and the comparisons against it fail.
      
      Even though s_maxbytes is an unsigned value, it seems that it's not OK
      to set it in such a way that it'll end up negative when it's cast to a
      signed value. These casts happen in other codepaths besides sendfile
      too, but the VFS is a little hard to follow in this area and I can't
      be sure if there are other bugs that this will fix.
      
      It's not clear to me why s_maxbytes isn't just declared as loff_t in the
      first place, but either way we still need to fix these values to make
      sendfile work properly. This is also an opportunity to replace the magic
      bit-shift values here with the standard #defines for this.
      
      This fixes the reproducer program I have that does a sendfile and
      will probably also fix the situation where apache is serving from a
      CIFS share.
      Acked-by: NJohannes Weiner <hannes@cmpxchg.org>
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      03aa3a49
    • J
      cifs: disable serverino if server doesn't support it · ce6e7fcd
      Jeff Layton 提交于
      A recent regression when dealing with older servers. This bug was
      introduced when we made serverino the default...
      
      When the server can't provide inode numbers, disable it for the mount.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      ce6e7fcd
  16. 21 7月, 2009 1 次提交
  17. 10 7月, 2009 4 次提交