1. 19 3月, 2018 2 次提交
  2. 14 3月, 2018 1 次提交
  3. 05 3月, 2018 2 次提交
  4. 02 3月, 2018 1 次提交
    • J
      ata: do not schedule hot plug if it is a sas host · 6f54120e
      Jason Yan 提交于
      We've got a kernel panic when using sata disk with sas controller:
      
      [115946.152283] Unable to handle kernel NULL pointer dereference at virtual address 000007d8
      [115946.223963] CPU: 0 PID: 22175 Comm: kworker/0:1 Tainted: G   W OEL  4.14.0 #1
      [115946.232925] Workqueue: events ata_scsi_hotplug
      [115946.237938] task: ffff8021ee50b180 task.stack: ffff00000d5d0000
      [115946.244717] PC is at sas_find_dev_by_rphy+0x44/0x114
      [115946.250224] LR is at sas_find_dev_by_rphy+0x3c/0x114
      ......
      [115946.355701] Process kworker/0:1 (pid: 22175, stack limit = 0xffff00000d5d0000)
      [115946.363369] Call trace:
      [115946.456356] [<ffff000008878a9c>] sas_find_dev_by_rphy+0x44/0x114
      [115946.462908] [<ffff000008878b8c>] sas_target_alloc+0x20/0x5c
      [115946.469408] [<ffff00000885a31c>] scsi_alloc_target+0x250/0x308
      [115946.475781] [<ffff00000885ba30>] __scsi_add_device+0xb0/0x154
      [115946.481991] [<ffff0000088b520c>] ata_scsi_scan_host+0x180/0x218
      [115946.488367] [<ffff0000088b53d8>] ata_scsi_hotplug+0xb0/0xcc
      [115946.494801] [<ffff0000080ebd70>] process_one_work+0x144/0x390
      [115946.501115] [<ffff0000080ec100>] worker_thread+0x144/0x418
      [115946.507093] [<ffff0000080f2c98>] kthread+0x10c/0x138
      [115946.512792] [<ffff0000080855dc>] ret_from_fork+0x10/0x18
      
      We found that Ding Xiang has reported a similar bug before:
      https://patchwork.kernel.org/patch/9179817/
      
      And this bug still exists in mainline. Since libsas handles hotplug and
      device adding/removing itself, do not need to schedule ata hot plug task
      here if it is a sas host.
      Signed-off-by: NJason Yan <yanaijie@huawei.com>
      Cc: Ding Xiang <dingxiang@huawei.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: NTejun Heo <tj@kernel.org>
      6f54120e
  5. 21 2月, 2018 1 次提交
  6. 18 2月, 2018 1 次提交
  7. 13 2月, 2018 8 次提交
    • G
      ata: sata_rcar: Remove unused variable in sata_rcar_init_controller() · 8f8ca51d
      Geert Uytterhoeven 提交于
      drivers/ata/sata_rcar.c: In function 'sata_rcar_init_controller':
      drivers/ata/sata_rcar.c:821:8: warning: unused variable 'base' [-Wunused-variable]
      
      Fixes: da77d76b ("sata_rcar: Reset SATA PHY when Salvator-X board resumes")
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      8f8ca51d
    • K
      sata_rcar: Reset SATA PHY when Salvator-X board resumes · da77d76b
      Khiem Nguyen 提交于
      Because power of Salvator-X board is cut off in suspend,
      it needs to reset SATA PHY state in resume.
      Otherwise, SATA partition could not be accessed anymore.
      Signed-off-by: NKhiem Nguyen <khiem.nguyen.xt@rvc.renesas.com>
      Signed-off-by: NHien Dang <hien.dang.eb@rvc.renesas.com>
      [reinit phy in sata_rcar_resume() function on R-Car Gen3 only]
      [factor out SATA module init sequence]
      [fixed the prefix for the subject]
      Signed-off-by: NYoshihiro Kaneko <ykaneko0929@gmail.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      da77d76b
    • E
      libata: don't try to pass through NCQ commands to non-NCQ devices · 2c1ec6fd
      Eric Biggers 提交于
      syzkaller hit a WARN() in ata_bmdma_qc_issue() when writing to /dev/sg0.
      This happened because it issued an ATA pass-through command (ATA_16)
      where the protocol field indicated that NCQ should be used -- but the
      device did not support NCQ.
      
      We could just remove the WARN() from libata-sff.c, but the real problem
      seems to be that the SCSI -> ATA translation code passes through NCQ
      commands without verifying that the device actually supports NCQ.
      
      Fix this by adding the appropriate check to ata_scsi_pass_thru().
      
      Here's reproducer that works in QEMU when /dev/sg0 refers to a disk of
      the default type ("82371SB PIIX3 IDE"):
      
          #include <fcntl.h>
          #include <unistd.h>
      
          int main()
          {
                  char buf[53] = { 0 };
      
      	    buf[36] = 0x85;		/* ATA_16 */
      	    buf[37] = (12 << 1);	/* FPDMA */
      	    buf[38] = 0x1;		/* Has data */
      	    buf[51] = 0xC8;		/* ATA_CMD_READ */
                  write(open("/dev/sg0", O_RDWR), buf, sizeof(buf));
          }
      
      Fixes: ee7fb331 ("libata: add support for NCQ commands for SG interface")
      Reported-by: syzbot+2f69ca28df61bdfc77cd36af2e789850355a221e@syzkaller.appspotmail.com
      Cc: <stable@vger.kernel.org> # v4.4+
      Signed-off-by: NEric Biggers <ebiggers@google.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      2c1ec6fd
    • E
      libata: remove WARN() for DMA or PIO command without data · 9173e5e8
      Eric Biggers 提交于
      syzkaller hit a WARN() in ata_qc_issue() when writing to /dev/sg0.  This
      happened because it issued a READ_6 command with no data buffer.
      
      Just remove the WARN(), as it doesn't appear indicate a kernel bug.  The
      expected behavior is to fail the command, which the code does.
      
      Here's a reproducer that works in QEMU when /dev/sg0 refers to a disk of
      the default type ("82371SB PIIX3 IDE"):
      
          #include <fcntl.h>
          #include <unistd.h>
      
          int main()
          {
                  char buf[42] = { [36] = 0x8 /* READ_6 */ };
      
                  write(open("/dev/sg0", O_RDWR), buf, sizeof(buf));
          }
      
      Fixes: f92a2636 ("libata: change ATA_QCFLAG_DMAMAP semantics")
      Reported-by: syzbot+f7b556d1766502a69d85071d2ff08bd87be53d0f@syzkaller.appspotmail.com
      Cc: <stable@vger.kernel.org> # v2.6.25+
      Signed-off-by: NEric Biggers <ebiggers@google.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      9173e5e8
    • E
      libata: fix length validation of ATAPI-relayed SCSI commands · 058f58e2
      Eric Biggers 提交于
      syzkaller reported a crash in ata_bmdma_fill_sg() when writing to
      /dev/sg1.  The immediate cause was that the ATA command's scatterlist
      was not DMA-mapped, which causes 'pi - 1' to underflow, resulting in a
      write to 'qc->ap->bmdma_prd[0xffffffff]'.
      
      Strangely though, the flag ATA_QCFLAG_DMAMAP was set in qc->flags.  The
      root cause is that when __ata_scsi_queuecmd() is preparing to relay a
      SCSI command to an ATAPI device, it doesn't correctly validate the CDB
      length before copying it into the 16-byte buffer 'cdb' in 'struct
      ata_queued_cmd'.  Namely, it validates the fixed CDB length expected
      based on the SCSI opcode but not the actual CDB length, which can be
      larger due to the use of the SG_NEXT_CMD_LEN ioctl.  Since 'flags' is
      the next member in ata_queued_cmd, a buffer overflow corrupts it.
      
      Fix it by requiring that the actual CDB length be <= 16 (ATAPI_CDB_LEN).
      
      [Really it seems the length should be required to be <= dev->cdb_len,
      but the current behavior seems to have been intentionally introduced by
      commit 607126c2 ("libata-scsi: be tolerant of 12-byte ATAPI commands
      in 16-byte CDBs") to work around a userspace bug in mplayer.  Probably
      the workaround is no longer needed (mplayer was fixed in 2007), but
      continuing to allow lengths to up 16 appears harmless for now.]
      
      Here's a reproducer that works in QEMU when /dev/sg1 refers to the
      CD-ROM drive that qemu-system-x86_64 creates by default:
      
          #include <fcntl.h>
          #include <sys/ioctl.h>
          #include <unistd.h>
      
          #define SG_NEXT_CMD_LEN 0x2283
      
          int main()
          {
      	    char buf[53] = { [36] = 0x7e, [52] = 0x02 };
      	    int fd = open("/dev/sg1", O_RDWR);
      	    ioctl(fd, SG_NEXT_CMD_LEN, &(int){ 17 });
      	    write(fd, buf, sizeof(buf));
          }
      
      The crash was:
      
          BUG: unable to handle kernel paging request at ffff8cb97db37ffc
          IP: ata_bmdma_fill_sg drivers/ata/libata-sff.c:2623 [inline]
          IP: ata_bmdma_qc_prep+0xa4/0xc0 drivers/ata/libata-sff.c:2727
          PGD fb6c067 P4D fb6c067 PUD 0
          Oops: 0002 [#1] SMP
          CPU: 1 PID: 150 Comm: syz_ata_bmdma_q Not tainted 4.15.0-next-20180202 #99
          Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.0-20171110_100015-anatol 04/01/2014
          [...]
          Call Trace:
           ata_qc_issue+0x100/0x1d0 drivers/ata/libata-core.c:5421
           ata_scsi_translate+0xc9/0x1a0 drivers/ata/libata-scsi.c:2024
           __ata_scsi_queuecmd drivers/ata/libata-scsi.c:4326 [inline]
           ata_scsi_queuecmd+0x8c/0x210 drivers/ata/libata-scsi.c:4375
           scsi_dispatch_cmd+0xa2/0xe0 drivers/scsi/scsi_lib.c:1727
           scsi_request_fn+0x24c/0x530 drivers/scsi/scsi_lib.c:1865
           __blk_run_queue_uncond block/blk-core.c:412 [inline]
           __blk_run_queue+0x3a/0x60 block/blk-core.c:432
           blk_execute_rq_nowait+0x93/0xc0 block/blk-exec.c:78
           sg_common_write.isra.7+0x272/0x5a0 drivers/scsi/sg.c:806
           sg_write+0x1ef/0x340 drivers/scsi/sg.c:677
           __vfs_write+0x31/0x160 fs/read_write.c:480
           vfs_write+0xa7/0x160 fs/read_write.c:544
           SYSC_write fs/read_write.c:589 [inline]
           SyS_write+0x4d/0xc0 fs/read_write.c:581
           do_syscall_64+0x5e/0x110 arch/x86/entry/common.c:287
           entry_SYSCALL_64_after_hwframe+0x21/0x86
      
      Fixes: 607126c2 ("libata-scsi: be tolerant of 12-byte ATAPI commands in 16-byte CDBs")
      Reported-by: syzbot+1ff6f9fcc3c35f1c72a95e26528c8e7e3276e4da@syzkaller.appspotmail.com
      Cc: <stable@vger.kernel.org> # v2.6.24+
      Signed-off-by: NEric Biggers <ebiggers@google.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      058f58e2
    • B
      ata: libahci: fix comment indentation · 9f2b51db
      Baruch Siach 提交于
      Indent the numbered item with one space like all other items in the same
      list.
      Signed-off-by: NBaruch Siach <baruch@tkos.co.il>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      9f2b51db
    • S
      ahci: Add check for device presence (PCIe hot unplug) in ahci_stop_engine() · 3b61e512
      Stefan Roese 提交于
      Exit directly with ENODEV, if the AHCI controller is not available
      anymore. Otherwise a delay of 500ms for each port is added to the remove
      function while trying to issue a command on the non-existent controller.
      Signed-off-by: NStefan Roese <sr@denx.de>
      Cc: Tejun Heo <tj@kernel.org>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      3b61e512
    • D
      libata: Fix compile warning with ATA_DEBUG enabled · 0d3e45bc
      Dong Bo 提交于
      This fixs the following comile warnings with ATA_DEBUG enabled,
      which detected by Linaro GCC 5.2-2015.11:
      
        drivers/ata/libata-scsi.c: In function 'ata_scsi_dump_cdb':
        ./include/linux/kern_levels.h:5:18: warning: format '%d' expects
        argument of type 'int', but argument 6 has type 'u64 {aka long
         long unsigned int}' [-Wformat=]
      
      tj: Patch hand-applied and description trimmed.
      Signed-off-by: NDong Bo <dongbo4@huawei.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      0d3e45bc
  8. 12 2月, 2018 1 次提交
    • L
      vfs: do bulk POLL* -> EPOLL* replacement · a9a08845
      Linus Torvalds 提交于
      This is the mindless scripted replacement of kernel use of POLL*
      variables as described by Al, done by this script:
      
          for V in IN OUT PRI ERR RDNORM RDBAND WRNORM WRBAND HUP RDHUP NVAL MSG; do
              L=`git grep -l -w POLL$V | grep -v '^t' | grep -v /um/ | grep -v '^sa' | grep -v '/poll.h$'|grep -v '^D'`
              for f in $L; do sed -i "-es/^\([^\"]*\)\(\<POLL$V\>\)/\\1E\\2/" $f; done
          done
      
      with de-mangling cleanups yet to come.
      
      NOTE! On almost all architectures, the EPOLL* constants have the same
      values as the POLL* constants do.  But they keyword here is "almost".
      For various bad reasons they aren't the same, and epoll() doesn't
      actually work quite correctly in some cases due to this on Sparc et al.
      
      The next patch from Al will sort out the final differences, and we
      should be all done.
      Scripted-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a9a08845
  9. 10 2月, 2018 10 次提交
  10. 09 2月, 2018 10 次提交
  11. 08 2月, 2018 3 次提交