Skip to content

Commit

Permalink
Linux 3.0.45
Browse files Browse the repository at this point in the history
commit 24e842a
Author: Greg Kroah-Hartman <[email protected]>
Date:   Sun Oct 7 08:28:29 2012 -0700

    Linux 3.0.45

commit d71df54
Author: Bart Van Assche <[email protected]>
Date:   Fri Aug 24 09:08:41 2012 +0000

    SCSI: scsi_dh_alua: Enable STPG for unavailable ports

    commit e47f897 upstream.

    A quote from SPC-4: "While in the unavailable primary target port
    asymmetric access state, the device server shall support those of
    the following commands that it supports while in the active/optimized
    state: [ ... ] d) SET TARGET PORT GROUPS; [ ... ]". Hence enable
    sending STPG to a target port group that is in the unavailable state.

    Signed-off-by: Bart Van Assche <[email protected]>
    Reviewed-by: Mike Christie <[email protected]>
    Acked-by: Hannes Reinecke <[email protected]>
    Signed-off-by: James Bottomley <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 8fda079
Author: Dan Williams <[email protected]>
Date:   Tue Aug 28 22:12:10 2012 -0700

    SCSI: scsi_remove_target: fix softlockup regression on hot remove

    commit bc3f02a upstream.

    John reports:
     BUG: soft lockup - CPU#2 stuck for 23s! [kworker/u:8:2202]
     [..]
     Call Trace:
      [<ffffffff8141782a>] scsi_remove_target+0xda/0x1f0
      [<ffffffff81421de5>] sas_rphy_remove+0x55/0x60
      [<ffffffff81421e01>] sas_rphy_delete+0x11/0x20
      [<ffffffff81421e35>] sas_port_delete+0x25/0x160
      [<ffffffff814549a3>] mptsas_del_end_device+0x183/0x270

    ...introduced by commit 3b661a9 "[SCSI] fix hot unplug vs async scan race".

    Don't restart lookup of more stargets in the multi-target case, just
    arrange to traverse the list once, on the assumption that new targets
    are always added at the end.  There is no guarantee that the target will
    change state in scsi_target_reap() so we can end up spinning if we
    restart.

    Acked-by: Jack Wang <[email protected]>
    LKML-Reference: <CAEhu1-6wq1YsNiscGMwP4ud0Q+MrViRzv=kcWCQSBNc8c68N5Q@mail.gmail.com>
    Reported-by: John Drescher <[email protected]>
    Tested-by: John Drescher <[email protected]>
    Signed-off-by: Dan Williams <[email protected]>
    Signed-off-by: James Bottomley <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit fc3ef18
Author: Yinghai Lu <[email protected]>
Date:   Mon Jul 25 13:08:38 2011 -0700

    PCI: honor child buses add_size in hot plug configuration

    commit be76891 upstream.

    git commit c8adf9a
        "PCI: pre-allocate additional resources to devices only after
    	successful allocation of essential resources."

    fails to take into consideration the optional-resources needed by children
    devices while calculating the optional-resource needed by the bridge.

    This can be a problem on some setup. For example, if a hotplug bridge has 8
    children hotplug bridges, the bridge should have enough resources to accomodate
    the hotplug requirements for each of its children hotplug bridges.  Currently
    this is not the case.

    This patch fixes the problem.

    Signed-off-by: Yinghai Lu <[email protected]>
    Reviewed-by: Ram Pai <[email protected]>
    Signed-off-by: Jesse Barnes <[email protected]>
    Cc: Andrew Worsley <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 368d531
Author: Avi Kivity <[email protected]>
Date:   Wed Aug 22 13:03:48 2012 +0300

    x86/alternatives: Fix p6 nops on non-modular kernels

    commit cb09cad upstream.

    Probably a leftover from the early days of self-patching, p6nops
    are marked __initconst_or_module, which causes them to be
    discarded in a non-modular kernel.  If something later triggers
    patching, it will overwrite kernel code with garbage.

    Reported-by: Tomas Racek <[email protected]>
    Signed-off-by: Avi Kivity <[email protected]>
    Cc: Michael Tokarev <[email protected]>
    Cc: Borislav Petkov <[email protected]>
    Cc: Marcelo Tosatti <[email protected]>
    Cc: [email protected]
    Cc: Anthony Liguori <[email protected]>
    Cc: H. Peter Anvin <[email protected]>
    Cc: Alan Cox <[email protected]>
    Cc: Alan Cox <[email protected]>
    Link: http://lkml.kernel.org/r/[email protected]
    Signed-off-by: Ingo Molnar <[email protected]>
    Cc: Ben Jencks <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 42cc576
Author: Dan Williams <[email protected]>
Date:   Fri Jun 22 11:31:14 2012 -0700

    isci: fix isci_pci_probe() generates warning on efi failure path

    commit 6d70a74 upstream.

    The oem parameter image embedded in the efi variable is at an offset
    from the start of the variable.  However, in the failure path we try to
    free the 'orom' pointer which is only valid when the paramaters are
    being read from the legacy option-rom space.

    Since failure to load the oem parameters is unlikely and we keep the
    memory around in the success case just defer all de-allocation to devm.

    Reported-by: Don Morris <[email protected]>
    Signed-off-by: Dan Williams <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 7385895
Author: Bart Van Assche <[email protected]>
Date:   Fri Aug 24 10:29:11 2012 +0000

    IB/srp: Avoid having aborted requests hang

    commit d853667 upstream.

    We need to call scsi_done() for commands after we abort them.

    Signed-off-by: Bart Van Assche <[email protected]>
    Acked-by: David Dillow <[email protected]>
    Signed-off-by: Roland Dreier <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 7846edb
Author: Bart Van Assche <[email protected]>
Date:   Fri Aug 24 10:27:54 2012 +0000

    IB/srp: Fix use-after-free in srp_reset_req()

    commit 9b796d0 upstream.

    srp_free_req() uses the scsi_cmnd structure contents to unmap
    buffers, so we must invoke srp_free_req() before we release
    ownership of that structure.

    Signed-off-by: Bart Van Assche <[email protected]>
    Acked-by: David Dillow <[email protected]>
    Signed-off-by: Roland Dreier <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 0a44207
Author: Patrick McHardy <[email protected]>
Date:   Thu Aug 30 07:01:30 2012 +0000

    IPoIB: Fix use-after-free of multicast object

    commit bea1e22 upstream.

    Fix a crash in ipoib_mcast_join_task().  (with help from Or Gerlitz)

    Commit c8c2afe ("IPoIB: Use rtnl lock/unlock when changing device
    flags") added a call to rtnl_lock() in ipoib_mcast_join_task(), which
    is run from the ipoib_workqueue, and hence the workqueue can't be
    flushed from the context of ipoib_stop().

    In the current code, ipoib_stop() (which doesn't flush the workqueue)
    calls ipoib_mcast_dev_flush(), which goes and deletes all the
    multicast entries.  This takes place without any synchronization with
    a possible running instance of ipoib_mcast_join_task() for the same
    ipoib device, leading to a crash due to NULL pointer dereference.

    Fix this by making sure that the workqueue is flushed before
    ipoib_mcast_dev_flush() is called.  To make that possible, we move the
    RTNL-lock wrapped code to ipoib_mcast_join_finish().

    Signed-off-by: Patrick McHardy <[email protected]>
    Signed-off-by: Roland Dreier <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit d125a7e
Author: Wei Yongjun <[email protected]>
Date:   Fri Sep 21 15:09:47 2012 +0800

    can: mscan-mpc5xxx: fix return value check in mpc512x_can_get_clock()

    commit f61bd05 upstream.

    In case of error, the function clk_get() returns ERR_PTR()
    and never returns NULL pointer. The NULL test in the error
    handling should be replaced with IS_ERR().

    dpatch engine is used to auto generated this patch.
    (https://github.com/weiyj/dpatch)

    Signed-off-by: Wei Yongjun <[email protected]>
    Acked-by: Wolfgang Grandegger <[email protected]>
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit c07ad5e
Author: Stephen M. Cameron <[email protected]>
Date:   Thu Jul 26 11:34:10 2012 -0500

    SCSI: hpsa: Use LUN reset instead of target reset

    commit 21e89af upstream.

    It turns out Smart Array logical drives do not support target
    reset and when the target reset fails, the logical drive will
    be taken off line.  Symptoms look like this:

    hpsa 0000:03:00.0: Abort request on C1:B0:T0:L0
    hpsa 0000:03:00.0: resetting device 1:0:0:0
    hpsa 0000:03:00.0: cp ffff880037c56000 is reported invalid (probably means target device no longer present)
    hpsa 0000:03:00.0: resetting device failed.
    sd 1:0:0:0: Device offlined - not ready after error recovery
    sd 1:0:0:0: rejecting I/O to offline device
    EXT3-fs error (device sdb1): read_block_bitmap:

    LUN reset is supported though, and is what we should be using.
    Target reset is also disruptive in shared SAS situations,
    for example, an external MSA1210m which does support target
    reset attached to Smart Arrays in multiple hosts -- a target
    reset from one host is disruptive to other hosts as all LUNs
    on the target will be reset and will abort all outstanding i/os
    back to all the attached hosts.  So we should use LUN reset,
    not target reset.

    Tested this with Smart Array logical drives and with tape drives.
    Not sure how this bug survived since 2009, except it must be very
    rare for a Smart Array to require more than 30s to complete a request.

    Signed-off-by: Stephen M. Cameron <[email protected]>
    Signed-off-by: James Bottomley <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit a3b1f83
Author: Benjamin Herrenschmidt <[email protected]>
Date:   Mon Jul 30 11:33:05 2012 +1000

    SCSI: ibmvscsi: Fix host config length field overflow

    commit 225c569 upstream.

    The length field in the host config packet is only 16-bit long, so
    passing it 0x10000 (64K which is our standard PAGE_SIZE) doesn't
    work and result in an empty config from the server.

    Signed-off-by: Benjamin Herrenschmidt <[email protected]>
    Acked-by: Robert Jennings <[email protected]>
    Signed-off-by: James Bottomley <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 079c1ed
Author: Artem Bityutskiy <[email protected]>
Date:   Sat Aug 18 14:11:42 2012 +0200

    UBI: fix autoresize handling in R/O mode

    commit abb3e01 upstream.

    Currently UBI fails in autoresize when it is in R/O mode (e.g., because the
    underlying MTD device is R/O). This patch fixes the issue - we just skip
    autoresize and print a warning.

    Reported-by: Pali Rohár <[email protected]>
    Signed-off-by: Artem Bityutskiy <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit e54195a
Author: Russ Gorby <[email protected]>
Date:   Mon Aug 13 13:45:30 2012 +0100

    n_gsm: memory leak in uplink error path

    commit 88ed2a6 upstream.

    Uplink (TX) network data will go through gsm_dlci_data_output_framed
    there is a bug where if memory allocation fails, the skb which
    has already been pulled off the list will be lost.

    In addition TX skbs were being processed in LIFO order

    Fixed the memory leak, and changed to FIFO order processing

    Signed-off-by: Russ Gorby <[email protected]>
    Tested-by: Kappel, LaurentX <[email protected]>
    Signed-off-by: Alan Cox <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit a4e92d2
Author: Michael Spang <[email protected]>
Date:   Fri Sep 14 13:05:49 2012 -0400

    Increase XHCI suspend timeout to 16ms

    commit a6e097d upstream.

    The Intel XHCI specification says that after clearing the run/stop bit
    the controller may take up to 16ms to halt. We've seen a device take
    14ms, which with the current timeout of 10ms causes the kernel to
    abort the suspend. Increasing the timeout to the recommended value
    fixes the problem.

    This patch should be backported to kernels as old as 2.6.37, that
    contain the commit 5535b1d "USB: xHCI:
    PCI power management implementation".

    Signed-off-by: Michael Spang <[email protected]>
    Signed-off-by: Sarah Sharp <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 7c36d46
Author: Denys Vlasenko <[email protected]>
Date:   Wed Sep 26 11:34:50 2012 +1000

    coredump: prevent double-free on an error path in core dumper

    commit f34f9d1 upstream.

    In !CORE_DUMP_USE_REGSET case, if elf_note_info_init fails to allocate
    memory for info->fields, it frees already allocated stuff and returns
    error to its caller, fill_note_info.  Which in turn returns error to its
    caller, elf_core_dump.  Which jumps to cleanup label and calls
    free_note_info, which will happily try to free all info->fields again.
    BOOM.

    This is the fix.

    Signed-off-by: Oleg Nesterov <[email protected]>
    Signed-off-by: Denys Vlasenko <[email protected]>
    Cc: Venu Byravarasu <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 9ce5f86
Author: Russ Gorby <[email protected]>
Date:   Mon Aug 13 13:44:40 2012 +0100

    n_gsm: added interlocking for gsm_data_lock for certain code paths

    commit 5e44708 upstream.

    There were some locking holes in the management of the MUX's
    message queue for 2 code paths:
    1) gsmld_write_wakeup
    2) receipt of CMD_FCON flow-control message
    In both cases gsm_data_kick is called w/o locking so it can collide
    with other other instances of gsm_data_kick (pulling messages tx_tail)
    or potentially other instances of __gsm_data_queu (adding messages to tx_head)

    Changed to take the tx_lock in these 2 cases

    Signed-off-by: Russ Gorby <[email protected]>
    Tested-by: Yin, Fengwei <[email protected]>
    Signed-off-by: Alan Cox <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 9c1ce83
Author: Sarah Sharp <[email protected]>
Date:   Wed Sep 19 16:27:26 2012 -0700

    xhci: Intel Panther Point BEI quirk.

    commit 80fab3b upstream.

    When a device with an isochronous endpoint is behind a hub plugged into
    the Intel Panther Point xHCI host controller, and the driver submits
    multiple frames per URB, the xHCI driver will set the Block Event
    Interrupt (BEI) flag on all but the last TD for the URB.  This causes
    the host controller to place an event on the event ring, but not send an
    interrupt.  When the last TD for the URB completes, BEI is cleared, and
    we get an interrupt for the whole URB.

    However, under a Panther Point xHCI host controller, if the parent hub
    is unplugged when one or more events from transfers with BEI set are on
    the event ring, a port status change event is placed on the event ring,
    but no interrupt is generated.  This means URBs stop completing, and the
    USB device disconnect is not noticed.  Something like a USB headset will
    cause mplayer to hang when the device is disconnected.

    If another transfer is sent (such as running `sudo lsusb -v`), the next
    transfer event seems to "unstick" the event ring, the xHCI driver gets
    an interrupt, and the disconnect is reported to the USB core.

    The fix is not to use the BEI flag under the Panther Point xHCI host.
    This will impact power consumption and system responsiveness, because
    the xHCI driver will receive an interrupt for every frame in all
    isochronous URBs instead of once per URB.

    Intel chipset developers confirm that this bug will be hit if the BEI
    flag is used on any endpoint, not just ones that are behind a hub.

    This patch should be backported to kernels as old as 3.0, that contain
    the commit 69e848c "Intel xhci: Support
    EHCI/xHCI port switching."

    Signed-off-by: Sarah Sharp <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit c19d52a
Author: Khalid Aziz <[email protected]>
Date:   Mon Sep 10 12:52:42 2012 -0600

    firmware: Add missing attributes to EFI variable attribute print out from sysfs

    commit 7083909 upstream.

    Some of the EFI variable attributes are missing from print out from
    /sys/firmware/efi/vars/*/attributes. This patch adds those in. It also
    updates code to use pre-defined constants for masking current value
    of attributes.

    Signed-off-by: Khalid Aziz <[email protected]>
    Reviewed-by: Kees Cook <[email protected]>
    Acked-by: Matthew Garrett <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit f39a3e8
Author: Larry Finger <[email protected]>
Date:   Wed Sep 26 12:32:02 2012 -0500

    b43legacy: Fix crash on unload when firmware not available

    commit 2d838bb upstream.

    When b43legacy is loaded without the firmware being available, a following
    unload generates a kernel NULL pointer dereference BUG as follows:

    [  214.330789] BUG: unable to handle kernel NULL pointer dereference at 0000004c
    [  214.330997] IP: [<c104c395>] drain_workqueue+0x15/0x170
    [  214.331179] *pde = 00000000
    [  214.331311] Oops: 0000 [#1] SMP
    [  214.331471] Modules linked in: b43legacy(-) ssb pcmcia mac80211 cfg80211 af_packet mperf arc4 ppdev sr_mod cdrom sg shpchp yenta_socket pcmcia_rsrc pci_hotplug pcmcia_core battery parport_pc parport floppy container ac button edd autofs4 ohci_hcd ehci_hcd usbcore usb_common thermal processor scsi_dh_rdac scsi_dh_hp_sw scsi_dh_emc scsi_dh_alua scsi_dh fan thermal_sys hwmon ata_generic pata_ali libata [last unloaded: cfg80211]
    [  214.333421] Pid: 3639, comm: modprobe Not tainted 3.6.0-rc6-wl+ #163 Source Technology VIC 9921/ALI Based Notebook
    [  214.333580] EIP: 0060:[<c104c395>] EFLAGS: 00010246 CPU: 0
    [  214.333687] EIP is at drain_workqueue+0x15/0x170
    [  214.333788] EAX: c162ac40 EBX: cdfb8360 ECX: 0000002a EDX: 00002a2a
    [  214.333890] ESI: 00000000 EDI: 00000000 EBP: cd767e7c ESP: cd767e5c
    [  214.333957]  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
    [  214.333957] CR0: 8005003b CR2: 0000004c CR3: 0c96a000 CR4: 00000090
    [  214.333957] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
    [  214.333957] DR6: ffff0ff0 DR7: 00000400
    [  214.333957] Process modprobe (pid: 3639, ti=cd766000 task=cf802e90 task.ti=cd766000)
    [  214.333957] Stack:
    [  214.333957]  00000292 cd767e74 c12c5e09 00000296 00000296 cdfb8360 cdfb9220 00000000
    [  214.333957]  cd767e90 c104c4fd cdfb8360 cdfb9220 cd682800 cd767ea4 d0c10184 cd682800
    [  214.333957]  cd767ea4 cba31064 cd767eb8 d0867908 cba31064 d087e09c cd96f034 cd767ec4
    [  214.333957] Call Trace:
    [  214.333957]  [<c12c5e09>] ? skb_dequeue+0x49/0x60
    [  214.333957]  [<c104c4fd>] destroy_workqueue+0xd/0x150
    [  214.333957]  [<d0c10184>] ieee80211_unregister_hw+0xc4/0x100 [mac80211]
    [  214.333957]  [<d0867908>] b43legacy_remove+0x78/0x80 [b43legacy]
    [  214.333957]  [<d083654d>] ssb_device_remove+0x1d/0x30 [ssb]
    [  214.333957]  [<c126f15a>] __device_release_driver+0x5a/0xb0
    [  214.333957]  [<c126fb07>] driver_detach+0x87/0x90
    [  214.333957]  [<c126ef4c>] bus_remove_driver+0x6c/0xe0
    [  214.333957]  [<c1270120>] driver_unregister+0x40/0x70
    [  214.333957]  [<d083686b>] ssb_driver_unregister+0xb/0x10 [ssb]
    [  214.333957]  [<d087c488>] b43legacy_exit+0xd/0xf [b43legacy]
    [  214.333957]  [<c1089dde>] sys_delete_module+0x14e/0x2b0
    [  214.333957]  [<c110a4a7>] ? vfs_write+0xf7/0x150
    [  214.333957]  [<c1240050>] ? tty_write_lock+0x50/0x50
    [  214.333957]  [<c110a6f8>] ? sys_write+0x38/0x70
    [  214.333957]  [<c1397c55>] syscall_call+0x7/0xb
    [  214.333957] Code: bc 27 00 00 00 00 a1 74 61 56 c1 55 89 e5 e8 a3 fc ff ff 5d c3 90 55 89 e5 57 56 89 c6 53 b8 40 ac 62 c1 83 ec 14 e8 bb b7 34 00 <8b> 46 4c 8d 50 01 85 c0 89 56 4c 75 03 83 0e 40 80 05 40 ac 62
    [  214.333957] EIP: [<c104c395>] drain_workqueue+0x15/0x170 SS:ESP 0068:cd767e5c
    [  214.333957] CR2: 000000000000004c
    [  214.341110] ---[ end trace c7e90ec026d875a6 ]---Index: wireless-testing/drivers/net/wireless/b43legacy/main.c

    The problem is fixed by making certain that the ucode pointer is not NULL
    before deregistering the driver in mac80211.

    Signed-off-by: Larry Finger <[email protected]>
    Signed-off-by: John W. Linville <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit d482e8f
Author: Flavio Leitner <[email protected]>
Date:   Fri Sep 21 21:04:34 2012 -0300

    serial: set correct baud_base for EXSYS EX-41092 Dual 16950

    commit 26e8220 upstream.

    Apparently the same card model has two IDs, so this patch
    complements the commit 39aced6
    adding the missing one.

    Signed-off-by: Flavio Leitner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit f580d51
Author: Linus Walleij <[email protected]>
Date:   Wed Sep 26 17:21:36 2012 +0200

    serial: pl011: handle corruption at high clock speeds

    commit c5dd553 upstream.

    This works around a few glitches in the ST version of the PL011
    serial driver when using very high baud rates, as we do in the
    Ux500: 3, 3.25, 4 and 4.05 Mbps.

    Problem Observed/rootcause:

    When using high baud-rates, and the baudrate*8 is getting close to
    the provided clock frequency (so a division factor close to 1), when
    using bursts of characters (so they are abutted), then it seems as if
    there is not enough time to detect the beginning of the start-bit which
    is a timing reference for the entire character, and thus the sampling
    moment of character bits is moving towards the end of each bit, instead
    of the middle.

    Fix:
    Increase slightly the RX baud rate of the UART above the theoretical
    baudrate by 5%. This will definitely give more margin time to the
    UART_RX to correctly sample the data at the middle of the bit period.

    Also fix the ages old copy-paste error in the very stressed comment,
    it's referencing the registers used in the PL010 driver rather than
    the PL011 ones.

    Signed-off-by: Guillaume Jaunet <[email protected]>
    Signed-off-by: Christophe Arnal <[email protected]>
    Signed-off-by: Matthias Locher <[email protected]>
    Signed-off-by: Rajanikanth HV <[email protected]>
    Cc: Bibek Basu <[email protected]>
    Cc: Par-Gunnar Hjalmdahl <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 63959b0
Author: Jiri Slaby <[email protected]>
Date:   Tue Aug 7 21:47:39 2012 +0200

    TTY: ttyprintk, don't touch behind tty->write_buf

    commit ee8b593 upstream.

    If a user provides a buffer larger than a tty->write_buf chunk and
    passes '\r' at the end of the buffer, we touch an out-of-bound memory.

    Add a check there to prevent this.

    Signed-off-by: Jiri Slaby <[email protected]>
    Cc: Samo Pogacnik <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 0950902
Author: Stanislav Kozina <[email protected]>
Date:   Thu Aug 16 12:01:47 2012 +0100

    Remove BUG_ON from n_tty_read()

    commit e9490e9 upstream.

    Change the BUG_ON to WARN_ON and return in case of tty->read_buf==NULL. We want to track a
    couple of long standing reports of this but at the same time we can avoid killing the box.

    Signed-off-by: Stanislav Kozina <[email protected]>
    Signed-off-by: Alan Cox <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 8455d77
Author: Ian Abbott <[email protected]>
Date:   Wed Sep 19 19:37:39 2012 +0100

    staging: comedi: fix memory leak for saved channel list

    commit c8cad4c upstream.

    When `do_cmd_ioctl()` allocates memory for the kernel copy of a channel
    list, it frees any previously allocated channel list in
    `async->cmd.chanlist` and replaces it with the new one.  However, if the
    device is ever removed (or "detached") the cleanup code in
    `cleanup_device()` in "drivers.c" does not free this memory so it is
    lost.

    A sensible place to free the kernel copy of the channel list is in
    `do_become_nonbusy()` as at that point the comedi asynchronous command
    associated with the channel list is no longer valid.  Free the channel
    list in `do_become_nonbusy()` instead of `do_cmd_ioctl()` and clear the
    pointer to prevent it being freed more than once.

    Note that `cleanup_device()` could be called at an inappropriate time
    while the comedi device is open, but that's a separate bug not related
    to this this patch.

    Signed-off-by: Ian Abbott <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 03acba6
Author: Ian Abbott <[email protected]>
Date:   Tue Sep 18 19:46:58 2012 +0100

    staging: comedi: don't dereference user memory for INSN_INTTRIG

    commit 5d06e3d upstream.

    `parse_insn()` is dereferencing the user-space pointer `insn->data`
    directly when handling the `INSN_INTTRIG` comedi instruction.  It
    shouldn't be using `insn->data` at all; it should be using the separate
    `data` pointer passed to the function.  Fix it.

    Signed-off-by: Ian Abbott <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit e451b6d
Author: Ian Abbott <[email protected]>
Date:   Thu Sep 27 17:45:27 2012 +0100

    staging: comedi: jr3_pci: fix iomem dereference

    commit e187895 upstream.

    Correct a direct dereference of I/O memory to use an appropriate I/O
    memory access function.  Note that the pointer being dereferenced is not
    currently tagged with `__iomem` but I plan to correct that for 3.7.

    Signed-off-by: Ian Abbott <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 99f7fee
Author: Ian Abbott <[email protected]>
Date:   Mon Sep 24 17:20:52 2012 +0100

    staging: comedi: s626: don't dereference insn->data

    commit b655c2c upstream.

    `s626_enc_insn_config()` is incorrectly dereferencing `insn->data` which
    is a pointer to user memory.  It should be dereferencing the separate
    `data` parameter that points to a copy of the data in kernel memory.

    Signed-off-by: Ian Abbott <[email protected]>
    Reviewed-by: H Hartley Sweeten <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit bf26fa2
Author: Ben Hutchings <[email protected]>
Date:   Sun Sep 16 04:18:50 2012 +0100

    staging: speakup_soft: Fix reading of init string

    commit 40fe4f8 upstream.

    softsynth_read() reads a character at a time from the init string;
    when it finds the null terminator it sets the initialized flag but
    then repeats the last character.

    Additionally, if the read() buffer is not big enough for the init
    string, the next read() will start reading from the beginning again.
    So the caller may never progress to reading anything else.

    Replace the simple initialized flag with the current position in
    the init string, carried over between calls.  Switch to reading
    real data once this reaches the null terminator.

    (This assumes that the length of the init string can't change, which
    seems to be the case.  Really, the string and position belong together
    in a per-file private struct.)

    Tested-by: Samuel Thibault <[email protected]>
    Signed-off-by: Ben Hutchings <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit bd6a0fa
Author: Bjørn Mork <[email protected]>
Date:   Wed Sep 19 22:02:03 2012 +0200

    USB: qcaux: add Pantech vendor class match

    commit c638eb2 upstream.

    The three Pantech devices UML190 (106c:3716), UML290 (106c:3718) and
    P4200 (106c:3721) all use the same subclasses to identify vendor
    specific functions.  Replace the existing device specific entries
    with generic vendor matching, adding support for the P4200.

    Signed-off-by: Bjørn Mork <[email protected]>
    Cc: Thomas Schäfer <[email protected]>
    Acked-by: Dan Williams <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 3f72cbc
Author: Antonio Ospite <[email protected]>
Date:   Sun Sep 23 09:57:25 2012 +0200

    USB: ftdi_sio: add TIAO USB Multi-Protocol Adapter (TUMPA) support

    commit 54575b0 upstream.

    TIAO/DIYGADGET USB Multi-Protocol Adapter (TUMPA) is an FTDI FT2232H
    based device which provides an easily accessible JTAG, SPI, I2C, serial
    breakout.

    http://www.diygadget.com/tiao-usb-multi-protocol-adapter-jtag-spi-i2c-serial.html
    http://www.tiaowiki.com/w/TIAO_USB_Multi_Protocol_Adapter_User%27s_Manual

    FTDI FT2232H provides two serial channels (A and B), but on the TUMPA
    channel A is dedicated to JTAG/SPI while channel B can be used for
    UART/RS-232: use the ftdi_jtag_quirk to expose only channel B as
    a usb-serial interface to userspace.

    Signed-off-by: Antonio Ospite <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 952c5d8
Author: Bjørn Mork <[email protected]>
Date:   Wed Sep 19 22:02:12 2012 +0200

    USB: option: blacklist QMI interface on ZTE MF683

    commit 160c942 upstream.

    Interface #5 on ZTE MF683 is a QMI/wwan interface.

    Signed-off-by: Bjørn Mork <[email protected]>
    Cc: Shawn J. Goff <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit 7da444a
Author: Mike Snitzer <[email protected]>
Date:   Wed Sep 26 23:45:42 2012 +0100

    dm: handle requests beyond end of device instead of using BUG_ON

    commit ba1cbad upstream.

    The access beyond the end of device BUG_ON that was introduced to
    dm_request_fn via commit 29e4013 ("dm: implement
    REQ_FLUSH/FUA support for request-based dm") was an overly
    drastic (but simple) response to this situation.

    I have received a report that this BUG_ON was hit and now think
    it would be better to use dm_kill_unmapped_request() to fail the clone
    and original request with -EIO.

    map_request() will assign the valid target returned by
    dm_table_find_target to tio->ti.  But when the target
    isn't valid tio->ti is never assigned (because map_request isn't
    called); so add a check for tio->ti != NULL to dm_done().

    Reported-by: Mike Christie <[email protected]>
    Signed-off-by: Mike Snitzer <[email protected]>
    Signed-off-by: Jun'ichi Nomura <[email protected]>
    Signed-off-by: Alasdair G Kergon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

commit d2212d2
Author: Miklos Szeredi <[email protected]>
Date:   Mon Sep 17 22:23:30 2012 +0200

    vfs: dcache: fix deadlock in tree traversal

    commit 8110e16 upstream.

    IBM reported a deadlock in select_parent().  This was found to be caused
    by taking rename_lock when already locked when restarting the tree
    traversal.

    There are two cases when the traversal needs to be restarted:

     1) concurrent d_move(); this can only happen when not already locked,
        since taking rename_lock protects against concurrent d_move().

     2) racing with final d_put() on child just at the moment of ascending
        to parent; rename_lock doesn't protect against this rare race, so it
        can happen when already locked.

    Because of case 2, we need to be able to handle restarting the traversal
    when rename_lock is already held.  This patch fixes all three callers of
    try_to_ascend().

    IBM reported that the deadlock is gone with this patch.

    [ I rewrote the patch to be smaller and just do the "goto again" if the
      lock was already held, but credit goes to Miklos for the real work.
       - Linus ]

    Signed-off-by: Miklos Szeredi <[email protected]>
    Cc: Al Viro <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
Mustaavalkosta committed Mar 6, 2013
1 parent 8ef5549 commit af2707b
Show file tree
Hide file tree
Showing 37 changed files with 193 additions and 105 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
VERSION = 3
PATCHLEVEL = 0
SUBLEVEL = 44
SUBLEVEL = 45
EXTRAVERSION =
NAME = Sneaky Weasel

Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/alternative.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ static const unsigned char * const k7_nops[ASM_NOP_MAX+2] =
#endif

#ifdef P6_NOP1
static const unsigned char __initconst_or_module p6nops[] =
static const unsigned char p6nops[] =
{
P6_NOP1,
P6_NOP2,
Expand Down
2 changes: 1 addition & 1 deletion drivers/char/ttyprintk.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ static int tpk_printk(const unsigned char *buf, int count)
tmp[tpk_curr + 1] = '\0';
printk(KERN_INFO "%s%s", tpk_tag, tmp);
tpk_curr = 0;
if (buf[i + 1] == '\n')
if ((i + 1) < count && buf[i + 1] == '\n')
i++;
break;
case '\n':
Expand Down
17 changes: 14 additions & 3 deletions drivers/firmware/efivars.c
Original file line number Diff line number Diff line change
Expand Up @@ -400,12 +400,23 @@ efivar_attr_read(struct efivar_entry *entry, char *buf)
if (status != EFI_SUCCESS)
return -EIO;

if (var->Attributes & 0x1)
if (var->Attributes & EFI_VARIABLE_NON_VOLATILE)
str += sprintf(str, "EFI_VARIABLE_NON_VOLATILE\n");
if (var->Attributes & 0x2)
if (var->Attributes & EFI_VARIABLE_BOOTSERVICE_ACCESS)
str += sprintf(str, "EFI_VARIABLE_BOOTSERVICE_ACCESS\n");
if (var->Attributes & 0x4)
if (var->Attributes & EFI_VARIABLE_RUNTIME_ACCESS)
str += sprintf(str, "EFI_VARIABLE_RUNTIME_ACCESS\n");
if (var->Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD)
str += sprintf(str, "EFI_VARIABLE_HARDWARE_ERROR_RECORD\n");
if (var->Attributes & EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS)
str += sprintf(str,
"EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS\n");
if (var->Attributes &
EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)
str += sprintf(str,
"EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS\n");
if (var->Attributes & EFI_VARIABLE_APPEND_WRITE)
str += sprintf(str, "EFI_VARIABLE_APPEND_WRITE\n");
return str - buf;
}

Expand Down
2 changes: 1 addition & 1 deletion drivers/infiniband/ulp/ipoib/ipoib_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ static int ipoib_stop(struct net_device *dev)

netif_stop_queue(dev);

ipoib_ib_dev_down(dev, 0);
ipoib_ib_dev_down(dev, 1);
ipoib_ib_dev_stop(dev, 0);

if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) {
Expand Down
19 changes: 10 additions & 9 deletions drivers/infiniband/ulp/ipoib/ipoib_multicast.c
Original file line number Diff line number Diff line change
Expand Up @@ -189,18 +189,27 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,

mcast->mcmember = *mcmember;

/* Set the cached Q_Key before we attach if it's the broadcast group */
/* Set the multicast MTU and cached Q_Key before we attach if it's
* the broadcast group.
*/
if (!memcmp(mcast->mcmember.mgid.raw, priv->dev->broadcast + 4,
sizeof (union ib_gid))) {
spin_lock_irq(&priv->lock);
if (!priv->broadcast) {
spin_unlock_irq(&priv->lock);
return -EAGAIN;
}
priv->mcast_mtu = IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));
priv->qkey = be32_to_cpu(priv->broadcast->mcmember.qkey);
spin_unlock_irq(&priv->lock);
priv->tx_wr.wr.ud.remote_qkey = priv->qkey;
set_qkey = 1;

if (!ipoib_cm_admin_enabled(dev)) {
rtnl_lock();
dev_set_mtu(dev, min(priv->mcast_mtu, priv->admin_mtu));
rtnl_unlock();
}
}

if (!test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags)) {
Expand Down Expand Up @@ -586,14 +595,6 @@ void ipoib_mcast_join_task(struct work_struct *work)
return;
}

priv->mcast_mtu = IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));

if (!ipoib_cm_admin_enabled(dev)) {
rtnl_lock();
dev_set_mtu(dev, min(priv->mcast_mtu, priv->admin_mtu));
rtnl_unlock();
}

ipoib_dbg_mcast(priv, "successfully joined all multicast groups\n");

clear_bit(IPOIB_MCAST_RUN, &priv->flags);
Expand Down
3 changes: 2 additions & 1 deletion drivers/infiniband/ulp/srp/ib_srp.c
Original file line number Diff line number Diff line change
Expand Up @@ -620,9 +620,9 @@ static void srp_reset_req(struct srp_target_port *target, struct srp_request *re
struct scsi_cmnd *scmnd = srp_claim_req(target, req, NULL);

if (scmnd) {
srp_free_req(target, req, scmnd, 0);
scmnd->result = DID_RESET << 16;
scmnd->scsi_done(scmnd);
srp_free_req(target, req, scmnd, 0);
}
}

Expand Down Expand Up @@ -1669,6 +1669,7 @@ static int srp_abort(struct scsi_cmnd *scmnd)
SRP_TSK_ABORT_TASK);
srp_free_req(target, req, scmnd, 0);
scmnd->result = DID_ABORT << 16;
scmnd->scsi_done(scmnd);

return SUCCESS;
}
Expand Down
56 changes: 38 additions & 18 deletions drivers/md/dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -856,10 +856,14 @@ static void dm_done(struct request *clone, int error, bool mapped)
{
int r = error;
struct dm_rq_target_io *tio = clone->end_io_data;
dm_request_endio_fn rq_end_io = tio->ti->type->rq_end_io;
dm_request_endio_fn rq_end_io = NULL;

if (mapped && rq_end_io)
r = rq_end_io(tio->ti, clone, error, &tio->info);
if (tio->ti) {
rq_end_io = tio->ti->type->rq_end_io;

if (mapped && rq_end_io)
r = rq_end_io(tio->ti, clone, error, &tio->info);
}

if (r <= 0)
/* The target wants to complete the I/O */
Expand Down Expand Up @@ -1575,15 +1579,6 @@ static int map_request(struct dm_target *ti, struct request *clone,
int r, requeued = 0;
struct dm_rq_target_io *tio = clone->end_io_data;

/*
* Hold the md reference here for the in-flight I/O.
* We can't rely on the reference count by device opener,
* because the device may be closed during the request completion
* when all bios are completed.
* See the comment in rq_completed() too.
*/
dm_get(md);

tio->ti = ti;
r = ti->type->map_rq(ti, clone, &tio->info);
switch (r) {
Expand Down Expand Up @@ -1615,6 +1610,26 @@ static int map_request(struct dm_target *ti, struct request *clone,
return requeued;
}

static struct request *dm_start_request(struct mapped_device *md, struct request *orig)
{
struct request *clone;

blk_start_request(orig);
clone = orig->special;
atomic_inc(&md->pending[rq_data_dir(clone)]);

/*
* Hold the md reference here for the in-flight I/O.
* We can't rely on the reference count by device opener,
* because the device may be closed during the request completion
* when all bios are completed.
* See the comment in rq_completed() too.
*/
dm_get(md);

return clone;
}

/*
* q->request_fn for request-based dm.
* Called with the queue lock held.
Expand Down Expand Up @@ -1644,14 +1659,21 @@ static void dm_request_fn(struct request_queue *q)
pos = blk_rq_pos(rq);

ti = dm_table_find_target(map, pos);
BUG_ON(!dm_target_is_valid(ti));
if (!dm_target_is_valid(ti)) {
/*
* Must perform setup, that dm_done() requires,
* before calling dm_kill_unmapped_request
*/
DMERR_LIMIT("request attempted access beyond the end of device");
clone = dm_start_request(md, rq);
dm_kill_unmapped_request(clone, -EIO);
continue;
}

if (ti->type->busy && ti->type->busy(ti))
goto delay_and_out;

blk_start_request(rq);
clone = rq->special;
atomic_inc(&md->pending[rq_data_dir(clone)]);
clone = dm_start_request(md, rq);

spin_unlock(q->queue_lock);
if (map_request(ti, clone, md))
Expand All @@ -1671,8 +1693,6 @@ static void dm_request_fn(struct request_queue *q)
blk_delay_queue(q, HZ / 10);
out:
dm_table_put(map);

return;
}

int dm_underlying_device_busy(struct request_queue *q)
Expand Down
5 changes: 5 additions & 0 deletions drivers/mtd/ubi/build.c
Original file line number Diff line number Diff line change
Expand Up @@ -816,6 +816,11 @@ static int autoresize(struct ubi_device *ubi, int vol_id)
struct ubi_volume *vol = ubi->volumes[vol_id];
int err, old_reserved_pebs = vol->reserved_pebs;

if (ubi->ro_mode) {
ubi_warn("skip auto-resize because of R/O mode");
return 0;
}

/*
* Clear the auto-resize flag in the volume in-memory copy of the
* volume table, and 'ubi_resize_volume()' will propagate this change
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/can/mscan/mpc5xxx_can.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev,

if (!clock_name || !strcmp(clock_name, "sys")) {
sys_clk = clk_get(&ofdev->dev, "sys_clk");
if (!sys_clk) {
if (IS_ERR(sys_clk)) {
dev_err(&ofdev->dev, "couldn't get sys_clk\n");
goto exit_unmap;
}
Expand All @@ -204,7 +204,7 @@ static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev,

if (clocksrc < 0) {
ref_clk = clk_get(&ofdev->dev, "ref_clk");
if (!ref_clk) {
if (IS_ERR(ref_clk)) {
dev_err(&ofdev->dev, "couldn't get ref_clk\n");
goto exit_unmap;
}
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/wireless/b43legacy/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3843,6 +3843,8 @@ static void b43legacy_remove(struct ssb_device *dev)
cancel_work_sync(&wldev->restart_work);

B43legacy_WARN_ON(!wl);
if (!wldev->fw.ucode)
return; /* NULL if fw never loaded */
if (wl->current_dev == wldev)
ieee80211_unregister_hw(wl->hw);

Expand Down
26 changes: 26 additions & 0 deletions drivers/pci/setup-bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -543,6 +543,20 @@ static resource_size_t calculate_memsize(resource_size_t size,
return size;
}

static resource_size_t get_res_add_size(struct resource_list_x *add_head,
struct resource *res)
{
struct resource_list_x *list;

/* check if it is in add_head list */
for (list = add_head->next; list && list->res != res;
list = list->next);
if (list)
return list->add_size;

return 0;
}

/**
* pbus_size_io() - size the io window of a given bus
*
Expand All @@ -562,6 +576,7 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
struct pci_dev *dev;
struct resource *b_res = find_free_bus_resource(bus, IORESOURCE_IO);
unsigned long size = 0, size0 = 0, size1 = 0;
resource_size_t children_add_size = 0;

if (!b_res)
return;
Expand All @@ -582,10 +597,15 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
size += r_size;
else
size1 += r_size;

if (add_head)
children_add_size += get_res_add_size(add_head, r);
}
}
size0 = calculate_iosize(size, min_size, size1,
resource_size(b_res), 4096);
if (children_add_size > add_size)
add_size = children_add_size;
size1 = (!add_head || (add_head && !add_size)) ? size0 :
calculate_iosize(size, min_size+add_size, size1,
resource_size(b_res), 4096);
Expand Down Expand Up @@ -627,6 +647,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
int order, max_order;
struct resource *b_res = find_free_bus_resource(bus, type);
unsigned int mem64_mask = 0;
resource_size_t children_add_size = 0;

if (!b_res)
return 0;
Expand Down Expand Up @@ -668,6 +689,9 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
if (order > max_order)
max_order = order;
mem64_mask &= r->flags & IORESOURCE_MEM_64;

if (add_head)
children_add_size += get_res_add_size(add_head, r);
}
}
align = 0;
Expand All @@ -684,6 +708,8 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
align += aligns[order];
}
size0 = calculate_memsize(size, min_size, 0, resource_size(b_res), min_align);
if (children_add_size > add_size)
add_size = children_add_size;
size1 = (!add_head || (add_head && !add_size)) ? size0 :
calculate_memsize(size, min_size+add_size, 0,
resource_size(b_res), min_align);
Expand Down
3 changes: 1 addition & 2 deletions drivers/scsi/device_handler/scsi_dh_alua.c
Original file line number Diff line number Diff line change
Expand Up @@ -619,8 +619,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h)
h->state = TPGS_STATE_STANDBY;
break;
case TPGS_STATE_OFFLINE:
case TPGS_STATE_UNAVAILABLE:
/* Path unusable for unavailable/offline */
/* Path unusable */
err = SCSI_DH_DEV_OFFLINED;
break;
default:
Expand Down
2 changes: 1 addition & 1 deletion drivers/scsi/hpsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -2893,7 +2893,7 @@ static void fill_cmd(struct CommandList *c, u8 cmd, struct ctlr_info *h,
c->Request.Timeout = 0; /* Don't time out */
memset(&c->Request.CDB[0], 0, sizeof(c->Request.CDB));
c->Request.CDB[0] = cmd;
c->Request.CDB[1] = 0x03; /* Reset target above */
c->Request.CDB[1] = HPSA_RESET_TYPE_LUN;
/* If bytes 4-7 are zero, it means reset the */
/* LunID device */
c->Request.CDB[4] = 0x00;
Expand Down
3 changes: 3 additions & 0 deletions drivers/scsi/ibmvscsi/ibmvscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1547,6 +1547,9 @@ static int ibmvscsi_do_host_config(struct ibmvscsi_host_data *hostdata,

host_config = &evt_struct->iu.mad.host_config;

/* The transport length field is only 16-bit */
length = min(0xffff, length);

/* Set up a lun reset SRP command */
memset(host_config, 0x00, sizeof(*host_config));
host_config->common.type = VIOSRP_HOST_CONFIG_TYPE;
Expand Down
1 change: 0 additions & 1 deletion drivers/scsi/isci/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,6 @@ static int __devinit isci_pci_probe(struct pci_dev *pdev, const struct pci_devic
if (sci_oem_parameters_validate(&orom->ctrl[i])) {
dev_warn(&pdev->dev,
"[%d]: invalid oem parameters detected, falling back to firmware\n", i);
devm_kfree(&pdev->dev, orom);
orom = NULL;
break;
}
Expand Down
1 change: 0 additions & 1 deletion drivers/scsi/isci/probe_roms.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ struct isci_orom *isci_request_oprom(struct pci_dev *pdev)

if (i >= len) {
dev_err(&pdev->dev, "oprom parse error\n");
devm_kfree(&pdev->dev, rom);
rom = NULL;
}
pci_unmap_biosrom(oprom);
Expand Down
Loading

0 comments on commit af2707b

Please sign in to comment.