]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
dvb-core: fix bug in CRC-32 checking on 64-bit systems
authorAng Way Chuang <wcang@nrg.cs.usm.my>
Fri, 9 Mar 2007 07:32:38 +0000 (08:32 +0100)
committerAdrian Bunk <bunk@stusta.de>
Fri, 9 Mar 2007 07:32:38 +0000 (08:32 +0100)
CRC-32 checking during ULE decapsulation always failed on x86_64 systems due
to the size of a variable used to store CRC. This bug was discovered on
Fedora Core 6 with kernel-2.6.18-1.2849. The i386 counterpart has no such
problem. This patch has been tested on 64-bit system as well as 32-bit system.

Signed-off-by: Ang Way Chuang <wcang@nrg.cs.usm.my>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
drivers/media/dvb/dvb-core/dvb_net.c

index bdc491452dad29e93eba4bd5a3a2e02d9b2f5c4d..cbbe2baab4489bf086485bb41dbb61d25bcaf327 100644 (file)
@@ -575,7 +575,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
                                { &utype, sizeof utype },
                                { priv->ule_skb->data, priv->ule_skb->len - 4 }
                        };
-                       unsigned long ule_crc = ~0L, expected_crc;
+                       u32 ule_crc = ~0L, expected_crc;
                        if (priv->ule_dbit) {
                                /* Set D-bit for CRC32 verification,
                                 * if it was set originally. */
@@ -588,7 +588,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
                                       *((u8 *)priv->ule_skb->tail - 2) << 8 |
                                       *((u8 *)priv->ule_skb->tail - 1);
                        if (ule_crc != expected_crc) {
-                               printk(KERN_WARNING "%lu: CRC32 check FAILED: %#lx / %#lx, SNDU len %d type %#x, ts_remain %d, next 2: %x.\n",
+                               printk(KERN_WARNING "%lu: CRC32 check FAILED: %08x / %08x, SNDU len %d type %#x, ts_remain %d, next 2: %x.\n",
                                       priv->ts_count, ule_crc, expected_crc, priv->ule_sndu_len, priv->ule_sndu_type, ts_remain, ts_remain > 2 ? *(unsigned short *)from_where : 0);
 
 #ifdef ULE_DEBUG