]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
char: pcmcia: error out if 'num_bytes_read' is greater than 4 in set_protocol()
authorYu Kuai <yukuai3@huawei.com>
Fri, 21 May 2021 12:06:17 +0000 (20:06 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Jul 2021 14:22:36 +0000 (16:22 +0200)
[ Upstream commit 37188559c610f1b7eec83c8e448936c361c578de ]

Theoretically, it will cause index out of bounds error if
'num_bytes_read' is greater than 4. As we expect it(and was tested)
never to be greater than 4, error out if it happens.

Fixes: c1986ee9bea3 ("[PATCH] New Omnikey Cardman 4000 driver")
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Link: https://lore.kernel.org/r/20210521120617.138396-1-yukuai3@huawei.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/char/pcmcia/cm4000_cs.c

index c115217c79aecfbcfe41ba035b25bd4db80db15d..f8d98f7e6fb72d7551403012467d91d0c95b65ff 100644 (file)
@@ -544,6 +544,10 @@ static int set_protocol(struct cm4000_dev *dev, struct ptsreq *ptsreq)
                io_read_num_rec_bytes(iobase, &num_bytes_read);
                if (num_bytes_read >= 4) {
                        DEBUGP(2, dev, "NumRecBytes = %i\n", num_bytes_read);
+                       if (num_bytes_read > 4) {
+                               rc = -EIO;
+                               goto exit_setprotocol;
+                       }
                        break;
                }
                mdelay(10);