On Mon, Apr 17, 2017 at 11:28:44AM +0200, Andreas Hartmann wrote:
> Hello!
>
> Since Linux 4.9, ums_eneub6250 is broken. It's working fine if
> CONFIG_VMAP_STACK is disabled.
>
> I would be glad if it would be fixed.
Ah, nice catch, thanks for finding this.
Does the patch below fix this for you?
thanks,
greg k-h
---------------------
diff --git a/drivers/usb/storage/ene_ub6250.c b/drivers/usb/storage/ene_ub6250.c
index 369f3c24815a..6a227b142146 100644
--- a/drivers/usb/storage/ene_ub6250.c
+++ b/drivers/usb/storage/ene_ub6250.c
@@ -2180,21 +2180,29 @@ static int ene_sd_init(struct us_data *us)
static int ene_init(struct us_data *us)
{
int result;
- u8 misc_reg03 = 0;
+ u8 *misc_reg03;
+ u8 reg03;
struct ene_ub6250_info *info = (struct ene_ub6250_info *)(us->extra);
- result = ene_get_card_type(us, REG_CARD_STATUS, &misc_reg03);
+ misc_reg03 = kzalloc(1, GFP_KERNEL);
+ if (!misc_reg03)
+ return -ENOMEM;
+
+ result = ene_get_card_type(us, REG_CARD_STATUS, misc_reg03);
+ reg03 = misc_reg03[0];
+ kfree(misc_reg03);
+
if (result != USB_STOR_XFER_GOOD)
return USB_STOR_TRANSPORT_ERROR;
- if (misc_reg03 & 0x01) {
+ if (reg03 & 0x01) {
if (!info->SD_Status.Ready) {
result = ene_sd_init(us);
if (result != USB_STOR_XFER_GOOD)
return USB_STOR_TRANSPORT_ERROR;
}
}
- if (misc_reg03 & 0x02) {
+ if (reg03 & 0x02) {
if (!info->MS_Status.Ready) {
result = ene_ms_init(us);
if (result != USB_STOR_XFER_GOOD)
@@ -2303,7 +2311,7 @@ static int ene_ub6250_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
int result;
- u8 misc_reg03 = 0;
+ u8 *misc_reg03;
struct us_data *us;
result = usb_stor_probe1(&us, intf, id,
@@ -2328,18 +2336,26 @@ static int ene_ub6250_probe(struct usb_interface *intf,
if (result)
return result;
+ misc_reg03 = kzalloc(1, GFP_KERNEL);
+ if (!misc_reg03) {
+ usb_stor_disconnect(intf);
+ return -ENOMEM;
+ }
+
/* probe card type */
- result = ene_get_card_type(us, REG_CARD_STATUS, &misc_reg03);
+ result = ene_get_card_type(us, REG_CARD_STATUS, misc_reg03);
if (result != USB_STOR_XFER_GOOD) {
+ kfree(misc_reg03);
usb_stor_disconnect(intf);
return USB_STOR_TRANSPORT_ERROR;
}
- if (!(misc_reg03 & 0x01)) {
+ if (!(misc_reg03[0] & 0x01)) {
pr_info("ums_eneub6250: This driver only supports SD/MS cards. "
"It does not support SM cards.\n");
}
+ kfree(misc_reg03);
return result;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html