• Anton Blanchard's avatar
    afs: Read of file returns EBADMSG · 2c724fb9
    Anton Blanchard authored
    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: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Cc: <stable@kernel.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
internal.h 31.1 KB