2011/1/18 Jeff Layton <jlayton@xxxxxxxxxx>: > When the CIFS client is marshalling a call or parsing a response from > the server, it often will access fields within the packets directly. > It's easily possible however that those fields will not be aligned > properly. Many CPUs handle this transparently. Some CPUs (such as ia64) > throw a warning and then use a slow-path mechanism to deal with it. > Other CPUs (mostly the embedded ones, it seems) actually throw an > exception and just don't work. > > For more background on the problem, see this file in the kernel source > tree: > > Documentation/unaligned-memory-access.txt > > This was originally reported quite some time ago here: > > https://bugzilla.kernel.org/show_bug.cgi?id=11115 > > I've also had a report of the same problem on ia64 against RHEL5: > > https://bugzilla.redhat.com/show_bug.cgi?id=659715 > > My patchset is based on the one originally by John Voltz. His proposed > patch also patched up the generic NLS code for unaligned access, but I > took a different approach by making sure that we just never called into > those routines with an unaligned buffer. > > I've tested this patchset on x86_64 and it seems to be fine. I've also > tested a version of this patchset backported to RHEL5 on ia64. Certain > tests would make that arch pop these sorts of printks: > > kernel unaligned access to 0xe0000040ed16807f, ip=0xa0000002029b8530 > > ...with this set, those are eliminated. I suspect that this may also > help CIFS to work on some embedded arches as well (such as avr32). > > Note that this is likely not a comprehensive fix for CIFS though. It > seems like there are a lot of places in cifssmb.c that access fields in > the request or response directly. Any of them are probably also fair > game for unaligned access fixes. > > I think this patchset is pretty safe, so we should consider getting it > into 2.6.38 if possible. If not, definitely for 2.6.39. > > Jeff Layton (5): > cifs: use get/put_unaligned functions to access ByteCount > cifs: clean up unaligned accesses in validate_t2 > cifs: fix unaligned access in check2ndT2 and coalesce_t2 > cifs: clean up unaligned accesses in cifs_unicode.c > cifs: fix unaligned accesses in cifsConvertToUCS > > fs/cifs/cifs_unicode.c | 125 +++++++++++++++++++++++++++++++++++++++-------- > fs/cifs/cifspdu.h | 47 ++++++++++++++++-- > fs/cifs/cifssmb.c | 52 ++++++++++---------- > fs/cifs/connect.c | 43 +++++++--------- > fs/cifs/misc.c | 71 --------------------------- > fs/cifs/netmisc.c | 4 +- > fs/cifs/sess.c | 13 ++--- > fs/cifs/transport.c | 9 ++-- > 8 files changed, 202 insertions(+), 162 deletions(-) > > -- > 1.7.3.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-cifs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Jeff, I am not very comfortable in this area, but after investigating the problem a little your patchset looks good to me. You can add my this tag to all patches of the set: Acked-by: Pavel Shilovsky <piastryyy@xxxxxxxxx> -- Best regards, Pavel Shilovsky. -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html