[media] dvb_ca_en50221: fix compilation breakage
authorMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 10 Jan 2012 21:08:53 +0000 (19:08 -0200)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 10 Jan 2012 21:15:45 +0000 (19:15 -0200)
As reported by Toralf:

the build failed with :
  CC [M]  drivers/media/dvb/dvb-core/dvb_ca_en50221.o
In file included from arch/x86/include/asm/uaccess.h:573:0,
                 from include/linux/poll.h:14,
                 from drivers/media/dvb/dvb-core/dvbdev.h:27,
                 from drivers/media/dvb/dvb-core/dvb_ca_en50221.h:27,
                 from drivers/media/dvb/dvb-core/dvb_ca_en50221.c:41:
In function "copy_from_user", inlined from "dvb_ca_en50221_io_write" at drivers/media/dvb/dvb-core/dvb_ca_en50221.c:1314:26: arch/x86/include/asm/uaccess_32.h:211:26: error: call to "copy_from_user_overflow" declared with attribute error: copy_from_user() buffer size is not provably correct

Reported-by: Toralf Foerster <toralf.foerster@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-core/dvb_ca_en50221.c

index 7ea517b7e18626fd5723c255cb0aee2a102970a8..9be65a3b931fc91bd71c8155d8ccdd1da94e63e3 100644 (file)
@@ -1306,6 +1306,10 @@ static ssize_t dvb_ca_en50221_io_write(struct file *file,
        /* fragment the packets & store in the buffer */
        while (fragpos < count) {
                fraglen = ca->slot_info[slot].link_buf_size - 2;
+               if (fraglen < 0)
+                       break;
+               if (fraglen > HOST_LINK_BUF_SIZE - 2)
+                       fraglen = HOST_LINK_BUF_SIZE - 2;
                if ((count - fragpos) < fraglen)
                        fraglen = count - fragpos;