From: Greg Kroah-Hartman Date: Mon, 7 Aug 2023 07:15:46 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v4.14.321~43 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cec6f099aec9d06a69b7e4fb1affa9a1bf5f8a0d;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: libceph-fix-potential-hang-in-ceph_osdc_notify.patch mtd-rawnand-meson-fix-oob-available-bytes-for-ecc.patch mtd-spinand-toshiba-fix-ecc_get_status.patch net-tap_open-set-sk_uid-from-current_fsuid.patch net-tun_chr_open-set-sk_uid-from-current_fsuid.patch scsi-zfcp-defer-fc_rport-blocking-until-after-adisc-response.patch usb-zaurus-add-id-for-a-300-b-500-c-700.patch --- diff --git a/queue-5.4/libceph-fix-potential-hang-in-ceph_osdc_notify.patch b/queue-5.4/libceph-fix-potential-hang-in-ceph_osdc_notify.patch new file mode 100644 index 00000000000..1289574defa --- /dev/null +++ b/queue-5.4/libceph-fix-potential-hang-in-ceph_osdc_notify.patch @@ -0,0 +1,69 @@ +From e6e2843230799230fc5deb8279728a7218b0d63c Mon Sep 17 00:00:00 2001 +From: Ilya Dryomov +Date: Tue, 1 Aug 2023 19:14:24 +0200 +Subject: libceph: fix potential hang in ceph_osdc_notify() + +From: Ilya Dryomov + +commit e6e2843230799230fc5deb8279728a7218b0d63c upstream. + +If the cluster becomes unavailable, ceph_osdc_notify() may hang even +with osd_request_timeout option set because linger_notify_finish_wait() +waits for MWatchNotify NOTIFY_COMPLETE message with no associated OSD +request in flight -- it's completely asynchronous. + +Introduce an additional timeout, derived from the specified notify +timeout. While at it, switch both waits to killable which is more +correct. + +Cc: stable@vger.kernel.org +Signed-off-by: Ilya Dryomov +Reviewed-by: Dongsheng Yang +Reviewed-by: Xiubo Li +Signed-off-by: Greg Kroah-Hartman +--- + net/ceph/osd_client.c | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +--- a/net/ceph/osd_client.c ++++ b/net/ceph/osd_client.c +@@ -3249,17 +3249,24 @@ static int linger_reg_commit_wait(struct + int ret; + + dout("%s lreq %p linger_id %llu\n", __func__, lreq, lreq->linger_id); +- ret = wait_for_completion_interruptible(&lreq->reg_commit_wait); ++ ret = wait_for_completion_killable(&lreq->reg_commit_wait); + return ret ?: lreq->reg_commit_error; + } + +-static int linger_notify_finish_wait(struct ceph_osd_linger_request *lreq) ++static int linger_notify_finish_wait(struct ceph_osd_linger_request *lreq, ++ unsigned long timeout) + { +- int ret; ++ long left; + + dout("%s lreq %p linger_id %llu\n", __func__, lreq, lreq->linger_id); +- ret = wait_for_completion_interruptible(&lreq->notify_finish_wait); +- return ret ?: lreq->notify_finish_error; ++ left = wait_for_completion_killable_timeout(&lreq->notify_finish_wait, ++ ceph_timeout_jiffies(timeout)); ++ if (left <= 0) ++ left = left ?: -ETIMEDOUT; ++ else ++ left = lreq->notify_finish_error; /* completed */ ++ ++ return left; + } + + /* +@@ -4875,7 +4882,8 @@ int ceph_osdc_notify(struct ceph_osd_cli + linger_submit(lreq); + ret = linger_reg_commit_wait(lreq); + if (!ret) +- ret = linger_notify_finish_wait(lreq); ++ ret = linger_notify_finish_wait(lreq, ++ msecs_to_jiffies(2 * timeout * MSEC_PER_SEC)); + else + dout("lreq %p failed to initiate notify %d\n", lreq, ret); + diff --git a/queue-5.4/mtd-rawnand-meson-fix-oob-available-bytes-for-ecc.patch b/queue-5.4/mtd-rawnand-meson-fix-oob-available-bytes-for-ecc.patch new file mode 100644 index 00000000000..a54cad83a4d --- /dev/null +++ b/queue-5.4/mtd-rawnand-meson-fix-oob-available-bytes-for-ecc.patch @@ -0,0 +1,44 @@ +From 7e6b04f9238eab0f684fafd158c1f32ea65b9eaa Mon Sep 17 00:00:00 2001 +From: Arseniy Krasnov +Date: Wed, 5 Jul 2023 09:52:10 +0300 +Subject: mtd: rawnand: meson: fix OOB available bytes for ECC + +From: Arseniy Krasnov + +commit 7e6b04f9238eab0f684fafd158c1f32ea65b9eaa upstream. + +It is incorrect to calculate number of OOB bytes for ECC engine using +some "already known" ECC step size (1024 bytes here). Number of such +bytes for ECC engine must be whole OOB except 2 bytes for bad block +marker, while proper ECC step size and strength will be selected by +ECC logic. + +Fixes: 8fae856c5350 ("mtd: rawnand: meson: add support for Amlogic NAND flash controller") +Cc: +Signed-off-by: Arseniy Krasnov +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20230705065211.293500-1-AVKrasnov@sberdevices.ru +Signed-off-by: Greg Kroah-Hartman +--- + drivers/mtd/nand/raw/meson_nand.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/drivers/mtd/nand/raw/meson_nand.c ++++ b/drivers/mtd/nand/raw/meson_nand.c +@@ -1177,7 +1177,6 @@ static int meson_nand_attach_chip(struct + struct meson_nfc *nfc = nand_get_controller_data(nand); + struct meson_nfc_nand_chip *meson_chip = to_meson_nand(nand); + struct mtd_info *mtd = nand_to_mtd(nand); +- int nsectors = mtd->writesize / 1024; + int ret; + + if (!mtd->name) { +@@ -1195,7 +1194,7 @@ static int meson_nand_attach_chip(struct + nand->options |= NAND_NO_SUBPAGE_WRITE; + + ret = nand_ecc_choose_conf(nand, nfc->data->ecc_caps, +- mtd->oobsize - 2 * nsectors); ++ mtd->oobsize - 2); + if (ret) { + dev_err(nfc->dev, "failed to ECC init\n"); + return -EINVAL; diff --git a/queue-5.4/mtd-spinand-toshiba-fix-ecc_get_status.patch b/queue-5.4/mtd-spinand-toshiba-fix-ecc_get_status.patch new file mode 100644 index 00000000000..0c4edcd7056 --- /dev/null +++ b/queue-5.4/mtd-spinand-toshiba-fix-ecc_get_status.patch @@ -0,0 +1,54 @@ +From 8544cda94dae6be3f1359539079c68bb731428b1 Mon Sep 17 00:00:00 2001 +From: Olivier Maignial +Date: Fri, 23 Jun 2023 17:33:36 +0200 +Subject: mtd: spinand: toshiba: Fix ecc_get_status + +From: Olivier Maignial + +commit 8544cda94dae6be3f1359539079c68bb731428b1 upstream. + +Reading ECC status is failing. + +tx58cxgxsxraix_ecc_get_status() is using on-stack buffer +for SPINAND_GET_FEATURE_OP() output. It is not suitable +for DMA needs of spi-mem. + +Fix this by using the spi-mem operations dedicated buffer +spinand->scratchbuf. + +See +spinand->scratchbuf: +https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/mtd/spinand.h?h=v6.3#n418 +spi_mem_check_op(): +https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/spi/spi-mem.c?h=v6.3#n199 + +Fixes: 10949af1681d ("mtd: spinand: Add initial support for Toshiba TC58CVG2S0H") +Cc: stable@vger.kernel.org +Signed-off-by: Olivier Maignial +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/DB4P250MB1032553D05FBE36DEE0D311EFE23A@DB4P250MB1032.EURP250.PROD.OUTLOOK.COM +Signed-off-by: Greg Kroah-Hartman +--- + drivers/mtd/nand/spi/toshiba.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/mtd/nand/spi/toshiba.c ++++ b/drivers/mtd/nand/spi/toshiba.c +@@ -60,7 +60,7 @@ static int tc58cxgxsx_ecc_get_status(str + { + struct nand_device *nand = spinand_to_nand(spinand); + u8 mbf = 0; +- struct spi_mem_op op = SPINAND_GET_FEATURE_OP(0x30, &mbf); ++ struct spi_mem_op op = SPINAND_GET_FEATURE_OP(0x30, spinand->scratchbuf); + + switch (status & STATUS_ECC_MASK) { + case STATUS_ECC_NO_BITFLIPS: +@@ -79,7 +79,7 @@ static int tc58cxgxsx_ecc_get_status(str + if (spi_mem_exec_op(spinand->spimem, &op)) + return nand->eccreq.strength; + +- mbf >>= 4; ++ mbf = *(spinand->scratchbuf) >> 4; + + if (WARN_ON(mbf > nand->eccreq.strength || !mbf)) + return nand->eccreq.strength; diff --git a/queue-5.4/net-tap_open-set-sk_uid-from-current_fsuid.patch b/queue-5.4/net-tap_open-set-sk_uid-from-current_fsuid.patch new file mode 100644 index 00000000000..9978f5d7ea7 --- /dev/null +++ b/queue-5.4/net-tap_open-set-sk_uid-from-current_fsuid.patch @@ -0,0 +1,55 @@ +From 5c9241f3ceab3257abe2923a59950db0dc8bb737 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 31 Jul 2023 18:42:37 +0200 +Subject: net: tap_open(): set sk_uid from current_fsuid() + +From: Laszlo Ersek + +commit 5c9241f3ceab3257abe2923a59950db0dc8bb737 upstream. + +Commit 66b2c338adce initializes the "sk_uid" field in the protocol socket +(struct sock) from the "/dev/tapX" device node's owner UID. Per original +commit 86741ec25462 ("net: core: Add a UID field to struct sock.", +2016-11-04), that's wrong: the idea is to cache the UID of the userspace +process that creates the socket. Commit 86741ec25462 mentions socket() and +accept(); with "tap", the action that creates the socket is +open("/dev/tapX"). + +Therefore the device node's owner UID is irrelevant. In most cases, +"/dev/tapX" will be owned by root, so in practice, commit 66b2c338adce has +no observable effect: + +- before, "sk_uid" would be zero, due to undefined behavior + (CVE-2023-1076), + +- after, "sk_uid" would be zero, due to "/dev/tapX" being owned by root. + +What matters is the (fs)UID of the process performing the open(), so cache +that in "sk_uid". + +Cc: Eric Dumazet +Cc: Lorenzo Colitti +Cc: Paolo Abeni +Cc: Pietro Borrello +Cc: netdev@vger.kernel.org +Cc: stable@vger.kernel.org +Fixes: 66b2c338adce ("tap: tap_open(): correctly initialize socket uid") +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2173435 +Signed-off-by: Laszlo Ersek +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/tap.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/tap.c ++++ b/drivers/net/tap.c +@@ -525,7 +525,7 @@ static int tap_open(struct inode *inode, + q->sock.state = SS_CONNECTED; + q->sock.file = file; + q->sock.ops = &tap_socket_ops; +- sock_init_data_uid(&q->sock, &q->sk, inode->i_uid); ++ sock_init_data_uid(&q->sock, &q->sk, current_fsuid()); + q->sk.sk_write_space = tap_sock_write_space; + q->sk.sk_destruct = tap_sock_destruct; + q->flags = IFF_VNET_HDR | IFF_NO_PI | IFF_TAP; diff --git a/queue-5.4/net-tun_chr_open-set-sk_uid-from-current_fsuid.patch b/queue-5.4/net-tun_chr_open-set-sk_uid-from-current_fsuid.patch new file mode 100644 index 00000000000..3c32540bde3 --- /dev/null +++ b/queue-5.4/net-tun_chr_open-set-sk_uid-from-current_fsuid.patch @@ -0,0 +1,55 @@ +From 9bc3047374d5bec163e83e743709e23753376f0c Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 31 Jul 2023 18:42:36 +0200 +Subject: net: tun_chr_open(): set sk_uid from current_fsuid() + +From: Laszlo Ersek + +commit 9bc3047374d5bec163e83e743709e23753376f0c upstream. + +Commit a096ccca6e50 initializes the "sk_uid" field in the protocol socket +(struct sock) from the "/dev/net/tun" device node's owner UID. Per +original commit 86741ec25462 ("net: core: Add a UID field to struct +sock.", 2016-11-04), that's wrong: the idea is to cache the UID of the +userspace process that creates the socket. Commit 86741ec25462 mentions +socket() and accept(); with "tun", the action that creates the socket is +open("/dev/net/tun"). + +Therefore the device node's owner UID is irrelevant. In most cases, +"/dev/net/tun" will be owned by root, so in practice, commit a096ccca6e50 +has no observable effect: + +- before, "sk_uid" would be zero, due to undefined behavior + (CVE-2023-1076), + +- after, "sk_uid" would be zero, due to "/dev/net/tun" being owned by root. + +What matters is the (fs)UID of the process performing the open(), so cache +that in "sk_uid". + +Cc: Eric Dumazet +Cc: Lorenzo Colitti +Cc: Paolo Abeni +Cc: Pietro Borrello +Cc: netdev@vger.kernel.org +Cc: stable@vger.kernel.org +Fixes: a096ccca6e50 ("tun: tun_chr_open(): correctly initialize socket uid") +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2173435 +Signed-off-by: Laszlo Ersek +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/tun.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/tun.c ++++ b/drivers/net/tun.c +@@ -3534,7 +3534,7 @@ static int tun_chr_open(struct inode *in + tfile->socket.file = file; + tfile->socket.ops = &tun_socket_ops; + +- sock_init_data_uid(&tfile->socket, &tfile->sk, inode->i_uid); ++ sock_init_data_uid(&tfile->socket, &tfile->sk, current_fsuid()); + + tfile->sk.sk_write_space = tun_sock_write_space; + tfile->sk.sk_sndbuf = INT_MAX; diff --git a/queue-5.4/scsi-zfcp-defer-fc_rport-blocking-until-after-adisc-response.patch b/queue-5.4/scsi-zfcp-defer-fc_rport-blocking-until-after-adisc-response.patch new file mode 100644 index 00000000000..ef46422244a --- /dev/null +++ b/queue-5.4/scsi-zfcp-defer-fc_rport-blocking-until-after-adisc-response.patch @@ -0,0 +1,60 @@ +From e65851989001c0c9ba9177564b13b38201c0854c Mon Sep 17 00:00:00 2001 +From: Steffen Maier +Date: Mon, 24 Jul 2023 16:51:56 +0200 +Subject: scsi: zfcp: Defer fc_rport blocking until after ADISC response + +From: Steffen Maier + +commit e65851989001c0c9ba9177564b13b38201c0854c upstream. + +Storage devices are free to send RSCNs, e.g. for internal state changes. If +this happens on all connected paths, zfcp risks temporarily losing all +paths at the same time. This has strong requirements on multipath +configuration such as "no_path_retry queue". + +Avoid such situations by deferring fc_rport blocking until after the ADISC +response, when any actual state change of the remote port became clear. +The already existing port recovery triggers explicitly block the fc_rport. +The triggers are: on ADISC reject or timeout (typical cable pull case), and +on ADISC indicating that the remote port has changed its WWPN or +the port is meanwhile no longer open. + +As a side effect, this also removes a confusing direct function call to +another work item function zfcp_scsi_rport_work() instead of scheduling +that other work item. It was probably done that way to have the rport block +side effect immediate and synchronous to the caller. + +Fixes: a2fa0aede07c ("[SCSI] zfcp: Block FC transport rports early on errors") +Cc: stable@vger.kernel.org #v2.6.30+ +Reviewed-by: Benjamin Block +Reviewed-by: Fedor Loshakov +Signed-off-by: Steffen Maier +Link: https://lore.kernel.org/r/20230724145156.3920244-1-maier@linux.ibm.com +Signed-off-by: Martin K. Petersen +Signed-off-by: Greg Kroah-Hartman +--- + drivers/s390/scsi/zfcp_fc.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +--- a/drivers/s390/scsi/zfcp_fc.c ++++ b/drivers/s390/scsi/zfcp_fc.c +@@ -534,8 +534,7 @@ static void zfcp_fc_adisc_handler(void * + + /* re-init to undo drop from zfcp_fc_adisc() */ + port->d_id = ntoh24(adisc_resp->adisc_port_id); +- /* port is good, unblock rport without going through erp */ +- zfcp_scsi_schedule_rport_register(port); ++ /* port is still good, nothing to do */ + out: + atomic_andnot(ZFCP_STATUS_PORT_LINK_TEST, &port->status); + put_device(&port->dev); +@@ -595,9 +594,6 @@ void zfcp_fc_link_test_work(struct work_ + int retval; + + set_worker_desc("zadisc%16llx", port->wwpn); /* < WORKER_DESC_LEN=24 */ +- get_device(&port->dev); +- port->rport_task = RPORT_DEL; +- zfcp_scsi_rport_work(&port->rport_work); + + /* only issue one test command at one time per port */ + if (atomic_read(&port->status) & ZFCP_STATUS_PORT_LINK_TEST) diff --git a/queue-5.4/series b/queue-5.4/series index 4fef9534dc7..53512b23e46 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -119,3 +119,10 @@ tcp_metrics-annotate-data-races-around-tm-tcpm_lock.patch tcp_metrics-annotate-data-races-around-tm-tcpm_vals.patch tcp_metrics-annotate-data-races-around-tm-tcpm_net.patch tcp_metrics-fix-data-race-in-tcpm_suck_dst-vs-fastop.patch +scsi-zfcp-defer-fc_rport-blocking-until-after-adisc-response.patch +libceph-fix-potential-hang-in-ceph_osdc_notify.patch +usb-zaurus-add-id-for-a-300-b-500-c-700.patch +mtd-spinand-toshiba-fix-ecc_get_status.patch +mtd-rawnand-meson-fix-oob-available-bytes-for-ecc.patch +net-tun_chr_open-set-sk_uid-from-current_fsuid.patch +net-tap_open-set-sk_uid-from-current_fsuid.patch diff --git a/queue-5.4/usb-zaurus-add-id-for-a-300-b-500-c-700.patch b/queue-5.4/usb-zaurus-add-id-for-a-300-b-500-c-700.patch new file mode 100644 index 00000000000..336add9cafd --- /dev/null +++ b/queue-5.4/usb-zaurus-add-id-for-a-300-b-500-c-700.patch @@ -0,0 +1,111 @@ +From b99225b4fe297d07400f9e2332ecd7347b224f8d Mon Sep 17 00:00:00 2001 +From: Ross Maynard +Date: Mon, 31 Jul 2023 15:42:04 +1000 +Subject: USB: zaurus: Add ID for A-300/B-500/C-700 + +From: Ross Maynard + +commit b99225b4fe297d07400f9e2332ecd7347b224f8d upstream. + +The SL-A300, B500/5600, and C700 devices no longer auto-load because of +"usbnet: Remove over-broad module alias from zaurus." +This patch adds IDs for those 3 devices. + +Link: https://bugzilla.kernel.org/show_bug.cgi?id=217632 +Fixes: 16adf5d07987 ("usbnet: Remove over-broad module alias from zaurus.") +Signed-off-by: Ross Maynard +Cc: stable@vger.kernel.org +Acked-by: Greg Kroah-Hartman +Reviewed-by: Andrew Lunn +Link: https://lore.kernel.org/r/69b5423b-2013-9fc9-9569-58e707d9bafb@bigpond.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/usb/cdc_ether.c | 21 +++++++++++++++++++++ + drivers/net/usb/zaurus.c | 21 +++++++++++++++++++++ + 2 files changed, 42 insertions(+) + +--- a/drivers/net/usb/cdc_ether.c ++++ b/drivers/net/usb/cdc_ether.c +@@ -605,6 +605,13 @@ static const struct usb_device_id produc + .match_flags = USB_DEVICE_ID_MATCH_INT_INFO + | USB_DEVICE_ID_MATCH_DEVICE, + .idVendor = 0x04DD, ++ .idProduct = 0x8005, /* A-300 */ ++ ZAURUS_FAKE_INTERFACE, ++ .driver_info = 0, ++}, { ++ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO ++ | USB_DEVICE_ID_MATCH_DEVICE, ++ .idVendor = 0x04DD, + .idProduct = 0x8006, /* B-500/SL-5600 */ + ZAURUS_MASTER_INTERFACE, + .driver_info = 0, +@@ -612,11 +619,25 @@ static const struct usb_device_id produc + .match_flags = USB_DEVICE_ID_MATCH_INT_INFO + | USB_DEVICE_ID_MATCH_DEVICE, + .idVendor = 0x04DD, ++ .idProduct = 0x8006, /* B-500/SL-5600 */ ++ ZAURUS_FAKE_INTERFACE, ++ .driver_info = 0, ++}, { ++ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO ++ | USB_DEVICE_ID_MATCH_DEVICE, ++ .idVendor = 0x04DD, + .idProduct = 0x8007, /* C-700 */ + ZAURUS_MASTER_INTERFACE, + .driver_info = 0, + }, { + .match_flags = USB_DEVICE_ID_MATCH_INT_INFO ++ | USB_DEVICE_ID_MATCH_DEVICE, ++ .idVendor = 0x04DD, ++ .idProduct = 0x8007, /* C-700 */ ++ ZAURUS_FAKE_INTERFACE, ++ .driver_info = 0, ++}, { ++ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO + | USB_DEVICE_ID_MATCH_DEVICE, + .idVendor = 0x04DD, + .idProduct = 0x9031, /* C-750 C-760 */ +--- a/drivers/net/usb/zaurus.c ++++ b/drivers/net/usb/zaurus.c +@@ -289,11 +289,25 @@ static const struct usb_device_id produc + .match_flags = USB_DEVICE_ID_MATCH_INT_INFO + | USB_DEVICE_ID_MATCH_DEVICE, + .idVendor = 0x04DD, ++ .idProduct = 0x8005, /* A-300 */ ++ ZAURUS_FAKE_INTERFACE, ++ .driver_info = (unsigned long)&bogus_mdlm_info, ++}, { ++ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO ++ | USB_DEVICE_ID_MATCH_DEVICE, ++ .idVendor = 0x04DD, + .idProduct = 0x8006, /* B-500/SL-5600 */ + ZAURUS_MASTER_INTERFACE, + .driver_info = ZAURUS_PXA_INFO, + }, { + .match_flags = USB_DEVICE_ID_MATCH_INT_INFO ++ | USB_DEVICE_ID_MATCH_DEVICE, ++ .idVendor = 0x04DD, ++ .idProduct = 0x8006, /* B-500/SL-5600 */ ++ ZAURUS_FAKE_INTERFACE, ++ .driver_info = (unsigned long)&bogus_mdlm_info, ++}, { ++ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO + | USB_DEVICE_ID_MATCH_DEVICE, + .idVendor = 0x04DD, + .idProduct = 0x8007, /* C-700 */ +@@ -301,6 +315,13 @@ static const struct usb_device_id produc + .driver_info = ZAURUS_PXA_INFO, + }, { + .match_flags = USB_DEVICE_ID_MATCH_INT_INFO ++ | USB_DEVICE_ID_MATCH_DEVICE, ++ .idVendor = 0x04DD, ++ .idProduct = 0x8007, /* C-700 */ ++ ZAURUS_FAKE_INTERFACE, ++ .driver_info = (unsigned long)&bogus_mdlm_info, ++}, { ++ .match_flags = USB_DEVICE_ID_MATCH_INT_INFO + | USB_DEVICE_ID_MATCH_DEVICE, + .idVendor = 0x04DD, + .idProduct = 0x9031, /* C-750 C-760 */