diff options
| author | Eric Van Hensbergen <ericvh@gmail.com> | 2009-02-07 01:07:41 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-02-07 01:07:41 -0500 |
| commit | beeebc92ee04bff6a722ebf85e23131faedd4479 (patch) | |
| tree | 140e8f6dfaedb55e717b7870177f388a72ece82d /net | |
| parent | b4bd07c20ba0c1fa7ad09ba257e0a5cfc2bf6bb3 (diff) | |
9p: fix endian issues [attempt 3]
When the changes were done to the protocol last release, some endian
bugs crept in. This patch fixes those endian problems and has been
verified to run on 32/64 bit and x86/ppc architectures.
This version of the patch incorporates the correct annotations
for endian variables.
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
| -rw-r--r-- | net/9p/protocol.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/net/9p/protocol.c b/net/9p/protocol.c index dcd7666824ba..fc70147c771e 100644 --- a/net/9p/protocol.c +++ b/net/9p/protocol.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/errno.h> | 29 | #include <linux/errno.h> |
| 30 | #include <linux/uaccess.h> | 30 | #include <linux/uaccess.h> |
| 31 | #include <linux/sched.h> | 31 | #include <linux/sched.h> |
| 32 | #include <linux/types.h> | ||
| 32 | #include <net/9p/9p.h> | 33 | #include <net/9p/9p.h> |
| 33 | #include <net/9p/client.h> | 34 | #include <net/9p/client.h> |
| 34 | #include "protocol.h" | 35 | #include "protocol.h" |
| @@ -160,29 +161,32 @@ p9pdu_vreadf(struct p9_fcall *pdu, int optional, const char *fmt, va_list ap) | |||
| 160 | break; | 161 | break; |
| 161 | case 'w':{ | 162 | case 'w':{ |
| 162 | int16_t *val = va_arg(ap, int16_t *); | 163 | int16_t *val = va_arg(ap, int16_t *); |
| 163 | if (pdu_read(pdu, val, sizeof(*val))) { | 164 | __le16 le_val; |
| 165 | if (pdu_read(pdu, &le_val, sizeof(le_val))) { | ||
| 164 | errcode = -EFAULT; | 166 | errcode = -EFAULT; |
| 165 | break; | 167 | break; |
| 166 | } | 168 | } |
| 167 | *val = cpu_to_le16(*val); | 169 | *val = le16_to_cpu(le_val); |
| 168 | } | 170 | } |
| 169 | break; | 171 | break; |
| 170 | case 'd':{ | 172 | case 'd':{ |
| 171 | int32_t *val = va_arg(ap, int32_t *); | 173 | int32_t *val = va_arg(ap, int32_t *); |
| 172 | if (pdu_read(pdu, val, sizeof(*val))) { | 174 | __le32 le_val; |
| 175 | if (pdu_read(pdu, &le_val, sizeof(le_val))) { | ||
| 173 | errcode = -EFAULT; | 176 | errcode = -EFAULT; |
| 174 | break; | 177 | break; |
| 175 | } | 178 | } |
| 176 | *val = cpu_to_le32(*val); | 179 | *val = le32_to_cpu(le_val); |
| 177 | } | 180 | } |
| 178 | break; | 181 | break; |
| 179 | case 'q':{ | 182 | case 'q':{ |
| 180 | int64_t *val = va_arg(ap, int64_t *); | 183 | int64_t *val = va_arg(ap, int64_t *); |
| 181 | if (pdu_read(pdu, val, sizeof(*val))) { | 184 | __le64 le_val; |
| 185 | if (pdu_read(pdu, &le_val, sizeof(le_val))) { | ||
| 182 | errcode = -EFAULT; | 186 | errcode = -EFAULT; |
| 183 | break; | 187 | break; |
| 184 | } | 188 | } |
| 185 | *val = cpu_to_le64(*val); | 189 | *val = le64_to_cpu(le_val); |
| 186 | } | 190 | } |
| 187 | break; | 191 | break; |
| 188 | case 's':{ | 192 | case 's':{ |
| @@ -362,19 +366,19 @@ p9pdu_vwritef(struct p9_fcall *pdu, int optional, const char *fmt, va_list ap) | |||
| 362 | } | 366 | } |
| 363 | break; | 367 | break; |
| 364 | case 'w':{ | 368 | case 'w':{ |
| 365 | int16_t val = va_arg(ap, int); | 369 | __le16 val = cpu_to_le16(va_arg(ap, int)); |
| 366 | if (pdu_write(pdu, &val, sizeof(val))) | 370 | if (pdu_write(pdu, &val, sizeof(val))) |
| 367 | errcode = -EFAULT; | 371 | errcode = -EFAULT; |
| 368 | } | 372 | } |
| 369 | break; | 373 | break; |
| 370 | case 'd':{ | 374 | case 'd':{ |
| 371 | int32_t val = va_arg(ap, int32_t); | 375 | __le32 val = cpu_to_le32(va_arg(ap, int32_t)); |
| 372 | if (pdu_write(pdu, &val, sizeof(val))) | 376 | if (pdu_write(pdu, &val, sizeof(val))) |
| 373 | errcode = -EFAULT; | 377 | errcode = -EFAULT; |
| 374 | } | 378 | } |
| 375 | break; | 379 | break; |
| 376 | case 'q':{ | 380 | case 'q':{ |
| 377 | int64_t val = va_arg(ap, int64_t); | 381 | __le64 val = cpu_to_le64(va_arg(ap, int64_t)); |
| 378 | if (pdu_write(pdu, &val, sizeof(val))) | 382 | if (pdu_write(pdu, &val, sizeof(val))) |
| 379 | errcode = -EFAULT; | 383 | errcode = -EFAULT; |
| 380 | } | 384 | } |
