Commit 69d3973a authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Mauro Carvalho Chehab

[media] ttpci: address stringop overflow warning

gcc-7.0.1 warns about old code in ttpci:

In file included from drivers/media/pci/ttpci/av7110.c:63:0:
In function 'irdebi.isra.2',
    inlined from 'start_debi_dma' at drivers/media/pci/ttpci/av7110.c:376:3,
    inlined from 'gpioirq' at drivers/media/pci/ttpci/av7110.c:659:3:
drivers/media/pci/ttpci/av7110_hw.h:406:3: warning: 'memcpy': specified size between 18446744071562067968 and 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Wstringop-overflow=]
   memcpy(av7110->debi_virt, (char *) &res, count);
In function 'irdebi.isra.2',
    inlined from 'start_debi_dma' at drivers/media/pci/ttpci/av7110.c:376:3,
    inlined from 'gpioirq' at drivers/media/pci/ttpci/av7110.c:668:3:
drivers/media/pci/ttpci/av7110_hw.h:406:3: warning: 'memcpy': specified size between 18446744071562067968 and 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Wstringop-overflow=]
   memcpy(av7110->debi_virt, (char *) &res, count);

Apparently, 'count' can be negative here, which will then get turned
into a giant size argument for memcpy. Changing the sizes to 'unsigned
int' instead seems safe as we already check for maximum sizes, and it
also simplifies the code a bit.
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 00514537
...@@ -53,11 +53,11 @@ ...@@ -53,11 +53,11 @@
by Nathan Laredo <laredo@gnu.org> */ by Nathan Laredo <laredo@gnu.org> */
int av7110_debiwrite(struct av7110 *av7110, u32 config, int av7110_debiwrite(struct av7110 *av7110, u32 config,
int addr, u32 val, int count) int addr, u32 val, unsigned int count)
{ {
struct saa7146_dev *dev = av7110->dev; struct saa7146_dev *dev = av7110->dev;
if (count <= 0 || count > 32764) { if (count > 32764) {
printk("%s: invalid count %d\n", __func__, count); printk("%s: invalid count %d\n", __func__, count);
return -1; return -1;
} }
...@@ -75,12 +75,12 @@ int av7110_debiwrite(struct av7110 *av7110, u32 config, ...@@ -75,12 +75,12 @@ int av7110_debiwrite(struct av7110 *av7110, u32 config,
return 0; return 0;
} }
u32 av7110_debiread(struct av7110 *av7110, u32 config, int addr, int count) u32 av7110_debiread(struct av7110 *av7110, u32 config, int addr, unsigned int count)
{ {
struct saa7146_dev *dev = av7110->dev; struct saa7146_dev *dev = av7110->dev;
u32 result = 0; u32 result = 0;
if (count > 32764 || count <= 0) { if (count > 32764) {
printk("%s: invalid count %d\n", __func__, count); printk("%s: invalid count %d\n", __func__, count);
return 0; return 0;
} }
......
...@@ -377,14 +377,14 @@ extern int av7110_fw_request(struct av7110 *av7110, u16 *request_buf, ...@@ -377,14 +377,14 @@ extern int av7110_fw_request(struct av7110 *av7110, u16 *request_buf,
/* DEBI (saa7146 data extension bus interface) access */ /* DEBI (saa7146 data extension bus interface) access */
extern int av7110_debiwrite(struct av7110 *av7110, u32 config, extern int av7110_debiwrite(struct av7110 *av7110, u32 config,
int addr, u32 val, int count); int addr, u32 val, unsigned int count);
extern u32 av7110_debiread(struct av7110 *av7110, u32 config, extern u32 av7110_debiread(struct av7110 *av7110, u32 config,
int addr, int count); int addr, unsigned int count);
/* DEBI during interrupt */ /* DEBI during interrupt */
/* single word writes */ /* single word writes */
static inline void iwdebi(struct av7110 *av7110, u32 config, int addr, u32 val, int count) static inline void iwdebi(struct av7110 *av7110, u32 config, int addr, u32 val, unsigned int count)
{ {
av7110_debiwrite(av7110, config, addr, val, count); av7110_debiwrite(av7110, config, addr, val, count);
} }
...@@ -397,7 +397,7 @@ static inline void mwdebi(struct av7110 *av7110, u32 config, int addr, ...@@ -397,7 +397,7 @@ static inline void mwdebi(struct av7110 *av7110, u32 config, int addr,
av7110_debiwrite(av7110, config, addr, 0, count); av7110_debiwrite(av7110, config, addr, 0, count);
} }
static inline u32 irdebi(struct av7110 *av7110, u32 config, int addr, u32 val, int count) static inline u32 irdebi(struct av7110 *av7110, u32 config, int addr, u32 val, unsigned int count)
{ {
u32 res; u32 res;
...@@ -408,7 +408,7 @@ static inline u32 irdebi(struct av7110 *av7110, u32 config, int addr, u32 val, i ...@@ -408,7 +408,7 @@ static inline u32 irdebi(struct av7110 *av7110, u32 config, int addr, u32 val, i
} }
/* DEBI outside interrupts, only for count <= 4! */ /* DEBI outside interrupts, only for count <= 4! */
static inline void wdebi(struct av7110 *av7110, u32 config, int addr, u32 val, int count) static inline void wdebi(struct av7110 *av7110, u32 config, int addr, u32 val, unsigned int count)
{ {
unsigned long flags; unsigned long flags;
...@@ -417,7 +417,7 @@ static inline void wdebi(struct av7110 *av7110, u32 config, int addr, u32 val, i ...@@ -417,7 +417,7 @@ static inline void wdebi(struct av7110 *av7110, u32 config, int addr, u32 val, i
spin_unlock_irqrestore(&av7110->debilock, flags); spin_unlock_irqrestore(&av7110->debilock, flags);
} }
static inline u32 rdebi(struct av7110 *av7110, u32 config, int addr, u32 val, int count) static inline u32 rdebi(struct av7110 *av7110, u32 config, int addr, u32 val, unsigned int count)
{ {
unsigned long flags; unsigned long flags;
u32 res; u32 res;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment