summaryrefslogtreecommitdiff
path: root/drivers/scsi
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@google.com>2020-06-11 09:43:35 +0200
committerGreg Kroah-Hartman <gregkh@google.com>2020-06-11 09:43:35 +0200
commit21371e32fdb92398492f146e115b728eeb45beaf (patch)
tree441853acddf2e0bf97d03c8b36eef302a8b720f5 /drivers/scsi
parent60fca757270659c627384fcfe7219d2b85f1459c (diff)
parentf17c881e4c8899900a5a77e87fb064158d32b05c (diff)
Merge 4.4.227 into android-4.4-p
Changes in 4.4.227 scsi: scsi_devinfo: fixup string compare usb: gadget: f_uac2: fix error handling in afunc_bind (again) platform/x86: acer-wmi: setup accelerometer when ACPI device was found esp6: fix memleak on error path in esp6_input IB/mlx4: Fix an error handling path in 'mlx4_ib_rereg_user_mr()' ALSA: hda - No loopback on ALC299 codec spi: dw: use "smp_mb()" to avoid sending spi data error s390/ftrace: save traced function caller ARC: Fix ICCM & DCCM runtime size checks x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables net: bmac: Fix read of MAC address from ROM net/ethernet/freescale: rework quiesce/activate for ucc_geth net: ethernet: stmmac: Enable interface clocks on probe for IPQ806x pppoe: only process PADT targeted at local interfaces mmc: fix compilation of user API slcan: Fix double-free on slcan_open() error path slip: not call free_netdev before rtnl_unlock in slip_open scsi: ufs: Release clock if DMA map fails devinet: fix memleak in inetdev_init() NFC: st21nfca: add missed kfree_skb() in an error path vsock: fix timeout in vsock_accept() l2tp: add sk_family checks to l2tp_validate_socket l2tp: do not use inet_hash()/inet_unhash() USB: serial: qcserial: add DW5816e QDL support USB: serial: usb_wwan: do not resubmit rx urb on fatal errors USB: serial: option: add Telit LE910C1-EUX compositions vt: keyboard: avoid signed integer overflow in k_ascii staging: rtl8712: Fix IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK x86/cpu: Rename cpu_data.x86_mask to cpu_data.x86_stepping x86/cpu: Add a steppings field to struct x86_cpu_id x86/cpu: Add 'table' argument to cpu_matches() x86/speculation: Add Special Register Buffer Data Sampling (SRBDS) mitigation x86/speculation: Add SRBDS vulnerability and mitigation documentation x86/speculation: Add Ivy Bridge to affected list iio: vcnl4000: Fix i2c swapped word reading. uprobes: ensure that uprobe->offset and ->ref_ctr_offset are properly aligned Linux 4.4.227 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ib2e396e7c9444adb4cad958e3423afe3c4d5963d
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/scsi_devinfo.c23
-rw-r--r--drivers/scsi/ufs/ufshcd.c1
2 files changed, 14 insertions, 10 deletions
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index 75f2179860a7..4055cb7c212b 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -386,8 +386,8 @@ EXPORT_SYMBOL(scsi_dev_info_list_add_keyed);
/**
* scsi_dev_info_list_find - find a matching dev_info list entry.
- * @vendor: vendor string
- * @model: model (product) string
+ * @vendor: full vendor string
+ * @model: full model (product) string
* @key: specify list to use
*
* Description:
@@ -402,7 +402,7 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,
struct scsi_dev_info_list *devinfo;
struct scsi_dev_info_list_table *devinfo_table =
scsi_devinfo_lookup_by_key(key);
- size_t vmax, mmax;
+ size_t vmax, mmax, mlen;
const char *vskip, *mskip;
if (IS_ERR(devinfo_table))
@@ -441,15 +441,18 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor,
dev_info_list) {
if (devinfo->compatible) {
/*
- * Behave like the older version of get_device_flags.
+ * vendor strings must be an exact match
*/
- if (memcmp(devinfo->vendor, vskip, vmax) ||
- (vmax < sizeof(devinfo->vendor) &&
- devinfo->vendor[vmax]))
+ if (vmax != strlen(devinfo->vendor) ||
+ memcmp(devinfo->vendor, vskip, vmax))
continue;
- if (memcmp(devinfo->model, mskip, mmax) ||
- (mmax < sizeof(devinfo->model) &&
- devinfo->model[mmax]))
+
+ /*
+ * @model specifies the full string, and
+ * must be larger or equal to devinfo->model
+ */
+ mlen = strlen(devinfo->model);
+ if (mmax < mlen || memcmp(devinfo->model, mskip, mlen))
continue;
return devinfo;
} else {
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index e0247681450f..d07e51dc2963 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -1386,6 +1386,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
ufshcd_compose_upiu(hba, lrbp);
err = ufshcd_map_sg(lrbp);
if (err) {
+ ufshcd_release(hba);
lrbp->cmd = NULL;
clear_bit_unlock(tag, &hba->lrb_in_use);
goto out;