]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Aug 2023 07:15:46 +0000 (09:15 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Aug 2023 07:15:46 +0000 (09:15 +0200)
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

queue-5.4/libceph-fix-potential-hang-in-ceph_osdc_notify.patch [new file with mode: 0644]
queue-5.4/mtd-rawnand-meson-fix-oob-available-bytes-for-ecc.patch [new file with mode: 0644]
queue-5.4/mtd-spinand-toshiba-fix-ecc_get_status.patch [new file with mode: 0644]
queue-5.4/net-tap_open-set-sk_uid-from-current_fsuid.patch [new file with mode: 0644]
queue-5.4/net-tun_chr_open-set-sk_uid-from-current_fsuid.patch [new file with mode: 0644]
queue-5.4/scsi-zfcp-defer-fc_rport-blocking-until-after-adisc-response.patch [new file with mode: 0644]
queue-5.4/series
queue-5.4/usb-zaurus-add-id-for-a-300-b-500-c-700.patch [new file with mode: 0644]

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 (file)
index 0000000..1289574
--- /dev/null
@@ -0,0 +1,69 @@
+From e6e2843230799230fc5deb8279728a7218b0d63c Mon Sep 17 00:00:00 2001
+From: Ilya Dryomov <idryomov@gmail.com>
+Date: Tue, 1 Aug 2023 19:14:24 +0200
+Subject: libceph: fix potential hang in ceph_osdc_notify()
+
+From: Ilya Dryomov <idryomov@gmail.com>
+
+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 <idryomov@gmail.com>
+Reviewed-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
+Reviewed-by: Xiubo Li <xiubli@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..a54cad8
--- /dev/null
@@ -0,0 +1,44 @@
+From 7e6b04f9238eab0f684fafd158c1f32ea65b9eaa Mon Sep 17 00:00:00 2001
+From: Arseniy Krasnov <AVKrasnov@sberdevices.ru>
+Date: Wed, 5 Jul 2023 09:52:10 +0300
+Subject: mtd: rawnand: meson: fix OOB available bytes for ECC
+
+From: Arseniy Krasnov <AVKrasnov@sberdevices.ru>
+
+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: <Stable@vger.kernel.org>
+Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Link: https://lore.kernel.org/linux-mtd/20230705065211.293500-1-AVKrasnov@sberdevices.ru
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..0c4edcd
--- /dev/null
@@ -0,0 +1,54 @@
+From 8544cda94dae6be3f1359539079c68bb731428b1 Mon Sep 17 00:00:00 2001
+From: Olivier Maignial <olivier.maignial@hotmail.fr>
+Date: Fri, 23 Jun 2023 17:33:36 +0200
+Subject: mtd: spinand: toshiba: Fix ecc_get_status
+
+From: Olivier Maignial <olivier.maignial@hotmail.fr>
+
+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 <olivier.maignial@hotmail.fr>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Link: https://lore.kernel.org/linux-mtd/DB4P250MB1032553D05FBE36DEE0D311EFE23A@DB4P250MB1032.EURP250.PROD.OUTLOOK.COM
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..9978f5d
--- /dev/null
@@ -0,0 +1,55 @@
+From 5c9241f3ceab3257abe2923a59950db0dc8bb737 Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Mon, 31 Jul 2023 18:42:37 +0200
+Subject: net: tap_open(): set sk_uid from current_fsuid()
+
+From: Laszlo Ersek <lersek@redhat.com>
+
+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 <edumazet@google.com>
+Cc: Lorenzo Colitti <lorenzo@google.com>
+Cc: Paolo Abeni <pabeni@redhat.com>
+Cc: Pietro Borrello <borrello@diag.uniroma1.it>
+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 <lersek@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..3c32540
--- /dev/null
@@ -0,0 +1,55 @@
+From 9bc3047374d5bec163e83e743709e23753376f0c Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Mon, 31 Jul 2023 18:42:36 +0200
+Subject: net: tun_chr_open(): set sk_uid from current_fsuid()
+
+From: Laszlo Ersek <lersek@redhat.com>
+
+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 <edumazet@google.com>
+Cc: Lorenzo Colitti <lorenzo@google.com>
+Cc: Paolo Abeni <pabeni@redhat.com>
+Cc: Pietro Borrello <borrello@diag.uniroma1.it>
+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 <lersek@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..ef46422
--- /dev/null
@@ -0,0 +1,60 @@
+From e65851989001c0c9ba9177564b13b38201c0854c Mon Sep 17 00:00:00 2001
+From: Steffen Maier <maier@linux.ibm.com>
+Date: Mon, 24 Jul 2023 16:51:56 +0200
+Subject: scsi: zfcp: Defer fc_rport blocking until after ADISC response
+
+From: Steffen Maier <maier@linux.ibm.com>
+
+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 <bblock@linux.ibm.com>
+Reviewed-by: Fedor Loshakov <loshakov@linux.ibm.com>
+Signed-off-by: Steffen Maier <maier@linux.ibm.com>
+Link: https://lore.kernel.org/r/20230724145156.3920244-1-maier@linux.ibm.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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)
index 4fef9534dc755e90e1f8935743633abc8b4c8c0a..53512b23e46a1381938577d69f2397cc1e0dc5ef 100644 (file)
@@ -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 (file)
index 0000000..336add9
--- /dev/null
@@ -0,0 +1,111 @@
+From b99225b4fe297d07400f9e2332ecd7347b224f8d Mon Sep 17 00:00:00 2001
+From: Ross Maynard <bids.7405@bigpond.com>
+Date: Mon, 31 Jul 2023 15:42:04 +1000
+Subject: USB: zaurus: Add ID for A-300/B-500/C-700
+
+From: Ross Maynard <bids.7405@bigpond.com>
+
+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 <bids.7405@bigpond.com>
+Cc: stable@vger.kernel.org
+Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Link: https://lore.kernel.org/r/69b5423b-2013-9fc9-9569-58e707d9bafb@bigpond.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 */