* [PATCH] afs: Read of file returns EBADMSG
@ 2012-03-13 20:50 Anton Blanchard
0 siblings, 0 replies; only message in thread
From: Anton Blanchard @ 2012-03-13 20:50 UTC (permalink / raw)
To: David Howells; +Cc: linux-afs, linux-kernel, akpm
A read of a large file on an afs mount failed:
# cat junk.file > /dev/null
cat: junk.file: Bad message
Looking at the trace, call->offset wrapped since it is only an
unsigned short. In afs_extract_data:
_enter("{%u},{%zu},%d,,%zu", call->offset, len, last, count);
...
if (call->offset < count) {
if (last) {
_leave(" = -EBADMSG [%d < %zu]", call->offset, count);
return -EBADMSG;
}
Which matches the trace:
[cat ] ==> afs_extract_data({65132},{524},1,,65536)
[cat ] <== afs_extract_data() = -EBADMSG [0 < 65536]
call->offset went from 65132 to 0. Fix this by making call->offset an
unsigned int.
Signed-off-by: Anton Blanchard <anton@samba.org>
Cc: <stable@kernel.org>
---
Index: linux-build/fs/afs/internal.h
===================================================================
--- linux-build.orig/fs/afs/internal.h 2012-03-14 07:47:22.169945898 +1100
+++ linux-build/fs/afs/internal.h 2012-03-14 07:47:32.398126509 +1100
@@ -109,7 +109,7 @@ struct afs_call {
unsigned reply_size; /* current size of reply */
unsigned first_offset; /* offset into mapping[first] */
unsigned last_to; /* amount of mapping[last] */
- unsigned short offset; /* offset into received data store */
+ unsigned offset; /* offset into received data store */
unsigned char unmarshall; /* unmarshalling phase */
bool incoming; /* T if incoming call */
bool send_pages; /* T if data from mapping should be sent */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-03-13 20:50 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-13 20:50 [PATCH] afs: Read of file returns EBADMSG Anton Blanchard
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.