2008-06-22 14:22:14

by Al Viro

[permalink] [raw]
Subject: [PATCH] dvb_net endianness fix


According to RFC 4326 (4.1) D-bit is MSB in net-endian 16bit.
dvb_net.c did
/* Set D-bit for CRC32 verification,
* if it was set originally. */
ulen |= 0x0080;
which works of little-endian (htons(1<<15) is 0x0080 there), but breaks
on big-endian.

Signed-off-by: Al Viro <[email protected]>
---
drivers/media/dvb/dvb-core/dvb_net.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c
index c2334ae..ff71610 100644
--- a/drivers/media/dvb/dvb-core/dvb_net.c
+++ b/drivers/media/dvb/dvb-core/dvb_net.c
@@ -606,7 +606,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )
if (priv->ule_dbit) {
/* Set D-bit for CRC32 verification,
* if it was set originally. */
- ulen |= 0x0080;
+ ulen |= htons(0x8000);
}

ule_crc = iov_crc32(ule_crc, iov, 3);
--
1.5.3.GIT